Rendezés (Sort-Object)

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águak 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.



Word To HTML Converter