简单示例:表达式仅允许作为管道的第一个元素

Nea*_*ers 2 powershell filtering where-clause

可以解释为什么哲学上这不起作用?就像一个学习示例一样,我希望看到get-service cmdlet的属性,而不需要事件或方法.

PS C:\Users\Neal> get-service | get-member |  {$_.name -eq "Property"}
Run Code Online (Sandbox Code Playgroud)

结果:

At line:1 char:29
+ get-service | get-member |  {$_.name -eq "Property"}
+                             ~~~~~~~~~~~~~~~~~~~~~~~~
Expressions are only allowed as the first element of a pipeline.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ExpressionsMustBeFirstInPipeline
Run Code Online (Sandbox Code Playgroud)

iCo*_*dez 5

{$_.name -eq "Property"}只是一个脚本块.如果要用于Where-Object过滤结果get-member,则需要键入Where-Object:

PS C:\Users\Neal> get-service | get-member | Where-Object {$_.name -eq "Property"}
Run Code Online (Sandbox Code Playgroud)

或者您可以使用where,这是别名Where-Object:

PS C:\Users\Neal> get-service | get-member | where {$_.name -eq "Property"}
Run Code Online (Sandbox Code Playgroud)

甚至有一个特殊的字符?指的是Where-Object:

PS C:\Users\Neal> get-service | get-member | ? {$_.name -eq "Property"}
Run Code Online (Sandbox Code Playgroud)

上面给出的所有三个例子都做同样的事情.在它们之间进行选择只是一种风格问题.