【问题标题】:Dynamically pass ARM parameter as customscriptextension parameter动态传递 ARM 参数作为 customscriptextension 参数
【发布时间】:2021-10-20 03:33:49
【问题描述】:

我想在arm模板中运行一个PowerShell自定义脚本,设置端口转发和防火墙,脚本如下

function set-proxy {
    param(
        [parameter(ValueFromPipeline = $True, ValueFromPipelineByPropertyName = $True, HelpMessage = "proxy informations")]
        [hashtable[]]$proxyinfos
    )
    
    foreach ($proxyinfo in $proxyinfos){
    netsh interface portproxy add v4tov4 listenaddress=$($proxyinfo.listenaddress) `
    listenport=$($proxyinfo.listenport) connectaddress=$($proxyinfo.connectaddress) connectport=$($proxyinfo.connectport)
    }
}

function set-firewall {
    param(
        [parameter(ValueFromPipeline = $True, ValueFromPipelineByPropertyName = $True, HelpMessage = "proxy informations")]
        [hashtable[]]$proxyinfos
    )
    
    foreach ($proxyinfo in $proxyinfos){
        New-NetFirewallRule -DisplayName $($proxyinfo.firewallrulename) -Direction $($proxyinfo.direction) `
        -LocalPort $($proxyinfo.listenport) -Protocol $($proxyinfo.protocol) -Action $($proxyinfo.action)
    }
}

set-proxy $proxyinfos
set-firewall $proxyinfos

我希望 proxyinfo 可以作为散列表数组传递

$proxyinfos=@(
    @{
        listenaddress="10.1.10.20"
        listenport="443"
        connectaddress="10.1.10.20"
        connectport="443"
        firewallrulename= "port443"
        direction="Inbound"
        action="Allow"
        protocol="TCP"
    },
    @{
        listenaddress="10.1.10.20"
        listenport="80"
        connectaddress="10.1.10.20"
        connectport="80"
        firewallrulename= "port80"
        direction="Inbound"
        action="Allow"
        protocol="TCP"
    }
)

但是我在尝试查看如何从 arm 模板参数文件中传递它时有点卡住了。

如果我创建一个名为 proxyinfos 的数组参数

"proxyinfos": {
            "value": [
                {
                    "listenaddress": "10.1.10.20",
                    "listenport": "443",
                    "connectaddress": "10.1.10.20",
                    "connectport": "443",
                    "firewallrulename": "port443",
                    "direction": "Inbound",
                    "action": "Allow",
                    "protocol": "TCP"
                },
                {
                    "listenaddress": "10.1.10.20",
                    "listenport": "80",
                    "connectaddress": "10.1.10.20",
                    "connectport": "80",
                    "firewallrulename": "port80",
                    "direction": "Inbound",
                    "action": "Allow",
                    "protocol": "TCP"
                }
            ]
        }

【问题讨论】:

标签: azure azure-resource-manager azure-vm-templates


【解决方案1】:

最后搞定了 传递参数时,必须这样做

"commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -file configure-portforwarding.ps1 -proxyinfosjson ', string(parameters('proxyinfos')))]"

所以当将此参数传递给 powershell 时,json 看起来像这样

[{"listenaddress":"10.1.10.20","listenport":"443","connectaddress":"10.1.10.20","connectport":"443","firewallrulename":"port443","direction":"Inbound","action":"Allow 
","protocol":"TCP"},{"listenaddress":"10.1.10.20","listenport":"80","connectaddress":"10.1.10.20","connectport":"80","firewallrulename":"port80","direction":"Inbound","action":"Allow","protocol":"TCP"}]

在powershell里面

$proxyinfos= ConvertFrom-Json -InputObject $proxyinfosjson

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 2016-07-14
    相关资源
    最近更新 更多