尝试捕获 Windows 映像时,Sysprep 和捕获任务序列失败

本文为尝试捕获 Windows 映像时 Sysprep 和捕获任务序列失败的问题提供了解决方法。

适用于:Windows 10 - 所有版本
原始 KB 数: 2797676

现象

此问题会影响 Sysprep 并在以下产品中捕获 TS:

  • Microsoft Deployment 2012 Update 1
  • Microsoft Deployment Toolkit 2013

尝试捕获从媒体安装的 Windows 映像时,Sysprep 和捕获任务序列将失败。 此外,可能会收到以下错误:

部署摘要

失败的操作系统部署未成功完成。
查看日志文件以确定问题的原因。
在部署过程中,报告了 14 个错误和 0 个警告。

详。。。
ZTI ERROR - LTIApply 返回的未经处理的错误:找不到 (-2147217406 0x80041002)
Litetouch 部署失败,返回代码 = -2147467259 0x80004005
未能运行该操作:应用 Windows PE。
找不到 (错误: 80041002;来源:WMI)
组的执行(捕获映像)已失败,并且执行已中止。
操作失败。
操作中止(错误:80004004;来源:Windows)
未能运行最后一个操作:应用 Windows PE。 任务序列的执行失败。
找不到 (错误: 80041002;来源:WMI)
任务序列引擎失败! 代码:enExecutionFail
任务序列执行失败,错误代码80004005
任务序列 Manaqer 无法执行任务序列错误。 代码0x80004005

此外,检查BDD.log文件时,可能会注意到记录以下错误:

<![LOG[获取 C:\boot]LOG 的所有权]!><time=“<time>” date=“<date>” component=“LTIApply” context=“” type=“1” thread=“” file=“LTIApply”>
<![LOG[即将运行命令: takeown.exe /F “C:\boot” /R /A /D Y]LOG]!><time=“<time>” date=“<date>” component=“LTIApply” context=“” type=“1” thread=“” file=“LTIApply”>
<![LOG[命令已启动(进程 ID 2748)]LOG]!><time=“<time>” date=“<date>” component=“LTIApply” context=“” type=“1” thread=“” file=“LTIApply”>
<![LOG[从命令返回代码 = 1]LOG]!><time=“<time>” date=“<date>” component=“LTIApply” context=“” type=“1” thread=“” file=“LTIApply”>
<![LOG[ResetFolder: TakeOwn for C:\boot, RC = 1]LOG]!><time=“<time>” date=“<date>” component=“LTIApply” context=“” type=“1” thread=“” file=“LTIApply”>
<![LOG[ZTI ERROR - LTIApply 返回的未经处理的错误: 找不到 (-2147217406 0x80041002)]LOG]!><time=“<time>” date=“<date>” component=“LTIApply” context=“” type=“3” thread=“” file=“LTIApply”>
<![LOG[已发送事件 41002: ZTI ERROR - LTIApply 返回的未经处理的错误: 找不到 (-2147217406 0x80041002)]]LOG]!><time=“<time>” date=“<date>” component=“LTIApply” context=“” type=“1” thread=“” file=“LTIApply”>

原因

之所以出现此问题,是因为 LTIApply.wsf 脚本在运行 takeown.exe 命令以更改文件夹所有权之前无法检查系统分区上是否存在启动文件夹。 如果启动文件夹不存在,该 takeown.exe 命令将失败并出现“找不到”错误。 这会导致 Sysprep 和捕获任务序列失败。

解决方法

若要解决此问题,请编辑以下文件:

  • %DeployRoot%\Scripts\LTIApply.wsf

    注意

    %DeployRoot% 是在创建部署共享时指定的路径。

  • C:\Program files\Microsoft Deployment Toolkit\Templates\Distribution\Scripts\LTIApply.wsf

在 LTIApply.wsf 中找到“Copy bootmgr”部分,然后在“复制 bootmgr”部分下在现有代码上方添加以下代码:

If not oFSO.FolderExists(sBootDrive & "\Boot") then
 oFSO.CreateFolder(sBootDrive & "\Boot")
End if

详细信息

如果捕获最初使用 MDT 2012 Update 1 部署的 Windows 映像,则不会出现此问题。 这是因为使用 MDT 部署 Windows 时,会创建一个大小为 499 MB 的系统保留分区(MB)。 系统保留分区中有足够的可用空间来应用捕获所需的 WinPE 映像。

如果尝试使用 Sysprep 和捕获任务序列捕获的 Windows 映像最初是从 Windows 媒体部署的,则创建的系统保留分区的大小为 350 MB。 由于它已包含 WinRE 映像,因此 MDT 没有足够的可用空间来应用 WinPE 映像。 在这种情况下,LTIApply 脚本会自动选择要应用 WinPE 映像的系统分区。 在此过程中,LTIApply 脚本会更改 bootmgr 文件和系统分区上的启动文件夹的所有权。 之所以出现问题,是因为 LTIApply 脚本在运行 takeown.exe 命令更改所有权之前不会检查系统分区上是否存在启动文件夹。

数据收集

如果需要 Microsoft 支持方面的帮助,建议按照使用 TSS 针对与部署相关的问题收集信息中所述的步骤收集信息。