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 }