Powershell erreur d'addition de valeurs

Résolu

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

2 réponses

  1. 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. oui c'est bien ça en effet. [Int] permet de donner une valeur entière à la valeur afin de pouvoir faire le calcul. Merci

      1. 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
                }