Não deixe de ler os artigos anteriores da série:
- Aprenda a automatizar o Windows com o PowerShell
- Aprendendo a usar cmdlets no PowerShell
- Aprendendo a usar objetos no PowerShell
- Aprendendo a formatar, filtrar e comparar no PowerShell
- Aprenda a usar o Remoting no PowerShell
- Usando o PowerShell para obter informações do computador
E fique ligado para o resto da série durante toda a semana.
Usando Cmdlets em lote
Anteriormente na série, quando apresentamos o pipeline, mostramos como você pode pegar os objetos que um cmdlet gera e passá-los como entrada para outro cmdlet usando algo parecido com isto:
Get-Process -Name notepad | Stop-Process
Isso mataria qualquer processo com o nome "notepad". Mas provavelmente você está se perguntando como o PowerShell é capaz de matar todas as instâncias do bloco de notas com um único comando. A resposta está na ajuda do cmdlet Stop-Process.
help Stop-Process –Full
Se você observar a última linha de código na seção de sintaxe, verá que o parâmetro InputObject aceita um objeto do tipo Process e sempre que você vir um tipo seguido por dois colchetes como esse, isso significa que o parâmetro aceita um ou mais do tipo anterior. Neste caso, aceita um ou mais objetos de processo. Tecnicamente, diríamos que o cmdlet InputObject aceita um processo array. Sempre que você tiver um cmdlet que ofereça suporte a operações em lote dessa maneira, use-o. Esta é a primeira escolha.
Usando o WMI
Embora o WMI não seja a melhor peça de tecnologia fornecida pelo Microsoft HQ, ele aparece em segundo lugar na lista de como trabalhar com coleções de objetos. Poderíamos obter facilmente uma lista de processos em execução da classe Win32_Process da seguinte forma:
Get-WmiObject –Class Win32_Process
Get-WmiObject –Class Win32_Process | Get-Member
Get-WmiObject -Class Win32_Process -Filter “name=’notepad.exe'” | Invoke-WmiMethod -Name Terminate
Enumeração
Na falta dos outros dois métodos, se você tiver que fazer algo com vários objetos, você pode enumerar o objeto inteiro e agir em cada objeto individual. Primeiro você tem que encontrar o método que você usaria para interromper um único processo.
Get-Process | Get-Member -MemberType Method
Get-Process -Name notepad | ForEach-Object -Process {$_.Kill()}
Resumo
Escolha One
Get-Process -Name notepad | Stop-Process
Escolha dois
Get-WmiObject -Class Win32_Process -Filter “name=’notepad.exe'” | Invoke-WmiMethod -Name Terminate
Escolha três
Get-Process -Name notepad | ForEach-Object -Process {$_.Kill()}
Isso é tudo para esse pessoal do tempo, até a próxima semana para mais diversão com o PowerShell.