O cmdlet Select-Object do PowerShell permite que você escolha objetos e propriedades de forma fácil a partir de um grupo de objetos de entrada. 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 ExpandProperty do PowerShell (-ExpandProperty
) neste tutorial conduzido por exemplos.
Pré-requisitos
Este tutorial será uma demonstração prática. Se você deseja acompanhar, tudo 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 Propriedade de Objetos com o Expand Property do PowerShell
Faça login em 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 em 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, conforme mostrado abaixo.
Agora você deve ver uma única coluna de objetos representando uma lista de nomes de serviços em 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 cmdlet 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 a opção -Property produza o que parece ser uma lista de strings, essas são as listas Selecionadas de objetos System.ServiceProcess.ServiceController.

3. Substitua o cmdlet Get-Members por mkdir para criar automaticamente uma pasta para cada serviço. A opção -first 5 limita o número de objetos a serem retornados. Por sua vez, a função mkdir criará apenas 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 conforme no trecho abaixo. Ative a opção -Verbose para mostrar saída detalhada no seu terminal.
O cmdlet rmdir espera strings e não consegue lidar com a representação de objetos ServiceController em hashtable. Sua tentativa deve falhar com vários erros, como na captura de tela abaixo.

5. Altere a chave -Property para a chave -ExpandProperty, como no trecho a seguir. Isso permite obter o valor de uma propriedade como uma string quando tudo 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 forma.
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.
A chave PowerShell Expand Property só pode expandir uma propriedade de cada vez, ao contrário da chave Property, que pode selecionar mais de uma propriedade simultaneamente.
Execute a 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, similar à captura de tela abaixo.

Expandindo uma Propriedade de Coleção com o Comando Expand Property do PowerShell
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, conforme mostrado abaixo. Note as duplicatas na lista devido à concatenação dos resultados da expansão de DependentServices
.

Combinando Propriedade com o Comando Expand Property do PowerShell para Saída Categorizada
Agora você tem uma lista de serviços dependentes, mas como saber em qual serviço 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
.
Já que os serviços dependentes já têm uma propriedade Name
, a etapa de categorização falha, conforme mostrado abaixo.
O erro abaixo informa que a lista inicial de serviços (em $testServices) já possui uma propriedade Name conflitante com uma propriedade Name na propriedade DependentServices expandida.

Um contorno é criar Propriedades Calculadas para renomear a propriedade identificadora da seguinte forma.
Salve a saída do comando anterior modificada para especificar uma propriedade calculada chamada Depends On como a propriedade identificadora em uma variável chamada $depServ. Depends On conterá o valor do Nome para cada serviço em $testService.
O nome da propriedade, Depends on
, 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 do serviço dependente Name
, Status
e Depends On
.
Agora você pode identificar 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 de objetos exibir, especialmente na saída tabular, e a saída do switch -ExpandProperty
pode ter a mesma limitação. Você pode mostrar as propriedades expandidas em uma lista como solução alternativa.
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 tela deve se assemelhar à captura de tela abaixo, automaticamente truncada para exibir apenas três propriedades.

Encaminhe os objetos para o cmdlet Format-List
para visualizar todos os valores dos objetos do módulo em uma lista mais gerenciável.
Conforme 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/