Cmdlet Get-Process do PowerShell para Processos em Execução

Interessado em usar o cmdlet PowerShell Get-Process para exibir os processos em execução de um sistema? Com Get-Process, você pode encontrar o proprietário do processo, o ID do processo ou até mesmo onde no disco o processo está localizado.

Neste artigo, você aprenderá como usar o cmdlet Get-Process do PowerShell por meio de exemplos do mundo real. Se manipular processos para dobrá-los à sua vontade no Windows ou Linux parece divertido, continue lendo!

Relacionado: Como Encerrar um Processo no Linux Usando ps, pgrep, pkill e mais!

Pré-requisitos

Antes de prosseguir, abaixo estão os pré-requisitos necessários para acompanhar os exemplos neste artigo.

  • Embora o Windows PowerShell 5.1 seja suficiente para a maioria dos exemplos aqui, PowerShell 7.1 e superior são necessários para suporte ao Linux.

Relacionado: Atualizando para o PowerShell 7: Um Passo a Passo

  • Este artigo usa o Windows 10 e o Ubuntu 20.04 LTS, mas qualquer sistema operacional em que o PowerShell funcione será adequado.

Preparado? Vamos mergulhar e gerenciar alguns processos!

Exibindo Processos em Execução

Get-Process gerencia processos locais. Neste primeiro exemplo, você está usando o cmdlet Get-Process do PowerShell. Este comando exibe todos os processos em execução.

Get-Process retorna um instantâneo pontual das informações de processos em execução de um sistema. Para exibir informações de processo em tempo real, o Windows oferece o Gerenciador de Tarefas do Windows e o Linux oferece o comando top.

Para começar, abra o console do PowerShell e execute Get-Process. Observe que Get-Process retorna informações dos processos em execução, como mostrado abaixo. O formato de saída é idêntico para os sistemas operacionais Windows e Linux.

Using the Get-Process cmdlet on Windows to display local processes.

Por padrão, os alias de comando gps ou ps existem para Get-Process. Como o PowerShell 7 é multiplataforma, o comando ps entra em conflito com um comando Linux integrado. Portanto, ps não funcionará no Linux, apenas o alias gps.

O significado da saída de Get-Process pode não ser imediatamente óbvio. As propriedades padrão de Get-Process são descritas com mais detalhes abaixo.

  • NPM(K) – A quantidade de memória não paginada que um processo está usando, exibida em kilobytes, conforme indicado pela notação (K).
  • PM(M) – A quantidade de memória paginável que um processo está usando, exibida em megabytes, conforme indicado pela notação (M).
  • WS(M) – O tamanho do conjunto de trabalho do processo, exibido em megabytes. O conjunto de trabalho consiste nas páginas de memória que foram referenciadas recentemente pelo processo.
  • VM(M) – A quantidade de memória virtual que o processo está usando, exibida em megabytes. Inclui armazenamento nos arquivos de paginação no disco.
  • CPU(S) – A quantidade de tempo de processador que o processo utilizou em todos os processos, exibida em segundos.
  • Id – O ID do processo (PID) do processo.
  • SI – Identificador de sessão do processo em execução. A sessão 0 indica que o processo está disponível para todos os usuários, 1 indica que o processo existe sob o primeiro usuário conectado e assim por diante.
  • ProcessName – O nome do processo em execução.

Para exibir uma lista de aliases de propriedade mapeados para nomes completos de propriedade, use o comando Get-Process | Get-Member -MemberType 'AliasProperty'.

Abaixo está outro ótimo exemplo. Para cada instância do processo brave que encontra, ele utiliza o ID desse processo ($_.id) e o passa para Get-NetTCPConnection. O PowerShell então utiliza Get-NetTCPConnection para encontrar informações sobre cada conexão de rede que o processo brave possui aberta.

Execute o seguinte código na sua sessão do PowerShell quando o navegador Brave estiver em execução.

Get-Process -Name brave | ForEach-Object { Get-NetTCPConnection -OwningProcess $_.Id -ErrorAction SilentlyContinue } 

Agradecemos a Jay Adams da SystemFrontier!

Parabéns, agora você pode visualizar todos os processos em execução tanto no Windows quanto no Linux usando Get-Process!

Localizando Atributos Específicos do Processo

Get-Process retorna muitas propriedades diferentes dos processos em execução, como você viu anteriormente. Como em todos os outros objetos do PowerShell, você pode escolher seletivamente as propriedades nos objetos.

Vamos agora passar por um exemplo simples de como você pode recuperar propriedades específicas para um processo específico:

  1. Inicie a calculadora do Windows.

2. Com um console do PowerShell aberto, execute Get-Process usando o parâmetro Name para mostrar apenas todos os processos em execução com Calculadora como nome. Você verá a mesma saída que viu anteriormente.

Get-Process -Name 'Calculator'

Get-Process retorna muitas propriedades conforme esperado. Talvez você queira encontrar a utilização da CPU com o valor na coluna CPU(s). Coloque o comando Get-Process entre parênteses e faça referência à propriedade CPU, como mostrado abaixo. Você verá que ele retorna apenas o valor para a propriedade CPU.

(Get-Process -Name 'Calculator').CPU

Observe que Get-Process retorna um nome chamado CPU(s) e o trecho de código acima usou apenas o nome CPU. Às vezes, o PowerShell não mostra o nome real da propriedade na saída. Este conceito é executado com um arquivo de formatação PS1XML.

