当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 关于简化语法

作者:精品下载站 日期:2024-12-14 02:18:18 浏览:12 分类:玩电脑

关于简化语法


简短描述

描述为对象集合编写过滤器脚本的更简单、更自然的语言方法。

详细描述

Windows PowerShell 3.0 中引入的简化语法使您无需使用脚本块即可构建一些筛选器命令。简化的语法更接近自然语言,主要用于通过管道传输到命令 Where-ObjectForEach-Object 或其相应别名 的对象集合。其中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

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

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

虽然这两种语法都有效,但简化的语法返回结果而不引用脚本块内的自动变量 $_。简化的语法读起来更像自然语言语句,并且更容易理解。

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

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

Get-Process | foreach Description

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

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

参见

  • about_比较_运算符
  • about_Foreach
  • Foreach-Object
  • Where-Object

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