我正在处理或编写Powershell脚本来配置NSG规则。大多数规则都包含IP地址作为源,但是其他一些源则由ASG定义。如果源是IP地址,我的脚本可以正常运行,但是如果源是ASG,则脚本会抛出错误。
错误消息如下。
Add-AzureRmNetworkSecurityRuleConfig:无法绑定参数 “ SourceApplicationSecurityGroup”。无法转换“ xxxx-fw-asg” 要键入的类型“ System.String”的值 “ Microsoft.Azure.Commands.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
答案 0 :(得分:0)
对于-SourceApplicationSecurityGroup,您需要获取ASG并在此处引用它。
示例:
$ srcAsg = New-AzureRmApplicationSecurityGroup -ResourceGroupName MyResourceGroup -Name srcAsg-位置“美国西部”
{
Get-AzureRmNetworkSecurityGroup-名称$ rule.NSG -ResourceGroupName $ rule.resourceGroup | Add-AzureRmNetworkSecurityRuleConfig
-Name $rule.ruleName
-说明$ rule。说明
-Access $rule.Access
-协议$ rule。协议
-Direction $rule.Direction
-priority $ rule.Priority
-SourceApplicationSecurityGroup $srcAsg
-SourcePortRange *
-DestinationAddressPrefix ($rule.DestinationAddressPrefix -split ',')
-DestinationPortRange($ rule.DestinationPortRange -split',')`
| Set-AzureRmNetworkSecurityGroup
}