2016-11-21 20 views
1

這是又一次當我有Invoke-RestMethod問題。希望你能幫助我進步。這一次的問題是,我正在努力獲得ipaddress=10.128.64.44對象的端口值。如何操作invoke-restmethod返回的對象?

運行此代碼:

$user = "admin" 
$pass = 'Password1' 
$ipdir = '10.128.64.44' 
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user, $pass))) 
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" 
$headers.Add('Authorization',('Basic {0}' -f $base64AuthInfo)) 


$uri = 'https://myhostname/MAM/wfservice/workers/' 
$rep = Invoke-restmethod -method get -Header $headers -Uri $uri 

Foreach($worker_port in $rep){ 

     write-output $worker_port.WorkersList.Worker 

} 

返回此在終端:

ActiveJobs   : 
ForbiddenAgentsList : ForbiddenAgentsList 
IPAddress   : 10.128.64.34 
LastMsgTime   : 2016-11-21T00:16:04.2813148+01:00 
Name    : Worker02 
NumOfSlots   : NumOfSlots 
Port    : 52268 
SelectedAgentsList : SelectedAgentsList 
Status    : Active 
Version    : 2.29.3740.0 
Iteration   : 2016/2 SP3 (87) 

ActiveJobs   : 
ForbiddenAgentsList : ForbiddenAgentsList 
IPAddress   : 10.128.64.44 
LastMsgTime   : 2016-11-21T00:16:04.2813148+01:00 
Name    : Worker05 
NumOfSlots   : NumOfSlots 
Port    : 53246 
SelectedAgentsList : SelectedAgentsList 
Status    : Active 
Version    : 2.29.3740.0 
Iteration   : 2016/2 SP3 (87) 

我想過運行這樣得到一個端口:

if (($worker_port.WorkersList.Worker.IPaddress) -eq '10.128.64.44'){Write-Output $worker_port.Worker.Port } 
     else {write-host "ouch!""} 

......但看起來這不是這樣。它返回兩個端口:

53246 
52268 

有人知道這裏有什麼問題嗎?我如何解析它得到的端口號爲10.128.64.44只有。任何建議是高度讚賞。

+0

試試這個:'$ rep.WorkersList.Worker |其中IPAddress -eq '10 .128.64.44'|選擇展開端口' –

+0

令人難以置信。這是@MartinBrandl的正確答案。幹得好,很多很多,謝謝!你想把它作爲答案嗎?我想你會得到一些積分? – Okrx

+0

當然,我會將其作爲答案發布。謝謝。 –

回答

1

使用Where-Object cmdlet來篩選基於期望IPAddress對象,只需選擇Port

$rep.WorkersList.Worker | Where IPAddress -eq '10.128.64.44' | Select -expand Port 
+1

再次感謝@MartinBrandl提供的正確答案。 – Okrx