about_Simplified_Syntax
简短说明
介绍为对象集合编写筛选器脚本的更简单且更自然的语言方法。
长说明
Windows PowerShell 3.0 中引入的简化语法使你无需使用脚本块即可生成一些筛选器命令。 简化的语法更类似于自然语言,主要用于通过管道传递到命令Where-Object
及其相应别名where
的对象集合中foreach
ForEach-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
由于 Property 和 MemberName 参数是位置参数,因此可以从命令中省略它们。 使用别名可以进一步简化命令:
dir Cert:\LocalMachine\Root | Where FriendlyName -EQ 'Verisign'
dir Cert:\ -Recurse | ForEach GetKeyAlgorithm
虽然这两种语法都有效,但简化语法会返回结果,而无需引用脚本块中的自动变量 $_
。 简化的语法更像是自然语言语句,更易于理解。
方法名称GetKeyAlgorithm
作为 MemberName 参数的参数ForEach-Object
传递。 使用简化的语法调用该方法时,仅当该对象具有该方法时,才会为管道中的每个对象调用该方法。 因此,可以获得相同的结果,但没有错误。
在下一个示例中,Description
将传递给 . 的 ForEach-Object
MemberName 参数。 该命令显示由 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 .*
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