Geek School: Aprendendo Como Usar Objetos no PowerShell

Índice:

Geek School: Aprendendo Como Usar Objetos no PowerShell
Geek School: Aprendendo Como Usar Objetos no PowerShell

Vídeo: Geek School: Aprendendo Como Usar Objetos no PowerShell

Vídeo: Geek School: Aprendendo Como Usar Objetos no PowerShell
Vídeo: Raspberry Pi turbinado (literalmente) - Curso Raspberry Pi - YouTube 2024, Maio
Anonim
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.
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

Você já se perguntou o que diferencia o PowerShell de um shell tradicional do Linux como o Bash, ou até mesmo o prompt de comando herdado? A resposta é muito 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.Net subjacente 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 em como podemos usá-las.

Image
Image

Objetos em.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 do Serviço, Estado e Descrição. Também precisamos interagir com o serviço, portanto, 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 são basicamente 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.
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 são basicamente 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 produz 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:
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 queira 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.
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.
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 –Full

Nossas suspeitas estavam corretas. Então, neste ponto, sabemos o seguinte:
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’ | Stop-Service

Isso é tudo por esse tempo pessoal. Da próxima vez, veremos como podemos formatar, filtrar e comparar objetos no Pipeline.
Isso é tudo por esse tempo pessoal. Da 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 enviar um tweet para mim @taybgibb ou apenas deixar um comentário.

Recomendado: