客户端计算机可以在映像过程中窃取未知计算机对象的 Configuration Manager GUID

本文提供有关解决未知计算机对象的 Configuration Manager 唯一标识符(GUID)由正在映像的客户端计算机拍摄的问题的信息。

原始产品版本: Configuration Manager(Current Branch)
原始 KB 数: 4471061

现象

Configuration Manager Current Branch 版本 1702 包含一项新功能,允许你在运行 Microsoft Windows 预安装环境(Windows PE)时,使用 “上一个 ”按钮重试任务序列向导中的失败任务序列。

有关此功能的详细信息,请参阅 任务序列失败时返回到上一页。

此功能引入了以下问题:

选中“上一个”按钮后,正在图像的客户端电脑可以窃取正在使用的未知计算机对象的 Configuration Manager 唯一标识符(GUID)(x64 未知计算机x86 未知计算机)。

此问题已在 Configuration Manager Current Branch 版本 1702 的更新汇总中修复。

在 Configuration Manager Current Branch 的所有后续版本中也修复了此问题。

但是,从 Configuration Manager Current Branch 版本 1702 开始,从媒体或预启动执行环境(PXE)启动的未知计算机可能找不到针对它们的任务序列。 在此方案中,以下错误消息记录在SMSTS.log中:

此计算机没有可用的任务序列。 请确保至少有一个任务序列播发到此计算机。

未指定错误(错误:80004005;来源:Windows)

如果在未知计算机上选择了“选择要运行的任务序列”页上的“上一个”按钮,则可能会出现此问题。

在 Configuration Manager Current Branch 的所有后续版本中也修复了此问题。

尽管在 Configuration Manager Current Branch 版本 1702 中应用更新汇总或升级到更高版本的 Configuration Manager,但问题仍然存在。

原因

此问题可能会继续发生,因为 Configuration Manager Current Branch 版本 1702 及更高版本的 Configuration Manager Current Branch 版本更新汇总中的修补程序会阻止问题仅发生。 如果环境中当前存在该问题,则它无法解决此问题。

因此,即使在应用版本 1702 更新汇总或更高版本后,Configuration Manager Current Branch 版本 1702 或更高版本中仍可能出现此问题。 除非执行以下步骤,否则为 true:

  • 更新分发点上的启动映像。
  • 使用更新后的映像重新创建启动媒体。
  • 正确清理窃取 GUID 的客户端电脑。

解决方法

警告

请勿尝试通过重新创建未知计算机对象来解决此问题。 这无法正确修复问题,并且不会阻止问题继续出现。 此外,在具有单个站点的多个未知计算机对象的环境中,还存在一些已知问题。 如果以前尝试通过重新创建未知计算机对象来解决此问题,请参阅 “删除重复的未知计算机”对象

若要解决此问题并阻止它在环境中返回,请执行以下步骤:

  1. 更新环境中的所有启动映像。 为此,请右键单击 Configuration Manager 控制台中的映像,然后选择“ 更新分发点”。 这会将包含修补程序的更新的 Configuration Manager 二进制文件放入启动映像中。 有关详细信息,请参阅 使用启动映像更新分发点。

  2. 如果在环境中使用媒体,在更新分发点上的所有启动映像后,重新创建环境中的所有媒体。 这可确保具有修补程序的更新启动映像位于环境中使用的媒体中。

    若要防止使用具有旧启动映像的媒体,可以在“管理>安全>证书”节点下的 Configuration Manager 控制台中阻止这些启动映像的证书。 为了确保问题不会递归,建议阻止在步骤 1 中更新启动映像之前创建的所有媒体的所有证书。 创建媒体的日期显示在 “开始日期 ”列中。

    有关如何创建媒体的详细信息,请参阅 “创建任务序列介质”。

  3. 必须正确清理窃取 GUID 的客户端计算机。

