Listázzuk ki a tíz legtöbb memóriát foglaló folyamatot a memóriafoglalás sorrendjében!
PS C:\> get-process | sort-object -property workingset -Descending
A folyamatok listáját természetesen ismét a Get-Process adja. A folyamat által igénybe vett fizikai memória mennyiségét a „Workingset” tulajdonság adja meg, ami az alapértelmezett táblázatban is szerepel. A Sort-Object tetszőleges tulajdonság értékei szerint tudja sorba rendezni a kimenetet. A listázás alapértelmezés szerint a legkisebb értéktől indul, de ha megadjuk a -descending paramétert, akkor a legnagyobb értékek kerülnek a lista tetejére.
Természetesen nem csak egy tulajdonság szerint rendezhetünk. Az alábbi példában a fájlokat kiterjesztésük szerint rendezem, azon kiterjesztésűek között pedig a fájl neve szerint:
PS C:\> Get-ChildItem C:\Windows -File | Sort-Object -Property extension, name
Directory: C:\Windows
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2016.07.16. 13:42 43131 mib.bin
-a--s- 2016.10.29. 22:50 67584 bootstat.dat
-a---- 2014.02.26. 15:16 2080472 RtlExUpd.dll
-a---- 2016.07.16. 13:43 66560 twain_32.dll
-a---- 2016.01.25. 9:17 1094180212 MEMORY.DMP
-a---- 2016.07.16. 13:42 61440 bfsvc.exe
-a---- 2016.10.15. 6:26 4673304 explorer.exe
-a---- 2016.07.16. 13:42 975360 HelpPane.exe
-a---- 2016.07.16. 13:42 18432 hh.exe
-a---- 2016.07.16. 13:43 243200 notepad.exe
-a---- 2016.07.16. 13:42 320512 regedit.exe
-a---- 2015.08.01. 23:50 2636032 RtCamU64.exe
-a---- 2015.08.01. 23:50 5060864 RTFTrack.exe
-a---- 2016.10.15. 5:59 130560 splwow64.exe
-a---- 2016.07.16. 13:42 10240 winhlp32.exe
-a---- 2015.10.06. 7:05 160520 Word to HTML Converter Uninst
aller.exe
-a---- 2016.07.16. 13:42 11264 write.exe
-a---- 2009.06.10. 22:36 1405 msdfmap.ini
-a---- 2015.09.09. 21:34 376 ODBC.INI
-a---- 2009.06.10. 23:08 219 system.ini
-a---- 2016.10.12. 22:22 478 win.ini
-a---- 2016.10.24. 19:33 292223 Control.KTL
…
De térjünk vissza a processzekhez! A lista tehát már rendezett, de nekünk csak az elején szereplő tíz sorra lenne szükségünk. A korábban már használt Select-Object cmdlet egyik alfunkciójának segítségével ez is könnyen megoldható, egyszerűen paraméterként kell megadnunk, hogy hány sorra van szükségünk. A megoldás tehát:
PS C:\> get-process | sort-object -property workingset -desc | select-object -first 10
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
2779 45 197548 45732 439 407,91 460 iexplore
420 9 41488 34552 159 6,13 612 powershell
463 18 34580 23060 343 114,03 3952 WINWORD
693 20 22396 20312 123 39,34 960 explorer
317 19 45132 20048 125 121,17 624 Mcshield
1729 82 25332 16368 215 96,22 1436 svchost
557 16 46872 7720 180 42,11 2896 OUTLOOK
779 20 67944 7200 198 19,30 2496 iexplore
340 11 17876 6716 122 143,34 1540 svchostl
456 13 48196 6452 139 4,84 3604 iexplore
Nem mindegy, hogy milyen kultúrkör, nyelv ábécéje szerint rendezzük az objektumokat. Alaphelyzetben az adott gép területi beállításait veszi figyelembe a PowerShell, de ezt a -culture paraméterrel megváltoztathatjuk:
[24] PS C:\> "zug", "zsuga", "csak", "cuki" | Sort-Object -Culture "hu-hu"
cuki
csak
zug
zsuga
[25] PS C:\> "zug", "zsuga", "csak", "cuki" | Sort-Object -Culture "en-us"
csak
cuki
zsuga
zug
A [24]-es sorban magyar nyelv szabályai szerint rendeztem sorba a szavakat, míg a [25]-ös sorban ugyanezeket a szavakat az angol ábécé szerint. Látjuk, hogy jelentős eltérés van a két sorrend között, hiszen a magyar nyelvben a kettős betűk külön sorolódnak be a az ábécébe.
A különböző nyelvekhez tartozó nyelvi kódok jelölését a http://msdn2.microsoft.com/en-us/library/ms970637.aspx oldalon meg lehet nézni.
A Sort-Object-el olyan tulajdonság szerint is tudunk rendezni, ami nincs is. Például rendezzük a fájlokat a nevük hosszának növekvő sorrendjében:
PS C:\> Get-ChildItem C:\PowerShell\ | Sort-Object -Property {$_.name.length}
Directory: C:\PowerShell
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2015.09.27. 13:45 Carbon
-a---- 2015.09.19. 18:25 90 job.ps1
-a---- 2015.10.02. 21:42 11 Oem.txt
-a---- 2015.09.19. 17:32 139 fact.ps1
d----- 2015.09.23. 17:23 20150923
-a---- 2015.10.02. 21:42 23 UTF8.txt
-a---- 2015.10.02. 21:42 28 UTF7.txt
Itt nem egy meglevő tulajdonság nevét adtam meg paraméternek, hanem egy szabályt szkriptblokk formájában, ami megadja, hogyan lehet előállítani ezt a nemlétező tulajdonságot.
Nézzük azt az esetet, ha a fájlnevek hossza szerint csökkenő sorrendben, de azonos hosszúságúak között pedig ABC rendben szeretnénk a fájlokat látni:
PS C:\> Get-ChildItem C:\Windows -File | Sort-Object -Property @{e={$_.name.len
gth}; ascending = $false}, Name
Directory: C:\Windows
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2015.10.06. 7:05 160520 Word to HTML Converter Uninst
aller.exe
-a---- 2016.10.24. 19:33 1465682 ProcessedPackets.KTL
-a---- 2016.10.24. 19:33 288105 SentOSPackets.KTL
-a---- 2016.10.29. 21:43 275 WindowsUpdate.log
-a---- 2016.10.13. 7:44 486 Synaptics.PD.log
-a---- 2016.10.13. 7:49 4176 DtcInstall.log
-a---- 2016.07.16. 13:43 33882 Enterprise.xml
-a---- 2016.10.13. 7:27 30079 iis_gather.log
-a---- 2016.10.24. 19:33 293748 NGIControl.KTL
-a---- 2016.10.24. 19:33 5760101 NGIPacket.KTL
-a---- 2016.10.13. 7:44 486 Synaptics.log
-a---- 2015.08.01. 18:58 1355 TSSysprep.log
…
Itt nem egyszerűen a szabályt kellett megadni a rendezés szempontjaként (a fájl nevének hossza), hanem a rendezés irányát is. Az egy hashtáblával tehetjük meg. A hashtábla egyik eleme az ’e’, azaz az ’expression’, aminek értéke az a szkriptblokk, ami megadja, hogyan kell képezni ezt a „képzetes” tulajdonságot. A másik eleme az ’ascending’, ami rövidíthető ’a’-val is. Ennek értéke $true, ha növekvő sorrendet szeretnénk, $false, ha csökkenőt.