PowerShellのホスト名に基づいてデバイスのオブジェクトを単一のオブジェクトにフィルタリングするにはどうすればよいですか?

計量する

Powershell内の数百のデバイスの詳細を含むオブジェクトから単一のデバイスのホスト名を使用して、デバイスのサイト名を取得しようとしています。どうすればフィルタリングできますか?

データは元々APIからのものであり、Jsonとして取り込まConvertFrom-Jsonれています。を使用して変換したので、オブジェクトに含まれるはずです。

オブジェクトをパイピングしようSelect-ObjectWhere-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-ObjectSelect-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
スティーブンP

Write-Hostは、オブジェクトの文字列表現をコンソールに書き込み、パイプラインに何も送信しません。Where-Objectを使用してフィルタリングし、出力ストリームへの書き込みを許可します。

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

サイトだけを取得するには、where-objectからselect-objectにパイプします

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

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