PowerShell Select-Object Feito Simples: Um Guia para Iniciantes

O PowerShell é uma ferramenta poderosa para gerenciar dados, mas geralmente fornece informações demais de uma vez. Como você sabe, excesso de informações pode ser avassalador e difícil de analisar. Sem preocupações, no entanto. O cmdlet PowerShell Select-Object será útil.

Neste tutorial, você aprenderá o básico do cmdlet Select-Object para restringir ou filtrar resultados de várias maneiras.

Continue lendo e comece a gerenciar dados sem esforço!

Pré-requisitos

Este tutorial inclui demonstrações práticas. Para acompanhar, certifique-se de ter um sistema com o PowerShell instalado. Este tutorial usa o Windows 10 com PowerShell 7, mas qualquer versão moderna também deve funcionar.

O que é o cmdlet Select-Object do PowerShell?

O cmdlet Select-Object simplifica o gerenciamento de dados, permitindo que você selecione propriedades específicas de um objeto ou conjunto de dados. Ao mesmo tempo, é possível renomear propriedades ou criar propriedades calculadas com base nas existentes.

A sintaxe básica do Select-Object é a seguinte, onde:

Parameter Function
-InputObject Specifies the object or data set you want to work with, which can be an object, an array of objects, or an output of another cmdlet.
Property Specifies the property or properties to select from the InputObject parameter. You can specify multiple properties separated by commas.
Optional Parameters Allows you to refine your selection, such as selecting a certain number of objects or skipping objects.
Select-Object [-InputObject] [Property] [Optional Parameters]

Selecionando Objetos por Propriedades

Como é necessário mais do que uma breve introdução para satisfazer seu desejo de aprender sobre o cmdlet Select-Object, por que não começar com um de seus casos de uso comuns? Inicie este tutorial selecionando uma propriedade específica de um objeto com o cmdlet Select-Object.

Suponha que você tenha uma lista de processos em execução no seu computador, mas deseja ver apenas os nomes de cada processo. Especificar a propriedade Name para o cmdlet Select-Object resolverá o problema.

Abra o PowerShell e execute o comando Get-Process abaixo para recuperar e imprimir uma lista de todos os processos apenas (Select-Object) por Name.

Get-Process | Select-Object Name
Selecting objects by property

Além de processos em execução, o cmdlet Select-Object permite que você trabalhe com um arquivo CSV. Suponha que você tenha um arquivo CSV com muitas colunas, mas precisa apenas de algumas. Nesse caso, deixe o cmdlet Select-Object escolher apenas as colunas relevantes para que você possa manipular e analisar os dados.

Agora, execute o seguinte comando para selecionar várias propriedades (\code{Select-Object}): \code{Name} e \code{CPU} (separados por vírgulas). Essa funcionalidade ajuda quando se trabalha com grandes conjuntos de dados onde você só precisa de algumas propriedades de cada objeto.

Além disso, este comando também ordena a lista de objetos (\code{Sort-Object}) em ordem \code{-Descending} com a propriedade \code{CPU} como referência.

Get-Process | Select-Object Name, CPU | Sort-Object -Descending CPU

Abaixo, você pode ver os processos listados, começando pelo mais consumidor de recursos, o Google Chrome (se você tiver um instalado).

Selecting multiple properties

Criando uma Propriedade Calculada

Ao procurar por propriedades que se adequem melhor às suas necessidades, considere criar uma propriedade calculada. Por quê? Propriedades calculadas permitem que você manipule e transforme dados, combine propriedades existentes, realize operações matemáticas ou formate dados de uma maneira específica.

Para criar uma propriedade calculada, você deve especificar um novo nome de propriedade e uma expressão que define como calcular o valor da propriedade:

Execute o comando abaixo para realizar o seguinte:

  • Obter uma lista de processos em execução (\code{Get-Process}), selecionando apenas (\code{Select-Object}) as propriedades \code{Name} e \code{CPU}.
  • Crie uma nova propriedade calculada com o Nome Memória (MB), que calcula o uso de memória de cada processo em megabytes. O uso de memória é calculado usando uma Expressão que divide a propriedade WorkingSet por 1MB. Qualquer expressão válida do PowerShell funciona na criação de uma propriedade calculada.
  • Imprime todos os processos em execução obtidos em ordem -Descending pela propriedade calculada Memória (MB).
Get-Process | Select-Object Name, CPU, @{Name="Memory (MB)";Expression={$_.WorkingSet/1MB}} | Sort-Object -Descending "Memory (MB)"
Creating a calculated property

Excluindo uma Propriedade Específica

Na vida real, os resultados de um comando Select-Object podem conter informações sensíveis, como nomes de usuários e senhas. Como evitar esse risco?

