Assistance with looping through multiple subscriptions

%3CLINGO-SUB%20id%3D%22lingo-sub-3244941%22%20slang%3D%22en-US%22%3EAssistance%20with%20looping%20through%20multiple%20subscriptions%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-3244941%22%20slang%3D%22en-US%22%3E%3CP%3EHi%20Community%2C%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EI'm%20using%20the%20below%20script%20from%3CSPAN%3E%26nbsp%3B%3C%2FSPAN%3E%3CA%20href%3D%22http%3A%2F%2Fvcloud-lab.com%2Fentries%2Fmicrosoft-azure%2Fget-azure-virtual-machine-backup-reports-using-powershell%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%22%3Ehttp%3A%2F%2Fvcloud-lab.com%2Fentries%2Fmicrosoft-azure%2Fget-azure-virtual-machine-backup-reports-using-powershell%3C%2FA%3E%3CSPAN%3E%26nbsp%3B%3C%2FSPAN%3Eto%20pull%20Azure%20VM%20backup%20details.%20Currently%20I%20have%20to%20run%20the%20script%20against%20each%20subscription%2C%20I%20would%20love%20to%20have%20it%20loop%20though%20all%20subscriptions.%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EI've%20been%20trying%20to%20get%20it%20working%20using%20this%20example%3CSPAN%3E%26nbsp%3B%3C%2FSPAN%3E%3CA%20href%3D%22https%3A%2F%2Fwww.jpaul.me%2F2019%2F05%2Fazure-automation-how-to-quickly-work-with-many-subscriptions%2F%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%22%3Ehttps%3A%2F%2Fwww.jpaul.me%2F2019%2F05%2Fazure-automation-how-to-quickly-work-with-many-subscriptions%2F%3C%2FA%3E%3CSPAN%3E%26nbsp%3B%3C%2FSPAN%3Ebut%20I'm%20new%20to%20Powershell%20and%20am%20struggling.%20Any%20suggestions%20would%20be%20really%20appreciated.%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-powershell%22%3E%3CCODE%3E%5BCmdletBinding(SupportsShouldProcess%3D%24True%2C%0A%20%20%20%20ConfirmImpact%3D'Medium'%2C%0A%20%20%20%20HelpURI%3D'http%3A%2F%2Fvcloud-lab.com'%2C%0A%20%20%20%20DefaultParameterSetName%20%3D%20'AllVirtualMachines'%0A)%5D%0A%0A%26lt%3B%23%0A%20%20%20%20.SYNOPSIS%0A%20%20%20%20Collect%20Azure%20VM%20Backup%20Information%0A%0A%20%20%20%20.DESCRIPTION%0A%20%20%20%20This%20Script%20collects%20Azure%20Virtual%20Machine%20Backup%20Recovery%20service%20vault%20information%2C%20This%20report%20includes%20the%20complete%20backup%20status%20Information%20of%20VM.%0A%0A%20%20%20%20.PARAMETER%20AllVirtualMachines%0A%20%20%20%20Collect%20Backup%20information%20of%20the%20all%20Azure%20Virtual%20Machines%2C%20This%20is%20default%20parameter.%0A%0A%20%20%20%20.PARAMETER%20VirtualMachineList%0A%20%20%20%20You%20can%20specify%20for%20which%20virtual%20machine%20you%20want%20backup%20information.%0A%0A%20%20%20%20.INPUTS%0A%20%20%20%20None.%20Provides%20virtual%20machine%20information.%0A%0A%20%20%20%20.OUTPUTS%0A%20%20%20%20Generate%20Backup%20information.%20You%20can%20pipe%20information%20to%20Export-CSV.%0A%0A%20%20%20%20.EXAMPLE%0A%20%20%20%20PS%26gt%3B%20.%5CGet-AzVMBackupInformation.ps1%0A%20%20%20%20%0A%20%20%20%20VM_Name%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20vcloud-lab-vm01%0A%20%20%20%20VM_Location%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20uksouth%0A%20%20%20%20VM_ResourceGroupName%20%20%20%20%20%20%20%20%20%20%20%20%3A%20VCLOUD-LAB.COM%0A%20%20%20%20VM_BackedUp%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20True%0A%20%20%20%20VM_RecoveryVaultName%20%20%20%20%20%20%20%20%20%20%20%20%3A%20vault828%0A%20%20%20%20VM_RecoveryVaultPolicy%20%20%20%20%20%20%20%20%20%20%3A%20DailyPolicy-kosrnox0%0A%20%20%20%20VM_BackupHealthStatus%20%20%20%20%20%20%20%20%20%20%20%3A%20Passed%0A%20%20%20%20VM_BackupProtectionStatus%20%20%20%20%20%20%20%3A%20Healthy%0A%20%20%20%20VM_LastBackupStatus%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20Completed%0A%20%20%20%20VM_LastBackupTime%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%2027-05-2021%2019%3A32%3A34%0A%20%20%20%20VM_BackupDeleteState%20%20%20%20%20%20%20%20%20%20%20%20%3A%20NotDeleted%0A%20%20%20%20VM_BackupLatestRecoveryPoint%20%20%20%20%3A%2027-05-2021%2019%3A32%3A37%0A%20%20%20%20VM_Id%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20%2Fsubscriptions%2F9e22xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx%2FresourceGroups%2FVCLOUD-LAB.COM%2Fproviders%2FMicrosoft.Compute%2FvirtualMachines%2Fvcloud-lab-vm01%0A%20%20%20%20RecoveryVault_ResourceGroupName%20%3A%20vCloud-lab.com%0A%20%20%20%20RecoveryVault_Location%20%20%20%20%20%20%20%20%20%20%3A%20uksouth%0A%20%20%20%20RecoveryVault_SubscriptionId%20%20%20%20%3A%20%2Fsubscriptions%2F9e22xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx%2FresourceGroups%2FvCloud-lab.com%2Fproviders%2FMicrosoft.RecoveryServices%2Fvaults%2Fvault828%0A%0A%20%20%20%20.EXAMPLE%0A%20%20%20%20PS%26gt%3B%20.%5CGet-AzVMBackupInformation.ps1%20-AllVirtualMachines%0A%20%20%20%20This%20produces%20same%20result%20as%20.%5CGet-AzVMBackupInformation.ps1%20from%20all%20VMs%0A%0A%20%20%20%20.EXAMPLE%0A%20%20%20%20PS%26gt%3B%20.%5CGet-AzVMBackupInformation.ps1%20-VirtualMachineList%0A%20%20%20%20Provide%20either%20single%20virtual%20machine%20name%20or%20in%20list%0A%20%20%20%20%0A%20%20%20%20.LINK%0A%20%20%20%20Online%20version%3A%20http%3A%2F%2Fvcloud-lab.com%0A%0A%20%20%20%20.LINK%0A%20%20%20%20Get-AzVMBackupInformation.ps1%0A%23%26gt%3B%0AParam%0A(%20%0A%20%20%20%20%5Bparameter(Position%3D0%2C%20ParameterSetName%20%3D%20'AllVMs'%20)%5D%0A%20%20%20%20%5BSwitch%5D%24AllVirtualMachines%2C%0A%20%20%20%20%5Bparameter(Position%3D0%2C%20ValueFromPipeline%3D%24True%2C%20ValueFromPipelineByPropertyName%3D%24True%2C%20ParameterSetName%20%3D%20'VM'%20)%5D%0A%20%20%20%20%5Balias('Name')%5D%0A%20%20%20%20%5BString%5B%5D%5D%24VirtualMachineList%0A)%20%23Param%0ABegin%20%0A%7B%0A%20%20%20%20%23Collecing%20Azure%20virtual%20machines%20Information%0A%20%20%20%20Write-Host%20%22Collecing%20Azure%20virtual%20machine%20Information%22%20-BackgroundColor%20DarkGreen%0A%20%20%20%20if%20((%24PSBoundParameters.ContainsKey('AllVirtualMachines'))%20-or%20(%24PSBoundParameters.Count%20-eq%200))%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%24vms%20%3D%20Get-AzVM%0A%20%20%20%20%7D%20%23if%20(%24PSBoundParameters.ContainsKey('AllVirtualMachines'))%0A%20%20%20%20elseif%20(%24PSBoundParameters.ContainsKey('VirtualMachineList'))%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%24vms%20%3D%20%40()%0A%20%20%20%20%20%20%20%20foreach%20(%24vmname%20in%20%24VirtualMachineList)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24vms%20%2B%3D%20Get-AzVM%20-Name%20%24vmname%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%7D%20%23foreach%20(%24vmname%20in%20%24VirtualMachineList)%0A%20%20%20%20%7D%20%23elseif%20(%24PSBoundParameters.ContainsKey('VirtualMachineList'))%0A%0A%20%20%20%20%23Collecing%20All%20Azure%20backup%20recovery%20vaults%20Information%0A%20%20%20%20Write-Host%20%22Collecting%20all%20Backup%20Recovery%20Vault%20information%22%20-BackgroundColor%20DarkGreen%0A%20%20%20%20%24backupVaults%20%3D%20Get-AzRecoveryServicesVault%0A%7D%20%23Begin%20%0AProcess%0A%7B%0A%20%20%20%20%24vmBackupReport%20%3D%20%5BSystem.Collections.ArrayList%5D%3A%3Anew()%0A%20%20%20%20foreach%20(%24vm%20in%20%24vms)%20%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%24recoveryVaultInfo%20%3D%20Get-AzRecoveryServicesBackupStatus%20-Name%20%24vm.Name%20-ResourceGroupName%20%24vm.ResourceGroupName%20-Type%20'AzureVM'%0A%20%20%20%20%20%20%20%20if%20(%24recoveryVaultInfo.BackedUp%20-eq%20%24true)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20%22%24(%24vm.Name)%20-%20BackedUp%20%3A%20Yes%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%23Backup%20Recovery%20Vault%20Information%0A%20%20%20%20%20%20%20%20%20%20%20%20%24vmBackupVault%20%3D%20%24backupVaults%20%7C%20Where-Object%20%7B%24_.ID%20-eq%20%24recoveryVaultInfo.VaultId%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%23Backup%20recovery%20Vault%20policy%20Information%0A%20%20%20%20%20%20%20%20%20%20%20%20%24container%20%3D%20Get-AzRecoveryServicesBackupContainer%20-ContainerType%20AzureVM%20-VaultId%20%24vmBackupVault.ID%20-FriendlyName%20%24vm.Name%20%23-Status%20%22Registered%22%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%24backupItem%20%3D%20Get-AzRecoveryServicesBackupItem%20-Container%20%24container%20-WorkloadType%20AzureVM%20-VaultId%20%24vmBackupVault.ID%0A%20%20%20%20%20%20%20%20%7D%20%23if%20(%24recoveryVaultInfo.BackedUp%20-eq%20%24true)%0A%20%20%20%20%20%20%20%20else%20%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20%22%24(%24vm.Name)%20-%20BackedUp%20%3A%20No%22%20-BackgroundColor%20DarkRed%0A%20%20%20%20%20%20%20%20%20%20%20%20%24vmBackupVault%20%3D%20%24null%0A%20%20%20%20%20%20%20%20%20%20%20%20%24container%20%3D%20%20%24null%0A%20%20%20%20%20%20%20%20%20%20%20%20%24backupItem%20%3D%20%20%24null%0A%20%20%20%20%20%20%20%20%7D%20%23else%20if%20(%24recoveryVaultInfo.BackedUp%20-eq%20%24true)%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%5Bvoid%5D%24vmBackupReport.Add(%5BPSCustomObject%5D%40%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20VM_Name%20%3D%20%24vm.Name%0A%20%20%20%20%20%20%20%20%20%20%20%20VM_Location%20%3D%20%24vm.Location%0A%20%20%20%20%20%20%20%20%20%20%20%20VM_ResourceGroupName%20%3D%20%24vm.ResourceGroupName%0A%20%20%20%20%20%20%20%20%20%20%20%20VM_BackedUp%20%3D%20%24recoveryVaultInfo.BackedUp%0A%20%20%20%20%20%20%20%20%20%20%20%20VM_RecoveryVaultName%20%3D%20%20%24vmBackupVault.Name%0A%20%20%20%20%20%20%20%20%20%20%20%20VM_RecoveryVaultPolicy%20%3D%20%24backupItem.ProtectionPolicyName%0A%20%20%20%20%20%20%20%20%20%20%20%20VM_BackupHealthStatus%20%3D%20%24backupItem.HealthStatus%0A%20%20%20%20%20%20%20%20%20%20%20%20VM_BackupProtectionStatus%20%3D%20%24backupItem.ProtectionStatus%0A%20%20%20%20%20%20%20%20%20%20%20%20VM_LastBackupStatus%20%3D%20%24backupItem.LastBackupStatus%0A%20%20%20%20%20%20%20%20%20%20%20%20VM_LastBackupTime%20%3D%20%24backupItem.LastBackupTime%0A%20%20%20%20%20%20%20%20%20%20%20%20VM_BackupDeleteState%20%3D%20%24backupItem.DeleteState%0A%20%20%20%20%20%20%20%20%20%20%20%20VM_BackupLatestRecoveryPoint%20%3D%20%24backupItem.LatestRecoveryPoint%0A%20%20%20%20%20%20%20%20%20%20%20%20VM_Id%20%3D%20%24vm.Id%0A%20%20%20%20%20%20%20%20%20%20%20%20RecoveryVault_ResourceGroupName%20%3D%20%24vmBackupVault.ResourceGroupName%0A%20%20%20%20%20%20%20%20%20%20%20%20RecoveryVault_Location%20%3D%20%24vmBackupVault.Location%0A%20%20%20%20%20%20%20%20%20%20%20%20RecoveryVault_SubscriptionId%20%3D%20%24vmBackupVault.ID%0A%20%20%20%20%20%20%20%20%7D)%20%23%5Bvoid%5D%24vmBackupReport.Add(%5BPSCustomObject%5D%40%7B%0A%20%20%20%20%7D%20%23foreach%20(%24vm%20in%20%24vms)%20%0A%7D%20%23Process%0Aend%0A%7B%0A%20%20%20%20%24vmBackupReport%0A%7D%20%23end%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-3244941%22%20slang%3D%22en-US%22%3E%3CLINGO-LABEL%3EAzure%20Backup%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3EWindows%20PowerShell%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E%3CLINGO-SUB%20id%3D%22lingo-sub-3253528%22%20slang%3D%22en-US%22%3ERe%3A%20Assistance%20with%20looping%20through%20multiple%20subscriptions%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-3253528%22%20slang%3D%22en-US%22%3E%3CP%3EHello%20%3CA%20href%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F1114300%22%20target%3D%22_blank%22%3E%40Hairy_Zeus%3C%2FA%3E%2C%3C%2FP%3E%3CP%3EOne%20of%20the%20option%20would%20be%20to%20leave%20current%20function%20intact%20and%20add%20another%20function%20(wrapper)%20around%20it.%20Wrapper%20will%20loop%20through%20all%20Azure%20Subscriptions%20and%20will%20execute%20%3CSTRONG%3EGet-AzVMBackupInformation%3C%2FSTRONG%3E%20for%20each%20subscription.%3CBR%20%2F%3ESomething%20similar%20to%20this%3A%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-powershell%22%3E%3CCODE%3E%23List%20to%20store%20all%20results%0A%24Result%3DNew-Object%20System.Collections.Generic.List%5BPSObject%5D%0A%23All%20Azure%20Subscriptions%0A%24Subscriptions%20%3D%20Get-AzSubscription%0A%23Looping%20through%20each%20and%20every%20subscription%0Aforeach%20(%24sub%20in%20%24Subscriptions)%20%7B%0A%20%20%20%20%23Setting%20context%20so%20the%20script%20will%20be%20executed%20within%20the%20subscription's%20scope%0A%20%20%20%20Get-AzSubscription%20-SubscriptionName%20%24sub.Name%20%7C%20Set-AzContext%0A%20%20%20%20%23Getting%20VM%20backup%20info%20for%20all%20VMs%20in%20subscription%0A%20%20%20%20%24Obj%3D.%5CGet-AzVMBackupInformation.ps1%20-AllVirtualMachines%0A%20%20%20%20%23Enriching%20the%20output%20with%20SubscriptionId%20for%20future%20reference%20and%20convenience%0A%20%20%20%20%24Obj%20%7C%20Add-Member%20-NotePropertyName%20SubscriptionId%20-NotePropertyValue%20%24Sub.Id%0A%20%20%20%20%23Adding%20results%20to%20resulting%20List%0A%20%20%20%20%24Result.Add(%24Obj)%0A%7D%0A%24Result%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3EHope%20that%20helps.%3C%2FP%3E%3C%2FLINGO-BODY%3E
Occasional Contributor

