Обычно я не нуждаюсь (), но в этом случае они обязательны, но почему?
(...)
принудительное перечисление элементов коллекции, выводимых вложенной командой в конвейер.
Это не должно быть необходимым, но в вашем случае, потому что Get-WinUserLanguageList
демонстрирует нестандартное поведение : вместо вывода нескольких конвейерных объектов один за другим в конвейер, выдает всю коллекцию [1] как один объект вывода .
- Без включающего
(...)
, команда в следующем сегменте конвейера - Where-Object
в вашем случае - поэтомуполучает только один ввод - всю коллекцию - и работает с it , а не с элементами один за другим.
Поскольку сам объект коллекции не имеет свойства LanguageType
, ничегосовпадения, и вы не получите выходных данных. [2]
Как упомянуто вЗначит, вы можете направить вывод команды в Get-Member
, чтобы увидеть (различные) типы ее выходных объектов;для стандартных командлетов вы увидите типы вывода отдельных объектов , а не тип коллекции.
[1] В частности, коллекция представляет собой общий списоктипа [System.Collections.Generic.List[Microsoft.InternationalSettings.Commands.WinUserLanguage]]
.
[2] Вы используете упрощенный синтаксис оператора сравнения PSv3 + в своей команде - Where-Object LanguageType -eq en-US
- вместо более подробного, но более гибкий синтаксис блока скриптов - Where-Object { $_.LanguageType -eq 'en-US' }
.Если бы вы использовали последний вариант, ваша команда случайно вернула бы всю коллекцию и, таким образом, эффективно все языки.Причина в том, что только синтаксис блока сценариев применяет перечисление членов к входной коллекции, что означает, что даже если $_
не имеет свойства .LanguageTag
, элементы do, и их значения возвращаются в виде массива .С массивом в качестве LHS -eq
действует как фильтр, и, пока en-US
составляет среди возвращаемых значений, операция -eq
будет по-прежнему считаться $true
, вызывая вводобъект - вся коллекция - для прохождения.
Это удивительное несоответствие в поведении между двумя, казалось бы, эквивалентными синтаксическими формами обсуждается в этом выпуске GitHub .