Powershell 如何从两次嵌套 属性 添加变量

Powershell How to add a variable from a twice nested property

我正在使用 PowerShell

通过 API 从网络监视器中提取 'down device' 数据

我正在为如何引用主机名值以将其添加到变量而苦恼。我在查找故障设备的主机名列表。

在这种情况下,只有一台主机,但显然,可以有多个不同 ID 的主机。

    $user = 'user'
$pass = 'password'

$pair = "$($user):$($pass)"

$encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair))

$basicAuthValue = "Basic $encodedCreds"

$Headers = @{
    Authorization = $basicAuthValue
}

$webData = Invoke-RestMethod -Method Get -Uri 'http://fqdn/api/v0/devices/?status=0' -ContentType application/json -Headers $Headers # -OutFile c:\data\Config.html
#$webData= $webData | ConvertTo-Json 
$webData | ForEach-Object {$_.devices} | Select -Property $_.hostname

来自 Powershell 的结果数据

201                                                                                                                       
---                                                                                                                       
@{device_id=201; poller_id=0; hostname=lonts01.local; sysName=lonts01.local; snmp_authname=; 

不带 -ContentType 直接输出 $webData

{"status":"ok","count":3,"devices":{"201":{"device_id":"201","poller_id":"0","hostname":"lonts01.local","sysName":"lonts01.local",...

这是一个典型的例子,如果你想访问底层对象,你需要 JSON 子项的名称,因为你不能在没有明确命名的情况下扩展它们。

请注意,我首先获取键的值(名称),然后使用它来扩展对象。

$webData.devices | Get-Member -MemberType NoteProperty | ForEach-Object {
    $key = $_.Name
    $webData.devices.$key.hostname
}