18Aug
Compreender objetos é um dos conceitos fundamentais para "obter" o PowerShell. Junte-se a nós enquanto exploramos objetos e como eles tornam o PowerShell melhor do que qualquer outro shell lá fora hoje.
Certifique-se de ler os artigos anteriores da série:
- Saiba como automatizar o Windows com o PowerShell
- Aprender a usar Cmdlets no PowerShell
E fique atento para o resto da série durante toda a semana.
Objects
Alguma vez você já se perguntou o que diferencia o PowerShell de um shell Linux tradicional como o Bash, ou mesmo o prompt de comando legado? A resposta é realmente simples: texto de saída de shells tradicional, o que torna difícil fazer coisas 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 conhecer expressões regulares como ade volta da sua mão. O
PowerShell aproveita o framework subjacente. Net e assume uma abordagem diferente, usando objetos em vez de texto. Os objetos são apenas uma representação de algo. Eles são uma coleção de peças e ações para usá-los. Vamos dar uma olhada nas partes de uma bicicleta e como podemos usá-las. Os objetos
em. Net são muito parecidos, exceto por duas pequenas diferenças: as "Peças" são chamadas propriedades e as "Instruções" são chamadas métodos .Se quisermos representar um Serviço do Windows como um objeto, podemos decidir que é apropriado descrevê-lo usando três propriedades: Nome do Serviço, Estado e Descrição. Também precisamos interagir com o serviço, para que possamos dar ao objeto um método Iniciar, Parar e Pausar.
Você pode ver as propriedades e os métodos de um objeto passando-o para o cmdlet Get-Member. Os objetos que uma saída de cmdlet do PowerShell são em grande parte tipos subjacentes da estrutura. Net, mas você pode criar seus próprios objetos se precisar usar um idioma como C # ou usar o tipo PSObject.
O Pipeline
Existem muitos shells Linux com uma tubulação, permitindo que você envie o texto que um comando emite como entrada para o próximo comando no pipeline. O PowerShell leva isso ao próximo nível, permitindo que você pegue os objetos que um cmdlet produz e os passa como entrada para o próximo cmdlet na tubulação. O truque é saber que tipo de objeto retorna um cmdlet, o que é realmente fácil ao usar o cmdlet Get-Member.
Get-Service |Get-Member
Por razões além do alcance deste artigo, as propriedades e os métodos são chamados conjuntamente de membros da 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
Uma vez que o PowerShell trata de objetos e não de texto, nem todos os cmdlets podem ser vinculados usando a pipeline [1].Isso significa que precisamos encontrar um cmdlet que esteja procurando aceitar um objeto System. ServiceProcess. ServiceController da tubulação.
Get-Command -ParameterType System. ServiceProcess. ServiceController
Observe que existe 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 série de objetos do ServiceController como entrada. Normalmente, se você vir um parâmetro chamado InputObject, ele aceitará a entrada do Pipeline, mas apenas para ter certeza de que vamos dar uma olhada na ajuda completa para esse parâmetro.
Get-Help -Name Stop-Service - Completo
Nossas suspeitas estavam corretas. Então, neste momento, sabemos o seguinte:
- Get-Service retorna objetos ServiceController
- Stop-Service possui um parâmetro chamado InputObject que aceita um ou mais ServiceControllers como entrada.
- O parâmetro InputObject aceita a entrada da tubulação.
Usando esta informação, podemos fazer o seguinte:
Get-Service -Name 'Apple Mobile Device' |Stop-Service
Isso é tudo por esse tempo pessoal. Na próxima vez que analisarmos a forma como podemos formatar, filtrar e comparar objetos no Pipeline.
Trabalho de casa
- Leia sobre o Object Pipeline
Se você tiver alguma dúvida, você pode tweet-me @taybgibb, ou simplesmente deixar um comentário.