Para evitar que dados sensíveis sejam exibidos na saída, acrescente o parâmetro -ExcludeProperty para excluir uma propriedade especificada da saída.

Execute o seguinte comando para realizar as seguintes tarefas:

  • Obter uma lista de todos os arquivos e pastas (Get-ChildItem) no diretório C:\\ recursivamente (-Recurse).
  • Encaminhe a saída para o cmdlet Select-Object para selecionar as propriedades Name, Length e LastWriteTime.
  • Exclua (-ExcludeProperty) a propriedade FullName da saída. Fazê-lo impede que os caminhos completos sejam exibidos na saída, o que pode conter informações confidenciais.
Get-ChildItem -Path C:\ -Recurse | Select-Object Name, Length, LastWriteTime -ExcludeProperty FullName
Excluding a specified property

Ignorar o Primeiro ou Último Número de Objetos

Ao trabalhar com conjuntos de dados massivos, encontrar os dados necessários pode ser como procurar uma agulha no palheiro. Mas por que desperdiçar tempo peneirando dados irrelevantes?

No PowerShell, o cmdlet Select-Object fornece dois parâmetros que permitem excluir o primeiro (-Skip) e o último (-SkipLast) número de objetos na saída, respectivamente.

Para ver como pular vários objetos de uma saída funciona:

Execute o comando abaixo para obter todos os processos em execução (Get-Process) mas -Skip os primeiros 100 objetos retornados.

Observe que o número de objetos ignorados é baseado em valores inteiros (números positivos e inteiros sem pontos decimais), que neste caso é 100.

Get-Process | Select-Object -Skip 100
Skipping the first 100 objects

Agora, execute o seguinte comando para obter uma lista dos conteúdos do diretório de trabalho (Get-ChildItem) mas pule os últimos (-SkipLast) 100 objetos retornados.

Get-ChildItem | Select-Object -SkipLast 100
Skipping the last 100 objects

Selecionando o Primeiro ou Último Número de Objetos

Além de pular o primeiro e o último número de objetos, você também pode estar interessado em selecionar o primeiro e o último número de objetos. O cmdlet Select-Object suporta esse recurso com os parâmetros First e Last que permitem pular todo o resto para economizar tempo e recursos.

Execute o seguinte comando para obter todos os processos, mas selecione apenas (Select-Object) os -Primeiros 10 objetos retornados.

Get-Process | Select-Object -First 10
Selecting the first 10 objects returned

Agora, execute o comando abaixo para obter todo o conteúdo do diretório de trabalho (Get-ChildItem), mas selecione apenas (Select-Object) os -Últimos 10 objetos retornados.

Get-ChildItem | Select-Object -Last 10
Selecting the last 10 objects returned

Selecionando Objetos Exclusivos

Ao trabalhar com conjuntos de dados maiores, você encontrará valores duplicados que pode querer excluir da saída, o que é típico. Mas a boa coisa com o cmdlet Select-Object é que você não precisa excluir manualmente os valores duplicados.

Anexar o parâmetro -Unique permite selecionar apenas os objetos únicos da saída, simplificando sua análise e melhorando a precisão dos resultados.

Execute o comando abaixo para selecionar (Select-Object) e retornar os -Primeiros 2 objetos.

"1","1","2","3" | Select-Object -First 2

Abaixo, você pode ver dois objetos retornados, independentemente se o outro é um valor duplicado.

Selecting and returning objects with duplicate values

Por fim, execute o seguinte comando para retornar apenas um valor -Unique para cada um dos -Primeiros 2 objetos selecionados.

"1","1","2","3" | Select-Object -First 2 -Unique

Desta vez, você pode ver apenas um retorno dos dois primeiros objetos selecionados, já que o outro é apenas um valor duplicado. Como você percebe, esta saída prova que o parâmetro -Unique é útil para descartar rapidamente quaisquer objetos duplicados em seus dados.

Selecting unique objects exclusively

Conclusão

O PowerShell tende a produzir uma sobrecarga de informações. Mas neste tutorial, você aprendeu como o cmdlet Select-Object do PowerShell ajuda a simplificar seus dados para ver apenas as informações necessárias.

Você viu como diferentes parâmetros permitem selecionar e excluir dados, especialmente valores duplicados de uma saída. Com o cmdlet Select-Object, gerenciar grandes quantidades de dados não precisa ser uma tarefa assustadora.

Neste ponto, você pode refinar rapidamente seus resultados para serem mais adequados para análise e solução de problemas. Mas por que não aprender como formatar suas propriedades calculadas em seguida para melhorar a legibilidade e usabilidade?

Source:
https://adamtheautomator.com/powershell-select-object/