Page 1 sur 1

[RESOLU] WAPT.write_audit_data_if_changed

Posté : 19 sept. 2024 - 11:48
par vincent.moisan
Bonjour,

Je suis administrateur système dans une école.

Pour connaitre la fréquence d'utilisation des pc déployés, j'ai créé un paquet qui me remonte les durées des sessions des utilisateurs (basé sur les connexions/déconnexion/verrouillage/déverrouillage de session windows).

Cependant, pour des questions de faciliter de requête, j'aimerai stocker ces informations dans la partie Données d'audit.

Pour cela j'ai utilisé la fonction WAPT.write_audit_data_if_changed en lui donnant en paramètre les résultats de mon paquet au format json. Les données sont bien stockées dans données d'audit mais elle ne sont pas interprétées correctement. C'est à dire que j'ai bien un semblant de json dans la ligne "value" mais mal formatées.
exemple:

Code : Tout sélectionner

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
Pourriez-vous m'orienter sur ce que je fais de mal?

Cordialement

Re: WAPT.write_audit_data_if_changed

Posté : 19 sept. 2024 - 12:40
par sfonteneau
Bonjour

si vous fournissez le code de votre paquet il sera plus simple de vous aider (en plus le code peu être intéressant )

Re: WAPT.write_audit_data_if_changed

Posté : 19 sept. 2024 - 14:19
par vincent.moisan
Voici le code de mon paquet:

Code : Tout sélectionner

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

J'ai également rajouter en PJ mon script powershell sous format txt puis zipper.

Re: WAPT.write_audit_data_if_changed

Posté : 20 sept. 2024 - 12:54
par sfonteneau
ouput n'est pas un dict mais un json

donc si vous faite un

Code : Tout sélectionner

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

ça devrais être mieux


note pour faire ce genre de chose en python :

Code : Tout sélectionner

# -*- 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"
C'est un morceau de code que j'avais commencer mais jamais terminé

Re: WAPT.write_audit_data_if_changed

Posté : 20 sept. 2024 - 13:59
par vincent.moisan
merci pour la réponse, ça fonctionne.

Re: WAPT.write_audit_data_if_changed

Posté : 26 sept. 2024 - 11:13
par dcardon
Bonjour Vincent,

merci pour le retour :-) Je passe le topic en RESOLU.

A bientôt,

Denis