Hi Community,

 

I'm using the below script from http://vcloud-lab.com/entries/microsoft-azure/get-azure-virtual-machine-backup-reports-using-powersh... to pull Azure VM backup details. Currently I have to run the script against each subscription, I would love to have it loop though all subscriptions.

 

I've been trying to get it working using this example https://www.jpaul.me/2019/05/azure-automation-how-to-quickly-work-with-many-subscriptions/ but I'm new to Powershell and am struggling. Any suggestions would be really appreciated.

 

 

[CmdletBinding(SupportsShouldProcess=$True,
    ConfirmImpact='Medium',
    HelpURI='http://vcloud-lab.com',
    DefaultParameterSetName = 'AllVirtualMachines'
)]

<#
    .SYNOPSIS
    Collect Azure VM Backup Information

    .DESCRIPTION
    This Script collects Azure Virtual Machine Backup Recovery service vault information, This report includes the complete backup status Information of VM.

    .PARAMETER AllVirtualMachines
    Collect Backup information of the all Azure Virtual Machines, This is default parameter.

    .PARAMETER VirtualMachineList
    You can specify for which virtual machine you want backup information.

    .INPUTS
    None. Provides virtual machine information.

    .OUTPUTS
    Generate Backup information. You can pipe information to Export-CSV.

    .EXAMPLE
    PS> .\Get-AzVMBackupInformation.ps1
    
    VM_Name                         : vcloud-lab-vm01
    VM_Location                     : uksouth
    VM_ResourceGroupName            : VCLOUD-LAB.COM
    VM_BackedUp                     : True
    VM_RecoveryVaultName            : vault828
    VM_RecoveryVaultPolicy          : DailyPolicy-kosrnox0
    VM_BackupHealthStatus           : Passed
    VM_BackupProtectionStatus       : Healthy
    VM_LastBackupStatus             : Completed
    VM_LastBackupTime               : 27-05-2021 19:32:34
    VM_BackupDeleteState            : NotDeleted
    VM_BackupLatestRecoveryPoint    : 27-05-2021 19:32:37
    VM_Id                           : /subscriptions/9e22xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/VCLOUD-LAB.COM/providers/Microsoft.Compute/virtualMachines/vcloud-lab-vm01
    RecoveryVault_ResourceGroupName : vCloud-lab.com
    RecoveryVault_Location          : uksouth
    RecoveryVault_SubscriptionId    : /subscriptions/9e22xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/vCloud-lab.com/providers/Microsoft.RecoveryServices/vaults/vault828

    .EXAMPLE
    PS> .\Get-AzVMBackupInformation.ps1 -AllVirtualMachines
    This produces same result as .\Get-AzVMBackupInformation.ps1 from all VMs

    .EXAMPLE
    PS> .\Get-AzVMBackupInformation.ps1 -VirtualMachineList
    Provide either single virtual machine name or in list
    
    .LINK
    Online version: http://vcloud-lab.com

    .LINK
    Get-AzVMBackupInformation.ps1
