Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Краткое описание
Описывает более простые, более естественные способы написания скриптов для фильтрации коллекций объектов.
Длинное описание
Упрощенный синтаксис, представленный в Windows PowerShell 3.0, позволяет создавать некоторые команды фильтра без использования блокировок скриптов. Упрощенный синтаксис более тесно похож на естественный язык и в основном полезен в коллекциях объектов, которые передаются в команды Where-Object и ForEach-Object или соответствующие псевдонимы where и foreach.
Метод можно использовать для членов коллекции (чаще всего массива) без ссылки на автоматическую переменную $_ внутри скрипта.
Рассмотрим следующие два вызова:
Стандартный синтаксис
Get-ChildItem Cert:\LocalMachine\Root |
Where-Object -FilterScript { $_.FriendlyName -eq 'Verisign' }
Get-ChildItem Cert:\ -Recurse |
ForEach-Object -FilterScript { $_.GetKeyAlgorithm() }
Заметка
Во второй команде метод GetKeyAlgorithm вызывается для каждого объекта в коллекции. Если объект, полученный из конвейера, не имеет метода GetKeyAlgorithm, команда создает ошибку.
Упрощенный синтаксис
В упрощенном синтаксисе операторы сравнения, работающие над элементами объектов в коллекции, реализуются в качестве параметров. Кроме того, можно вызвать метод для объектов в коллекции без ссылки на автоматическую переменную $_ внутри скрипта. Сравните следующие два вызова со стандартными примерами синтаксиса:
Get-ChildItem Cert:\LocalMachine\Root |
Where-Object -Property FriendlyName -EQ 'Verisign'
Get-ChildItem Cert:\ -Recurse |
ForEach-Object -MemberName GetKeyAlgorithm
Поскольку параметры Property и MemberName являются позиционными, их можно опустить в команде. С помощью псевдонимов можно упростить следующие команды:
dir Cert:\LocalMachine\Root | where FriendlyName -EQ 'Verisign'
dir Cert:\ -Recurse | foreach GetKeyAlgorithm
Хотя оба синтаксиса работают, упрощенный синтаксис возвращает результаты без ссылки на автоматическую переменную $_ внутри скриптблока. Упрощенный синтаксис больше похож на предложение на естественном языке и его легче понять.
Имя метода GetKeyAlgorithm передается в качестве аргумента для параметра MemberNameForEach-Object. При вызове метода с помощью упрощенного синтаксиса метод вызывается для каждого объекта в конвейере, только если этот объект имеет этот метод. Таким образом, вы получаете те же результаты, но без ошибок.
В следующем примере Description передается параметру MemberNameForEach-Object. Команда отображает описание каждого объекта System.Diagnostics.Process, возвращаемого Get-Process.
Get-Process | foreach Description
В этом примере имя метода GetFiles передается в параметр MemberName команды ForEach-Object. Значение .* передается параметру ArgumentList. Метод GetFiles() вызывается с параметром шаблона поиска .* для каждого объекта System.IO.DirectoryInfo, возвращаемого Get-ChildItem.
Get-ChildItem /home -Directory | foreach GetFiles .*
См. также
PowerShell