相关疑难解决方法(0)

如何将 JSON(字符串数据)传递给 PowerShell?

我将以下内容作为参数传递给 powershell(w7 上的 v4):

-debugWrite -fileName SettingsFile -jsonContent { "c": "some setting", "d":  "unknown", "b": "some thing", "a": 1 }
Run Code Online (Sandbox Code Playgroud)

但是 PS 被 JSON 挂断了。我试过分隔 \double-quotes\ 并将 -jsonContent 之后的所有内容放在“单引号”中,但无济于事。

这是运行 PS 的 Windows 7 (PS4) 环境:

注意:“...”混淆指的是同一个目录。IOW,所有文件都位于同一目录中。

运行一个批处理文件,开始整个事情:

    "C:\...\script.bat" > "C:\...\script-output.txt" 2>&1
Run Code Online (Sandbox Code Playgroud)

这会运行script.bat并输出到script-output.txt. script.bat是一个长的 1-liner:

%WINDIR%\sysnative\windowspowershell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "C:\...\customscript.PS1" --% -fileName DropFileToCreate -jsonContent "{     "c":  "some setting",     "d":  "unknown",     "b":  "some thing",     "a":  1 }" -debugWrite
Run Code Online (Sandbox Code Playgroud)

传奇:

DropFileToCreate - 传递给 PS 脚本的文件名,用于在同一目录中创建文件。

-jsonContent- …

syntax powershell json batch-file quoting

2
推荐指数
1
解决办法
7315
查看次数

'kubectl patch' works on Linux Bash but not in Windows Powershell ISE

The following command works fine on Ubuntu bash:

kubectl patch deployment wapi-backend-d1 --patch '{"spec": {"template": {"metadata": {"labels": {"date": "test"}}}}}'
Run Code Online (Sandbox Code Playgroud)

The same command does not work in Windows Powershell Console (ISE).

The error is:

kubectl : Error from server (BadRequest): invalid character 's' looking for beginning of object key string
At line:1 char:1
+ kubectl patch deployment wapi-backend-d1 --patch '{"spec": {"template ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Error from serv...ject key string:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
Run Code Online (Sandbox Code Playgroud)

The powershell …

syntax powershell parameter-passing quoting kubectl

2
推荐指数
2
解决办法
423
查看次数

使用 aws-cli 时如何在 Powershell 中正确格式化 JSON?

在 Powershell 中使用 aws-cli 发送 JSON 结构时出错。具体来说,是调用将项目放入现有 DynamoDB 表中。

问题似乎是我尝试发送的 JSON 对象中的键和值缺少双引号。我读到,Powershell 对输出双引号很挑剔,尤其是在利用外部 API 时。

不幸的是,由于我的组织使用 okta 来验证 AWS 请求,因此我必须使用 Powershell。

我已经尝试了我在这里看到的一切:

https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/convertto-json?view=powershell-6

...这里:

解析参数“--expression-attribute-values”时出错:无效 JSON:需要用双引号括起来的属性名称:第 1 行第 3 列(字符 2)

...这里:

https://github.com/aws/aws-cli/issues/1326

...和这里:

PowerShell:在传递给外部程序的字符串中转义双引号的最佳方法?例如,一个 JSON 字符串

我尝试过的:

这是基本的第一次尝试:

okta-aws dh dynamodb put-item --table-name AlexaRoomLookup-dev --item '{"deviceId": {"S":"amzn1.ask.device.AEH2LHYGV7GSPP5THMR
5H56AI2OOMAQ7MF54CZ3E6WR433WGS6QAOCYCKJWRJ3TQY5IE76NWR2IKCANB6TJNKLDEZOO2YN6ACUVT33MKSS4CO6R7GJI6GDFLOBOPUA2IXX7RI732UXJ6PDST5KYC7CSQK
634K4APEBRNVOKVZIDECOCBBIFB4"},"roomNumber": {"N":9110}}' --return-consumed-capacity TOTAL
Run Code Online (Sandbox Code Playgroud)

然后我尝试用反斜杠转义:

okta-aws dh dynamodb put-item --table-name AlexaRoomLookup-dev --item {\"deviceId\":{\"S\":\"amzn1.ask.device.AEH2LHYGV7GSPP5THMR5H56AI2OOMAQ7MF54CZ3E6WR433WGS6QAOCYCKJWRJ3TQY5IE76NWR2IKCANB6TJNKLDEZOO2YN6ACUVT33MKSS4CO6R7GJI6GDFLOBOPUA2IXX7RI732UXJ6PDST5KYC7CSQK634K4APEBRNVOKVZIDECOCBBIFB4\"},\"roomNumber\": {\"N\":9110}} --return-consumed-capacity TOTAL
Run Code Online (Sandbox Code Playgroud)

然后用反引号(我在这里用星号替换它,这样就可以将其读取为代码)和反斜杠进行转义:

{*"deviceId*": {*"S*":*"amzn1.ask.device.AEH2LHYGV7GSPP
5THMR5H56AI2OOMAQ7MF54CZ3E6WR433WGS6QAOCYCKJWRJ3TQY5IE76NWR2IKCANB6TJNKLDEZOO2YN6ACUVT33MKSS4CO6R7GJI6GDFLOBOPUA2IXX7RI732UXJ6PDST5KYC
7CSQK634K4APEBRNVOKVZIDECOCBBIFB4*"},*"roomNumber*": {*"N*":9110}}" --return- consumed-capacity TOTAL
Run Code Online (Sandbox Code Playgroud)

然后我尝试了“这里字符串”,但无济于事。

期望和结果:

我希望微软文档中的转义方法能够起作用。

上面的每一个都给出了这个错误,并根据转义方法有问题的“JSON收到”的变体,但它从来没有在键和值周围使用双引号:

Error parsing …
Run Code Online (Sandbox Code Playgroud)

powershell json aws-cli

1
推荐指数
1
解决办法
4147
查看次数