我正在构建一个使用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?
答案 0 :(得分:2)
比尔说,commandToExecute
将是:
"commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -File \"', variables('asdfcseScriptFolder'), '/', variables('asdfcseScriptFileName'), '\" \"', parameters('psVariable'))]\""
这是一个json文件,\"
转义"
。
例如:"{\"location\": {\"value\": \"westus\"}}"
转义{"location": {"vaule": "westus"}}
我将此添加为答案,以便其他社区成员受益。
此处类似情况,请参阅answer。