ここでPowerShellを学習するのは初めてで、指定されたスクリプト内に自己が含まれている限り、任意のソリューションにオープンです
これに関するドキュメントで何かを見つけるのは本当に難しいです、それはおそらく何もないことを意味しますか?
PSバージョン5.1
ビルドバージョン:10.0.17134
特定のJSON標準またはファイル設定は不明ですが、例としてこれを使用できます。
{
"foo" : ["foo1", "foo2", "foo3"],
"bar" : {
"bar-foo" : 20,
"bar-bar" : {
"bar-bar-foo : "here"
}
}
}
事前にプロパティを知っているので、JSON KVPに直接移動したいと思います。これは、完全にネストされたパスです。
たとえば、入力引数は次のようになります。
.\ScriptName -JsonProp ["bar"]["bar-bar"]["bar-bar-foo"]
私のスクリプトは現在使用してConvertTo-Json
おり、ソースは任意の.json
ファイルですが、jsonオブジェクトを明示的にナビゲートするためのより簡単でわかりやすい方法があれば、私はすべての耳です。
目標は、そのプロパティの値を変更してファイルに書き出すことです。
$json = Get-Content -Raw -Path $path | ConvertFrom-Json
$json.$JsonProp = "there"
私の知る限り、Jsonオブジェクトはドット表記を使用する必要がありますが、解決策のない文字列でそれを試しました。たとえば、パラメーターを分割します。
.\ScriptName -JsonProp bar.bar-bar.bar-bar-foo
$json.$JsonProp = "there"
私がこのトピックについて話している間、PowerShellに関する文献についての推奨事項があれば、私に知らせてください。
これが1つの方法です:
$newValue = "there"
Invoke-Expression ('$json.' + $JsonProp + ' = $newValue')
引数に引用符を含める必要があります。
.\ScriptName -JsonProp "bar.'bar-bar'.'bar-bar-foo'"
タイプミスやセキュリティの問題を防ぐために、たとえば単純な正規表現チェックを使用して、事前に引数を確認する必要があります。
# (Note: This is just a quick example. Not pretty or complete, but does the job.)
if ($JsonProp -notmatch '^([a-zA-Z0-9_\-]+|''[a-zA-Z0-9_\-"]+''|"[a-zA-Z0-9_\-'']+")(\.([a-zA-Z0-9_\-]+|''[a-zA-Z0-9_\-"]+''|"[a-zA-Z0-9_\-'']+"))*$') {
throw "Invalid json property."
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加