【问题标题】:PowerShell Invoke-RestMethod MatchPowerShell Invoke-RestMethod 匹配
【发布时间】:2014-01-22 23:25:25
【问题描述】:

我正在寻找使用 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 ))} -方法 GET

输出:

主机

@{name=dns01.aws.local; id=4;主机组 ID=3;操作系统 ID=3}
@{name=win-9d3nna26g9c.aws.local;身份证=56;主机组_id=5;操作系统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+": "+$password ))}).host |选择对象名称,id | Where-对象名称 -Like "$env:COMPUTERNAME"

输出:

姓名ID
---- --
win-9d3nna26g9c.aws.ths 56

【问题讨论】:

    标签: powershell-3.0


    【解决方案1】:

    我没有你的意见,所以我不能 100% 确定这会完美运行,但我相信你会追求:

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

    【讨论】:

    • 看起来唯一的对象是主机。所以如果我设置 {$_.host -eq $env:ComputerName} 什么都不会回来。如果我设置 Where-Object { $_.host -like "$env:ComputerName"} 那么所有行都会像上面的输出一样返回。也许我们只需要让我们的正则表达式正确。再次感谢!!!
    • 请记住,我这样做是盲目的。将其余的 invoke-restmethod 和 conertto-json 分配到一个变量中,然后查找您的数据。
    • 我刚刚在上面进行了编辑,在那里我只能得到带有计算机名称的行,并且只显示计算机名称和 id 字段。现在我需要帮助尝试将该 ID 值转换为变量。
    【解决方案2】:

    这是我能够完成的最终代码。

    $foremanhost = (Invoke-RestMethod -Uri http://xxx.xxx.xxx.xxx/api/hosts -Headers @{"Authorization" = "Basic "+[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($用户名+":"+$password ))}).host |选择对象名称,id | Where-对象名称 -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

    【讨论】:

      猜你喜欢
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多