18Aug

Geek School: Aprender a usar objetos no PowerShell

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.