Easy Azure VM Snapshots with PowerShell

Adam Bertram

Read more posts by this author.

If you’re used to right-clicking on a VM in your favorite hypervisor and creating a snapshot, you’ll be in for a rude awakening when running VMs in the Microsoft Azure cloud. But, don’t fret, with the know-how you’ll learn in this tutorial, you can build your own tooling to create easy Azure VM snapshots!

Taking a snapshot or a backup of a VM is commonplace. There are always times when you need to back up a VM at a point in time and restore it at some later date. In the Azure cloud, it’s not quite as easy as clicking a few times though.

When a process isn’t as easy as you think it should be is a great time to build and use your own custom tool. You can rarely go wrong picking PowerShell as the scripting language of choice to make it happen.

In this article, you’re going to learn how to both back up and restore Azure virtual machines using a community PowerShell module called AzureVMSnapshots.

Before You Start

This article will be a tutorial showing you, step-by-step how to perform some tasks. If you’d like to follow along, please be sure you have met the following prerequisites:

  1. Windows PowerShell 5.1 or PowerShell 6+. The examples were only tested on PowerShell Core 6.2.3.
  2. An existing Azure VM – This VM will be used as the guinea pig to back up.
  3. The Azure PowerShell modules installed – Install-Module Az in your PowerShell console
  4. Connected to an Azure subscription

Install the AzureVMSnapshots Module

Installing the AzureVMSnapshots module is easy since it’s available via the PowerShell Gallery. Run Install-Module AzureVMSnapshots to get the module downloaded and installed.

Creating an Azure VM Snapshot

Once you’ve got a PowerShell console opened and authenticated to the Azure subscription where your VM lives, create a new snapshot with New-AzVmSnapshot.

The New-AzVmSnapshot only requires two parameters – the name of the VM and the resource group its located in. You can see an example below of creating a snapshot for a VM called VM1 in the Demo resource group.

Once executed, this may take a couple of minutes. In the background, Azure is stopping the VM and creating a snapshot. This cmdlet takes a snapshot of the OS disk.

New-AzVmSnapshot -VmName VM1 -ResourceGroupName 'Demo'

If you don’t want to shut down the VM, do NOT run this command!

Finding Available Snapshots

When you create a snapshot, they will be saved with a specific schema in the name. Regardless if you’ve created other snapshots another way, the AzureVMASnapshot module’s Get-AzVmSnapshot command will only return snapshots created with the module.

Below you can see an example of retrieving all snapshots stored in the Demo resource group.

Get-AzVmSnapshot -ResourceGroupName 'Demo'

Restoring Snapshots

Perhaps you’ve made some changes to the VM you didn’t meant to and would like to restore a snapshot. To restore snapshots, you can pipe a snapshot returned via Get-AzVmSnapshot to the Restore-AzVmSnapshot command like the example below.

Get-AzVmSnapshot -ResourceGroupName 'Demo' -VmName VM1 | Restore-AzVmSnapshot

When this command runs, you will then get prompted if you’d really like to restore the VM. If so, the VM will be shut down and the original source disk replaced with the snapshot disk.

Note: By default, Restore-AzVmSnapshot will leave the old disk. If you’d like to remove it after restoration is complete, use the RemoveOriginalDisk  parameter.

Removing Snapshots

Finally, if you don’t need a snapshot or set of snapshots anymore, you can remove them with the Remove-AzVmSnapshot command. The concept to remove a snapshot is the same as restoring one – pipe the snapshot from Get-AzVmSnapshot to Remove-AzVmSnapshot.

Get-AzVmSnapshot -ResourceGroupName 'Demo' -VmName VM1 | Remove-AzVmSnapshot


Using a community PowerShell module and just a few commands, you can easily create, manage, restore and remove Azure VM snapshots with just a few keystrokes!

Subscribe to Stay in Touch

Never miss out on your favorite ATA posts and our latest announcements!

Looks like you're offline!