首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态传递ARM参数作为customscriptextension参数

动态传递ARM参数作为customscriptextension参数
EN

Stack Overflow用户
提问于 2021-10-20 03:33:50
回答 1查看 42关注 0票数 0

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

代码语言:javascript
复制
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可以作为哈希表的数组传递

代码语言:javascript
复制
$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的数组参数

代码语言:javascript
复制
"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"
                }
            ]
        }
EN

回答 1

Stack Overflow用户

发布于 2021-10-20 10:56:39

当传递参数时,让它在最后工作,我要这样做

代码语言:javascript
复制
"commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -file configure-portforwarding.ps1 -proxyinfosjson ', string(parameters('proxyinfos')))]"

因此,将此参数传递给powershell时,json如下所示

代码语言:javascript
复制
[{"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内部

代码语言:javascript
复制
$proxyinfos= ConvertFrom-Json -InputObject $proxyinfosjson
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69640012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档