如何在SCCM中创建查询从ServiceNow获取已处置资产设备集合
解决方案:基于ServiceNow资产状态创建SCCM设备集合
首先明确:SCCM的原生成员资格查询无法直接调用ServiceNow数据,因为它只能查询自身数据库内的字段。但通过同步ServiceNow的资产状态到SCCM可识别的设备属性,就能实现需求。以下是具体步骤:
1. 同步ServiceNow资产状态到SCCM
你需要先把ServiceNow中设备的「已处置/已退役/待处置」状态同步到SCCM的设备属性里,有两种常用方式:
- 用官方集成连接器:如果你们用的是ServiceNow官方的SCCM Connector,在连接器配置中添加同步
cmdb_ci_computer表的status字段(及其子状态)到SCCM的自定义设备属性(比如扩展硬件清单类,或自定义WMI类)。 - 自定义PowerShell脚本同步:写脚本通过ServiceNow REST API拉取目标状态的设备,再用SCCM的PowerShell模块(
ConfigurationManager.psd1)更新这些设备的自定义属性。把脚本设为定时任务(比如每小时执行),保证数据实时性。
2. 创建SCCM设备集合的成员资格查询
当状态字段同步到SCCM后,就能基于这个字段创建集合查询:
- 在SCCM控制台中新建「查询」,选择编辑查询语句;
- 添加SCCM系统资源表(
SMS_R_System)和你同步状态的自定义属性表(比如SMS_G_System_CUSTOM_ASSET_STATUS)的关联; - 设置筛选条件:自定义属性的状态值包含「已处置」「已退役」「待处置」。
示例查询的SQL语句(需替换为你的实际表和字段名):
select SMS_R_SYSTEM.ResourceID, SMS_R_SYSTEM.ResourceType, SMS_R_SYSTEM.Name, SMS_R_SYSTEM.SMSUniqueIdentifier, SMS_R_SYSTEM.ResourceDomainORWorkgroup, SMS_R_SYSTEM.Client from SMS_R_System join SMS_G_System_CUSTOM_ASSET_STATUS on SMS_G_System_CUSTOM_ASSET_STATUS.ResourceID = SMS_R_System.ResourceID where SMS_G_System_CUSTOM_ASSET_STATUS.AssetStatus in ('已处置', '已退役', '待处置')
把这个查询关联到新建的设备集合,就能自动同步符合条件的设备。
3. 替代手动导出的自动化移除方案
既然有了实时更新的SCCM集合,你可以直接基于这个集合写自动化脚本,替代每月手动导出再执行移除的流程:
- 用SCCM PowerShell模块获取集合内的设备列表;
- 调用AD、Intune、Azure AD的API/命令完成设备移除;
- 把脚本设为定时任务(比如每天执行),实现高频自动清理。
示例脚本片段:
# 连接SCCM站点 $siteCode = "XXX" $siteServer = "sccm-server.yourdomain.com" Import-Module ($Env:SMS_ADMIN_UI_PATH.Substring(0,$Env:SMS_ADMIN_UI_PATH.Length-5) + '\ConfigurationManager.psd1') Set-Location "$siteCode`:" # 获取目标集合中的设备 $collectionID = "XXX00012" # 替换为你的处置设备集合ID $devices = Get-CMDevice -CollectionId $collectionID # 批量移除设备(示例) foreach ($device in $devices) { # 移除AD设备 Remove-ADComputer -Identity $device.Name -Confirm:$false -ErrorAction SilentlyContinue # 移除Intune设备(需先连接Microsoft Graph) if ($device.AADDeviceID) { Remove-MgDevice -DeviceId $device.AADDeviceID -Confirm:$false -ErrorAction SilentlyContinue } }
内容的提问来源于stack exchange,提问作者BramblePelt
相关产品推荐
相关产品推荐

