从管道中删除对象 (Where-Object)Removing Objects from the Pipeline (Where-Object)

    借助 Windows PowerShell 中的 cmdlet,可以测试管道中的每个对象,并沿管道仅传递满足特定测试条件的对象。将从管道中删除未通过测试的对象。测试条件以 FilterScript 参数值的形式提供。

    FilterScript 值是计算结果为 True 或 False 的脚本块,即由大括号 {} 括起来的一个或多个 Windows PowerShell 命令。这些脚本块可能非常简单,但是创建它们需要了解有关 Windows PowerShell 的另一个概念,即比较运算符。比较运算符比较其每一侧显示的项。比较运算符以“-”字符开头,后跟名称。基本比较运算符适用于几乎任何类型的对象。更高级的比较运算符可能仅适用于文本或数组。

    备注

    默认情况下,在处理文本时,Windows PowerShell 比较运算符不区分大小写。

    Where-Object 脚本块使用特殊变量 来指代管道中的当前对象。以下是其工作原理示例。如果你有一个数字列表,且希望仅返回小于 3 的数字,则可使用 Where-Object 通过键入以下内容来筛选数字:

    由于 指代当前管道对象,因此可以访问它的属性进行测试。

    例如,我们可以看看 WMI 中的 Win32_SystemDriver 类。一个特定的系统上可能有数百个系统驱动程序,但是你可能只对特定一些系统驱动程序感兴趣,例如那些当前正在运行的程序。如果你使用 Get-Member 查看 Win32_SystemDriver 成员(Get-WmiObject -Class Win32_SystemDriver | Get-Member -MemberType 属性),你将发现相关属性为 State,并且在驱动程序运行时,它的值为“Running”。你可以筛选系统驱动程序,通过键入以下内容仅选择正在运行的驱动程序:

    这仍会生成一个较长的列表。你可能还希望进行筛选,以通过测试 StartMode 值仅选择自动启动的驱动程序集:

    上面的命令包含两个 Where-Object 元素,但是可以使用 -and 逻辑运算符将其表示为一个 Where-Object 元素,如下所示:

    下表中列出了标准逻辑运算符。

    逻辑运算符含义示例(返回 True)
    -andLogical and;如果两侧都为 True,则返回 True(1 -eq 1) -and (2 -eq 2)
    -orLogical or;如果某一侧为 True,则返回 True(1 -eq 1) -or (1 -eq 2)
    -notLogical not;反转 True 和 False-not (1 -eq 2)
    !Logical not;反转 True 和 False!(1 -eq 2)