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

Posted

技术标签:

【中文标题】ARM - 如何使用空格将参数传递给 commandToExecute?【英文标题】:ARM - How to pass a parameter to commandToExecute with spaces? 【发布时间】:2018-04-20 03:52:20 【问题描述】:

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

参数:

"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

自定义脚本扩展命令执行:

"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 吗?

【问题讨论】:

您尝试过线程建议的内容吗? ''? 我会看看如何逃避"而不是' \" 转义 " 在这种情况下,commandToExecute 将是:"commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -File \"', variables('asdfcseScriptFolder'), '/', variables('asdfcseScriptFileName'), '\" \"', parameters('psVariable'))]\""(即,引用脚本文件路径/名称和参数)。 我已经完成了@Bill_Stewart 在我离开工作并让 VM 构建之前提到的内容。我现在已经连接到虚拟机并注意到它已经工作了。抱歉@4c74356b41,我没有尝试'',但我确实尝试了我链接到的网址中的singleQuote(如上所述)。 【参考方案1】:

正如比尔所说,commandToExecute 将是:

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

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

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

这里有类似情况,请参考answer。

【讨论】:

以上是关于ARM - 如何使用空格将参数传递给 commandToExecute?的主要内容,如果未能解决你的问题,请参考以下文章

将带有空格的路径作为参数传递给 bat 文件

Terraform - 将类型对象作为参数传递给 Azure 模板部署

如何使用 SwiftUI 将参数传递给 Button 的操作

如何将参数传递给 Java 线程?

如何将参数传递给 erlang os:cmd()?

如何将两个参数传递给 Pool.starmap()?