Powershell Leonardo Duarte
Get-Process – Como obter informações detalhadas sobre os processos
Embora muitos saibam que o comando Get-Process no PowerShell pode fornecer informações básicas do processo, ele também pode exibir detalhes específicos com alguns pequenos ajustes.
Se você usa o Windows PowerShell há algum tempo, provavelmente está familiarizado com o cmdlet Get-Process. Esse cmdlet, que você pode ver na Figura 1 , retorna uma lista dos vários processos em execução no seu computador. Obviamente, essas informações podem ser úteis, mas há muito mais informações disponíveis se você souber acessá-las.
Para mostrar os tipos de informações que você pode acessar, vamos restringir um pouco a lista observando um único processo. Para fins de demonstração, vou usar o último processo da lista. Como você pode ver na figura acima, esse processo tem um ID 3644. Se eu quiser examinar esse processo sozinho, posso digitar Get-Process -ID 3644.
Este comando retorna exatamente as mesmas informações de antes, mas exibe apenas o processo especificado. No entanto, podemos acessar muito mais informações sobre esse processo. Uma maneira de fazer isso é anexar o cmdlet Select-Object e o caractere curinga (*). Isso informa ao PowerShell para exibir todas as propriedades associadas ao processo selecionado. O comando completo é:
Get-Process -ID 3644 | Select-Object *
Se você observar a Figura 2 , poderá ver que o PowerShell retorna informações muito detalhadas sobre o processo especificado. De fato, isso é uma melhoria das informações fornecidas por padrão, mas ainda podemos fazer melhor.
Existem duas técnicas principais que podemos usar para obter mais informações. Uma técnica é expandir as informações que já estão sendo exibidas. Por exemplo, se você observar a figura acima, notará uma propriedade chamada Threads. O Windows exibe uma lista incompleta de threads, conforme indicado pelo … após o último número de threads. Se você quiser ver uma lista abrangente de threads, podemos fazê-lo usando o parâmetro -ExpandProperty. O comando seria algo parecido com isto:
Get-Process -ID 3644 | Threads Select-Object -ExpandProperty
O parâmetro ExpandProperty é um parâmetro comum do PowerShell que normalmente fará com que o PowerShell revele uma lista completa de propriedades, em vez de truncar a lista. Como tal, seria razoável supor que este comando exibisse uma lista de números de ID de encadeamento. Nesse caso, no entanto, o PowerShell nos fornece mais informações. Para cada thread, vemos o número de identificação, mas também vemos coisas como a prioridade e o tempo total do processador. Você pode ver uma saída parcial na Figura 3.
Tudo bem, mas levanta a questão de como podemos acessar essa lista de IDs de encadeamentos. A solução é usar o cmdlet Select-Object uma segunda vez. Eu nunca vi alguém usar Select-Object duas vezes em uma única cadeia de comando antes, mas funciona. O comando completo é:
Get-Process -ID 3644 | Select-Object -ExpandProperty Threads | Select-Object ID
Mencionei anteriormente que havia duas técnicas principais para extrair mais dados do cmdlet Get-Process. O outro método envolve o uso de notação pontilhada. Se você olhar para a Figura 2, notará uma propriedade chamada StartInfo e verá que seu valor é System.Diagnostics.ProcessStartInfo. Esse valor não tem sentido por si só, mas podemos fazer uma busca detalhada para obter algumas informações úteis. Para fazer isso, primeiro devemos declarar uma variável que podemos usar. O comando que eu vou usar é:
$A = Get-Process -ID 3644
Depois que a variável é decalcada, podemos examinar propriedades individuais digitando o nome da variável, um ponto e o nome da propriedade. Observe na Figura 5 , no entanto, o que acontece quando faço isso com a propriedade StartInfo.
Agora podemos ver algumas informações de início do processo, mas essas informações ainda são de utilidade limitada. O pequeno segredo sujo é que você pode usar a notação pontilhada para detalhar ainda mais. A maioria dos dados mostrados na figura anterior estava relacionada ao meio ambiente. Portanto, com isso em mente, vamos adicionar outro ponto e a palavra “ambiente” ao comando anterior. O comando torna-se, portanto:
$A.StartInfo.Environment
Agora, temos acesso a algumas informações úteis. Você pode ver a saída na Figura 6.