Powershell erreur d'addition de valeurs

Résolu
adgm1 Messages postés 289 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 1 décembre 2024 - 30 nov. 2024 à 15:43
adgm1 Messages postés 289 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 1 décembre 2024 - 1 déc. 2024 à 22:21

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

A voir également:

2 réponses

barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 918
30 nov. 2024 à 21:39

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
        }

1
adgm1 Messages postés 289 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 1 décembre 2024 10
1 déc. 2024 à 18:54

oui c'est bien ça en effet. [Int] permet de donner une valeur entière à la valeur afin de pouvoir faire le calcul. Merci

0
adgm1 Messages postés 289 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 1 décembre 2024 10
1 déc. 2024 à 22:21

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
        }

0