适用场景
实验环境中的虚拟机名称往往只能说明系统类型,无法说明当前用途、哪些软件可以移除、最近进行了什么维护。本文为单台 Hyper-V 虚拟机追加一条简短记录,并保存可以恢复的原备注。适用于安装了 Hyper-V PowerShell 模块的 Windows 主机,操作不需要进入来宾系统。
备注适合记录用途、维护日期和非敏感注意事项。它不能代替备份、工单或资产系统,也不应该存放密码、密钥及恢复代码。本文使用 2026-10-30 作为维护日期,实际操作时应填写真实发生日期。
原理
虚拟机具有名称和唯一标识。名称可以修改,因此本次操作先列出清单,再按唯一标识选中对象。备注属于虚拟机配置,读取后得到文本;设置新文本会替换整个备注字段。因此,追加记录需要先保存旧文本,再把新行拼接到末尾。
我们把原备注与虚拟机标识一起导出到本地 XML 文件。该文件保存的是维护前的记录,不是整台虚拟机的备份。恢复时也只写回备注,不会恢复磁盘、网络或内存设置。
准备工作
在目标 Hyper-V 主机打开具有管理权限的 Windows PowerShell,确认当前目录允许写入,并选择只有维护人员可以访问的工作目录。先阅读原备注,确认其中没有需要另外保护的敏感信息。安排同一时间只有一人修改该字段,避免后保存的内容覆盖前一人的工作。
分步骤操作
第一步:按标识确认对象
Get-VM | Select-Object Name, Id, State
$vmId = [guid](Read-Host '输入目标虚拟机的完整 Id')
$vm = Get-VM -Id $vmId -ErrorAction Stop
$vm | Format-List Name, Id, State, Notes
这里没有预设虚拟机名称。运行后输入清单中目标对象的完整 Id,变量 vmId 保存该标识,vm 保存读取到的虚拟机对象。核对名称、状态及原备注;如果对象不符合预期,立即停止,不要继续执行写入。
第二步:保存原备注
$backupDir = Join-Path (Get-Location) ('vm-notes-' + [guid]::NewGuid().ToString())
New-Item -ItemType Directory -Path $backupDir -ErrorAction Stop | Out-Null
$backupFile = Join-Path $backupDir 'before.xml'
[pscustomobject]@{
VMId = $vm.Id.ToString()
VMName = $vm.Name
Notes = [string]$vm.Notes
} | Export-Clixml -LiteralPath $backupFile -NoClobber -ErrorAction Stop
$backupFile
程序会在当前工作目录建立名称不同的备份目录,并显示文件位置。将这个位置记入维护记录。即使原备注为空,也要完成这一步,才能明确区分原本为空和忘记保存。
第三步:追加记录
$oldNotes = [string]$vm.Notes
$entry = '2026-10-30:已核对实验用途;后续变更前先阅读维护记录。'
$newNotes = if ([string]::IsNullOrEmpty($oldNotes)) {
$entry
} else {
$oldNotes + "`r`n" + $entry
}
$current = Get-VM -Id $vmId -ErrorAction Stop
if ([string]$current.Notes -cne $oldNotes) {
throw '备注已经变化,请重新读取并保存后再操作。'
}
Set-VM -VM $current -Notes $newNotes -ErrorAction Stop
entry 是要追加的正式文字,请根据本次实际维护内容调整。不要直接使用含糊的“已处理”替代具体结果。写入前的再次读取可以发现部分并发修改,但它不是事务锁,仍需要维护人员协调操作。
验证方法
$actual = [string](Get-VM -Id $vmId -ErrorAction Stop).Notes
$actual
$actual -ceq $newNotes
最后一行返回 True 表示重新读取的备注与计划写入的文本一致。还可以在 Hyper-V 管理器(Hyper-V Manager)中打开目标虚拟机的设置(Settings),查看名称(Name)页面中的备注(Notes)。确认原有文字仍然存在,新记录只出现一次。虚拟机正常运行只能说明业务未明显中断,不能代替对备注内容的核对。
常见错误
按名称批量选择可能把多台相似实验机一起修改,应坚持按单个标识操作。重复执行追加部分会产生重复记录,所以每次先读取现有内容。找不到命令通常与当前机器未安装模块或管理环境不正确有关,不要为解决备注问题随意重装虚拟化角色。XML 文件里保存的是旧状态,后续不会自动更新。
安全与回退
需要回退时,在原 PowerShell 会话执行以下命令;如果会话已经关闭,先把 backupFile 设置为刚才记录的真实文件路径。
$saved = Import-Clixml -LiteralPath $backupFile -ErrorAction Stop
$target = Get-VM -Id ([guid]$saved.VMId) -ErrorAction Stop
$target | Format-List Name, Id, Notes
Set-VM -VM $target -Notes ([string]$saved.Notes) -ErrorAction Stop
Get-VM -Id ([guid]$saved.VMId) | Format-List Name, Id, Notes
写回前检查是否已有其他人的新记录;如有,应先协调保留,不能直接用旧文件覆盖。完成回退后再次核对全文。保留原记录和维护结果,确认无需继续回退后再按本地资料管理规则清理备份。
参考资料与转载说明
本文依据上述公开资料进行中文原创整理,不是逐句翻译,也不替代厂商手册。操作前请核对自己的版本、型号和备份。
评论一下?