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

时间:2014-10-06 19:58:39

标签: powershell filtering where-clause

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

PS C:\Users\Neal> get-service | get-member |  {$_.name -eq "Property"}

结果:

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

1 个答案:

答案 0 :(得分:5)

{$_.name -eq "Property"}只是scriptblock。如果您想使用Where-Object来过滤get-member的结果,则需要输入Where-Object

PS C:\Users\Neal> get-service | get-member | Where-Object {$_.name -eq "Property"}

或者您可以使用whereWhere-Object的别名:

PS C:\Users\Neal> get-service | get-member | where {$_.name -eq "Property"}

甚至有一个特殊字符?引用Where-Object

PS C:\Users\Neal> get-service | get-member | ? {$_.name -eq "Property"}

上面给出的所有三个例子都做同样的事情。选择它们只是风格问题。