Geek School Aprendendo Como Usar Objetos no PowerShell
Entender objetos é um dos conceitos fundamentais para “obter” o PowerShell. Junte-se a nós enquanto exploramos objetos e como eles fazem o PowerShell melhor do que qualquer outro shell hoje.
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
E fique ligado para o resto da série durante toda a semana.
Objetos
Alguma vez você já se perguntou o que diferencia o PowerShell de um shell Linux tradicional como o Bash, ou até mesmo o prompt de comando herdado? A resposta é realmente simples: os shells tradicionais emitem texto, o que dificulta a execução de tarefas como formatação e filtragem. Claro, existem ferramentas para ajudá-lo a fazer o trabalho (sed e grep vêm à mente), mas no final do dia, se você quiser fazer qualquer tipo de análise de texto pesado, você precisa saber expressões regulares como o parte de trás da sua mão.
O PowerShell aproveita a estrutura subjacente do .Net e adota uma abordagem diferente, usando objetos em vez de texto. Objetos são apenas uma representação de algo. Eles são uma coleção de partes e ações para usá-los. Vamos dar uma olhada nas partes de uma bicicleta e como podemos usá-las.
Objetos no .Net são praticamente os mesmos, exceto por duas pequenas diferenças: as “Partes” são chamadas propriedades e as "Instruções" são chamadas métodos. Se quisermos representar um Serviço do Windows como um objeto, poderemos decidir que é apropriado descrevê-lo usando três propriedades: Nome, Estado e Descrição do Serviço. Nós também precisamos interagir com o serviço, então podemos dar ao objeto um método Start, Stop e Pause..
Você pode ver as propriedades e métodos de um objeto passando-o ao cmdlet Get-Member. Os objetos que um cmdlet do PowerShell produz em grande parte são tipos subjacentes da estrutura .Net, mas você pode criar seus próprios objetos se precisar usar uma linguagem como C # ou usar o tipo PSObject.
O Pipeline
Há uma abundância de shells do Linux com um pipeline, permitindo que você envie o texto que um comando gera como entrada para o próximo comando no pipeline. O PowerShell leva isso para o próximo nível, permitindo que você pegue os objetos que um cmdlet gera e os transmita como entrada para o próximo cmdlet no pipeline. O truque é saber que tipo de objeto um cmdlet retorna, o que é realmente fácil ao usar o cmdlet Get-Member.
Get-Service | Get-Member
Por motivos além do escopo deste artigo, propriedades e métodos são chamados de membros de classe, o que explica por que você usa o cmdlet Get-Member para obter uma lista de todos os métodos e propriedades de um objeto. No entanto, o cmdlet Get-Member também retorna outra informação importante, o tipo de objeto subjacente. Na captura de tela acima, podemos ver que Get-Service retorna objetos do tipo:
System.ServiceProcess.ServiceController
Como o PowerShell lida com objetos e não com texto, nem todos os cmdlets podem ser vinculados usando o pipeline [1]. Isso significa que precisamos encontrar um cmdlet que esteja procurando aceitar um objeto System.ServiceProcess.ServiceController do pipeline.
Get-Command -ParameterType System.ServiceProcess.ServiceController
Observe que há um cmdlet chamado Stop-Service; vamos dar uma olhada na ajuda para isso.
Get-Help -Name Stop-Service
Parece que o parâmetro InputObject usa uma matriz de objetos ServiceController como entrada. Normalmente, se você vir um parâmetro chamado InputObject, ele aceitará entrada do Pipeline, mas só para ter certeza, vamos dar uma olhada na ajuda completa para esse parâmetro.
Get-Help -Name Stop-Service - Completo
Nossas suspeitas estavam corretas. Então, neste ponto, sabemos o seguinte:
- Get-Service retorna objetos ServiceController
- Stop-Service tem um parâmetro chamado InputObject que aceita um ou mais ServiceControllers como entrada.
- O parâmetro InputObject aceita entrada de pipeline.
Usando essas informações, podemos fazer o seguinte:
Get-Service -Name 'Apple Mobile Device' | Parar serviço
Isso é tudo por esse tempo pessoal. Na próxima vez, veremos como podemos formatar, filtrar e comparar objetos no Pipeline.
Dever de casa
- Leia sobre o pipeline de objetos
Se você tiver alguma dúvida, pode twittar-me @taybgibb ou apenas deixar um comentário.