若要正确清理窃取 GUID 的客户端,请执行以下步骤:

  1. 标识获取 GUID 的计算机。 为此,请检查未知计算机对象的属性(通常为 x64 未知计算机),记下 Configuration Manager 唯一标识符的值,然后在 Configuration Manager 控制台中运行查询以标识具有相同 GUID 的计算机对象。 可以从控制台执行所有这些步骤。 无需进入 SQL Server 数据库才能执行此操作。

  2. 确定获取被盗 GUID 的计算机后,远程连接到该计算机,然后完全清理 Configuration Manager 客户端。 这不仅仅是卸载客户端。 相反,必须遵循步骤 3-7。

  3. 在客户端计算机上,在 C:\Windows\CCMSetup提升的命令提示符下运行 CCMSetup.exe /uninstall 命令。

  4. 监视 任务管理器 ,直到 CCMSetup 完成运行。 仔细检查ccmsetup.log文件,确保客户端已正确卸载。

  5. 在客户端计算机上,删除以下目录:

    • C:\Windows\CCM
    • C:\Windows\CCMSetup

    注意

    若要完全删除这些目录,可能需要重新启动计算机。

  6. 在客户端计算机上,删除以下注册表项(如果存在):

    • HKEY_LOCAL_MACHINE\Software\Microsoft\CCM
    • HKEY_LOCAL_MACHINE\Software\Microsoft\CCMSetup
    • HKEY_LOCAL_MACHINE\Software\Microsoft\SMS
  7. 在客户端计算机上,删除 C:\Windows\SMSCFG.ini文件。

  8. 在客户端计算机上,删除计算机帐户的证书控制台SMS>证书节点下的所有证书 为此,请按照下列步骤进行操作:

    1. 在提升的命令提示符下运行 MMC.exe

    2. 在“文件”菜单中,选择“添加/删除管理单元”

    3. 选择“证书,然后选择“添加”。

    4. 选择 “计算机帐户 ”,然后选择“ 下一步”。

    5. 选择 “本地计算机 ”,然后选择“ 完成”。

    6. 选择“确定”

    7. 导航到证书>SMS>证书。

    8. 在结果窗格中,右键单击“证书>SMS>证书”节点下列出的每个证书,然后选择“删除”。 重复此步骤,直到删除所有证书。

    9. 关闭“证书”控制台。

  9. 从 Configuration Manager 控制台中删除有问题的计算机的记录。 同样,无需进入 SQL Server 数据库才能执行此操作。 可以从 Configuration Manager 控制台中删除记录。 完成步骤 1-8 后,请确保执行此操作。 首先执行此操作可能会导致在完全清理客户端报告之前备份客户端报告时重新创建记录。

  10. 在有问题的客户端计算机上重新安装 Configuration Manager 客户端。

删除重复的未知计算机对象

如果在尝试解决问题时站点上重新创建了未知计算机对象,则应删除额外的未知计算机对象。 为此,应删除受影响站点的所有当前未知计算机对象,然后为网站创建一组全新的未知计算机对象。 只能从 SQL Server 数据库完成删除未知计算机对象。 无法从 Configuration Manager 控制台完成此操作。

注意

如果有多个主站点,则可以拥有多个未知计算机对象。 但是,每个站点每个体系结构应只有一个未知计算机对象。 例如,应只有一个 x64 对象标记为 x64 未知计算机 ,并且只有一个标记为 x86 未知计算机的 x86 对象。

