如何将ARM模板数组参数转为逗号分隔字符串传入PowerShell脚本?
解决ARM模板数组参数传递给CustomScriptExtension PowerShell脚本的兼容问题
没问题,我有两种靠谱的方案帮你解决这个ARM数组参数转PowerShell可接收格式的问题,你可以根据是否愿意修改脚本参数来选择:
方案一:将ARM数组转为逗号分隔字符串(适合修改脚本参数的场景)
这种方法会把你的nodePrivateIps数组提取出所有IP地址,拼接成逗号分隔的字符串传递给脚本,脚本接收后再拆分为数组。
步骤1:修改ARM模板中的CustomScriptExtension配置
在commandToExecute里,用ARM的select函数从对象数组中提取所有IpAddress属性值,再用join函数拼接成逗号分隔的字符串,同时用转义双引号包裹避免PowerShell拆分参数:
"properties": { "publisher": "Microsoft.Compute", "type": "CustomScriptExtension", "typeHandlerVersion": "1.4", "settings": { "fileUris": "[concat(parameters('_artifactsLocation'),'/SolrCloudSetup.ps1', parameters('_artifactsLocationSasToken'))]", "commandToExecute": "[concat('powershell.exe -ExecutionPolicy Unrestricted -Command .\\SolrCloudSetup.ps1 -solrNodeIps \"', join(select(parameters('nodePrivateIps'), 'IpAddress'), ','), '\"')]" } }
步骤2:调整PowerShell脚本参数(可选)
如果把脚本参数改为字符串类型,后续再拆分为数组:
# SolrCloudSetup.ps1 ----------------------- param ( [string] [Parameter(Mandatory=$true)] $solrNodeIps ) # 把逗号分隔字符串转为数组 $solrNodeIpArray = $solrNodeIps -split ',' # 后续用$solrNodeIpArray进行操作
如果不想修改参数类型,保持[array]的话,脚本内需要手动拆分传入的字符串:
# SolrCloudSetup.ps1 ----------------------- param ( [array] [Parameter(Mandatory=$true)] $solrNodeIps ) # 因为传入的是单个字符串元素,所以取第一个元素拆分 $solrNodeIpArray = $solrNodeIps[0] -split ','
方案二:直接生成PowerShell数组字面量(无需修改脚本参数)
这种方法会把ARM数组转换成PowerShell原生的数组格式(比如@("10.0.10.1","10.0.10.2")),这样你的原脚本[array]参数可以直接识别,无需任何修改。
修改ARM模板中的CustomScriptExtension配置
"properties": { "publisher": "Microsoft.Compute", "type": "CustomScriptExtension", "typeHandlerVersion": "1.4", "settings": { "fileUris": "[concat(parameters('_artifactsLocation'),'/SolrCloudSetup.ps1', parameters('_artifactsLocationSasToken'))]", "commandToExecute": "[concat('powershell.exe -ExecutionPolicy Unrestricted -Command .\\SolrCloudSetup.ps1 -solrNodeIps @(\"', join(select(parameters('nodePrivateIps'), 'IpAddress'), '\",\"'), '\")')]" } }
这个配置会生成类似@("10.0.10.1","10.0.10.2","10.0.10.3")的参数传递给脚本,PowerShell会自动把它解析为数组,你的原脚本可以直接使用$solrNodeIps变量,不需要做任何调整。
内容的提问来源于stack exchange,提问作者kwdevops
相关产品推荐
相关产品推荐

