2016-08-19 53 views
5

我想了解如何通過pipe |一個對象並調用其上的屬性或方法。調用管道對象上的屬性/方法

Ex: 
$a = Get-Item Registry::HKLM\SOFTWARE\WOW6432Node\Microsoft\Test\abc\ 
$a.GetSomething() //calls the method 
(Get-Item Registry::HKLM\SOFTWARE\WOW6432Node\Microsoft\Test\abc\).GetSomething() //calls the method 

我可以管Get-Iteminvoke properties/methods它的輸出?

Get-Item Registry::HKLM\SOFTWARE\WOW6432Node\Microsoft\Test\abc\ | call GetSomething() 

回答

1

排序答案是沒有。你不能使用Pipeline調用這樣的方法。但是你可以圍繞你的Get-Item調用括號並調用它:

(Get-Item Registry::HKLM\SOFTWARE\WOW6432Node\Microsoft\Test\abc\).GetSomething() 

如果你不希望這樣做,你可以濫用Select-Object的cmdlet:

Get-Item Registry::HKLM\SOFTWARE\WOW6432Node\Microsoft\Test\abc\ | select { $_.GetSomething() } 
+1

這是可悲的。想象一下,我不確定「Reg key」或「Folder」是否存在。我只是繼續使用'tab',這樣我就可以使用'auto-suggestion'來放置我想要的地方,並且現在調用一些東西,突然之間我必須從頭開始包裝它才能調用方法。這真的很痛 – Reddy

+1

規範的方式是'ForEach-Object'。它可以使用別名'%'寫成非常簡潔:'... | %{$ _。method()}' –

0

這是不可能不寫這樣做的東西。這會讓人感到困惑。

像這樣。

filter Invoke-Method { 
    param(
     [String]$Method, 

     [Object[]]$ArgumentList 
    ) 

    $_.GetType().InvokeMember(
     $Method.Trim(), 
     ([System.Reflection.BindingFlags]'InvokeMethod'), 
     $null, 
     $_, 
     $ArgumentList 
    ) 
} 
"qwerty" | Invoke-Method Replace 'q', 'z' 

屬性是在容易已經有一個命令來做到這一點:

(...).GetSomething() | Select-Object Property1, Property2