В настоящее время я работаю над сценарием, который дает мне выходные данные каждой подсети в подписке Azure со ссылками на виртуальную сеть, NSG и таблицу маршрутов. Имя таблицы маршрутов в настоящее время отсутствует в сценарии, но я хочу сосредоточиться на исправлении NSG прямо сейчас. Вот как выглядит мой скрипт:
$VNets = Get-AzVirtualNetwork $NSG = Get-AzNetworkSecurityGroup $VNets | ForEach-Object { $VNettemp = $_ $result = $_.Subnets | Select-Object @{Label=»Subnet Name»;Expression={$_.Name}},@{Label=»Subnet»;Expression={$_.AddressPrefix}} $_ | ForEach-Object { $result | Add-Member -Name «VNet Name» -Value $_.Name -MemberType NoteProperty } if ($_.Subnets.NetworksecurityGroup -ne «null»){ $NSG | ForEach-Object{ if ($VNettemp.Subnets.Id -contains $_.Subnets.Id ){ $result | Add-Member -Name «NSG Name» -Value $_.name -MemberType NoteProperty -Force } } } return $result }
Результат выглядит так:
Subnet Name Subnet VNet Name NSG Name ———— —— ——— ——— default-subnet 10.10.10.0/28 vnet-ine-test test-nsg vnet-ine-test-snet-test 10.10.0.0/24 vnet-ine-test test-nsg default 10.0.0.0/24 vnet-chn-docker vnet-chn-docker-nsg vnet-test-subnet 10.0.1.0/24 vnet-chn-docker vnet-chn-docker-nsg
Желаемый результат будет выглядеть так, потому что к ‘default-subnet’ и ‘vnet-test-subnet’ не подключена сеть безопасности сети:
Subnet Name Subnet VNet Name NSG Name ———— —— ——— ——— default-subnet 10.10.10.0/28 vnet-ine-test vnet-ine-test-snet-test 10.10.0.0/24 vnet-ine-test test-nsg default 10.0.0.0/24 vnet-chn-docker vnet-chn-docker-nsg vnet-test-subnet 10.0.1.0/24 vnet-chn-docker
Кто-нибудь знает, как исправить вывод? Я попробовал это с помощью оператора else, который заполняет пустое значение для имени NSG, но затем имя полностью отменяется для всей виртуальной сети. Спасибо за помощь!
Источник: