Hostwinds Blog

Zoekresultaten voor:


De kracht van PowerShell Uitgelichte afbeelding

De kracht van PowerShell

door: Karlito Bonnevie  /  april 29, 2022


Bij het vergelijken van de opdrachten van de traditionele Windows-opdrachtregelinterface (CLI) met die van een Linux CLI, is er echt geen vergelijking.Er is niets in de traditionele Windows CLI (CD, Dir, Copy, Del, enz.) Zo krachtig als Awk, SED, hoofd, staart, tsort, uniq, split, enz.CLI is dat tekststreamverwerking vaak nodig is om het gewenste resultaat te krijgen.Stel bijvoorbeeld dat u het IPv6 -adres van uw Linux -machine wilt.Eén aanpak kan zijn:

ifconfig | grep inet6 | head -1 | awk '{print $2}'

De GREP -opdracht grijpt meerdere lijnen met "INET6", de kopopdracht grijpt de eerste van deze en print het tweede veld (d.w.z. de tweede tekenreeks) in de regel, waardoor de gewenste IPv6 -waarde wordt geproduceerd.Behoorlijk glad, maar we verwerken tekststromen, die snel behoorlijk ingewikkeld kunnen worden.Stel bijvoorbeeld dat u het volgende wilt doen:

  • Maak een lijst van alle systeemprocessen dan
  • Sorteer de lijst in afnemende volgorde door handelscount gevolgd door CPU -gebruikstijd, dan dan
  • Bekijk de lijst als een tabel die procesnaam toont, de telling, CPU -tijd en het volledige procesbestandspad weergeeft?

De PowerShell om dit te doen is vrij eenvoudig (bij de PS -opdrachtprompt kunt u het volgende op een enkele regel plaatsen, als u wilt):

Get-Process | 
  Sort-Object -Property HandleCount, CPU | 
    Format-Table -Property Name, HandleCount, CPU, Path

En hier is een fragment van de output.Zoals te zien is, wordt de tabel gesorteerd op het aantal handvat en vervolgens op CPU -tijd (let op de dalende CPU -tijden voor de drie processen met behulp van 18 handgrepen):

Name                    HandleCount        CPU Path
----                    -----------        --- ----
chrome                          165     375.13 /opt/google/chrome/chrome
pwsh                            128       81.1 /opt/microsoft/powershell/7/pwsh
chrome                           52     216.36 /opt/google/chrome/chrome
chrome                           44     151.13 /opt/google/chrome/chrome
Xvnc                             33     254.66 /usr/bin/Xvnc
dbus-daemon                      31       0.23 /usr/bin/dbus-daemon
chrome                           23       0.45 /opt/google/chrome/chrome
xfce4-terminal                   18      16.39 /usr/bin/xfce4-terminal
xfce4-session                    18       0.12 /usr/bin/xfce4-session
xrdp-chansrv                     18       0.05 /usr/sbin/xrdp-chansrv
xfdesktop                        15       4.39 /usr/bin/xfdesktop
xfce4-power-manager              15       0.39 /usr/bin/xfce4-power-manager
chrome                           15       0.03 /opt/google/chrome/chrome

Zeg nu dat je naast het bovenstaande wilt groeperen door het aantal handels te geven?Het kan niet veel gemakkelijker worden, voeg gewoon het argument -groupby handleCount toe aan de cmdlet van de format -tafel (ja, dat is wat ze worden genoemd):

Get-Process | 
  Sort-Object -Property HandleCount, CPU | 
    Format-Table -Property Name, HandleCount, CPU, Path -GroupBy HandleCount

Hier is een fragment van die output:

   HandleCount: 18

Name           HandleCount   CPU Path
----           -----------   --- ----
xfce4-terminal          18 16.68 /usr/bin/xfce4-terminal
xfce4-session           18  0.12 /usr/bin/xfce4-session
xrdp-chansrv            18  0.05 /usr/sbin/xrdp-chansrv

   HandleCount: 15

Name                HandleCount  CPU Path
----                -----------  --- ----
xfdesktop                    15 4.43 /usr/bin/xfdesktop
xfce4-power-manager          15  0.4 /usr/bin/xfce4-power-manager
chrome                       15 0.03 /opt/google/chrome/chrome

Merk op dat er geen vleugje tekststreamverwerking is in een van deze PowerShell -voorbeelden.Dat komt omdat PowerShell objecten (met verschillende eigenschappen) tussen cmdlets en niet -gegevensstromen passeert.Als je het echt wilde, kun je nog steeds tekststromen manipuleren met de select-string cmdlet, maar er is zelden een behoefte om dit te doen.In het laatste voorbeeld kunt u in het laatste voorbeeld door elke eigenschap Get-Process Object groeperen en kunt u Get-Process |Get-lid om te zien snel kijken welke eigenschappen beschikbaar zijn.

Intrigerend klinkt?Vraagt u zich af hoe u aan de slag kunt?Zie dan Powershell met Linux gebruiken.

Geschreven door Karlito Bonnevie  /  april 29, 2022