PowerShell Invoke-RestMethod匹配

时间:2014-01-22 23:25:25

标签: powershell-v3.0

我正在编写一个使用Invoke-RestMethod调用API的PowerShell脚本。以下是命令的输出。我期待只返回一个与运行PowerShell脚本的服务器的当前主机名匹配的行,然后从id =字段中取出数字并将其放入变量中。

非常感谢任何帮助。

命令:

Invoke-RestMethod -Uri http://xxx.xxx.xxx.xxx/api/hosts -Headers @ {“Authorization”=“Basic”+ [System.Convert] :: ToBase64String([System.Text.Encoding] :: UTF8.GetBytes($ username +“ :“+ $ password”)} -Method GET

输出:

宿主

@ {名称= dns01.aws.local; ID = 4; hostgroup_id = 3; operatingsystem_id = 3}
@ {名称=双赢9d3nna26g9c.aws.local; ID = 56; hostgroup_id = 5; operatingsystem_id = 2}

更新:

我越来越接近下面的命令将返回带有计算机名称的行,并仅过滤名称和ID。现在我只需要将id值转换为变量,我很难搞清楚,任何帮助都会受到赞赏。

(Invoke-RestMethod -Uri http://xxx.xxx.xxx.xxx/api/hosts -Headers @ {“Authorization”=“Basic”+ [System.Convert] :: ToBase64String([System.Text.Encoding] :: UTF8.GetBytes($ username + “:”+ $密码))})。host |选择对象名称,id | Where-Object name -Like“ $ env:COMPUTERNAME

输出:

名称编号
------
win-9d3nna26g9c.aws.ths 56

2 个答案:

答案 0 :(得分:0)

我没有你的意见,所以我无法100%确定这会完美运作,但我相信你会在以后:

Invoke-RestMethod ... |
    ConvertFrom-Json | 
    Where-Object { $_.Name -eq $env:ComputerName } |
    Select-Object -ExpandProperty ID

答案 1 :(得分:0)

以下是我能够完成所需工作的最终代码。

$ foremanhost =(Invoke-RestMethod -Uri http://xxx.xxx.xxx.xxx/api/hosts -Headers @ {“Authorization”=“Basic”+ [System.Convert] :: ToBase64String([System.Text.Encoding] :: UTF8.GetBytes ($ username +“:”+ $ password))})。host |选择对象名称,id | Where-Object name -Like“ $ env:COMPUTERNAME ”                     $ foreman =($ foremanhost | Select-Object -Expand id)                     Invoke-WebRequest -Uri http://xxx.xxx.xxx.xxx/api/hosts/ $ foreman -Headers @ {“Authorization”=“Basic”+ [System.Convert] :: ToBase64String([System.Text.Encoding] :: UTF8.GetBytes($ username +“: “+ $ password))} -Body $ json -ContentType application / json -Method PUT