# takeVmSnapshot.ps1
$vmNames='Test-VM1','Cowabunga-VM4'
$snapShotLabel="Snapshot $(get-date -Format yyyyMMddTHHmmss)"
function takeVmSnapshot([string[]]$vmName,[string]$snapshotLabel){
$vmClusterNodes=Get-ClusterGroup|?{$_.GroupType -eq 'VirtualMachine'}
foreach ($vm in $vmName){
$ownerNode=($vmClusterNodes|?{$vm -eq $_.Name}).OwnerNode
if($ownerNode.State -eq 'Up'){
$setSnapShotCommand={
param($vm,$snapShotLabel)
Checkpoint-VM -VMName $vm -SnapshotName $snapShotLabel
}
invoke-command -ComputerName $ownerNode.Name -ScriptBlock $setSnapShotCommand -Args $vm,$snapShotLabel
}elseif($ownerNode){
write-warning "$vm is currently owned by DOWNED node $($ownerNode.Name). No snapshots can be taken for such guest VM."
}else{
write-warning "$vm is does not match any Hyper-V Host in this cluster $((get-cluster).Name)"
}
}
}
takeVmSnapshot $vmNames $snapShotLabel
Categories: