Pagina 1 di 1

[RISOLTO] WAPT.write_audit_data_if_changed

Pubblicato: 19 settembre 2024 - 11:48
di Vincent Moisan
Buongiorno,

Sono un amministratore di sistema in una scuola.

Per conoscere la frequenza di utilizzo dei PC distribuiti, ho creato un pacchetto che segnala la durata delle sessioni utente (in base alle connessioni/disconnessioni/blocchi/sblocchi delle sessioni Windows).

Tuttavia, per semplificare le ricerche, vorrei memorizzare queste informazioni nella sezione Dati di audit.

Per fare ciò, ho utilizzato la funzione WAPT.write_audit_data_if_changed, passando i risultati del mio pacchetto in formato JSON come parametro. I dati vengono memorizzati correttamente nei dati di audit, ma non vengono interpretati correttamente. In altre parole, ho qualcosa di simile a JSON nella riga "value", ma è formattato in modo errato.
esempio:

Codice: Seleziona tutto

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
Potresti spiegarmi cosa sto sbagliando?

Sinceramente

Re: WAPT.write_audit_data_if_changed

Pubblicato: 19 settembre 2024 - 12:40
di sfontenau
Ciao,

se mi fornisci il codice del tuo pacchetto sarà più facile aiutarti (inoltre il codice potrebbe essere utile).

Re: WAPT.write_audit_data_if_changed

Pubblicato: 19 settembre 2024 - 14:19
di Vincent Moisan
Ecco il codice per il mio pacchetto:

Codice: Seleziona tutto

### -*- 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"

Ho anche allegato il mio script PowerShell in formato txt e poi l'ho compresso.

Re: WAPT.write_audit_data_if_changed

Pubblicato: 20 settembre 2024 - 12:54
di sfontenau
L'output non è un dizionario ma un file JSON

quindi se fai un

Codice: Seleziona tutto

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

Dovrebbe essere migliore


Nota per fare questo tipo di cose in Python:

Codice: Seleziona tutto

# -*- 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"
È un pezzo di codice che ho iniziato ma che non ho mai finito

Re: WAPT.write_audit_data_if_changed

Pubblicato: 20 settembre 2024 - 13:59
di Vincent Moisan
Grazie per la risposta, funziona.

Re: WAPT.write_audit_data_if_changed

Pubblicato: 26 settembre 2024 - 11:13
di dcardon
Ciao Vincent,

grazie per il feedback. :-) Contrassegno la discussione come RISOLTA.

A presto,

Denis