当重新安装客户端操作系统,特别是使用PXE,SCCM 2007/2012会为这台机器创建一个新的记录,并废弃到数据库中的旧记录。

   如果想要SCCM不新建一个记录,而是合并新的与旧的记录,需要在SCCM中做如下设置:


下载PowerShell脚本

   下载附件powershell脚本保存到服务器的上。在本示例中使用“D:\Scripts\ConfigMgr\MergeConflictingRecords.ps1”.


创建状态过滤规则

   1. 在Configuration Manager控制台中,一次进入管理/站点管理/站点。

   2. 选择需要配置规则的站点。

   3. 在Ribbon上选择状态过滤规则。

   4. 使用如下设置创建一条规则。

154212441.png

名称
         Merge conflicting records
         组件
         SMS_DISCOVERY_DATA_MANAGER
         消息 ID
         2642

154214850.png

   在动作标签选择运行一个程序

         "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" “D:\Scripts\ConfigMgr\MergeConflictingRecords.ps1”.

配置出现冲突记录时的动作

   默认配置下,Configuration Manager会自动解决冲突的记录,需要改变设置是状态过滤规则可以运行。

    1. 在Configuration Manager控制台中,依次进入到管理/站点管理/站点。

    2. 在Ribbon菜单,点击层级设置。

    3. 选择到客户端许与冲突记录

    4. 在冲突的客户端记录下,选择手动解决冲突记录。


注:我自己被这个纠结很久,明明我已经设置好了,但是再重装client,在监视/系统状态/冲突记录下还是会出现刚刚重装的机器的记录。感觉是刚刚Status Filter rule没运行,在组件状态下查看SMS_DISCOVERY_DATA_MANAGER发现有2642这个事件。后来相到powershell脚本微软基于安全考虑,有设置一个ExecutionPolicy。查看刚下载的ps脚本属性,发现有个解除限制按钮,于是果断解除。然后手动打开一个powershell,运行Set-ExcutionPolicy RemteSigned, 尝试运行次ps脚本,提示无法找到站点,于是查看PS代码,发现有一行Set-Variable serverName "SERVERNAME" -Option Constant, 应该是定义一个变量来存放Servername,于是把引号的内容该为我的SCCM server的名字,重新运行。提示Found conflicting records,并且在同目录下会生成一个log。PS脚本验证没有问题,重新再装一次,发现还是出现了confliction records。上google去助,发现在SCCM中的动作总有用NT AUTHOR\SYSTEM执行。再次认真查看powershellExecutionPolicy可以针对不同scope设置相应的ExecutionPolicy,于是设置LocalMachine的策略为RemoteSigned(Set-ExecutinPolicy RemoteSigned -scope LocalMachine)。至此大功告成。