/ / Geek School: Aprendendo formatação, filtragem e comparação no PowerShell

Geek School: aprendendo formatação, filtragem e comparação no PowerShell

Nesta edição da Geek School, examinamos a formatação, filtragem e comparação de objetos no Pipeline.

Certifique-se 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 no resto da série a semana toda.

Formatação padrão

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

imagem

Mas se você canalizar Get-Service para Get-Member, verá que os objetos ServiceController têm muito mais do que essas três propriedades, então o que está acontecendo?

imagem

A resposta está em um arquivo oculto que define como a maioria dos cmdlets internos exibe sua saída. Para entender, digite o seguinte no shell e pressione enter.

bloco de notas C: WindowsSystem32WindowsPowerShellv1.0DotNetTypes.format.ps1xml

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

imagem

De repente, você pode ver isso embaixo do 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? Bem, então, é bastante 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, ele 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
  • Todo o formato

imagem

Todo o formato simplesmente pega uma coleção de objetos e exibeuma única propriedade de cada objeto. Por padrão, ele procurará uma propriedade de nome; se seus objetos não contiverem uma propriedade de nome, ele usará a primeira propriedade do objeto depois que as propriedades forem classificadas em ordem alfabética.

Get-Service | Todo o formato

imagem

Como você pode ver, o padrão também é duas colunas, embora você possa especificar qual propriedade deseja usar e quantas colunas deseja exibir.

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

imagem

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

imagem

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

Get-Process | Format-List

imagem

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 | Lista de Formatos - Propriedade *

imagem

Como alternativa, você pode selecionar apenas as propriedades que deseja.

Get-Process | Format-List - Nome da propriedade, id

imagem

Formatar tabela, por outro lado, pega os dados e os transforma em ummesa. Como nossos dados do Get-Process já estão na forma de uma tabela, podemos usá-los para escolher facilmente as propriedades que queremos que sejam exibidas na tabela. Usei o parâmetro AutoSize para ajustar todos os dados em uma única tela.

Get-Process | Nome da tabela de formato, id - AutoSize

imagem

Filtrando e Comparando

Uma das melhores coisas sobre o uso de um pipeline baseado em objeto é que você pode filtrar objetos fora do pipeline a qualquer momento, usando o cmdlet Where-Object.

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

imagem

Usar where object é realmente muito simples. $ _ representa o objeto de pipeline atual, no qual você pode escolher uma propriedade na qual deseja filtrar. Aqui, estão apenas mantendo objetos onde a propriedade Status é igual a Em execução. 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 (menor que)
  • le (menor ou igual a)
  • like (Correspondência de caracteres curinga)

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