将数组参数值转换为逗号分隔的字符串

问题描述 投票:1回答:1

我正在使用ARM模板将Vms部署到Azure。在我的参数文件中,我有:

"nodePrivateIps": {
  "value": [
    { "IpAddress": "10.0.10.1" },
    { "IpAddress": "10.0.10.2" },
    { "IpAddress": "10.0.10.3" }
  ]
},

我可以在模板中使用此数组:

"privateIPAddress": "[parameters('nodePrivateIps')[copyIndex()].IpAddress]",

问题是现在我需要通过使用CustomScriptExtension将相同的数组传递给我的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 ', parameters('nodePrivateIps'))]"
        }
      }

这是我目前期待数组的powershell脚本参数。如果我让ARM合作,我可以轻松地将其更改为逗号分隔字符串。

# SolrCloudSetup.ps1 -----------------------
param (
   [array] [Parameter(Mandatory=$true)] $solrNodeIps
)

有没有办法将此数组参数转换为逗号分隔的字符串,以便我可以通过CustomScriptExtension将其传递给我的powershell脚本?

azure azure-resource-manager arm-template
1个回答
0
投票

有一个string()功能,这是你最好的选择。您可以将其与替换功能结合使用以实现您的需求:

"[replace(replace(string(parameters('testArray')), '[', ''), ']', '')]"

在你的情况下,它会变得更难,因为你的数组不只是一堆字符串,所以我会使用一个循环将你的数组“转换”为一堆字符串。或者更好地将您的数组转换为:

[
"10.0.10.1",
"10.0.10.2",
"10.0.10.3"
]

你可以像这样使用它:

"[parameters('nodePrivateIps')[copyIndex()]]"
© www.soinside.com 2019 - 2024. All rights reserved.