Steamy PowerShell Get-Process Cmdlet 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 seja executado funcionará.

Pronto? Vamos mergulhar e gerenciar alguns processos!

Exibindo Processos em Execução

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

Get-Process retorna uma captura instantânea no tempo das informações dos processos em execução do 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 seu console do PowerShell e execute Get-Process. Observe que Get-Process retorna as 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 comandos gps ou ps existem como aliases para Get-Process. Como o PowerShell 7 é multiplataforma, o comando ps entra em conflito com um comando Linux embutido. Portanto, o ps não funcionará no Linux, apenas o alias gps.

O significado da saída do Get-Process pode não ser imediatamente óbvio. As propriedades padrão do 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á utilizando, exibida em megabytes, como 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 recentemente referenciadas pelo processo.
  • VM(M) – A quantidade de memória virtual que o processo está utilizando, exibida em megabytes. Inclui o 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 da 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 pseudônimos 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 ele encontra, ele usa o ID desse processo ($_.id) e o passa para Get-NetTCPConnection. O PowerShell então usa Get-NetTCPConnection para encontrar informações sobre cada conexão de rede que o processo brave tem aberta.

Rodar 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 } 

Obrigado a Jay Adams lá na SystemFrontier!

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

Encontrando Atributos Específicos do Processo

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

Agora, vamos 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 Calculator como nome. Você verá a mesma saída que viu anteriormente.

Get-Process -Name 'Calculator'

Get-Process retorna muitas propriedades, como 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 referencie a propriedade CPU como mostrado abaixo. Você verá que ele retorna apenas o valor da 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 exibe o nome real da propriedade na saída. Esse conceito é executado com um arquivo de formatação PS1XML.

O tempo da CPU é expresso como um total de segundos em vários núcleos. Para obter um número mais legível para humanos, arredonde-o para o décimo mais próximo usando um método Math como 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 outras propriedades também, como Id se quiser ver apenas o ID de um processo.

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

Recuperando o uso de memória do processo

Diagnosticar sistemas com execução lenta pode ser um desafio, com a memória restrita 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 da memória, utilize os multiplicadores de conversão integrados do PowerShell para mudar megabytes (MB) para gigabytes (GB). No exemplo abaixo, você irá converter a memória usada para GB e então utilizar o biblioteca matemática .NET método Round para arredondar o valor, conforme 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)

O uso de utilitários integrados 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 Pouco 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 utilizá-las!

Descobrindo Onde um Binário de Processo Reside

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 torna fácil encontrar o caminho do sistema de arquivos do arquivo de 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, o comando 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.

Agentes maliciosos podem nomear um processo com o mesmo nome ou similar a um confiável. Portanto, a capacidade de localizar o caminho do sistema de arquivos ajuda 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 encerrar involuntariamente 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 do Get-Process em um computador remoto para obter informações sobre processos!

Localizando Processos em Computadores Remotos

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

Relacionado: Como Configurar o PSRemoting com Windows e Linux

Mas, se estiver no Linux ou estiver executando o PowerShell 6 no Windows, agora você possui um parâmetro ComputerName que pode ser usado 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 acesso remoto. Para alcançar o mesmo resultado, você pode encapsular o comando em um Invoke-Command, assim: Invoke-Command -ComputerName "NomeDoComputador" -ScriptBlock { Get-Process -ProcessName 'processo' }

Ao executar o comando acima em um computador remoto, o mesmo resultado é exibido como se o comando Get-Process fosse executado localmente.

Abaixo está um exemplo de acesso remoto a outro computador e obtenção de 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 Get-Process do PowerShell para encontrar processos em execução no PowerShell em computadores locais e remotos, tanto no Linux quanto no Windows.

Agora, o que você fará com esse conhecimento? Experimente passar um processo recuperado pelo Get-Process para o Stop-Process em um computador local ou remoto para encerrá-lo!

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