如果软件更新需要多次重启,则任务序列在Configuration Manager失败

本文提供的信息可解决使用Configuration Manager任务序列时出现任务序列环境未找到错误的问题。

原始产品版本:Microsoft System Center 2012 Configuration Manager、Microsoft System Center 2012 R2 Configuration Manager、Configuration Manager (current branch)
原始 KB 编号: 2894518

摘要

System Center 2012 的累积更新 3 Configuration Manager Service Pack 2 和 System Center 2012 R2 Configuration Manager Service Pack 1 以及 Configuration Manager当前分支版本 1602 中修复了此问题。

当软件更新安装需要两次重启时, SMSTSWaitForSecondReboot可以使用新的可选任务序列变量 来更好地控制客户端行为。

有关详细信息,请参阅Configuration Manager累积更新 3 的说明中的软件更新管理/操作系统部署部分。

有关当前分支Configuration Manager,请参阅任务序列变量

症状

假设使用安装软件汇报步骤的Configuration Manager任务序列安装软件更新在任务序列成功运行安装软件汇报任务后触发多次重启。 在这种情况下,任务序列可能会失败并生成以下错误消息:

找不到任务序列环境

注意

可以在 Configuration Manager 中使用“安装软件汇报任务序列”步骤中的新“重试”选项来避免此问题。

原因

软件更新启动的第一次重启由任务序列控制。 但是,第二个重启请求通常由 Windows 组件 (启动,Component-Based 服务) ,不受任务序列控制。 因此,在重启之前不会保存任务序列执行状态,因为第二次重启不受任务序列控制。 当任务序列在第二次重启后恢复时,没有状态可以成功继续。

解决方案

若要解决此问题,我们建议使用 Configuration Manager 的常见软件更新功能而不是使用任务序列来应用任何需要双重重启的更新。 以下软件更新报告需要多次重启。

更多信息

由于第二次重启不受任务序列控制,因此重启前不会保存任何执行状态。 当任务序列在重启后恢复时,没有状态可以成功继续。 此外,遇到此问题时,可能会将以下消息记录到 Smsts.log 文件中:

!sVolumeID.empty () , HRESULT=80004005
!sTSMDataPath.empty () , HRESULT=80070002
TS::Utility::GetTSMDataPath ( sDataDir ) , HRESULT=80070002
未能设置日志目录。 某些执行历史记录可能会丢失。
系统找不到指定的文件。 (错误: 80070002;源:Windows)
正在执行任务序列
!sVolumeID.empty () , HRESULT=80004005
!sTSMDataPath.empty () , HRESULT=80070002
找不到任务序列环境

此外,运行低于 Microsoft System Center 2012 Configuration Manager Service Pack 1 的发布版本的客户端可能包含以下日志条目:

在 Windows PE 中完成的任务序列。

任务序列失败后,客户端计算机也可能停滞在预配模式下。 若要确定计算机是否处于预配模式,检查HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CCM\CcmExec注册表子项。

ProvisioningMode 应设置为 false。 如果设置为 true,请使用以下方法之一使客户端退出预配模式:

  • 使用 Windows Management Instrumentation (WMI) 方法 SetClientProvisioningMode 使客户端正确退出预配模式。 执行此操作的最简单方法是运行以下Windows PowerShell命令:

    Invoke-WmiMethod -Namespace root\CCM -Class SMS_Client -Name SetClientProvisioningMode -ArgumentList $false
    

    或者,在提升的命令提示符下运行以下命令:

    powershell Invoke-WmiMethod -Namespace root\CCM -Class SMS_Client -Name SetClientProvisioningMode -ArgumentList $false
    
  • 重新安装客户端。

重要

不要尝试通过将 的值 ProvisioningMode 更改为 false 来修复客户端。 此操作不会使客户端完全退出预配模式。