ARM - 如何使用空格将参数传递给commandToExecute?

时间:2017-11-07 16:41:01

标签: powershell azure command

我正在构建一个使用Azure模板进行部署的ARM模板,以便它可以用作' stock'用户要部署的映像。其中一个要求是最终用户输入计算机描述作为参数。

参数:

"psVariable": {
  "value": "My Super Awesome Description"
}

我使用自定义脚本扩展来执行更改计算机描述的PowerShell脚本。

PowerShell脚本:

Param ( [string] $psVariable )
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\" -Name "srvcomment" -Value $psVariable -PropertyType String

自定义脚本扩展命令ToExecute:

"commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -File ', variables('asdfcseScriptFolder'), '/', variables('asdfcseScriptFileName'), ' ', parameters('psVariable'))]"

模板运行时,它会运行PowerShell脚本,但会命名计算机My并错过Super Awesome Description。显然,如果我将Parameter更改为My-Super-Awesome-Description(加入空格),它会将描述更改为完全相同。但遗憾的是我需要空间。

我确实看过: How to escape single quote in ARM template

我尝试将变量用作"singleQuote": "'",并将commandToExecute更改为:

"commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -File ', variables('asdfcseScriptFolder'), '/', variables('asdfcseScriptFileName'), ' ', variables('singleQuote'), parameters('psVariable'), variables('singleQuote'))]"

但这只是将我的电脑说明改为'My

有没有人知道如何使用空格将参数传递给commandToExecute?

1 个答案:

答案 0 :(得分:2)

比尔说,commandToExecute将是:

"commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -File \"', variables('asdfcseScriptFolder'), '/', variables('asdfcseScriptFileName'), '\" \"', parameters('psVariable'))]\""

这是一个json文件,\"转义"。 例如:"{\"location\": {\"value\": \"westus\"}}"转义{"location": {"vaule": "westus"}}

我将此添加为答案,以便其他社区成员受益。

此处类似情况,请参阅answer