У меня есть сценарий PS, который собирает информацию обо всех шлюзах виртуальной сети Az, но, похоже, возникла проблема с получением имени ресурса. Я получаю имя с красной стрелкой на скриншоте вместо имени с желтой стрелкой.
$gatewayDetailsArray = @()
# Loop through each subscription
#foreach ($subscription in $subscriptions) {
# Write-Host "Processing Subscription: $($subscription.Name)" -ForegroundColor Yellow
# Select the current subscription
# Select-AzSubscription -SubscriptionId $subscription.Id
# Get all resource groups in the current subscription
$resourceGroups = Get-AzResourceGroup
# Loop through each resource group to get virtual network gateways
foreach ($resourceGroup in $resourceGroups) {
# $gateways = Get-AzVirtualNetworkGateway -ResourceGroupName $resourceGroup.ResourceGroupName | Select-Object -Property Name, GatewayType, VpnType, Sku -ExpandProperty IpConfigurations
# Loop through each virtual network gateway and add details to the array
foreach ($gateway in $gateways) {
$details = @{
Subscription = $subscription.Name
ResourceGroupName = $gateway.ResourceGroupName
Name = $gateway.Name
GatewayType = $gateway.GatewayType
VpnType = $gateway.VpnType
GatewayIP = $gateway.GatewayIpAddress
SKU = $gateway.Sku.Name
VNET = ($gateway.subnet.id -split '/')[-3]
}
$gatewayDetailsArray += New-Object PSObject -Property $details
}
}
#}
# Export the gateway details array to a CSV file
$csvFilePath2 = "C:\temp\GatewayDetails_2.csv"
$gatewayDetailsArray | Export-Csv -Path $csvFilePath2 -NoTypeInformation


Чтобы собрать информацию обо всех шлюзах виртуальной сети в вашей подписке, вы можете использовать приведенный ниже модифицированный скрипт:
# $subscriptions = Get-AzSubscription
# Initialize an array to store gateway details
$gatewayDetailsArray = @()
# Loop through each subscription
#foreach ($subscription in $subscriptions) {
# Write-Host "Processing Subscription: $($subscription.Name)" -ForegroundColor Yellow
# Select the current subscription
# Select-AzSubscription -SubscriptionId $subscription.Id
# <span class = " active-doc-0" data-doc-items = "0">Get all resource groups in the current subscription[1](#doc-pos=0)</span>
$resourceGroups = Get-AzResourceGroup
# Loop through each resource group to get virtual network gateways
foreach ($resourceGroup in $resourceGroups) {
$gateways = Get-AzVirtualNetworkGateway -ResourceGroupName $resourceGroup.ResourceGroupName | Select-Object -ExpandProperty Name
# <span class = " active-doc-1" data-doc-items = "1">Loop through each virtual network gateway and add details to the array[2](#doc-pos=1)</span>
foreach ($gateway in $gateways) {
$details = @{
Subscription = $subscription.Name
ResourceGroupName = $resourceGroup.ResourceGroupName
Name = $gateway
}
$gatewayDetailsArray += New-Object PSObject -Property $details
}
}
#}
# Output the gateway details
$gatewayDetailsArray | Format-Table -AutoSize
# Export the gateway details array to a CSV file
$csvFilePath2 = "C:\temp\GatewayDetails_2.csv"
$gatewayDetailsArray | Export-Csv -Path $csvFilePath2 -NoTypeInformation
Выход:

В csv файл был экспортирован, как показано ниже:

