我正在编写一个使用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
答案 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