长话短说,我们的 XP 到 Windows 7 迁移项目已接近尾声,终于有 VIP 的机器需要迁移了。由于机器几乎和其上的操作系统一样老旧,因此这位特定用户除了新操作系统外,还“幸运”地获得了新硬件。
问题是,我们让实习生做这个特定的迁移,但他把事情搞砸了。真的。简而言之,用户状态迁移的一般过程是在 SCCM 中创建新旧计算机之间的关联,在旧计算机上运行捕获任务序列,然后在新计算机上执行恢复序列。在这种情况下,捕获任务序列是在计算机关联之前运行的,因此 SCCM 拒绝执行恢复,并且旧机器被重新格式化...出于某种原因...在发现之前。
现在,当我们尝试通过“恢复”捕获并上传到 SCCM 服务器的内容来迁移用户时USMT.mig
,我们会收到以下错误,请按照Request State Store
操作操作。
Task Sequence: USMT - Restore State has failed with the error code (0x00004005).
For more information, contact your system administrator or helpdesk operator.
相关日志条目smsts[date-time].log
似乎是:
<![LOG[Requesting SMP Root share config information from http://[Our SCCM server]:0]LOG]!><time="15:45:28.823+240" date="06-13-2014" component="OSDSMPClient" context="" type="1" thread="5136" file="smpclient.cpp:2348">
<![LOG[Received 4027 byte response.]LOG]!><time="15:45:28.892+240" date="06-13-2014" component="OSDSMPClient" context="" type="0" thread="5136" file="smpclient.cpp:2363">
<![LOG[Adding \\[Our SCCM server]\SMPSTORED_378B856C$ to list ]LOG]!><time="15:45:28.912+240" date="06-13-2014" component="OSDSMPClient" context="" type="1" thread="5136" file="smpclient.cpp:2403">
<![LOG[Successfully connected to "\\[Our SCCM server]\SMPSTORED_378B856C$"]LOG]!><time="15:45:28.919+240" date="06-13-2014" component="OSDSMPClient" context="" type="1" thread="5136" file="tsconnection.cpp:287">
<![LOG[Sending SMP request to http://[Our SCCM server]:0.]LOG]!><time="15:45:28.950+240" date="06-13-2014" component="OSDSMPClient" context="" type="1" thread="5136" file="smpclient.cpp:1854">
<![LOG[Received 4899 byte response.]LOG]!><time="15:45:29.045+240" date="06-13-2014" component="OSDSMPClient" context="" type="0" thread="5136" file="smpclient.cpp:1861">
<![LOG[SMP request to "http://[Our SCCM server]" failed with error: E_SMPERROR_MIGRATIONID_NOT_FOUND (204)]LOG]!><time="15:45:29.065+240" date="06-13-2014" component="OSDSMPClient" context="" type="2" thread="5136" file="smpclient.cpp:135">
<![LOG[Request to SMP 'http://[Our SCCM server]' failed with error (Code 0x80004005). Trying next SMP.]LOG]!><time="15:45:29.065+240" date="06-13-2014" component="OSDSMPClient" context="" type="2" thread="5136" file="smpclient.cpp:1601">
<![LOG[Failed to find an SMP that can serve request after trying 4 attempts.]LOG]!><time="15:45:29.065+240" date="06-13-2014" component="OSDSMPClient" context="" type="3" thread="5136" file="smpclient.cpp:1644">
<![LOG[ExecuteRestoreRequestToSMP failed (0x80004005).]LOG]!><time="15:45:29.065+240" date="06-13-2014" component="OSDSMPClient" context="" type="3" thread="5136" file="smpclient.cpp:2862">
<![LOG[ExecuteRestoreRequest failed (0x80004005).]LOG]!><time="15:45:29.065+240" date="06-13-2014" component="OSDSMPClient" context="" type="3" thread="5136" file="smpclient.cpp:2926">
<![LOG[OSDSMPClient finished: 0x00004005]LOG]!><time="15:45:29.065+240" date="06-13-2014" component="OSDSMPClient" context="" type="1" thread="5136" file="main.cpp:124">
<![LOG[Process completed with exit code 16389]LOG]!><time="15:45:29.077+240" date="06-13-2014" component="TSManager" context="" type="1" thread="5744" file="commandline.cpp:1123">
<![LOG[!--------------------------------------------------------------------------------------------!]LOG]!><time="15:45:29.078+240" date="06-13-2014" component="TSManager" context="" type="1" thread="5744" file="instruction.cxx:804">
<![LOG[Failed to run the action: Request State Store.
Unknown error (Error: 00004005; Source: Unknown)]LOG]!><time="15:45:29.082+240" date="06-13-2014" component="TSManager" context="" type="3" thread="5744" file="instruction.cxx:895">
<![LOG[Set authenticator in transport]LOG]!><time="15:45:29.088+240" date="06-13-2014" component="TSManager" context="" type="0" thread="5744" file="libsmsmessaging.cpp:7734">
<![LOG[Set a global environment variable _SMSTSLastActionRetCode=16389]LOG]!><time="15:45:29.350+240" date="06-13-2014" component="TSManager" context="" type="0" thread="5744" file="executionenv.cxx:668">
<![LOG[Set a global environment variable _SMSTSLastActionSucceeded=false]LOG]!><time="15:45:29.352+240" date="06-13-2014" component="TSManager" context="" type="0" thread="5744" file="executionenv.cxx:668">
<![LOG[Clear local default environment]LOG]!><time="15:45:29.353+240" date="06-13-2014" component="TSManager" context="" type="0" thread="5744" file="executionenv.cxx:807">
<![LOG[Failed to run the action: Request State Store. Execution has been aborted]LOG]!><time="15:45:29.365+240" date="06-13-2014" component="TSManager" context="" type="3" thread="5744" file="instruction.cxx:983">
<![LOG[Set authenticator in transport]LOG]!><time="15:45:29.373+240" date="06-13-2014" component="TSManager" context="" type="0" thread="5744" file="libsmsmessaging.cpp:7734">
<![LOG[Failed to run the last action: Request State Store. Execution of task sequence failed.
Unknown error (Error: 00004005; Source: Unknown)]LOG]!><time="15:45:29.700+240" date="06-13-2014" component="TSManager" context="" type="3" thread="5744" file="engine.cxx:213">
<![LOG[Set authenticator in transport]LOG]!><time="15:45:29.708+240" date="06-13-2014" component="TSManager" context="" type="0" thread="5744" file="libsmsmessaging.cpp:7734">
<![LOG[Task Sequence Engine failed! Code: enExecutionFail]LOG]!><time="15:45:33.323+240" date="06-13-2014" component="TSManager" context="" type="3" thread="5744" file="tsmanager.cpp:923">
尝试使用在->USMT.mig
中找到的恢复密钥解密文件显然不起作用,并且由于原始计算机被重新格式化,我很快就感觉到解密此文件所需的密钥的任何痕迹可能都消失了。Computer Association
Recovery Information
所以现在我们USMT.mig
在 SCCM 服务器上有一个可爱的文件,并且无法恢复它,或者手动解密它(至少据我所知)。
由于它已经出现,所以这是通过 GUI 完成的,所以我们无法返回并查看 CLI 命令以从那里恢复,而且我很确定这.mig
文件是加密 -微软视窗系统警告它已被加密,并尝试提取文件,无论如何都会导致在(corrupt)
文件名中附加 0 字节文件。
是我们运气不好吗?或者有人知道如何帮助我们摆脱困境?
答案1
是的,用户的数据已经消失了。
微软支持人员确认,原始的自动生成的加密密钥无法检索,而且太长而无法破解。
答案2
尝试使用在计算机协会 -> 恢复信息中找到的恢复密钥解密 USMT.mig 文件显然不起作用,并且由于原始计算机被重新格式化,我很快就感觉到解密此文件所需的密钥的任何痕迹可能都消失了。
由于扫描是在创建此并行计算机关联之前完成的,因此 SCCM 应该会自动创建就地计算机关联。如果该关联仍然存在,您应该能够使用 USMTUtils.exe 程序破解 .MIG 文件(参考:如何从压缩的 USMT 迁移存储中提取文件),使用以下命令:
usmtutils /extract <Path to .MIG file> /decrypt /key:<Recovery key from SCCM console> <Path to Extract to>
答案3
实际上,您可以使用生成的密钥来解密 mig 文件。您必须将密钥粘贴到文本文件中,并告诉命令行在那里查找密钥,而不是将其粘贴进去(因为这会使命令字符串太长)。
答案4
您还能访问旧机器吗?您使用什么来重新格式化它,以及什么设置 - 只是快速格式化,还是适当的多次写入循环擦除?如果是前者,您可能能够从驱动器中检索旧密钥,前提是您知道在哪里查找。有许多免费和付费实用程序可让您在最近格式化的驱动器上找到文件 - 只要旧文件实际上没有被覆盖,您就有机会。