O tempo de CPU é expresso como um total de segundos em todos os núcleos. Para torná-lo mais legível para humanos, arredonde-o para o décimo mais próximo usando um método Math, conforme mostrado abaixo.

$cpu = (Get-Process -Name 'Calculator').CPU
[math]::Round($cpu,2)
Calculator process is using less than 1 second of CPU time across all cores.

Você pode usar a abordagem acima para encontrar quaisquer outras propriedades também, como Id, se desejar ver apenas o ID de um processo.

Deixe o aplicativo Calculadora em execução. Você usará este aplicativo para o restante dos exemplos.

Recuperando o Uso de Memória do Processo

Diagnosticar sistemas com baixo desempenho pode ser um desafio, com memória limitada frequentemente sendo uma causa. Continuando com o aplicativo Calculadora, recupere o processo Calculadora e exiba apenas a propriedade VM. Como visto abaixo, a memória usada é exibida em megabytes (MB).

(Get-Process -Name 'Calculator').VM
Displaying the Calculator process memory usage.

Para auxiliar na compreensão do uso de memória, utilize os multiplicadores de conversão incorporados do PowerShell para mudar megabytes (MB) para gigabytes (GB). No exemplo abaixo, você converterá a memória usada para GB e então usará o biblioteca de matemática .NET método Round para arredondar o valor, como visto na captura de tela abaixo.

$ProcessMemoryGB = (Get-Process -Name 'Calculator').VM
$ProcessMemoryGB / 1GB

# Use o método Round do tipo Math do .NET
[Math]::Round($ProcessMemoryGB / 1GB)

Usar utilitários incorporados do PowerShell para converter os valores torna mais fácil entender a saída. Continue lendo para aprender como localizar o ID de um processo.

Converting the calculator process memory usage to a rounded GB format.

Expondo Propriedades Menos Conhecidas

Nem todas as propriedades estão incluídas ou mostradas por padrão com Get-Process. Continue lendo abaixo para aprender mais sobre as propriedades Path e UserName e como usá-las!

Descobrindo Onde um Binário de Processo Vive

Há muitos lugares em um sistema onde um executável de processo pode ser armazenado. Se um processo está em execução atualmente, Get-Process facilita a localização do caminho do sistema de arquivos do processo, apesar de Path não ser exibido por padrão. Como mostrado abaixo, a propriedade Path contém a localização do sistema de arquivos do executável do processo.

(Get-Process -Name 'Calculator').Path
Using Get-Process to display a process’s full file system path on Windows.

Assim como no Windows, Get-Process no Linux também retorna o caminho do sistema de arquivos. No exemplo abaixo, o processo gnome-calculator está em execução com o caminho exibido na saída do console.

(Get-Process -Name 'gnome-calculator').Path
Using Powershell Get-Process to display a process’s full file system path on Linux.

Atacantes astutos podem nomear um processo com o mesmo nome ou semelhante a um confiável. Portanto, a capacidade de localizar o caminho do sistema de arquivos auxilia em um cenário de resposta a incidentes de segurança (IR). Continue lendo para descobrir como localizar o proprietário do processo, já que UserName não está incluído na saída padrão.

Localizando o Proprietário do Processo

Para incluir o valor de UserName na saída, você precisará usar o parâmetro IncludeUserName. É importante saber o proprietário do processo, especialmente para evitar terminar inadvertidamente o processo de outro usuário. Como mostrado abaixo, a propriedade UserName agora está incluída na saída do processo.

Get-Process -Name 'Calculator' -IncludeUserName
Displaying the owner of Calculator process on Windows.

Por fim, continue lendo para aprender sobre o uso de Get-Process em um computador remoto para recuperar informações do processo!

Localizando Processos em Computadores Remotos

Embora no PowerShell do Windows, Get-Process não tenha capacidades remotas por si só, você sempre pode aproveitar o PowerShell Remoting e o Invoke-Command para executá-lo em computadores remotos.

Relacionado: Como Configurar o PSRemoting com Windows e Linux

Mas, se você estiver no Linux ou estiver executando o PowerShell 6 no Windows, agora você tem um parâmetro ComputerName que você pode usar para consultar processos em computadores remotos.

Get-Process -ComputerName 'remote_computer_name' -ProcessName 'process'

O parâmetro -ComputerName foi removido no PowerShell 7.x, pois o cmdlet não está diretamente relacionado ao remoting. Para alcançar o mesmo, você pode encapsular o mesmo em um Invoke-Command, assim: Invoke-Command -ComputerName "NomeDoComputador" -ScriptBlock { Get-Process -ProcessName 'processo' }

Ao executar o comando acima em um computador remoto, a mesma saída é mostrada como se o comando Get-Process fosse executado localmente.

Abaixo está um exemplo de remoting para outro computador e obtendo processos em execução:

Computer and Getting Running Processes

Você pode direcionar vários computadores separando-os por vírgula, por exemplo: Get-Process -ComputerName SRV1,SRV2.

Próximos Passos

Neste artigo, você aprendeu como usar o cmdlet PowerShell Get-Process para encontrar processos em execução com PowerShell em computadores locais e remotos tanto Linux quanto Windows.

Agora, o que você fará com esse conhecimento? Tente passar um processo obtido pelo Get-Process para Stop-Process em um computador local ou remoto para encerrar!

Source:
https://adamtheautomator.com/powershell-get-process/