我正在编写一个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
}