在部署 Azure VM 角色之前,我们需要执行
%windir%\system32\sysprep\sysprep.exe /generalize /oobe /shutdown
但在我的例子中,sysprep 失败,日志文件 %windir%\system32\sysprep\Panther\setuperr.txt 显示:
2012-07-05 08:03:57, Error [0x0f0073] SYSPRP RunExternalDlls:Not running DLLs; either the machine is in an invalid state or we couldn't update the recorded state, dwRet = 31
2012-07-05 08:03:57, Error [0x0f00ae] SYSPRP WinMain:Hit failure while processing sysprep cleanup external providers; hr = 0x8007001f
我并不总是想创建新图像。有什么解决方法吗?我按照 MS 支持中的说明操作这里并尝试过:
%windir%\system32\sysprep\sysprep.exe /generalize /oobe /shutdown /unattend:.\unattend.xml
它不起作用。
在某些情况下,我需要从 Azure 中拆除 VM 映像并重新部署并进行一些更改。因此 sysprep 必须每周运行两次。
答案1
好吧,如果该错误是由于 sysprep 过多造成的,那么有一个解决方法,前提是原始映像不是由 OEM 创建的。请尝试以下操作:
运行 slmgr.vbs /dlv 并检查底部的重新装备计数器
如果不是零,那么您应该能够通过运行来解决此问题
slmgr.vbs –rearm
(跳过步骤 3)如果为零,则需要使用 unattend.xml 文件。请参阅例如这里,在标题“以下文本是 Windows 7 的 XML 应答文件的示例:”下方(将其添加到您的 unattend.xml 文件中 - 我无法在此处发布它。)
跑步
slmgr.vbs –rearm
更改以下注册表项以匹配以下值使用 regedit 更改以下注册表项以匹配
HKEY_LOCAL_MACHINE\SYSTEM\设置\状态\SysprepStatus\GeneralizationState\
清理状态:2
HKEY_LOCAL_MACHINE\SYSTEM\设置\状态\SysprepStatus\GeneralizationState\
概括状态:7
开始 -> 运行: msdtc -uninstall
开始 -> 运行:msdtc -install(等待几秒钟)
重启
再次运行 sysprep
请注意,您可以执行的重新装备次数是有限制的。MS 说是 3,虽然我从来没有达到过这个数字,但您可能需要调整您的流程以适应这一点。在不使用 sysprep 的情况下获取“黄金”映像,然后将所有累积更改整合到一个过程中,这样您就可以避免对已经多次 sysprepped 的映像进行 sysprepping。这几乎不是理想的,但这就是 Windows。