about_Simplified_Syntax
Краткое описание
Описывает более простые, более естественные способы фильтрации скриптов для коллекций объектов.
Подробное описание
Упрощенный синтаксис, представленный в 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
метода передается в качестве аргумента для параметра ForEach-Object
MemberName . При вызове метода с помощью упрощенного синтаксиса метод вызывается для каждого объекта в конвейере, только если этот объект имеет этот метод. Таким образом, вы получаете те же результаты, но без ошибок.
В следующем примере Description
передается параметру ForEach-Object
MemberName объекта . Команда отображает описание каждого объекта System.Diagnostics.Process , возвращаемого Get-Process
.
Get-Process | foreach Description
В этом примере имя GetFiles
метода передается параметру ForEach-Object
MemberName команды. Значение .*
передается параметру ArgumentList . Метод GetFiles()
вызывается с параметром .*
шаблона поиска для каждого объекта System.IO.DirectoryInfo , возвращаемого Get-ChildItem
.
Get-ChildItem /home -Directory | foreach GetFiles .*
См. также
PowerShell