若要删除额外的未知计算机对象,请执行以下步骤:

  1. 使用内置的备份维护任务,确保具有 Configuration Manager 站点的当前有效备份。

  2. 打开 Configuration Manager 控制台。 如果有多个主站点,建议打开连接到管理中心站点的 Configuration Manager 控制台。

  3. 在 Configuration Manager 控制台中,转到资产和符合性>概述>设备集合

  4. 双击 “所有未知计算机” 集合。

  5. 在结果窗格中,通过选择“网站代码”列对“所有未知计算机”集合中的对象进行排序。

  6. 请注意,是否有多个 x64 未知计算机 对象或 任何单个站点的 x86 未知计算机 对象。

  7. 如果任何单个站点有多个 x64 未知计算机对象或 x86 未知计算机对象,请右键单击结果窗格中的列,并将资源 ID 添加到列列表中。

  8. 确定每个 x64 未知计算机对象的资源 ID 值,以及任何一个站点的每个 x86 未知计算机对象。 请确保记下所有未知计算机对象的资源 ID,即使只有一个未知计算机对象重复。

  9. 确定 站点未知计算机对象的资源 ID 后, 可以删除站点的 x64 未知计算机 对象和 x86 未知计算机 对象。

  10. 打开 SQL Server Management Studio,然后连接到托管额外未知计算机对象的站点的数据库。

  11. 展开“数据库”节点,然后选择 Configuration Manager 数据库(通常CM_Site_Code)。

  12. 在顶部工具栏中,选择“新建”。

  13. 确保在工具栏上“执行”按钮左侧的下拉菜单中选择正确的数据库。

  14. 在查询窗格中,运行以下 SQL 查询:

    SELECT C.CollectionID, C.SiteID, C.CollectionName, CM.MachineID, CM.Name FROM Collections C JOIN CollectionMembers CM ON C.SiteID = CM.SiteID JOIN UnknownSystem_DISC USD ON USD.ItemKey = CM.MachineID
    

    此查询显示所有未知计算机对象所属的所有集合。 使用此查询确定未知计算机对象所属的集合。 记下此信息,以便在创建新的未知计算机对象集时,可以将其添加回相应的集合。 资源 ID 列在 MachineID 列中。

  15. 在查询窗格中,运行以下 SQL 查询:

    SELECT * FROM UnknownSystem_DISC WHERE ItemKey IN ('Resource_ID_1','Resource_ID_2', 'Resource_ID_3')
    

    在此查询中, Resource_ID_x 是站点的每个未知计算机对象的资源 ID,如步骤 9 中所述。 例如,如果资源 ID 是 20468203542046820355,则查询如下所示:

    SELECT * FROM UnknownSystem_DISC WHERE ItemKey IN ('2046820354','2046820355')
    
  16. 验证步骤 15 中查询返回的记录是否正确。 如果是,请运行以下查询以删除记录:

    DELETE FROM UnknownSystem_DISC WHERE ItemKey IN ('Resource_ID_1','Resource_ID_2', 'Resource_ID_3')
    

    在此查询中, Resource_ID_x 是站点的每个未知计算机对象的资源 ID,如步骤 9 中所述。 例如,如果资源 ID 是20468203542046820355,则删除查询将如下所示:

    DELETE FROM UnknownSystem_DISC WHERE ItemKey IN ('2046820354', '2046820355')
    

    注意

    请记住,删除受影响站点的所有未知计算机对象(x64 和 x86),即使只有其中一个对象被复制。

  17. 在意外删除的情况下,请按照“重新创建未知计算机”部分,为受影响的站点创建新的未知计算机对象。

  18. 返回到 Configuration Manager 控制台,然后转到资产和符合性>概述>设备集合。

  19. 右键单击“ 所有未知计算机” 集合,然后选择“ 更新成员身份”。

  20. 等待几分钟,然后选择“ 刷新”。 验证每个站点是否只存在一个 x64 未知计算机 对象或 x86 未知计算机 对象。 如果对象未显示,请再等待几分钟,然后重试。

  21. 出现新的未知计算机对象后,根据步骤 14 中确定,将它们添加回相应的集合。

  22. 根据需要对所有其他主站点重复步骤 10-21。

在意外删除的情况下重新创建未知计算机对象

如果出于任何原因,任何使用此过程的站点都会意外删除所有未知计算机对象,则可以使用以下步骤重新创建这些对象。 仅当站点没有未知计算机对象时,才应执行这些步骤。 如果一个站点上只存在两个未知计算机对象中的一个,请使用本文的 “删除重复的未知计算机对象”部分中的步骤删除一个剩余的未知计算机对象 ,然后执行以下步骤:

  1. 登录到缺少未知计算机对象的主站点服务器。

  2. 在提升的命令提示符处,运行下面的命令:

    REG.exe ADD "HKLM\SOFTWARE\Microsoft\SMS\COMPONENTS\SMS_DISCOVERY_DATA_MANAGER" /v CreatedUnknownDDR /t REG_DWORD /d 0 /f
    

更新此注册表项值后,应不久自动重新创建未知计算机对象。 可以在主站点服务器上的DDM.log文件中检查创建未知计算机对象的进度。

若要加快未知计算机记录的重新创建,请按照以下步骤重启 SMS_DISCOVERY_DATA_MANAGER 线程:

  1. 在缺少未知计算机对象的主站点上打开 Configuration Manager 控制台,然后转到“监视>概述>系统状态>组件状态”。

  2. 在工具栏上,选择“启动>Configuration Manager Service Manager”。

  3. Configuration Manager Service Manager 中,展开站点代码下的节点,然后选择“ 组件”。

  4. 在结果窗格中,右键单击 SMS_DISCOVERY_DATA_MANAGER 并选择“ 查询”。 线程应显示为 “正在运行”。

  5. 右键单击 SMS_DISCOVERY_DATA_MANAGER,然后单击“ 停止”。

  6. 右键单击 SMS_DISCOVERY_DATA_MANAGER,然后单击“ 查询”。

    注意

    线程应显示为 “已停止”。

  7. 右键单击 SMS_DISCOVERY_DATA_MANAGER,然后单击“ 开始”。

  8. 右键单击 SMS_DISCOVERY_DATA_MANAGER,然后单击“ 查询”。

    注意

    线程应显示为 “正在运行”。

  9. 关闭 Configuration Manager Service Manager 窗口。

应很快自动重新创建未知计算机对象。 可以在主站点服务器上的DDM.log文件中检查此过程的进度。