В настоящее время я работаю над сценарием, который дает мне выходные данные каждой подсети в подписке 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, но затем имя полностью отменяется для всей виртуальной сети. Спасибо за помощь!
Что касается проблемы, обратитесь к следующему сценарию
Большое тебе спасибо. Все прошло безупречно, за исключением GatewaySubnet, который просто взял NSG и таблицу маршрутизации из предыдущей подсети. Исправлено добавлением оператора else: `else {$ NSG | ForEach-Object {if ($ VNet.Subnets.Id -contains $ _. Subnets.Id) {$ subnetInfo.’NSG Name ‘=}}} `Есть ли способ удалить фигурные скобки подсети? — person Tedlix; 24.12.2020
Обнаружено другое исправление для информации о NSG или таблице маршрутов: вы должны поместить
$subnetInfo.'NSG Name'=$null
или$subnetInfo.'Routing Table'=$null
вforeach($sub in $VNet.Subnets){
— person Tedlix; 24.12.2020