Il est assez simple d’enrichir un tableau d’objets en y ajoutant une colonne personnalisée.
Etape 1:
Là on est venu greffer une nouvelle colonne ‘Column Name’ à la sortie de Get-Process. Résultat :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
PS C:\Windows\system32> Get-Process | Select Name, @{n='Column Name';e={ "Column value" }} -First 10 Name Column Name ---- ----------- ALsvc Column value ApplePhotoStreams Column value ApplicationFrameHost Column value audiodg Column value Calculator Column value chrome Column value chrome Column value chrome Column value chrome Column value chrome Column value |
Etape 2 :
On va mettre un peu de dynamique dans tout ça et mettre une colonne personnalisée ‘Progress’ affichant une valeur entre 1 et 100, comme pour un pourcentage.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
PS C:\Windows\system32> Get-Process | Select Name, @{n='Progress';e={ 1..100 | Get-Random }} -First 10 Name Progress ---- -------- ALsvc 63 ApplePhotoStreams 68 ApplicationFrameHost 39 Calculator 63 chrome 2 chrome 9 chrome 23 chrome 92 chrome 31 chrome 81 |
C’est déjà plus sympatique.
Etape 3 :
C’est ici que la magie opère. Souvenez vous que l’expression ( ;e={…} ) qui définit la valeur de la colonne est censée renvoyer un text, n’importe lequel. Et si j’avais envie que cette colonne m’affiche un pourcentage mais sous une forme plus graphique. Par exemple, au lieu de 68%, on afficherait “68% [ooooooo ]”, un peu comme une barre de progression. Eh bien, c’est exactement ce que fait la petite fonction que je vous offre aujourd’hui. Tout d’abord, le résultat en image :
Plutôt sympa, non ? Voici le code complet :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Function Draw-Percent([int]$Value,[int]$index=2,[int]$Width=10) { $char = "o", "#", "■", "|", "-", "*" $idx = ($index%6) $str = $str2 = "" $int = [Math]::Round($Value*$Width/100) if ($int -ge 1) { $str = $char[$idx] * $int } $remain = ($Width-$int) if ($remain -gt 0) { $str2 = " " * $remain } $output = "{0:d2}% [{1}{2}]" -f $value, $str, $str2 if ($value -lt 100) { $output = " " + $output } return $output } write-host "Get-Process output with a custom column." -f Yellow Get-Process | Select Name, @{n='Progress';e={ Draw-Percent (1..100 | Get-Random) 2 15 }} -First 10 |
La fonction Draw-Percent a trois paramètres :
- Value : valeur du pourcentage à afficher (entre 0 et 100)
- Index : facultatif. Définit quel symbole (à choisir parmi o, #, ■, |, -, *) sera utilisé pour dessiné la barre de progression. Par défaut, c’est le petit carré ■.
- Width : facultatif. Définit la largeur (en nombre de caractère) de la barre de progression. Par défaut, la taille est de 10 car mais vous pouvez l’élargir si nécessaire.
J’espère que cette petite astuce vous aura plu. Amusez vous bien 🙂
Mise à jour :
Exemple pratique : Get disk Used Space
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#NA-GetDiskSpace.ps1 Function Draw-Percent([int]$Value,[int]$index=2,[int]$Width=10) { $char = "o", "#", "■", "|", "-", "*" $idx = ($index%6) $str = $str2 = "" $int = [Math]::Round($Value*$Width/100) if ($int -ge 1) { $str = $char[$idx] * $int } $remain = ($Width-$int) if ($remain -gt 0) { $str2 = " " * $remain } $output = "{0:d2}% [{1}{2}]" -f $value, $str, $str2 if ($value -lt 100) { $output = " " + $output } return $output } $disks = Get-WmiObject -Class Win32_logicaldisk -Filter "DriveType = 3" | Select DeviceID, VolumeName, FileSystem, @{L="Size (GB)";E={"{0:N1}" -f ($_.Size/1GB)}}, @{L="Used (GB)";E={"{0:N1}" -f (($_.Size - $_.FreeSpace)/1GB)}}, @{L="Used (%)";E={ Draw-Percent ([Math]::Round(($_.Size - $_.FreeSpace) *100 / $_.Size)) 2 15 }} $disks | ft -AutoSize |