Я пытаюсь получить имя узла устройства, используя имя хоста одного устройства из объекта, который содержит сведения о сотнях устройств в Powershell. Как мне это отфильтровать?
Данные изначально получены из 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}
Это, похоже, ничего не делает и снова все отображает. Я попытался быть немного менее конкретным, но также выбрал только siteName:
Write-Host $allDevicesObj.devices | Where-Object -Contains "123" | Select-Object -Property siteName
Но это тоже снова показало все. Я пробовал похожие варианты с Select-Object
с теми же результатами.
При использовании Where-Object
, чтобы указать нужный объект, а затем просто выбрать значение / свойство siteName, используя Select-Object
Я надеюсь получить вывод равным
site1