Below is a simple powershell script to create a snapshot of a VM in Azure for both the OS disk and any additional disks. Simply update the Get VM section with your parameters.
# Get VM
$VmName = "bvm-name"
$ResourceGroupName = "My-RG"
$vm = get-azvm -Name $VmName -ResourceGroupName $ResourceGroupName
$location = "centralus"
$ostype = "Windows"
#VM Snapshot
Write-Host "VM $($vm.name) OS Disk Snapshot Begin" -BackgroundColor Cyan -ForegroundColor White
$snapshotdisk = $vm.StorageProfile
$OSDiskSnapshotConfig = New-AzSnapshotConfig -SourceUri $snapshotdisk.OsDisk.ManagedDisk.id -CreateOption Copy -Location $location -OsType $ostype
$snapshotNameOS = "$($snapshotdisk.OsDisk.Name)_snapshot_$(Get-Date -Format ddMMyyHHmmss)"
# OS Disk Snapshot
try {
New-AzSnapshot -ResourceGroupName $ResourceGroupName -SnapshotName $snapshotNameOS -Snapshot $OSDiskSnapshotConfig -ErrorAction Stop
} catch {
$_
}
Write-Host "VM $($vm.name) OS Disk Snapshot End" -BackgroundColor Green -ForegroundColor White
# Data Disk Snapshots
Write-Host "VM $($vm.name) Data Disk Snapshots Begin" -BackgroundColor Cyan -ForegroundColor White
$dataDisks = ($snapshotdisk.DataDisks).name
#$datadiskid = ($snapshotdisk.DataDisks).id
foreach ($datadisk in $datadisks) {
$dataDisk = Get-AzDisk -ResourceGroupName $ResourceGroupName -DiskName $datadisk
Write-Host "VM $($vm.name) Data Disk $($datadisk.Name) Snapshot Begin" -BackgroundColor Cyan -ForegroundColor White
$DataDiskSnapshotConfig = New-AzSnapshotConfig -SourceUri $dataDisk.Id -CreateOption Copy -Location $location
$snapshotNameData = "$($vm.name)_$($datadisk.name)_snapshot_$(Get-Date -Format ddMMyyHHmmss)"
New-AzSnapshot -ResourceGroupName $ResourceGroupName -SnapshotName $snapshotNameData -Snapshot $DataDiskSnapshotConfig -ErrorAction Stop
Write-Host "VM $($vm.name) data Disk $($datadisk.Name) Snapshot End" -BackgroundColor Green -ForegroundColor White
}
Write-Host "VM $($vm.name) Data Disk Snapshots End" -BackgroundColor Green -ForegroundColor White