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
作为 MemberName。 使用简化的语法调用该方法时,仅当该对象具有该方法时,才会为管道中的每个对象调用该方法。 因此,可以获得相同的结果,但没有错误。
在下一个示例中,Description
将 参数。 该命令显示由 .Diagnostics.Process 返回的每个 Get-Process
对象的说明。
Get-Process | foreach Description
在此示例中,方法名称GetFiles
将 参数。 该值 .*
传递给 ArgumentList 参数。 使用GetFiles()
搜索模式参数.*
调用该方法以返回的每个 Get-ChildItem
对象。
Get-ChildItem /home -Directory | foreach GetFiles .*