在 Hyper-V 中直接复制虚拟机配置或磁盘,容易导致名称冲突、ID 冲突,甚至误修改原虚拟机。本文提供一种官方推荐的安全方法:通过 Export → Import(Copy + GenerateNewId) 实现完整克隆,并自动重命名新虚拟机。
这是1对1的克隆,如果在克隆,输入新的newwm名称,在执行如下代码操作即可。
📋 使用前准备
- 以 管理员身份运行 PowerShell
- 确保源虚拟机已关闭(建议)
- 修改脚本中的变量:
$oldVM = "原虚拟机名称"
$newVM = "新虚拟机名称"
$base = "克隆存储目录"一键修改代码如下:
$oldVM = "WIN11H24"
$newVM = "WIN11H26"
$base = "D:\Hyper-V\ClonedVM"
# 导出
$stamp = Get-Date -Format "yyyyMMdd_HHmmss"
$exportRoot = Join-Path $base ("_export_" + $stamp)
Export-VM -Name $oldVM -Path $exportRoot
# 找 vmcx
$vmcx = Get-ChildItem $exportRoot -Recurse -Filter *.vmcx | Select -First 1
# 新 VM 目录
$newRoot = Join-Path $base $newVM
$vmPath = Join-Path $newRoot "VM"
$vhdPath = Join-Path $newRoot "VHD"
$snapPath = Join-Path $newRoot "Snapshots"
New-Item -ItemType Directory -Force -Path $vmPath,$vhdPath,$snapPath | Out-Null
# 导入(此时会生成一个名为 WIN11H26 的克隆)
Import-VM -Path $vmcx.FullName -Copy -GenerateNewId `
-VirtualMachinePath $vmPath `
-VhdDestinationPath $vhdPath `
-SnapshotFilePath $snapPath | Out-Null
# ⭐ 只从目标路径找新 VM(绝不会找到原机)
$newImported = Get-VM | Where-Object { $_.Path -like ($vmPath + "*") }
# ⭐ 按对象改名(安全)
Rename-VM -VM $newImported -NewName $newVM
# 清理导出
Remove-Item -Recurse -Force $exportRoot
"OK:原机未改变,新机=$newVM"原创文章,作者:开心电脑网,如若转载,请注明出处。