我正在嘗試使用 cmd 將 json 物件添加到我的 powershell 腳本中。我的問題是我收到了字串但沒有任何引號。
我的腳本.ps1:
Write-Host ($args[0] | Format-Table | Out-String)
我的命令列:
C:\path\to\powershell.exe ./script.ps1 '{"key1":"val1","all":[{"key2":"val2","key3":"val3","key4":["val5","val6"]},{"key5":"val7","key6":"val8","key7":["val9","val10"]}],"key8":0}'
結果 :
{key1:val1,all:[{key2:val2,key3:val3,key4:[val5,val6]},{key5:val7,key6:val8,key7:[val9,val10]}],key8:0}
我怎樣才能得到我的 json 帶引號?
uj5u.com熱心網友回復:
使用PowerShell 的CLI 時,在命令列決議期間會洗掉命令列上未轉義的 "內容,然后才會將結果解釋為要執行的 PowerShell 代碼(由于(隱含)使用了-Command/-c引數)。[1]
你有兩個選擇:
正如Compo在他的評論中指出并演示的那樣,轉義所有
"字符。就像\"作業一樣 - 轉義確保它們以未轉義的形式被保留,因此成為要執行的 PowerShell 代碼的一部分。如果您想避免 escaping,請通過管道(stdin)提供文本:
echo {"key1":"val1","all":[{"key2":"val2","key3":"val3","key4":["val5","val6"]},{"key5":"val7","key6":"val8","key7":["val9","val10"]}],"key8":0}| powershell.exe -c ./script.ps1 $input
請注意在 之前沒有|空格,否則這些空格將成為輸入的一部分。
在 PowerShell 命令中,通過自動變數訪問管道輸入的文本$input
[1] 正是因為這個原因,外部'...'參考并沒有保護"內部未轉義的內容:在命令列的初始決議期間,'字符沒有句法含義。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/395908.html
