2021-01-12に投稿

(PowerShell) PSCustomObject をループさせつつキーと値の両方にアクセスする

引き続き PowerShell のお話。今度は PSCustomObject をループさせつつキーと値の両方にアクセスする方法が分からず躓きました。

現象

{
    "common": {
        "config":  {
            "user.name":  "testuser",
            "user.id": 12345,
            "user.email":  "[email protected]"
        }
    }
}

例えばこんな config.json があるとします。

この JSONファイル を読み込んでループさせつつ、キーと値の双方にアクセスしたい。

そこで foreach($confgi in $configData.GetEnumerator()){} としたり、 foreach($confgi in $configData.Keys){} としたりしましたが一向に中身が取得できず四苦八苦。

対処

# JSONファイル 読み込み
[String]$configPath = Join-Path ( Convert-Path . ) 'config.json'
$configData = Get-Content -Path $configPath -Raw -Encoding UTF8 | ConvertFrom-JSON

# ループ
foreach( $key in $configData.common.config.psobject.properties.name )
{
    Write-Host $key ' = ' $configData.common.config.$key
}

最終的に、 $Object.psobject.properties.name という全然異なるアクセス方法だったことが分かりました。今回の場合はキーが階層で入り組んでいるのでさらに . (ピリオド(ドット)) の個数が増えています。

> PowerShell -ExecutionPolicy RemoteSigned .\test.ps1
user.name  =  testuser
user.id  =  12345
user.email  =  [email protected]

やっとキーと値の両方が取得できました……。

参考

Originally published at labor.ewigleere.net
ツイッターでシェア
みんなに共有、忘れないようにメモ

arm-band

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント