Hostwinds Blog

O poder do PowerShell Imagem em destaque

O poder do PowerShell

por: Karlito Bonnevie  /  abril 29, 2022


Ao comparar os comandos da interface da linha de comando do Windows (CLI) tradicional com os de uma CLI do Linux, realmente não há comparação.Não há nada na CLI tradicional do Windows (CD, dir, cópia, del, etc.) tão poderosa quanto awk, sed, cabeça, cauda, tsort, uniq, divisão etc. que dizem, um dos problemas comuns com o LinuxCLI é que o processamento de fluxo de texto geralmente é necessário para obter o resultado desejado.Por exemplo, digamos que você gostaria do endereço IPv6 da sua máquina Linux.Uma abordagem pode ser:

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

O comando Grep pega várias linhas contendo "Inet6", o comando Head agarra a primeira delas e a AWK imprime o segundo campo (ou seja, a segunda sequência) na linha, produzindo o valor IPv6 desejado.Bastante muito liso, mas estamos processando fluxos de texto, o que pode rapidamente se tornar bastante complicado.Por exemplo, digamos que você gostaria de fazer o seguinte:

  • Liste todos os processos do sistema, então
  • Classifique a lista em ordem decrescente pela contagem de alças seguida pelo tempo de uso da CPU, então
  • Veja a lista como uma tabela que mostra o nome do processo, a contagem de manipulação, o tempo da CPU e o caminho completo do arquivo de processo?

O PowerShell para fazer isso é bastante direto:

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

E aqui está um trecho da saída.Como pode ser visto, a tabela é classificada pela contagem de alças e, em seguida, pelo tempo da CPU (observe os tempos descendentes da CPU para os três processos usando 18 alças):

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

Agora diga que, além do exposto, você gostaria de agrupar a contagem de manipulação?Não poderia ficar muito mais fácil, basta adicionar o argumento -Groupby HandleCount ao cmdlet da mesa de formato (sim, é assim que eles são chamados):

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

Aqui está um trecho dessa saída:

   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

Observe que não há uma pitada de processamento de fluxo de texto em nenhum desses exemplos do PowerShell.Isso ocorre porque o PowerShell passa objetos (com várias propriedades) entre cmdlets e não fluxos de dados.Se você realmente quis, ainda pode manipular fluxos de texto com o cmdlet de seleção, mas raramente há uma necessidade.A propósito, no último exemplo, você pode agrupar-se por qualquer propriedade de objeto de processamento e pode usar o Process |Get-membro para ver rapidamente, veja rapidamente quais propriedades estão disponíveis.

Parece intrigante?Quer saber como começar?Então veja Usando PowerShell com Linux.

Escrito por Karlito Bonnevie  /  abril 29, 2022