当重新安装客户端操作系统,特别是使用PXE,SCCM 2007/2012会为这台机器创建一个新的记录,并废弃到数据库中的旧记录。
如果想要SCCM不新建一个记录,而是合并新的与旧的记录,需要在SCCM中做如下设置:
下载PowerShell脚本
下载附件powershell脚本保存到服务器的上。在本示例中使用“D:\Scripts\ConfigMgr\MergeConflictingRecords.ps1”.
创建状态过滤规则
1. 在Configuration Manager控制台中,一次进入管理/站点管理/站点。
2. 选择需要配置规则的站点。
3. 在Ribbon上选择状态过滤规则。
4. 使用如下设置创建一条规则。
名称
Merge conflicting records
组件
SMS_DISCOVERY_DATA_MANAGER
消息 ID
2642
在动作标签选择运行一个程序
"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执行。再次认真查看powershell的ExecutionPolicy可以针对不同scope设置相应的ExecutionPolicy,于是设置LocalMachine的策略为RemoteSigned(Set-ExecutinPolicy RemoteSigned -scope LocalMachine)。至此大功告成。