#>
Param
( 
    [parameter(Position=0, ParameterSetName = 'AllVMs' )]
    [Switch]$AllVirtualMachines,
    [parameter(Position=0, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True, ParameterSetName = 'VM' )]
    [alias('Name')]
    [String[]]$VirtualMachineList
) #Param
Begin 
{
    #Collecing Azure virtual machines Information
    Write-Host "Collecing Azure virtual machine Information" -BackgroundColor DarkGreen
    if (($PSBoundParameters.ContainsKey('AllVirtualMachines')) -or ($PSBoundParameters.Count -eq 0))
    {
        $vms = Get-AzVM
    } #if ($PSBoundParameters.ContainsKey('AllVirtualMachines'))
    elseif ($PSBoundParameters.ContainsKey('VirtualMachineList'))
    {
        $vms = @()
        foreach ($vmname in $VirtualMachineList)
        {
            $vms += Get-AzVM -Name $vmname
            
        } #foreach ($vmname in $VirtualMachineList)
    } #elseif ($PSBoundParameters.ContainsKey('VirtualMachineList'))

    #Collecing All Azure backup recovery vaults Information
    Write-Host "Collecting all Backup Recovery Vault information" -BackgroundColor DarkGreen
    $backupVaults = Get-AzRecoveryServicesVault
} #Begin 
Process
{
    $vmBackupReport = [System.Collections.ArrayList]::new()
    foreach ($vm in $vms) 
    {
        $recoveryVaultInfo = Get-AzRecoveryServicesBackupStatus -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName -Type 'AzureVM'
        if ($recoveryVaultInfo.BackedUp -eq $true)
        {
            Write-Host "$($vm.Name) - BackedUp : Yes"
            #Backup Recovery Vault Information
            $vmBackupVault = $backupVaults | Where-Object {$_.ID -eq $recoveryVaultInfo.VaultId}

            #Backup recovery Vault policy Information
            $container = Get-AzRecoveryServicesBackupContainer -ContainerType AzureVM -VaultId $vmBackupVault.ID -FriendlyName $vm.Name #-Status "Registered" 
            $backupItem = Get-AzRecoveryServicesBackupItem -Container $container -WorkloadType AzureVM -VaultId $vmBackupVault.ID
        } #if ($recoveryVaultInfo.BackedUp -eq $true)
        else 
        {
            Write-Host "$($vm.Name) - BackedUp : No" -BackgroundColor DarkRed
            $vmBackupVault = $null
            $container =  $null
            $backupItem =  $null
        } #else if ($recoveryVaultInfo.BackedUp -eq $true)
        
        [void]$vmBackupReport.Add([PSCustomObject]@{
            VM_Name = $vm.Name
            VM_Location = $vm.Location
            VM_ResourceGroupName = $vm.ResourceGroupName
            VM_BackedUp = $recoveryVaultInfo.BackedUp
            VM_RecoveryVaultName =  $vmBackupVault.Name
            VM_RecoveryVaultPolicy = $backupItem.ProtectionPolicyName
            VM_BackupHealthStatus = $backupItem.HealthStatus
            VM_BackupProtectionStatus = $backupItem.ProtectionStatus
            VM_LastBackupStatus = $backupItem.LastBackupStatus
            VM_LastBackupTime = $backupItem.LastBackupTime
            VM_BackupDeleteState = $backupItem.DeleteState
            VM_BackupLatestRecoveryPoint = $backupItem.LatestRecoveryPoint
            VM_Id = $vm.Id
            RecoveryVault_ResourceGroupName = $vmBackupVault.ResourceGroupName
            RecoveryVault_Location = $vmBackupVault.Location
            RecoveryVault_SubscriptionId = $vmBackupVault.ID
        }) #[void]$vmBackupReport.Add([PSCustomObject]@{
    } #foreach ($vm in $vms) 
} #Process
end
{
    $vmBackupReport
} #end

 

 

1 Reply

Hello @Hairy_Zeus,

One of the option would be to leave current function intact and add another function (wrapper) around it. Wrapper will loop through all Azure Subscriptions and will execute Get-AzVMBackupInformation for each subscription.
Something similar to this:

#List to store all results
$Result=New-Object System.Collections.Generic.List[PSObject]
#All Azure Subscriptions
$Subscriptions = Get-AzSubscription
#Looping through each and every subscription
foreach ($sub in $Subscriptions) {
    #Setting context so the script will be executed within the subscription's scope
    Get-AzSubscription -SubscriptionName $sub.Name | Set-AzContext
    #Getting VM backup info for all VMs in subscription
    $Obj=.\Get-AzVMBackupInformation.ps1 -AllVirtualMachines
    #Enriching the output with SubscriptionId for future reference and convenience
    $Obj | Add-Member -NotePropertyName SubscriptionId -NotePropertyValue $Sub.Id
    #Adding results to resulting List
    $Result.Add($Obj)
}
$Result

Hope that helps.