我是 powershell 新手,并尝试在单个或多个订阅中输出 Azure 虚拟网络的子网信息。
我可以输出到控制台并获得我正在寻找的结果,但很难将相同的输出输出到 csv 文件。
我知道我需要创建新对象等,但无法获得正确的语法来工作。
有人可以帮忙吗。
下面的工作代码......
$subs = Get-AzSubscription -SubscriptionID xxxxxxxxxxxxxxxx
foreach ($Sub in $Subs) {
$SelectSub = Select-AzSubscription -SubscriptionName $Sub.Name
$VNETs = Get-AzVirtualNetwork
foreach ($VNET in $VNETs) {
$Sub.Name
$VNET.Name
($VNET).AddressSpace.AddressPrefixes
($VNET).Subnets.Name
Write-Host " "
}
}
我认为这样的事情可以解决问题:
$subs = Get-AzSubscription -SubscriptionID xxxxxxxxxxxxxxxx
foreach ($Sub in $Subs) {
Select-AzSubscription -SubscriptionName $Sub.Name | Out-Null
$networks = Get-AzVirtualNetwork | ForEach-Object {
New-Object PSObject -Property @{
name = $_.name
subnets = $_.subnets.name -join ';'
addressSpace = $_.AddressSpace.AddressPrefixes -join ';'
}
}
$networks | Export-Csv -NoTypeInformation file.csv
}
编辑:以前的版本并没有真正起作用,我猜导出 csv 有点奇怪。
我的变体
$subs = (Get-AzSubscription | Sort-Object Name)
$subs | select Name,SubscriptionId
$networks = @()
foreach ($Sub in $Subs) {
Write-Output "Processing sub: $($Sub.Name)"
Select-AzSubscription -SubscriptionName $Sub.Name | Out-Null
$AzNetworks = Get-AzVirtualNetwork
ForEach ($AzNet in $AzNetworks) {
ForEach ($Subnet in $AzNet.Subnets) {
$networks += New-Object PSObject -Property @{
SubsName = $Sub.Name
SubsId = $Sub.SubscriptionId
VNetName = $AzNet.name
VNetSpace = $AzNet.AddressSpace.AddressPrefixes -join ';'
SubnetName = $Subnet.name
SubnetAddress = $Subnet.AddressPrefix -join ';'
}
}
}
}
$networks |
Sort-Object SubsName,VNetName,SubnetName |
Select SubsName,SubsId,VNetName,VNetSpace,SubnetName,SubnetAddress |
Export-Csv -NoTypeInformation AzureNetworks.csv