Поделиться через


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-ObjectMemberName . При вызове метода с помощью упрощенного синтаксиса метод вызывается для каждого объекта в конвейере, только если этот объект имеет этот метод. Таким образом, вы получаете те же результаты, но без ошибок.

В следующем примере Description передается параметру ForEach-ObjectMemberName объекта . Команда отображает описание каждого объекта 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 .*

См. также