Powershell erreur d'addition de valeurs
RésoluBonjour,
J'ai un script qui est sensé récupérer le nombre de pages imprimées sur les imprimantes en réseau. Actuellement la somme ne se fait pas correctement il y a un probleme dans la formule mais je sais pas où. Comment faire en sorte que à chaque nouvelles pages imprimées le nombre total change en les additionnant ?
Voici le script
$events = Get-WinEvent -LogName "Microsoft-Windows-PrintService/Operational" |
Where-Object { $_.TimeCreated -ge $StartDate -and $_.TimeCreated -le $EndDate }
$userPageCount = @{}
foreach ($event in $events) {
$user = $event.Properties[2].Value # L'utilisateur qui a lancé l'impression
$pagesPrinted = $event.Properties[7].Value # Nombre de pages imprimées
if ($pagesPrinted -gt 0) {
# Si l'utilisateur existe déjà, ajouter le nombre de pages
if ($userPageCount.ContainsKey($user)) {
$userPageCount[$user] += $pagesPrinted
} else {
# Si l'utilisateur n'existe pas, initialiser avec le nombre de pages
$userPageCount[$user] = $pagesPrinted
}
}
}
$userPageCount.GetEnumerator() | Sort-Object Name -Descending |
Select-Object Name, Value -SkipLast 2 | Export-Csv -Path "C:\pages_par_utilisateur.csv" -NoTypeInformation
voici le résultat
Name Value ---- ----- user2 52211 user1 11111
Mais le nouveau chiffre au lieu de s'additionner se positionne devant. Voici ce que je souhaiterais obtenir :
Name Value ---- ----- user2 11 user1 5
Windows / Firefox 132.0
2 réponses
-
Bonjour,
Apparemment c'est un problème de typage faible, essaie de caster ta variable comme ceci :
if ($userPageCount.ContainsKey($user)) { [int]$userPageCount[$user] += $pagesPrinted } else { # Si l'utilisateur n'existe pas, initialiser avec le nombre de pages [int]$userPageCount[$user] = $pagesPrinted }
-
oui c'est bien ça en effet. [Int] permet de donner une valeur entière à la valeur afin de pouvoir faire le calcul. Merci
-
J'ai pas testé la proposition j'ai mis le [int] à un autre endroit au niveau de la récupération de la propriété de l'evenement print.service et ça marche. Les 2 options doivent etre valable.
$user = $event.Properties[2].Value # L'utilisateur qui a lancé l'impression $pagesPrinted = [int]$event.Properties[7].Value # Nombre de pages imprimées if ($pagesPrinted -gt 0) { # Si l'utilisateur existe déjà dans le dictionnaire, ajouter le nombre de pages if ($userPageCount.ContainsKey($user)) { $userPageCount[$user] += $pagesPrinted } else { # Si l'utilisateur n'existe pas encore, initialiser avec le nombre de pages $userPageCount[$user] = $pagesPrinted }
-