Hostwinds Blog


Il potere di PowerShell Immagine in primo piano

Il potere di PowerShell

di: Karlito Bonnevie  /  aprile 29, 2022


Quando si confrontano i comandi della tradizionale interfaccia della linea di comando di Windows (CLI) con quelli di una CLI Linux, non c'è davvero alcun confronto.Non c'è nulla nella tradizionale CLI di Windows (CD, Dir, Copy, Del, ecc.) Potente come Awk, Sed, Head, Tail, Tsort, Uniq, Split, ecc. Detto questo, uno dei problemi comuni con LinuxLa CLI è che l'elaborazione del flusso di testo è spesso richiesta per ottenere il risultato desiderato.Ad esempio, supponiamo che ti piacerebbe l'indirizzo IPv6 della tua macchina Linux.Un approccio potrebbe essere:

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

Il comando GREP afferra più righe contenenti "Inet6", il comando della testa afferra il primo di questi e AWK stampa il secondo campo (cioè la seconda stringa) nella riga, producendo il valore IPv6 desiderato.Abbastanza slick davvero ma stiamo elaborando flussi di testo, che possono rapidamente diventare piuttosto complicati.Ad esempio, dì che ti piacerebbe fare quanto segue:

  • Elenca tutti i processi di sistema, quindi
  • Ordina l'elenco in ordine decrescente per conteggio maneggevole seguito dal tempo di utilizzo della CPU, quindi
  • Visualizza l'elenco come una tabella che mostra il nome del processo, il conteggio delle impugnature, il tempo della CPU e il percorso del file di processo completo?

Il PowerShell per farlo è abbastanza semplice:

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

Ed ecco uno snippet dell'output.Come si può vedere, la tabella viene ordinata per conteggio delle maniglie, quindi per tempo della CPU (nota i tempi della CPU discendente per i tre processi usando 18 maniglie):

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

Ora dirlo oltre a quanto sopra, vorresti raggruppare per gestire il conteggio?Non potrebbe essere molto più facile, basta aggiungere l'argomento Handlecount -Groupby al CMDLET del tavolo da formato (sì, è quello che sono chiamati):

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

Ecco uno snippet di quell'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

Si noti che non esiste un pizzico di elaborazione del flusso di testo in nessuno di questi esempi di PowerShell.Questo perché PowerShell passa oggetti (con varie proprietà) tra cmdlet e non flussi di dati.Se lo volevi davvero, puoi comunque manipolare i flussi di testo con il cmdlet selezionato, ma raramente c'è bisogno di farlo.A proposito, nell'ultimo esempio, è possibile raggruppare per qualsiasi proprietà Object Get-Process e puoi usare GET-Process |Get-Member per vedere rapidamente quali proprietà sono disponibili.

Sembra intrigante?Ti chiedi come iniziare?Quindi vedi Usando PowerShell con Linux.

Scritto da Karlito Bonnevie  /  aprile 29, 2022