В настоящее время я работаю над сценарием, который дает мне выходные данные каждого пиринга в подписке Azure с перечислением обеих виртуальных сетей и некоторыми параметрами, такими как AllowVirtualNetworkAccess, AllowForwardedTraffic, UseRemoteGateways и AllowGatewayTransit. Вывод должен выглядеть примерно так:
Peering Name VNet 1 VNet 2 AllowVirtualNetworkAccess AllowForwardedTraffic UseRemoteGateways AllowGatewayTransit
------------ ------ ------ ------------------------- --------------------- ----------------- -------------------
test-peering vnet-ine-test vnet-chn-docker False True False False
vnet-docker-test vnet-chn-docker vnet-ine-test True True False False
Вот как сейчас выглядит мой скрипт:
$VNets = Get-AzVirtualNetwork
$peerings=@()
$peeringInfo = @{ "Peering Name" = "" ; "VNet 1" = "" ; "VNet 2" = "" ; "AllowVirtualNetworkAccess" = "" ; "AllowForwardedTraffic" = "" ; "UseRemoteGateways" = "" ; "AllowGatewayTransit" = ""}
foreach($VNet in $VNets){
$peeringInfo.'Peering Name'=$VNet.VirtualNetworkPeerings.Name
$peeringInfo.'AllowVirtualNetworkAccess'=$VNet.VirtualNetworkPeerings.Name
$peeringInfo.'AllowForwardedTraffic'=$VNet.VirtualNetworkPeerings.Name
$peeringInfo.'UseRemoteGateways'=$VNet.VirtualNetworkPeerings.Name
$peeringInfo.'AllowGatewayTransit'=$VNet.VirtualNetworkPeerings.Name
$peering = Get-AzVirtualNetworkPeering -VirtualNetworkName $VNet.Name -ResourceGroupName $VNet.ResourceGroupName
foreach($peer in $peering){
$peeringInfo.'VNet 1' =$peer.VirtualNetworkName
$peeringInfo.'VNet 2' =(Get-AzVirtualNetwork -Name $peer.RemoteVirtualNetwork.Id).Name
$obj=New-Object PSObject -Property $peeringInfo
$peerings +=$obj
}
}
$peerings | Format-Table "Peering Name","VNet 1","VNet 2",AllowVirtualNetworkAccess,AllowForwardedTraffic,UseRemoteGateways,AllowGatewayTransit
И это вывод:
Peering Name VNet 1 VNet 2 AllowVirtualNetworkAccess AllowForwardedTraffic UseRemoteGateways AllowGatewayTransit
------------ ------ ------ ------------------------- --------------------- ----------------- -------------------
test-peering vnet-ine-test {vnet-ine-test, vnet-chn-docker} test-peering test-peering test-peering test-peering
vnet-docker-test vnet-chn-docker {vnet-ine-test, vnet-chn-docker} vnet-docker-test vnet-docker-test vnet-docker-test vnet-docker-test
Я знаю, что проблема должна что-то делать со строкой $peeringInfo.'VNet 2' =(Get-AzVirtualNetwork -Name $peer.RemoteVirtualNetwork.Id).Name
, потому что, когда я просто запускаю (Get-AzVirtualNetwork -Name $peer.RemoteVirtualNetwork.Id).Name
, есть два выхода, что странно, потому что
$peer.RemoteVirtualNetwork.Id может быть только одним значением.
Итак, я нашел ответ. На самом деле это была линия $peeringInfo.'VNet 2' =(Get-AzVirtualNetwork | Where-Object ID -EQ $peer.RemoteVirtualNetwork.Id).Name
. Теперь он был изменен на Where-Object для сравнения идентификатора вместо поиска имени. Вот полный скрипт:
$VNets = Get-AzVirtualNetwork
$peerings=@()
$peeringInfo = @{ "Peering Name" = "" ; "VNet 1" = "" ; "VNet 2" = "" ; "AllowVirtualNetworkAccess" = "" ; "AllowForwardedTraffic" = "" ; "UseRemoteGateways" = "" ; "AllowGatewayTransit" = ""}
foreach($VNet in $VNets){
$peeringInfo.'Peering Name'=$VNet.VirtualNetworkPeerings.Name
$peeringInfo.'AllowVirtualNetworkAccess'=$VNet.VirtualNetworkPeerings.AllowVirtualNetworkAccess
$peeringInfo.'AllowForwardedTraffic'=$VNet.VirtualNetworkPeerings.AllowForwardedTraffic
$peeringInfo.'UseRemoteGateways'=$VNet.VirtualNetworkPeerings.UseRemoteGateways
$peeringInfo.'AllowGatewayTransit'=$VNet.VirtualNetworkPeerings.AllowGatewayTransit
$peering = Get-AzVirtualNetworkPeering -VirtualNetworkName $VNet.Name -ResourceGroupName $VNet.ResourceGroupName
foreach($peer in $peering){
$peeringInfo.'VNet 1' =$peer.VirtualNetworkName
$peeringInfo.'VNet 2' =(Get-AzVirtualNetwork | Where-Object ID -EQ $peer.RemoteVirtualNetwork.Id).Name
$obj=New-Object PSObject -Property $peeringInfo
$peerings +=$obj
}
}
$peerings | Format-Table "Peering Name","VNet 1","VNet 2",AllowVirtualNetworkAccess,AllowForwardedTraffic,UseRemoteGateways,AllowGatewayTransit
И вот результат:
Peering Name VNet 1 VNet 2 AllowVirtualNetworkAccess AllowForwardedTraffic UseRemoteGateways AllowGatewayTransit
------------ ------ ------ ------------------------- --------------------- ----------------- -------------------
test-peering vnet-ine-test vnet-chn-docker False True False False
vnet-docker-test vnet-chn-docker vnet-ine-test True True False False