# $subscriptions = Get-AzSubscription
# Initialize an array to store gateway details
$gatewayDetailsArray = @()
# Loop through each subscription
#foreach ($subscription in $subscriptions) {
# Write-Host "Processing Subscription: $($subscription.Name)" -ForegroundColor Yellow
# Select the current subscription
# Select-AzSubscription -SubscriptionId $subscription.Id
# <span class = " active-doc-0" data-doc-items = "0">Get all resource groups in the current subscription[1](#doc-pos=0)</span>
$resourceGroups = Get-AzResourceGroup
# Loop through each resource group to get virtual network gateways
foreach ($resourceGroup in $resourceGroups) {
$gateways = Get-AzVirtualNetworkGateway -ResourceGroupName $resourceGroup.ResourceGroupName | Select-Object -ExpandProperty Name
# <span class = " active-doc-1" data-doc-items = "1">Loop through each virtual network gateway and add details to the array[2](#doc-pos=1)</span>
foreach ($gateway in $gateways) {
$details = @{
Subscription = $subscription.Name
ResourceGroupName = $resourceGroup.ResourceGroupName
Name = $gateway
vpnType = $gateway.VpnType
GatewayType = $gateway.GatewayType
SKU = $gateway.Sku.Name
VNET = ($gateway.subnet.id -split '/')[-3]
}
$gatewayDetailsArray += New-Object PSObject -Property $details
}
}
#}
# Output the gateway details
$gatewayDetailsArray | Format-Table -AutoSize
$csvFilePath2 = "C:\temp\GatewayDetails_2.csv"
$gatewayDetailsArray | Export-Csv -Path $csvFilePath2 -NoTypeInformation
Мы хотели бы ниже в выводе. Имя шлюза, идентификатор подписки, группа ресурсов, VPNType, имя SKU, идентификатор подсети из IP-конфигураций (см. исходный снимок экрана), чтобы мы могли извлечь сведения о виртуальной сети.
Вы можете использовать приведенную ниже команду, чтобы получить все подробности, как показано ниже:
# Initialize an array to store gateway details
$gatewayDetailsArray = @()
# Get all subscriptions
$subscriptions = Get-AzSubscription
# Loop through each subscription
foreach ($subscription in $subscriptions) {
Write-Host "Processing Subscription: $($subscription.Name)" -ForegroundColor Yellow
# Select the current subscription
Select-AzSubscription -SubscriptionId $subscription.Id
# Get all resource groups in the current subscription
$resourceGroups = Get-AzResourceGroup
# Loop through each resource group to get virtual network gateways
foreach ($resourceGroup in $resourceGroups) {
$gateways = Get-AzVirtualNetworkGateway -ResourceGroupName $resourceGroup.ResourceGroupName | Select-Object -Property Name, @{Name = "SubscriptionID";Expression = {$subscription.Id}}, ResourceGroupName, VpnType, @{Name = "SKUName";Expression = {$_.Sku.Name}}, @{Name = "SubnetID";Expression = {$_.IpConfigurations.Subnet.Id}}, @{Name = "SubnetName";Expression = {(Get-AzVirtualNetworkSubnetConfig -ResourceId $_.IpConfigurations.Subnet.Id).Name}}
# Loop through each virtual network gateway and add details to the array
foreach ($gateway in $gateways) {
$gatewayDetailsArray += $gateway
}
}
}
# Output the gateway details
$gatewayDetailsArray | Format-Table -AutoSize Name, SubscriptionID, ResourceGroupName, VpnType, SKUName, SubnetID, SubnetName
# Export the gateway details array to a CSV file
$csvFilePath2 = "C:\temp\GatewayDetails_2.csv"
$gatewayDetailsArray | Export-Csv -Path $csvFilePath2 -NoTypeInformation


Это соответствует вашему требованию? Проверьте это оно отображает все подписки и предоставляет информацию о VPN-шлюзе. В моем случае у меня есть vpn-шлюз только в 1 подписке.
Проблема здесь в том, что я получаю другую информацию, такую как SKUname, VPNtype, SubnetID. Я изменил сценарий, чтобы включить эти значения в вывод, но они пустые. Я копирую модифицированный скрипт ниже.
Не могли бы вы уточнить, какие именно значения вам нужны?
Мы хотели бы ниже в выводе. Имя шлюза, идентификатор подписки, группа ресурсов, VPNType, имя SKU, идентификатор подсети из IP-конфигураций (см. исходный снимок экрана), чтобы мы могли извлечь сведения о виртуальной сети.
@A Пожалуйста, проверьте обновленный ответ
Это сработало. Спасибо.
Нет, это не соответствует нашим требованиям. У нас более 1000 подписок, и нам нужно создать отчет PowerBI, чтобы отслеживать ресурсы. Существующий сценарий, который я разместил выше, содержит виртуальную сеть, с которой связан шлюз, которую мы можем использовать для сопоставления с другими ресурсами. Я хотел знать, можем ли мы получить имя шлюза в этом скрипте или другим способом, где мы также можем получить расширенные свойства. Простой экспорт шлюзов бесполезен, поскольку мы хотим, чтобы они были связаны с связанной с ними виртуальной сетью.