我正在尝试通过使用单个设备的主机名从包含 Powershell 中 100 台设备的详细信息的对象中获取设备的站点名称。我该如何过滤它?
数据最初来自 API,并以 Json 的形式被拉入,我已经使用它进行了转换,ConvertFrom-Json
因此它现在应该在一个对象中。
我尝试通过管道传递对象但未成功Select-Object
,Where-Object
我使用命令的方式似乎没有做任何事情,但我不确定我做错了什么。
最初使用以下方法提取数据:
$allDevices = New-AemApiRequest @params -ApiAccessToken $apiAccessToken
然后使用以下方法转换为对象:
$allDevicesObj = $allDevices | ConvertFrom-Json
然后可以使用以下命令查看结果:
Write-Host $allDevicesObj.devices
这将显示与此类似的数据:
@{id=1234; uid=123-456-789; siteId=1; siteUid=11aa; siteName=site1; deviceType=; hostname=DESKTOP-abc123;}
@{id=2345; uid=987-654-321; siteId=2; siteUid=22bb; siteName=site2; deviceType=; hostname=DESKTOP-abc456;}
@{id=3456; uid=234-345-456; siteId=3; siteUid=33bb; siteName=site3; deviceType=; hostname=DESKTOP-abc789;}
我希望能够根据主机名将输出过滤为 1 个结果,因此我尝试使用Where-Object
和Select-Object
函数的组合:
Write-Host $allDevicesObj.devices | Where-Object {$_.hostname -eq DESKTOP-abc123}
这似乎什么都不做,并再次显示所有内容。我试着不那么具体,但也只选择站点名称:
Write-Host $allDevicesObj.devices | Where-Object -Contains "123" | Select-Object -Property siteName
但这也再次显示了一切。我尝试了Select-Object
具有相同结果的类似变体。
当使用Where-Object
来指定我想要的对象,然后使用我希望只选择站点名称值/属性时,Select-Object
我希望得到的输出只是
site1