Seite 1 von 1

[GELÖST] WAPT.write_audit_data_if_changed

Veröffentlicht: 19. September 2024 - 11:48 Uhr
von Vincent Moisan
Guten Morgen,

Ich bin Systemadministrator an einer Schule.

Um die Nutzungshäufigkeit der eingesetzten PCs zu ermitteln, habe ich ein Paket erstellt, das die Dauer der Benutzersitzungen erfasst (basierend auf Windows-Sitzungsverbindungen/-trennungen/-sperrungen/-entsperrungen).

Um die Abfrage zu vereinfachen, möchte ich diese Informationen jedoch im Abschnitt „Auditdaten“ speichern.

Dazu verwendete ich die Funktion `WAPT.write_audit_data_if_changed` und übergab die Ergebnisse meines Pakets im JSON-Format als Parameter. Die Daten werden zwar korrekt in den Audit-Daten gespeichert, aber nicht richtig interpretiert. Das heißt, ich habe zwar in der Zeile „value“ etwas, das JSON ähnelt, aber es ist falsch formatiert.
Beispiel:

Code: Alle auswählen

users connexions stats.pc-test =

"{\"report_date\":\"2024-09-18T13:57:46Z\",\"hostname\":\"PC-Test\",\"session_data\":[{\"history_days\":-1,\"total_minutes\":\"52\",\"start_date\":\"2024-09-17T13:57:31Z\",\"total_days\":\"0\",\"total_hours\":\"4\",\"total_seconds\":\"54\",\"date_history\":\"-1\"},{\"history_days\":-7,\"total_minutes\":\"56\",\"start_date\":\"2024-09-11T13:57:35Z\",\"total_days\":\"0\",\"total_hours\":\"20\",\"total_seconds\":\"3\",\"date_history\":\"-7\"},{\"history_days\":-15,\"total_minutes\":\"57\",\"start_date\":\"2024-09-03T13:57:38Z\",\"total_days\":\"1\",\"total_hours\":\"21\",\"total_seconds\":\"36\",\"date_history\":\"-15\"},{\"history_days\":-30,\"total_minutes\":\"50\",\"start_date\":\"2024-08-19T13:57:42Z\",\"total_days\":\"3\",\"total_hours\":\"20\",\"total_seconds\":\"13\",\"date_history\":\"-30\"}]}\r\n"
Date: 2024-09-18T11:57:46.985788
Könnten Sie mir bitte sagen, was ich falsch mache?

Aufrichtig

Betreff: WAPT.write_audit_data_if_changed

Veröffentlicht: 19. September 2024 - 12:40 Uhr
von Sfonteneau
Hallo,

wenn Sie den Code für Ihr Paket bereitstellen, wird es einfacher, Ihnen zu helfen (außerdem könnte der Code nützlich sein).

Betreff: WAPT.write_audit_data_if_changed

Veröffentlicht: 19. September 2024 – 14:19 Uhr
von Vincent Moisan
Hier ist der Code für mein Paket:

Code: Alle auswählen

### -*- coding: utf-8 -*-
from setuphelpers import *

def install():
    filecopyto('Compteur_Session.ps1',makepath(programfiles32,'wapt'))
def write_audit_data_if_changed(self, section, key, value):
    """Write data only if different from last one"""
def audit():
    output = run(r'powershell.exe -NoProfile -NonInteractive -executionpolicy bypass -File "%s"' % makepath(programfiles32,'wapt','Compteur_Session.ps1') ,accept_returncodes=[1,0])
    print(output)
    WAPT.write_audit_data_if_changed('Users Connexions Stats','%s' % get_computername(), output)
    return "OK"

Ich habe mein PowerShell-Skript auch im TXT-Format angehängt und anschließend gezippt.

Betreff: WAPT.write_audit_data_if_changed

Veröffentlicht: 20. September 2024 - 12:54 Uhr
von Sfonteneau
Die Ausgabe ist kein Wörterbuch, sondern eine JSON-Datei

Wenn Sie also ein

Code: Alle auswählen

WAPT.write_audit_data_if_changed('Users Connexions Stats','%s' % get_computername(),json.loads(output))

Es sollte besser sein


Hinweis zur Umsetzung solcher Aufgaben in Python:

Code: Alle auswählen

# -*- coding: utf-8 -*-
from setuphelpers import *
import wmi
from datetime import datetime

# Usable WAPT package functions: install(), uninstall(), session_setup(), audit(), update_package()
# Declaring global variables - Warnings: 1) WAPT context is only available in package functions; 2) Global variables are not persistent between calls

def install():
    # auditpol /list /subcategory:*
    # auditpol /get /category:*

    #SET
    run('AUDITPOL /SET /SUBCATEGORY:"Ouvrir la session" /SUCCESS:ENABLE /FAILURE:ENABLE')
    run('AUDITPOL /SET /SUBCATEGORY:"Fermer la session" /SUCCESS:ENABLE /FAILURE:ENABLE')

def audit():
    # Initialize WMI objects and query.
    wmi_o = wmi.WMI('.')
    wql = ("SELECT * FROM Win32_NTLogEvent WHERE Logfile="
           "'System' AND EventCode='7001' OR EventCode='7002'")
    # Query WMI object.
    wql_r = wmi_o.query(wql)
    wql_r.reverse()
    for event in wql_r:
        sid = list(event.InsertionStrings)[1]
        if not sid.startswith('S-1-5'):
            continue
        username = get_user_from_sid(sid)
        if username.strip() == "" or not username:
           continue

        if event.EventCode == 7001 :
            typeevent = 'User-Connect'
        else:
            typeevent = 'User-Disconnect'

        realdate = event.TimeGenerated.split('.')[0]
        humandate = datetime.strptime(realdate, '%Y%m%d%H%M%S')

        found = False
        for u in list(WAPT.read_audit_data_set(typeevent,username)):
            if u[0] == str(humandate):
                found = True
        if found:
            continue

        WAPT.write_audit_data(typeevent,username,value = str(humandate), keep_days=365,max_count=9999)

    return "OK"
Es handelt sich um ein Stück Code, das ich angefangen, aber nie fertiggestellt habe

Betreff: WAPT.write_audit_data_if_changed

Veröffentlicht: 20. September 2024 – 13:59 Uhr
von Vincent Moisan
Danke für die Antwort, es funktioniert.

Betreff: WAPT.write_audit_data_if_changed

Veröffentlicht: 26. September 2024 - 11:13 Uhr
von dcardon
Hallo Vincent,

danke für die Rückmeldung. :-) Ich markiere das Thema als GELÖST.

Bis bald,

Denis