![通过 SCCM 查询检查初始补丁安装](https://linux22.com/image/794145/%E9%80%9A%E8%BF%87%20SCCM%20%E6%9F%A5%E8%AF%A2%E6%A3%80%E6%9F%A5%E5%88%9D%E5%A7%8B%E8%A1%A5%E4%B8%81%E5%AE%89%E8%A3%85.png)
我想对 Windows Server 操作系统修补 (2016 和 2019) 进行更好的查询。下面列出的是我写的,我公司目前使用的。如果新建的服务器操作系统安装时间在 4 到 72 小时之间,则该服务器将添加到自动安装补丁资产集合中以自动修补到最新版本。大多数情况下它都能正常工作,但我们有几个网络连接非常差的位置无法在查询时间范围内修补新服务器。我宁愿不延长时间范围,而是进行更智能的查询。
当前查询:
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
inner join SMS_G_System_OPERATING_SYSTEM on SMS_G_System_OPERATING_SYSTEM.ResourceID = SMS_R_System.ResourceId
where
( DATEDIFF(HH, SMS_G_System_OPERATING_SYSTEM.InstallDate, GetDate()) <= 72 and DATEDIFF(HH, SMS_G_System_OPERATING_SYSTEM.InstallDate, GetDate()) >= 4)
由于用于安装新服务器的操作系统映像已嵌入较旧的补丁,是否有办法通过查询检查最新安装的补丁日期与操作系统安装日期?如果发现任何补丁是在安装日期之后安装的,则表示已安装最新补丁集,并且可以从自动安装资产集合中删除服务器。我只需要安装当前补丁,因为部署团队会根据需要安排任何未来发布的补丁。
我发现了一个脚本,它看起来可以合并到我目前拥有的脚本中,但我还无法让它工作。该脚本位于此处: https://bestitsm.wordpress.com/2018/07/12/how-to-get-list-of-installed-hotfixes-from-sccm-database/
这是我在查询中尝试执行的操作的 PowerShell 版本:
# Get OS install date
$OSInstallDate = (Get-CimInstance Win32_OperatingSystem).InstallDate
# Get latest install date of Windows OS patches
$lastPatchInstallDate = ((Get-HotFix | Sort-Object InstalledOn)[-1]).InstalledOn
# Is latest installed patch date before OS Install Date?
$lastPatchInstallDate -le $OSInstallDate