Powershell erreur d'addition de valeurs
Résoluadgm1 Messages postés 289 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
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
- Powershell erreur d'addition de valeurs
- Addition excel - Guide
- Excel liste de valeurs - Guide
- Erreur 0x80070643 - Accueil - Windows
- J'aime par erreur facebook notification - Forum Facebook
- Erreur 4201 france tv ✓ - Forum Réseaux sociaux
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 }