14 avr. 2012

[snippet] Compter le nombre de pages imprimées grâce aux journaux d'évènements

Chaque impression faite vers une imprimante en passant par un serveur d'impression sous Windows Server créé un enregistrement dans le journal événement Système.
Il est donc possible, à partir de là, de compter le nombre de pages imprimées par utilisateurs du domaine, sur ce serveur d'impression.
Les impressions directes (qui ne passent pas par le serveur d'impression, comme les photocopies ou les imprimantes reliées directement à l'ordinateur) ne seront évidemment pas comptabilisées.

$start = date
Write-Host -NoNewline "Lecture du journal"
$data = Get-EventLog -ComputerName serveur-impression -LogName System -Source Print -InstanceId 1073741834
Write-Host " ($([int](date).Subtract($start).TotalSeconds)s)"
Write-Host "Calcul du résultat"
$data | ForEach-Object {
    $var = @{}
    $msg = $_.Message
    # on parse le contenu de message pour récupérer le login et le nombre de page
    $var.user = $msg.Substring($msg.IndexOf("possédé par")+12).Split(" ")[0].ToLower()
    $var.nb = $msg.Substring($msg.IndexOf("pages imprimées")+18)
    $res = New-Object PSObject -Property $var
    # on retourne un objet
    Write-Output $res
} | group-object user | foreach { # on regroupe toutes les impressions par utilisateur
    $var2 = @{}
    $var2.user = $_.Name
    # on fait le cumul des pages de l'utilisateur
    $var2.total = ($_.Group | measure-object nb -sum).Sum
    $res2 = New-Object PSObject -Property $var2
    Write-Output $res2
} | sort -Descending total
echo "Terminé en $([int](date).Subtract($start).TotalSeconds) sec"

Le script retourner une liste de couple "user,total" triée à partir du plus gros total de feuilles. Pour pouvez passer le résultat du sort directement vers un export-csv.

Attention : le traitement peut durer une dizaine de minutes selon le nombre d'impressions à traiter.

Note : veuillez à avoir une taille limite pour le journal d’événement assez élevée pour stocker assez d'enregistrements. Pour changer la taille, rendez-vous dans le gestionnaire d’événements, faites un clic-droit > Propriétés sur le journal Système et augmentez la taille. Une taille de 50 Mo suffit à stocker l'historique d'environ 10 à 50 000 impressions.