comportamento do powershell do select

1

Alguém pode explicar, por que isso (powershell 2.0)

$wmi=Get-WmiObject Win32_UserProfile
$wmi|select *;
$wmi|select SID;
$wmi|select LocalPath;

fornece os resultados esperados (selecionou tudo, depois selecionou SIDs, depois LocalPaths), enquanto esses dois fornecem

$wmi=Get-WmiObject Win32_UserProfile
$wmi|select LocalPath;
$wmi|select SID;
$wmi|select LocalPath;

LocalPaths, nada, LocalPaths

Get-WmiObject Win32_UserProfile|select SID;
"separator";
gwmi win32_UserProfile|select LocalPath;
"separator"
gwmi Win32_UserAccount|select *;

SIDs, nada, SIDs novamente Existe apenas uma instância de select?

    
por Denwerko 07.02.2013 / 18:54

1 resposta

0

Você está correndo em um caso de borda estranha de como funciona a formatação de saída no PowerShell. Por favor, veja esta descrição do problema de Jeffrey Snover.

Eu só posso reproduzir esse comportamento ao executar os comandos todos em uma linha como:

$wmi=Get-WmiObject Win32_UserProfile; $wmi | select localpath;$wmi|select SID; $wmi | select localpath

Isso deve ser (especular aqui) porque toda a linha é submetida ao Out-Default como um lote; se você executar cada comando individualmente, não verá esse comportamento.

Mas, com uma chamada para Out-Default, ele primeiro vê o Selected.System.Management.ManagementObject com uma propriedade, 'LocalPath', para criar uma tabela com uma coluna, para 'LocalPath'. Depois de obter alguns Selected.System.ManagementObjects com uma propriedade 'SID', eles aparecem na tabela como nulos, porque sua propriedade 'LocalPath' (a única Format-Table conhecida para exibir) é nula.

Este problema não acontece no primeiro exemplo porque o 'select *' faz com que Out-Default escolha Format-List como o formatador, que é muito menos com perdas.

Espero que isso ajude - a postagem do blog que eu vinculei explica isso muito bem.

    
por 11.03.2013 / 19:00

Tags