Pagina inicial » como » Geek School Aprendendo Como Usar Objetos no PowerShell

    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.