PowerShell筛选最近两天Windows更新记录无输出问题
问题原因
Get-CimInstance查询Win32_QuickFixEngineering类返回的InstalledOn属性并非强类型DateTime对象,在多数Windows环境下该字段为字符串格式的日期值。直接将字符串与Get-Date生成的DateTime对象做大小比较时,PowerShell无法完成有效的隐式类型转换,比较逻辑始终返回$false,因此筛选后无结果输出,也不会触发报错。
解决方法
筛选时先判断InstalledOn字段非空,再将其显式转换为DateTime类型后再做时间比对,正确命令如下:
# 查询近2天安装的Windows更新 Get-CimInstance -Class Win32_QuickFixEngineering | Where-Object { $_.InstalledOn -and [DateTime]$_.InstalledOn -gt (Get-Date).AddDays(-2) }
扩展:统计近1天更新数量的完整脚本
如果需要直接统计近1天的更新安装数,可以直接使用以下代码:
# 计算近1天的时间阈值 $threshold = (Get-Date).AddDays(-1) # 筛选符合时间范围的更新并计数 $recentUpdateCount = (Get-CimInstance -Class Win32_QuickFixEngineering | Where-Object { $_.InstalledOn -and [DateTime]$_.InstalledOn -gt $threshold } | Measure-Object).Count # 输出结果 Write-Host "近1天内共安装 $recentUpdateCount 个Windows更新"
注意事项
Win32_QuickFixEngineering类仅会枚举通过组件服务(CBS)、Windows Installer、常规Windows Update/WSUS通道安装的热修复补丁,部分手动安装的大型累积更新、带外补丁可能不会被该类收录,若统计结果和系统更新历史存在偏差,可搭配Get-WUHistory返回的结果做交叉校验,只要提前将Get-WUHistory返回的日期字段显式转换为本地DateTime类型即可解决格式不符合预期的问题。- 部分老旧Windows版本(如Windows 7/Server 2008R2未升级最新WMF版本)中
InstalledOn字段的字符串格式存在区域差异,若转换报错可以使用[DateTime]::ParseExact()方法指定对应区域的日期格式做解析。
内容的提问来源于stack exchange,提问作者Wydra91
相关产品推荐
相关产品推荐

