Powershell Hyper-V 2008R2-获取虚拟机&x27;快照位置

Powershell Hyper-V 2008R2-获取虚拟机&x27;快照位置,powershell,windows-server-2008-r2,snapshot,hyper-v,Powershell,Windows Server 2008 R2,Snapshot,Hyper V,我需要使用Powershell和PSHyperV模块为运行在Windows Server 2008 R2上的虚拟机实施备份解决方案。该模块帮助加载,因为它提供了一种获取VM属性和其他内容、执行基本功能等的简单方法 我计划采用停机时间最少的方案,因为所讨论的虚拟机可能会被客户机使用,而且它们通常不允许任何停机时间。我知道,使用Windows Server 2012 R2虚拟机监控程序完全可以解决这个问题,因为它具有实时VHD合并功能,但基础设施的迁移过程足够长,备份不需要等待 目前,备份是通过sa

我需要使用Powershell和PSHyperV模块为运行在Windows Server 2008 R2上的虚拟机实施备份解决方案。该模块帮助加载,因为它提供了一种获取VM属性和其他内容、执行基本功能等的简单方法

我计划采用停机时间最少的方案,因为所讨论的虚拟机可能会被客户机使用,而且它们通常不允许任何停机时间。我知道,使用Windows Server 2012 R2虚拟机监控程序完全可以解决这个问题,因为它具有实时VHD合并功能,但基础设施的迁移过程足够长,备份不需要等待

目前,备份是通过
save-VM->copy-tree->start-VM
过程完成的,对于最大的虚拟机来说,这需要最多6小时的停机时间。我计划使用虚拟机快照来减少停机时间,因为一旦执行了快照,就可以在其他地方备份VHD和快照数据,而不会干扰虚拟机(速度会较慢,但仅此而已)。然后,我计划保存虚拟机,删除快照(将发生VHD合并),等待合并完成,然后启动虚拟机,在最坏的情况下,可能会将虚拟机停机时间减少到半小时

到目前为止,我的脚本能够找到给定虚拟机的VHD并对其进行备份,但无法找到虚拟机的快照位置。可能只是从VHDs文件夹向后遍历树不会产生“虚拟机”或“快照”文件夹,因此猜测是不可能的


如何获取快照文件的位置以便手动导出VM快照?

获取了数据,也许有人会发现它很有用

$vmName = "Test VM"
$vm = Get-VM $vmname
$vmGlobal = Get-WMIObject -class Msvm_VirtualSystemGlobalSettingData -namespace "root/virtualization" | where {$_.systemname -eq $vm.name}
$vmRootPath = $vmGlobal.ExternalDataRoot
$snapshotPath = $vmGlobal.SnapshotDataRoot
然后,获取这些路径,将“快照”附加到快照路径(显然是硬编码的),将“虚拟机”附加到根路径,并获取配置和快照文件。可以通过调用
$vm | Get VMDisk |来接收磁盘,其中{$\.DiskName-eq“Hard Disk Image”}
,这些包含文件的绝对路径

这应该足以让我从快照中获取备份和恢复VM所需的所有数据,即使原始VM由于磁盘丢失而被破坏。我可能不得不修改备份的XML来更改路径,但这要容易一点