Powershell - использование предложения WHERE после псевдонима @{name, ничего не возвращающего

Могу ли я не использовать ГДЕ в канале после псевдонима @{name?

Я должен использовать пользовательские заголовки столбцов в своем выводе, поэтому я использую синтаксис @{name. Позже в конвейере сортировка работает с использованием псевдонима, который я ему дал, а предложение WHERE - нет. Я пытался вернуться к исходному $_. имя переменной, но они, похоже, тоже не работают. Когда я убираю предложение WHERE, я получаю вывод с псевдонимами.

ПРИМЕР без @ {псевдоним имени и ГДЕ работает

PS C:\> Get-WmiObject Win32_operatingsystem | select version,BuildNUmber | where { $_.buildnumber -eq 3790} |  sort version

version                                                                                                BuildNUmber                                                                                           
-------                                                                                                -----------                                                                                           
5.2.3790                                                                                                   3790                 

ПРИМЕР с псевдонимом и ГДЕ не работает

Get-WmiObject Win32_operatingsystem | select @{Name="Ver";Expression={$_.version}}, @{Name="Build";Expression={$_.BuildNUmber}} | where { "build" -eq 3790} |  sort "ver" 

ПРИМЕР с псевдонимом и НЕТ ГДЕ, получает вывод. SORT использует псевдоним и работает так же.

PS C:\> Get-WmiObject Win32_operatingsystem | select @{Name="Ver";Expression={$_.version}}, @{Name="Build";Expression={$_.BuildNUmber}} |  sort "ver" 

Ver                                                                                                    Build                                                                                                 
---                                                                                                    -----                                                                                                 
5.2.3790                                                                                               3790                                                                                                  

Так что в идеале я хотел бы иметь возможность использовать @{name с предложением WHERE..

1 ответ

Решение

У вас есть синтаксический недостаток:

where { "build" -eq 3790} 

Вышеприведенное утверждение функционально совпадает с:

where { $false }

Который не вернул бы абсолютно ничего, независимо от того, что вы передали ему.

Измените это на

where { $_.Build -eq 3790 }
Другие вопросы по тегам