about_Simplified_Syntax

简短说明

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

长说明

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

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

考虑以下两个调用:

标准语法

dir Cert:\LocalMachine\Root | where { $_.FriendlyName -eq 'Verisign' }
dir Cert:\ -Recurse | foreach { $_.GetKeyAlgorithm() }

简化语法

在简化语法下,作用于集合中对象成员的比较运算符被视为参数。 可以对集合中的对象调用方法,而无需引用脚本块中的自动变量 $_。 将以下两个调用与前面示例中的调用进行比较:

dir Cert:\LocalMachine\Root | where FriendlyName -eq 'Verisign'
dir Cert:\ -Recurse | foreach GetKeyAlgorithm

虽然这两种语法都有效,但简化语法会返回结果,而无需引用脚本块中的自动变量 $_。 方法名称 GetKeyAlgorithm 被视为 ForEach-Object 的参数。 第二个命令返回相同的结果但不会出现错误,因为简化语法不会尝试返回指定参数不适用的项的结果。

在此示例中,Process 属性 Description 作为成员名称参数传递给 ForEach-Object 命令。 结果是活动进程的说明。

Get-Process | foreach Description

在此示例中,DirectoryInfo 方法 GetFiles 作为 ForEach-Object 命令的成员名称参数传递。 使用搜索模式参数 .* 调用该方法。 结果是用户主目录中所有 Unix 风格隐藏文件的 FileInfo 记录。

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

另请参阅