O cmdlet Select-Object do PowerShell permite que você escolha objetos e propriedades de um grupo de objetos de entrada de forma transparente. Mas às vezes você precisa saber mais. O ExpandProperty é um interruptor para o Select-Object que expande detalhes sobre uma propriedade específica.
Descubra o poder do interruptor Expand Property (-ExpandProperty
) do PowerShell neste tutorial conduzido por exemplos.
Pré-requisitos
Este tutorial será uma demonstração prática. Se você quiser acompanhar, tudo o que você precisa é de uma Máquina Windows com PowerShell 5.1 ou superior. Este artigo usa uma máquina Windows 10 com PowerShell 5.1.
Extraindo Valores de Objetos de Propriedade com o Expand Property do PowerShell
Faça login na sua máquina Windows e abra um terminal do PowerShell. Nesta seção, você se familiarizará com o cmdlet Select-Object
e seu interruptor ExpandProperty
.
1. Execute o cmdlet Get-Service para obter uma lista de todos os serviços no seu sistema. Encaminhe a saída para o cmdlet Select-Object para selecionar e exibir apenas a propriedade de nome de cada objeto de serviço, como mostrado abaixo.
Agora você deve ver uma única coluna de objetos representando uma lista de nomes de serviços no seu sistema, como na captura de tela truncada abaixo.

2. Execute o cmdlet Get-Member no final do pipeline anterior para confirmar o tipo de objetos que o select-object retorna conforme abaixo. Saber o tipo de objeto ajuda a escrever funções ou cmdlets para estender seus pipelines.
Consulte a captura de tela abaixo e você notará que, embora o switch -Property gere o que parece ser uma lista de strings, essas são a lista Selecionada de objetos System.ServiceProcess.ServiceController.

3. Substitua o cmdlet Get-Members por mkdir para criar automaticamente uma pasta para cada serviço. O switch -first 5 limita o número de objetos a retornar. Por sua vez, a função mkdir só criará cinco pastas com base nos objetos no pipeline.
Você deverá ver uma saída semelhante à captura de tela abaixo, indicando a tentativa bem-sucedida.

4. Remova as pastas substituindo mkdir por rmdir como no trecho abaixo. Ative o switch -Verbose para mostrar uma saída detalhada no seu terminal.
O cmdlet rmdir espera strings e não consegue lidar com a representação hashtable dos objetos ServiceController. Sua tentativa deve falhar com vários erros, como na captura de tela abaixo.

5. Altere o interruptor -Property para o interruptor -ExpandProperty conforme no trecho a seguir. Fazendo isso permite que você obtenha o valor de uma propriedade como uma string quando tudo o que você precisa é uma string.
Combinado com rmdir, você deve ver sua tentativa de remover automaticamente as pastas ter sucesso sem erros, como na captura de tela abaixo.

Criando um Conjunto de Objetos Selecionados com Propriedades Específicas
Para encurtar os trechos de código nas seções, crie uma variável para os primeiros 20 serviços em sua máquina da seguinte maneira.
Execute o comando Get-Service
, selecione os primeiros 20
objetos via cmdlet Select-Object
e armazene os objetos em uma variável chamada $testServices
. Selecione apenas as propriedades Name
, Status
e DependentServices
da seguinte forma.
O interruptor PowerShell Expand Property só pode expandir uma propriedade de cada vez, ao contrário do interruptor Property, que pode selecionar mais de uma propriedade simultaneamente.
Execute o nome da variável, $testServices
, para visualizar a estrutura de seu conteúdo.
Você deverá ver uma tabela exibindo as propriedades dos serviços que você selecionou, semelhante à captura de tela abaixo.

Expandindo uma Propriedade de Coleção com o PowerShell Expand Property
A PowerShell object can have properties that are collections of objects, also known as collection properties. In this section, you will learn how to use PowerShell Expand Property to expand a collection property to view its members’ properties.
Execute o cmdlet Select-Object
na variável $testServices
e expanda a propriedade DependentServices
de cada serviço.
Como DependentServices
é uma propriedade de coleção, a saída será uma lista dos serviços em todas as coleções populadas, como mostrado abaixo. Observe as duplicatas na lista devido à concatenação dos resultados da propriedade expandida DependentServices
.

Combinando Propriedades com PowerShell Expand Property para Saída Categorizada
Agora você tem uma lista de serviços dependentes, mas como saber em quais serviços eles dependem? Nesta seção, você aprenderá a usar o switch -Property
para categorizar uma propriedade expandida.
Execute o comando abaixo para categorizar as propriedades DependentServices
por Name
.
Como os serviços dependentes já possuem uma propriedade Name
, a etapa de categorização falha, como mostrado abaixo.
O erro abaixo indica que a lista inicial de serviços (em $testServices) já possui uma propriedade Name conflitante com uma propriedade Name na propriedade expandida DependentServices.

Um contorno é criar Propriedades Calculadas para renomear a propriedade do identificador da seguinte forma.
Salve a saída do comando anterior modificado para especificar uma propriedade calculada chamada Depends On como a propriedade do identificador em uma variável chamada $depServ. Depends On conterá o valor do Nome para cada serviço em $testService.
O nome da propriedade, Depende de
, foi escolhido arbitrariamente neste tutorial e pode ser qualquer expressão de sua escolha.
Passe o objeto em $depServ
através do Select-Object
para selecionar as propriedades de serviço dependentes Name
, Status
e Depende de
.
Agora você pode ver quais serviços dependem dos serviços em $testServices
, como mostrado abaixo.

Combinando Format-List com PowerShell Expand Property para Verbosidade
O PowerShell pode limitar quais propriedades do objeto exibir, especialmente na saída tabular, e a saída do switch -ExpandProperty
pode ter o mesmo problema. Como solução alternativa, você pode mostrar as propriedades expandidas em uma lista.
Execute o cmdlet Get-Process
abaixo para recuperar todos os módulos
que o processo explorer
usa. Ative o switch -ExpandProperty
para exibir as propriedades dos módulos.
A saída na sua tela deve se assemelhar à captura de tela a seguir, automaticamente truncada para exibir apenas três propriedades.

Passe os objetos para o cmdlet Format-List
para visualizar todos os valores dos objetos do módulo em uma lista mais gerenciável.
Como mostrado abaixo, a saída lista todas as propriedades e seus valores. Você pode ainda salvar os dados em um arquivo ou passá-los para outro cmdlet para processamento adicional.

Conclusão
Ao chegar até aqui com sucesso, você viu como se beneficiar do switch de Propriedade Expandida do PowerShell (-ExpandProperty) do cmdlet Select-Object. O PowerShell oferece uma série de cmdlets úteis para muitas tarefas comuns. Você pode ampliar seu novo conhecimento aprendendo como exibir arquivos rapidamente com o PowerShell Cat.
Source:
https://adamtheautomator.com/powershell-expand-property/