Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Краткое описание
Описывает более простые, более естественные способы написания скриптов для фильтрации коллекций объектов.
Длинное описание
Упрощенный синтаксис, представленный в 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