如何解决尝试使用 Powershell 列出 Azure 虚拟网络并导出到 CSV
我正在尝试创建一个脚本,该脚本可以列出所有 Azure 虚拟网络并使用 Powershell 将其导出为 Csv。
$day = Get-Date -Format " MMM-yyyy"
$path = "C:\Users\admin-vishal.singh\Desktop\Test\Report\"+ "$day-Vnet-Report.csv"
foreach ($Sub in $Subs) {
Select-AzSubscription -SubscriptionName $Sub.Name | Out-Null
$resource_grps = Get-AzResourceGroup
foreach ($resource_grp in $resource_grps) {
$networks = Get-AzVirtualNetwork
foreach ($vnet in $networks)
{
$null = Get-AzVirtualNetwork |Select-Object SubscriptionName,ResourceGroupName,Name,AddressSpace,Subnets,SubnetAddressSpace,RouteTable | Export-CSV -Path $path -NoTypeInformation -Encoding ASCII -Append
}
}
}
我无法以正确的格式检索数据并在检索数据时出现错误。 下面是数据片段
我无法检索很多值,例如子网地址空间、路由表和路由。
解决方法
当我们调用 export-csv
命令时,使用 ToString() 方法将属性值转换为字符串。但是 Get-AzVirtualNetwork
的结果是对象,我们不能直接将值转换为字符串。详情请参阅here和here
因此,关于这个问题,我建议您使用所需的信息创建一个自定义对象,然后将其保存到 csv 中。
例如
$vents =Get-AzVirtualNetwork|
Select-Object SubscriptionName,ResourceGroupName,Name,@{
label='AddressSpace'
expression={$_.AddressSpace.AddressPrefix}},@{
label='SubnetName'
expression={$_.Subnets.Name}
},@{
label='SubnetAddressSpace'
expression={$_.Subnets.AddressPrefix}
}
$vents | convertto-csv
,
以 Jim Xu 提供的内容为基础,您不需要为每个 ResourceGroup 设置单独的循环。 Get-AzVirtualNetwork 将返回整个订阅的所有虚拟网络。此外,您还需要 Select-Object 中的 SubscriptionName 表达式,因此代码如下所示:
foreach ($Sub in $Subs) {
Select-AzSubscription -SubscriptionName $Sub.Name | Out-Null
Get-AzVirtualNetwork |
Select-Object `
@{label='SubscriptionName'; expression={$Sub.Name}},`
ResourceGroupName,`
Name,`
@{label='AddressSpace'; expression={$_.AddressSpace.AddressPrefixes}},`
@{label='SubnetName'; expression={$_.Subnets.Name}},`
@{label='SubnetAddressSpace'; expression={$_.Subnets.AddressPrefix}} |
Export-CSV -Path $path -NoTypeInformation -Encoding ASCII -Append
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。