De mogelijkheid om door een lijstje met objecten te lopen, is natuurlijk uiterst handig, maar vaak wil men deze objecten in een bepaalde volgorde terugkrijgen, al was het maar voor het overzicht. Met behulp van de eerder genoemde for-lussen en ingenieus gebruik van arrays en variabelen lijkt het geen koud kunstje te zijn om een sorteeralgoritme te schrijven, maar ook daar heeft Microsoft aan gedacht bij de ontwikkeling van de Powershell. De uitvoer van een commando kan namelijk probleemloos naar het 'sort-object'-commando gepiped worden, wat resulteert in een - desgewenst omgekeerd - alfabetisch gesorteerd lijstje.
PS> Get-Process | sort-object CPU
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
0 0 0 28 0 0 Idle
80 3 928 1808 34 0,02 508 RichVideo
67 2 1632 1268 15 0,03 1128 wdfmgr
102 5 1264 2400 33 0,05 2572 alg
21 1 168 316 4 0,05 388 smss
28 2 752 1628 24 0,06 1916 LSSrvc
58 2 840 1520 17 0,06 272 HPZipm12
51 3 1804 1412 21 0,08 1584 btwdins
95 4 1732 2392 38 0,09 3788 svchost
39 3 2380 2956 36 0,11 4080 NclBTHandler
149 4 5084 4908 47 0,11 2780 iTunesHelper
98 3 1272 2572 38 0,11 348 CLSched
105 4 2604 2752 37 0,13 2856 rundll32
Deze Sort-Object
is echter niet de enige functie die geïnspireerd werd door een SQL-achtige syntax. In de Powershell zien we namelijk ook termen als select
en where
opduiken. Zoals hierboven zichtbaar is, levert een commando als Get-Process
een uitgebreid lijstje op, waarvan vaak maar weinig informatie op dat moment nuttig is. Door de uitvoer van het commando door te sturen naar een select-statement, kunnen de nuttige kolommen gefilterd worden.
PS> Get-Process | sort-object CPU -Descending | select ProcessName, CPU
ProcessName CPU
----------- ---
HotTopic 9406,109375
IEXPLORE 1169,296875
IEXPLORE 240,625
explorer 193,5625
rundll32 98,640625
OUTLOOK 89,984375
System 89,109375
mirc 69,40625
Maar zelfs daar houdt het niet op, want ook het filteren van de resultaten met behulp van een where-clausule behoort tot de mogelijkheden. Een lijstje met internet-explorerprocessen is namelijk nog eenvoudig te realiseren met de opdracht Get-Process iexplore
, maar een overzicht van de processen en het aantal Handles per proces waarvan het cpu-gebruik de waarde 50 overstijgt, lijkt al moeilijker te realiseren. Dankzij de krachtige piping-mogelijkheden is dit met de Windows Powershell echter eenvoudig mogelijk.
PS> Get-Process |
>> Select ProcessName, Handles, CPU |
>> where { $_.CPU -gt 50 }
>>
ProcessName Handles CPU
----------- ------- ---
explorer 463 58,6875
firefox 266 161,984375
iexplore 104 6093,046875
OUTLOOK 1368 83,96875
rundll32 115 76,421875