使用电源外壳配置 NSG 规则 - 导入 ASG 时遇到问题



我正在编写一个Powershell脚本来配置NSG规则。大多数规则包含 IP 地址作为源,但其他一些源由 ASG 定义。如果源是 IP 地址,我的脚本工作正常,但如果源是 ASG,则会抛出错误。

错误消息如下所示。

Add-AzureRm网络安全规则配置:无法绑定参数 "源应用程序安全组"。无法转换"xxxx-fw-asg" 类型为"系统字符串"的值 "Microsoft.Azure.Command.Network.Models.PSApplicationSecurityGroup"。

根据错误消息,脚本需要某种数据类型的 ASG,而实际上它是一个字符串。我找不到将此字符串转换为Powershell期望的类型的方法。感谢任何转换数据类型的帮助(或通过任何其他方式解决此问题(。

$nsgCsv = Import-Csv .NSG-rule-list.csv
foreach ($rule in $nsgCsv) {
    if ($rule.SourceAddressPrefix) {            
        Get-AzureRmNetworkSecurityGroup -Name  $rule.NSG -ResourceGroupName $rule.resourceGroup | Add-AzureRmNetworkSecurityRuleConfig `
            -Name $rule.ruleName `
            -Description $rule.Description `
            -Access $rule.Access `
            -Protocol $rule.Protocol `
            -Direction $rule.Direction `
            -priority $rule.Priority `
            -SourceAddressPrefix ($rule.SourceAddressPrefix -split ',') `
            -SourcePortRange * `
            -DestinationAddressPrefix ($rule.DestinationAddressPrefix -split ',') `
            -DestinationPortRange ($rule.DestinationPortRange -split ',') `
        | Set-AzureRmNetworkSecurityGroup           
    }
    else {            
        Get-AzureRmNetworkSecurityGroup -Name  $rule.NSG -ResourceGroupName $rule.resourceGroup | Add-AzureRmNetworkSecurityRuleConfig `
            -Name $rule.ruleName `
            -Description $rule.Description `
            -Access $rule.Access `
            -Protocol $rule.Protocol `
            -Direction $rule.Direction `
            -priority $rule.Priority `
            -SourceApplicationSecurityGroup  $rule.sourceASG `
            -SourcePortRange * `
            -DestinationAddressPrefix ($rule.DestinationAddressPrefix -split ',') `
            -DestinationPortRange ($rule.DestinationPortRange -split ',') `
        | Set-AzureRmNetworkSecurityGroup         
    }
}

以下是 CSV 内容

resourceGroup,NSG,ruleName,Description,Protocol,SourcePortRange,DestinationPortRange,SourceAddressPrefix,sourceASG,DestinationAddressPrefix,DestinationASG,Access,Priority,Direction
poc-network-rg,poc-dmz-nsg,Test7,test rule 7,TCP,*,443,,tes-fw-asg,192.168.0.0/24,NA,Allow,609,inbound

对于 -SourceApplicationSecurityGroup ,您需要获取 ASG 并将其引用到此处。

样本:

$srcAsg = New-AzureRmApplicationSecurityGroup -ResourceGroupName MyResourceGroup -Name srcAsg -location "West US">


{ Get-AzureRmNetworkSecurityGroup -name $rule.NSG -资源组名称 $rule.资源组 |Add-AzureRmNetworkSecurityRuleConfig -Name $rule.ruleName -描述$rule。描述 -Access $rule.Access -协议$rule。协议 -Direction $rule.Direction -优先级$rule。优先级 -SourceApplicationSecurityGroup $srcAsg -源端口范围 * -DestinationAddressPrefix ($rule.DestinationAddressPrefix -split ',') -目的地港口范围($rule。目标端口范围 -拆分 ','( ' |Set-AzureRmNetworkSecurityGroup
}

最新更新