如何列出所有订阅的 Azure 恢复服务保管库并使用所需参数导出到 csv

How to list Azure recovery services vault of all the subscription and export to csv with required parameter

我编写了一个 PowerShell 脚本来检索跨多个订阅的 Azure 恢复服务保管库列表。

这是我的代码:

$subscriptions = Get-AzSubscription

ForEach ($Subscription in $Subscriptions) {
    Set-AzContext -SubscriptionId 77a74465-c065-4108-b270-edd84f918fe0

    $vaults = get-azrecoveryservicesvault
    
    ForEach ($vault in $vaults) 
    {
        Set-AzRecoveryServicesVaultContext -Vault $vault
        Get-AzRecoveryServicesVault |Select-Object "Name","ResourceGroupName","Location","SubscritptionId" | Export-Csv "C:\RSV-Report.csv" -NoTypeInformation -Encoding ASCII -Append  
    }
}

这 returns 输出如下:

它没有返回所有资源的订阅 ID。

但是,当我使用此代码调用单个订阅和单个资源组时:

Set-AzContext -SubscriptionId 77a74465-c065-4108-b270-********
Get-AzRecoveryServicesVault | Select-Object "Name","ResourceGroupName","Location","SubscriptionId" | Export-Csv "C:\report1.csv" -NoTypeInformation -Append 

我得到了完美的输出:

我希望输出看起来与同时针对所有单个订阅和单个资源组的输出相同。

我需要像上面那样的输出帮助,我还想要获取订阅名称列。 我试图在上面的代码中的 select-object 中传递订阅名称,但它在订阅名称列的行中给出了空白条目。

如果有人能帮助我,我想提前感谢。

我是 powershell 的新手,我一直在尝试解决这个问题。

您在每次硬编码迭代中使用相同的 SubscriptionId,您应该使用通过 Get-AzSubscription 调用收到的每个 $Subscription 对象的 Id 属性。

尝试

$subscriptions = Get-AzSubscription

# loop through the subscriptions and collect the output in variable $result
$result = foreach ($Subscription in $Subscriptions) {
    $null   = Set-AzContext -SubscriptionId $Subscription.Id
    $vaults = Get-AzRecoveryServicesVault

    foreach ($vault in $vaults) {
        Set-AzRecoveryServicesVaultContext -Vault $vault
        # output a PSObject with the chosen properties
        Get-AzRecoveryServicesVault | Select-Object "Name","ResourceGroupName","Location","SubscriptionId" 
    }
} 

$result | Export-Csv "C:\RSV-Report.csv" -NoTypeInformation -Encoding ASCII