I found my junior colleague are gathering Azure virtual machines backup report manually so I thought to write and pull Azure Virtual Machine Backup (Recovery services vault) report including Backup status and Summary using Microsoft PowerShell script to ease the task.
To check the current backup configuration and status information on the Azure Portal, select Virtual Machine, click Backup in the navigation pane, this is a seperate pane to view Backup information (It includes Backup status Summary, Recovery services vault name, backup policy name, last backup status and etc..). I wanted this information in excel file.
Powershell Azure script is very simple, once script is executed it fetches report of all VMs from Azure and shows below collected information.
There are two seperate parameters to use with this script. Parameter -AllVirtualMachines fetches information of All vms backup (This is a default parameter and doesn't need to mention while executing script). If there is requirement to get backup information from VMs list you can use parameter -VirtualMachinesList with VM Names seperated by comma.
If you want this information in Excel CSV file just use pipeline to store information in csv. Example: | Export-Csv filename.csv
Download this script here or it is also available on github.com.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
[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 |
Useful Articles
CREATE NEW NSG (NETWORK SECURITY GROUP - VIRTUAL FIREWALL ACL) ON MICROSOFT AZURE
POWERSHELL - EXPORT AZURE NSG (NETWORK SECURITY GROUP) RULES TO EXCEL
MICROSOFT AZURE POWERSHELL: CREATING NEW NSG (NETWORK SECURITY GROUP)
MICROSOFT AZURE POWERSHELL: CLONING (COPING) OR IMPORTING EXISTING NSG (NETWORK SECURITY GROUP) FROM EXCEL
Powershell Azure Az module Install-Package cannot convert value 2.0.0-preview to type system.version
Part 1: Create and deploy a website with Microsoft Azure web app service plan