Как отфильтровать объект устройств к одному на основе имени хоста в powershell? - PullRequest
1 голос
/ 25 апреля 2019

Я пытаюсь получить имя узла устройства, используя имя хоста одного устройства из объекта, который содержит сведения о сотнях устройств в 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

1 Ответ

3 голосов
/ 25 апреля 2019

Write-Host записывает строковое представление вашего объекта в консоль и ничего не отправляет по конвейеру. Отфильтруйте, используя Where-Object, и просто разрешите его запись в поток вывода.

$allDevicesObj | Where-Object {$_.hostname -eq 'DESKTOP-abc123'}

Чтобы получить только сайт, вы можете передать от куда-объекта к select-object

$allDevicesObj | Where-Object {$_.hostname -eq 'DESKTOP-abc123'} | Select-Object -property SiteName
...