about_Simplified_Syntax

简短说明

介绍为对象集合编写筛选器脚本的更简单且更自然的语言方法。

长说明

Windows PowerShell 3.0 中引入的简化语法使你无需使用脚本块即可生成一些筛选器命令。 简化的语法更类似于自然语言,主要用于通过管道传递到命令Where-Object及其相应别名where的对象集合中foreachForEach-Object

可以对集合(最常见的是数组)的成员使用方法,而无需引用脚本块中的自动变量 $_

考虑以下两个调用:

标准语法

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

由于 PropertyMemberName 参数是位置参数,因此可以从命令中省略它们。 使用别名可以进一步简化命令:

dir Cert:\LocalMachine\Root | Where FriendlyName -EQ 'Verisign'
dir Cert:\ -Recurse | ForEach GetKeyAlgorithm

虽然这两种语法都有效,但简化语法会返回结果,而无需引用脚本块中的自动变量 $_。 简化的语法更像是自然语言语句,更易于理解。

方法名称GetKeyAlgorithm作为 MemberName 参数的参数ForEach-Object传递。 使用简化的语法调用该方法时,仅当该对象具有该方法时,才会为管道中的每个对象调用该方法。 因此,可以获得相同的结果,但没有错误。

在下一个示例中,Description传递给 . 的 ForEach-ObjectMemberName 参数。 该命令显示由 Get-Process.Diagnostics.Process 返回的每个 System.Diagnostics.Process 对象的说明。

Get-Process | foreach Description

在此示例中,方法名称GetFiles传递给命令的 ForEach-Object MemberName 参数。 该值 .* 传递给 ArgumentList 参数。 使用GetFiles()搜索模式参数.*调用该方法以返回Get-ChildItem的每个 System.IO.DirectoryInfo 对象。

Get-ChildItem /home -Directory | foreach GetFiles .*

另请参阅