1. 为什么vSphere里重置Windows密码这么“麻烦”大家好我是老张在虚拟化运维这行摸爬滚打十来年了。今天咱们聊一个几乎所有运维兄弟都可能会遇到的“尴尬事”VMware vSphere环境里跑着的Windows虚拟机管理员密码给忘了。你说这事儿大不大说大不大系统还在那跑着呢说小不小进不去系统啥也干不了尤其是生产环境那真是急得人团团转。很多刚接触vSphere的朋友可能会想这不就跟物理服务器一样吗找个PE盘或者启动U盘进去改一下不就完了道理是这个道理但虚拟化环境有它自己的“脾气”。你没法像物理机那样随手插个U盘就启动。在vSphere的世界里所有的硬件包括光驱、硬盘、网络都是“虚拟”出来的需要通过vSphere Client或者Web Client这个“总控台”来操作。这就意味着你得先学会怎么在虚拟世界里“插U盘”也就是挂载一个ISO镜像文件到虚拟机的虚拟光驱里。这个过程对于习惯了物理机操作的朋友来说可能会觉得有点绕多了一层“管理界面”的隔阂。但别担心一旦你掌握了这个“虚拟化”的操作逻辑你会发现它其实比物理机更灵活、更可控。今天这篇实战指南我就手把手带你走一遍完整的流程从环境准备到最终改密成功把每一步的原理和可能遇到的坑都给你讲明白。无论你是企业IT运维还是自己在家搭实验环境这套方法都适用。2. 动手前的准备工作磨刀不误砍柴工在开始“手术”之前准备工作做得好能避免后面很多不必要的麻烦。这里我强调几个关键点都是实战中总结出来的经验。2.1 确认你的“手术刀”——系统ISO镜像这是最关键的一步。你需要准备一个与你目标虚拟机操作系统版本相匹配的Windows安装ISO镜像。比如你的虚机是Windows Server 2012 R2那最好就用2012 R2的安装镜像。用Windows 10的镜像去修复Windows Server虽然有时候也能蒙混过关但可能会遇到驱动不兼容或者功能缺失的问题导致后续步骤失败。我建议在公司内部的文件服务器上常备各个主流Windows版本的ISO文件并做好标签随用随取。特别注意这个ISO文件必须存放在vSphere主机或共享存储如vSAN、NFS、iSCSI存储上并且你的vCenter或ESXi主机有权限访问。你不能直接从你本地电脑的D盘上传因为虚拟机运行时vSphere管理程序需要能直接读取这个文件。通常的做法是通过vSphere Client的数据存储浏览器先将ISO文件上传到某个数据存储Datastore中。2.2 获取必要的操作权限在vSphere环境里你不是想动哪台虚拟机就能动的。你需要有相应的权限。通常你需要有对目标虚拟机的“配置”权限至少包括虚拟机 - 配置 - 设置用于编辑虚拟机设置挂载ISO。虚拟机 - 交互 - 打开电源用于启动虚拟机。虚拟机 - 交互 - 控制台交互用于在控制台里操作虚拟机比如按F2进BIOS。如果你是管理员那自然没问题。如果你只是普通用户可能需要向你的vSphere管理员申请临时权限。别小看这个我见过不少兄弟折腾半天最后发现是权限不够连虚拟机设置都点不开。2.3 评估风险与制定回退方案任何对生产系统的操作都有风险密码重置也不例外。在动手前务必做好以下两点快照Snapshot这是虚拟化给我们最好的“后悔药”。在关机虚拟机之前务必为它创建一个快照。快照会记录下虚拟机当前磁盘、内存的完整状态。万一我们的操作失误导致系统无法启动可以瞬间回滚到这个快照点业务影响最小化。记住操作完成后确认系统正常要记得删除这个快照长期保留快照会影响性能。沟通窗口如果这是台承载业务的服务器一定要和业务部门沟通好维护时间窗口告知他们在此期间服务可能会有短暂中断因为需要重启两次。避免在业务高峰期操作。3. 核心操作四部曲从挂载镜像到替换文件准备工作就绪我们就可以开始核心操作了。整个过程可以清晰地分为四个阶段我把它叫做“四部曲”。咱们以一台Windows Server 2012 R2的虚拟机为例其他版本Windows如Win10、Win Server 2016/2019的操作逻辑几乎完全一样只是界面图标可能稍有不同。3.1 第一步为虚拟机“插入”系统安装盘这一步的目标就是把我们准备好的Windows ISO镜像“虚拟地”插入到虚拟机的光驱里。首先在vSphere Client或新的vSphere HTML5 Web Client的清单中找到那台忘记密码的Windows虚拟机。右键点击它选择“电源” - “关闭客户机”。如果系统已经卡在登录界面或者无法正常关机可以选择“电源” - “关闭”这是强制关机类似拔电源非必要不使用。我们这里假设能正常关机。虚拟机关机后右键点击它选择“编辑设置”。这时会弹出一个配置窗口里面列出了这台虚拟机的所有虚拟硬件。在硬件列表里找到“CD/DVD驱动器 1”。选中它在右侧的配置区域你会看到几个选项。关键操作来了将“设备状态”下的“打开电源时连接”复选框勾上。这个选项的意思是等会儿虚拟机一启动就自动连接这个光驱设备。在“连接”区域选择“数据存储ISO文件”。然后点击“浏览”按钮在弹出的数据存储浏览器中找到你之前上传好的那个Windows安装ISO镜像文件选中它。点击“确定”保存设置。现在这台虚拟机的虚拟光驱里就已经“塞”进了一张Windows安装盘了。这个过程完全模拟了物理机插入光盘的动作但更快捷、更干净。3.2 第二步让虚拟机从“光盘”启动光驱里有盘了但虚拟机默认还是从硬盘启动。我们需要告诉它的BIOS“这次请先从光盘启动”。还是在虚拟机的“编辑设置”窗口如果关了就再打开一次这次我们切换到“虚拟机选项”选项卡。向下滚动找到“引导选项”区域。这里有一个非常重要的选项“下次引导期间强制进入BIOS设置屏幕”。把它勾选上。点击“确定”。这个设置是一次性的意思是下次启动时不会直接进系统而是会先进入虚拟机的BIOS设置界面让我们手动调整启动顺序。3.3 第三步进入修复环境找到命令提示符前面都是铺垫从这里开始我们才真正接触到“修复系统”的核心。现在可以启动虚拟机了。右键点击虚拟机选择“电源” - “打开电源”。然后立即点击“打开控制台”盯着启动画面。虚拟机会如我们所愿直接进入一个蓝底黄字的BIOS设置界面通常是Phoenix BIOS或EFI界面。在这个界面里用键盘方向键切换到“Boot”菜单。在Boot菜单里调整启动顺序将“CD-ROM Drive”移动到第一项。具体操作一般是选中CD-ROM按“”号键上移。完成后按F10键保存并退出虚拟机将会重启。重启后虚拟机就会从我们挂载的ISO镜像启动了。你会看到熟悉的Windows安装程序界面蓝底白字选择语言的那个界面。注意这里不要点击“现在安装”在安装界面的左下角有一个“修复计算机”的链接点击它。接下来会进入“选择一个选项”界面选择“疑难解答”。在疑难解答界面选择“高级选项”。在高级选项中选择“命令提示符”。点击后系统会加载一些文件然后打开一个黑底白字的命令提示符窗口。这个命令提示符拥有极高的权限可以访问你硬盘上的系统文件即使你进不去Windows桌面。3.4 第四步巧用“偷梁换柱”大法修改密码这是整个流程里最精妙的一步。我们无法直接修改用户密码因为系统文件被保护着。但我们可以“骗”系统把登录界面一个不常用但肯定会调用的程序替换成命令提示符。这样在登录界面就能唤出一个有管理员权限的CMD窗口。在打开的命令提示符窗口里我们首先要确定系统盘是哪个盘符。因为在这个恢复环境下盘符可能和正常系统里不一样。通常系统盘C盘可能会被识别为D盘或其他。我们可以用命令来查看dir d:\windows如果这个命令能列出Windows目录那d:就是你的系统盘。如果不行就试试c:、e:。我遇到的大多数情况都是d:。我们假设系统盘是D:。进入系统盘的System32目录这里是系统核心程序的所在地d: cd \windows\system32现在执行关键的替换命令。我们选择的目标是osk.exe也就是“屏幕键盘”程序。它在登录界面可以通过“轻松访问”按钮调用平时很少人用是个完美的“替身演员”。ren osk.exe osk.bak copy cmd.exe osk.exeren osk.exe osk.bak将原来的osk.exe改名为osk.bak相当于备份原文件以防万一。copy cmd.exe osk.exe将cmd.exe命令提示符程序复制一份并命名为osk.exe。这样系统就以为屏幕键盘程序还在但实际上它已经变成了命令提示符。替换完成后输入exit关闭命令提示符窗口。然后回到之前的蓝色修复界面点击“继续”或“重新启动”。虚拟机会正常重启。4. 登录界面“暗号”对接与善后工作虚拟机重启后会经历正常的启动过程最终停留在那个让你头疼的密码输入界面。在密码输入界面的右下角你会找到一个“轻松访问”的图标一个小人。点击它。在弹出的“轻松访问”设置窗口中找到并勾选“在不登录的情况下使用屏幕键盘”或者类似描述不同版本文字略有差异。然后点击“确定”。神奇的事情发生了屏幕上弹出的不是虚拟键盘而是一个拥有系统最高权限的命令提示符CMD窗口因为我们之前把osk.exe给替换了。在这个CMD窗口里你现在可以随心所欲地修改密码了。最常用的命令是net user administrator *输入这个命令后系统会提示你“输入用户的密码”你直接输入新密码屏幕上不显示回车然后“再次输入密码以确认”再输入一次再回车。这样就成功修改了Administrator用户的密码。你也可以直接指定明文密码仅限测试环境生产环境不建议net user administrator YourNewPassword123密码修改成功后先别急着关窗口。我们还有重要的善后工作要做把系统恢复原样。如果我们不把真正的osk.exe换回去以后万一有人点屏幕键盘就会弹出CMD窗口这可是个巨大的安全漏洞。在当前的CMD窗口里输入explorer并回车。这会启动Windows资源管理器你可以看到桌面和开始菜单都加载出来了相当于你已经进入了系统。现在我们需要把osk.exe换回来。由于osk.exe正在被系统占用因为我们刚刚用它启动了CMD我们不能直接操作。我们需要打开第二个命令提示符。按Win R打开运行框输入cmd再打开一个。在新的CMD窗口里导航到C:\Windows\System32目录注意现在系统盘符已经恢复为C:了cd /d C:\Windows\System32删除我们之前创建的假冒osk.exe其实就是cmd.exe并把备份的原文件恢复del osk.exe ren osk.bak osk.exe完成之后关闭所有窗口回到最初的登录界面。现在你可以用刚刚设置的新密码畅行无阻地登录系统了5. 避坑指南与高阶技巧分享走完整个流程你可能觉得也就那么回事。但我在实战中以及带新人的过程中遇到过各种各样稀奇古怪的问题。这里分享几个常见的“坑”和对应的解决办法。5.1 坑一盘符不对找不到Windows目录这是最常见的问题。在恢复环境的命令提示符下系统盘可能不是C盘。别慌多用dir命令去试探。比如依次输入dir c:dir d:dir e:看哪个盘符下有Windows和Users这样的文件夹。还有一个更专业的命令wmic logicaldisk get caption这个命令可以列出所有可用的磁盘盘符帮你快速定位。5.2 坑二替换文件时提示“拒绝访问”或“文件正在使用”如果你在恢复环境下执行copy cmd.exe osk.exe时遇到拒绝访问可能是因为权限问题。可以尝试先获取所有权或使用takeown和icacls命令但在恢复环境下这些命令可能不直接可用。一个更简单的办法是确保你是在恢复环境的命令提示符下操作而不是在后来从登录界面调出的CMD里操作。恢复环境的CMD权限是最高的。如果是登录系统后换回原文件时提示“文件正在使用”那是因为osk.exe进程还在。你需要先结束它。打开任务管理器CtrlShiftEsc在“详细信息”选项卡里找到osk.exe进程结束它。然后再去执行删除和重命名的命令。5.3 坑三修改密码后依然提示密码错误这种情况我遇到过两次。一次是因为账户被锁定了在CMD里用net user administrator /active:yes确保账户是启用的。另一次更隐蔽是组策略里设置了密码复杂性要求我设的新密码太简单系统实际上没改成功。这时可以用net user administrator *交互式输入一个符合复杂性要求大小写字母、数字、符号组合的密码。5.4 高阶技巧如果虚机没有vSphere Client怎么办现在很多纯命令行管理的ESXi主机或者使用Terraform等工具部署的虚拟机可能没有方便的图形界面操作。这时候我们可以完全通过命令行来完成。核心是使用vim-cmd这个ESXi主机的管理命令。首先通过SSH连接到ESXi主机。然后找到目标虚拟机的Vmid可以用vim-cmd vmsvc/getallvms列出所有VM。关机并挂载ISO:vim-cmd vmsvc/power.off vmid vim-cmd vmsvc/device.diskadd vmid cdrom [datastore_name] path/to/windows.iso clientDevice这条命令模拟了挂载ISO的操作。设置从光盘启动这步在纯命令行下比较麻烦通常需要编辑虚拟机的.vmx配置文件添加bios.forceSetupOnce TRUE这一行然后重启虚拟机让它进BIOS。这需要你对ESXi的文件系统有一定了解。后续进入恢复环境、替换文件的操作则和之前完全一样通过虚拟机控制台操作。显然有图形化管理界面vSphere Client会让整个过程轻松很多。所以这个命令行方法仅作为备用方案让你知道在极端情况下还有路可走。6. 安全反思与自动化思路成功重置密码问题解决皆大欢喜。但作为运维我们不能只停留在“救火”。这件事更应该引发我们对安全和管理的思考。首先密码管理是根源。为什么会出现忘记管理员密码的情况是不是密码太复杂没有记录或者人员交接不到位我建议对于重要的基础设施虚拟机采用企业级密码管理工具如KeePass、Bitwarden等来保存密码并建立严格的交接流程。对于云上或vSphere环境可以探索是否可以使用“实例元数据”或“自定义规范”在部署时就注入初始密码并强制首次登录修改。其次权限最小化原则。不是所有运维人员都需要知道所有服务器的本地管理员密码。可以通过域环境Active Directory来统一管理权限本地管理员密码定期更新并密封保存只在极端恢复情况下使用。最后谈谈自动化。如果你管理的vSphere规模很大这种手动操作效率太低。我们可以考虑将这个过程脚本化。思路是编写一个PowerShell脚本利用PowerCLIVMware的PowerShell模块自动完成“关机 - 挂载特定ISO - 设置BIOS启动 - 开机”这一系列操作。然后通过vSphere的“远程控制台”功能配合一些自动化工具甚至可以考虑用Ansible的win_command模块在特定时机触发命令来模拟后续的点击和命令输入。这听起来很极客实现起来也有难度但对于有成百上千台虚拟机需要标准化管理的大型环境这种自动化投入是值得的。至少你可以把前面vSphere层面的操作自动化减少人工点击的错误。好了从准备ISO到最终登录系统一套完整的vSphere Windows虚拟机密码重置流程就给你拆解完了。看起来步骤不少但核心逻辑就两点一是利用vSphere的虚拟硬件管理能力挂载修复介质二是利用Windows恢复环境的高权限替换系统文件。多操作几次熟练了半小时内搞定一台机器问题不大。记住操作前打快照是好习惯它能给你最大的容错空间。希望这篇来自实战的经验分享能帮你下次遇到类似问题时从容不迫手到病除。