Geek School: Aprendendo a formatar, filtrar e comparar no PowerShell

Índice:

Geek School: Aprendendo a formatar, filtrar e comparar no PowerShell
Geek School: Aprendendo a formatar, filtrar e comparar no PowerShell

Vídeo: Geek School: Aprendendo a formatar, filtrar e comparar no PowerShell

Vídeo: Geek School: Aprendendo a formatar, filtrar e comparar no PowerShell
Vídeo: #06 - Word 2013 - Botão Backstage e as diferenças de versões - Curso Completo - YouTube 2024, Maio
Anonim
Nesta edição da Geek School, analisamos a formatação, filtragem e comparação de objetos no Pipeline.
Nesta edição da Geek School, analisamos a formatação, filtragem e comparação de objetos no Pipeline.

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
  • Aprendendo a usar objetos no PowerShell

E fique ligado para o resto da série durante toda a semana.

Formatação Padrão

Quando comecei a usar o PowerShell, achei que tudo era mágico, mas a verdade é que leva um pouco de tempo para entender o que está acontecendo sob o capô. O mesmo é verdadeiro para o sistema de formatação do PowerShell. Na verdade, se você executar o cmdlet Get-Service, a saída gerada mostrará apenas três propriedades: Status, Nome e DisplayName.

Mas se você canalizar Get-Service para Get-Member, verá que os objetos ServiceController têm muito mais do que apenas essas três propriedades, então o que está acontecendo?
Mas se você canalizar Get-Service para Get-Member, verá que os objetos ServiceController têm muito mais do que apenas essas três propriedades, então o que está acontecendo?
A resposta está dentro de um arquivo oculto que define como a maioria dos cmdlets internos exibe sua saída. Para entender, digite o seguinte no shell e aperte enter.
A resposta está dentro de um arquivo oculto que define como a maioria dos cmdlets internos exibe sua saída. Para entender, digite o seguinte no shell e aperte enter.

notepad C:WindowsSystem32WindowsPowerShellv1.0DotNetTypes.format.ps1xml

Se usarmos a função Localizar do bloco de notas, poderemos pular rapidamente para a seção que detalha a saída do cmdlet Get-Service procurando o tipo ServiceController.

De repente, você pode ver que, sob o capô, o PowerShell está formatando qualquer objeto no Pipeline que seja do tipo ServiceController e criando uma tabela com três colunas: Status, Nome e DisplayName. Mas e se o tipo com o qual você está lidando não tiver uma entrada nesse arquivo ou qualquer outro arquivo de formato para esse assunto? Bem, então, é bem simples na verdade. Se o objeto que sai do pipeline tiver 5 ou mais propriedades, o PowerShell exibirá todas as propriedades do objeto em uma lista; se tiver menos de 5 propriedades, será exibido em uma tabela.
De repente, você pode ver que, sob o capô, o PowerShell está formatando qualquer objeto no Pipeline que seja do tipo ServiceController e criando uma tabela com três colunas: Status, Nome e DisplayName. Mas e se o tipo com o qual você está lidando não tiver uma entrada nesse arquivo ou qualquer outro arquivo de formato para esse assunto? Bem, então, é bem simples na verdade. Se o objeto que sai do pipeline tiver 5 ou mais propriedades, o PowerShell exibirá todas as propriedades do objeto em uma lista; se tiver menos de 5 propriedades, será exibido em uma tabela.

Formatando seus dados

Se você não estiver satisfeito com a formatação padrão de um objeto ou tipo, poderá rolar sua própria formatação. Existem três cmdlets que você precisa saber para fazer isso.

  • Format-List
  • Format-Table
  • Formato amplo
Image
Image

Formato amplo simplesmente pega uma coleção de objetos e exibe uma única propriedade de cada objeto. Por padrão, ele procurará uma propriedade de nome; Se os seus objetos não contiverem uma propriedade de nome, ela usará a primeira propriedade do objeto, uma vez que as propriedades foram classificadas alfabeticamente.

Get-Service | Format-Wide

Como você pode ver, o padrão também é duas colunas, embora seja possível especificar qual propriedade você deseja usar, além de quantas colunas deseja exibir.
Como você pode ver, o padrão também é duas colunas, embora seja possível especificar qual propriedade você deseja usar, além de quantas colunas deseja exibir.

Get-Service | Format-Wide -Property DisplayName -Column 6

Se algo é formatado como uma tabela por padrão, você sempre pode alterná-lo para o modo de exibição de lista usando o cmdlet Format-List. Vamos dar uma olhada na saída do cmdlet Get-Process.
Se algo é formatado como uma tabela por padrão, você sempre pode alterná-lo para o modo de exibição de lista usando o cmdlet Format-List. Vamos dar uma olhada na saída do cmdlet Get-Process.
Image
Image

Essa visão tabular realmente combina com esse tipo de informação muito bem, mas vamos fingir que queremos vê-lo em forma de lista. Tudo o que realmente precisamos fazer é canalizá-lo para Format-List.

Get-Process | Format-List

Como você pode ver, existem apenas quatro itens exibidos na lista por padrão. Para visualizar todas as propriedades do objeto, você pode usar um caractere curinga.
Como você pode ver, existem apenas quatro itens exibidos na lista por padrão. Para visualizar todas as propriedades do objeto, você pode usar um caractere curinga.

Get-Process | Format-List –Property *

Como alternativa, você pode selecionar apenas as propriedades desejadas.
Como alternativa, você pode selecionar apenas as propriedades desejadas.

Get-Process | Format-List –Property name,id

Image
Image

Format-Table, por outro lado, pega dados e os transforma em uma tabela. Como nossos dados do Get-Process já estão na forma de uma tabela, podemos usá-los para escolher facilmente as propriedades que queremos exibir na tabela. Eu usei o parâmetro AutoSize para fazer todos os dados se encaixarem em uma única tela.

Get-Process | Format-Table name,id –AutoSize

Image
Image

Filtrando e Comparando

Uma das melhores coisas sobre como usar um pipeline baseado em objeto é que você pode filtrar objetos fora do pipeline em qualquer estágio usando o cmdlet Where-Object.

Get-Service | Where-Object {$_.Status -eq “Running”}

Usando onde o objeto é realmente muito simples. $ representa o objeto de pipeline atual, a partir do qual você pode escolher uma propriedade que você deseja filtrar. Aqui, estamos apenas mantendo objetos onde a propriedade Status é igual a Running. Existem alguns operadores de comparação que você pode usar no bloco de script de filtragem:
Usando onde o objeto é realmente muito simples. $ representa o objeto de pipeline atual, a partir do qual você pode escolher uma propriedade que você deseja filtrar. Aqui, estamos apenas mantendo objetos onde a propriedade Status é igual a Running. Existem alguns operadores de comparação que você pode usar no bloco de script de filtragem:
  • eq (igual a)
  • neq (não igual a)
  • gt (maior que)
  • ge (maior que ou igual a)
  • lt (menos que)
  • le (menor que ou igual a)
  • como (jogo de cadeia curinga)

Uma lista completa e mais informações podem ser visualizadas no arquivo de ajuda conceitual about_comparison, no entanto, leva algum tempo para se acostumar com a sintaxe Where-Obeject. Isso é tudo por este tempo!

Recomendado: