2014-10-06 62 views
2

可以解釋爲什麼哲學上這不起作用? 就像一個學習示例,我想查看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 

回答

5

{$_.name -eq "Property"}只是一個scriptblock。如果你想使用Where-Object過濾的get-member的結果,你需要輸入Where-Object

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

,或者您可以使用where,這是Where-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"} 

上面給出的三個例子都是一樣的。選擇它們只是一個風格問題。

+0

感謝,有時候,例如,僅僅在第一個表達式上,你實際上可以忽略單詞「where」 – NealWalters 2014-10-06 20:03:56

+0

或只是'Get-Member -MemberType Properties'而不用管道連接到Where – TheMadTechnician 2014-10-06 20:04:34

+0

那太好了! (在我發佈的例子中,我的意思是$ _。MemberType不是$ _。Name)。 – NealWalters 2014-10-06 20:05:27

相關問題