PowerShell脚本获取Windows更新信息异常:判断更新是否超30天排查
问题分析与修复
你编写的脚本存在几个关键错误,导致组合后无法正常工作:
- 日期比较逻辑错误:
$WUpdateResult是日期对象,直接和数字30比较毫无意义,需要先计算当前日期与该日期的天数差。 - 布尔值判断错误:PowerShell的布尔值是
$false/$true,不是字符串"False";且你用了赋值运算符=,而非比较运算符-eq。 - 逻辑倒置:原脚本的判断逻辑和需求不符,需调整为正确的过期判断逻辑。
修复后的脚本
# 获取最近一次更新的安装日期 $latestHotfix = Get-Hotfix | Sort-Object -Property InstalledOn -Descending | Select-Object -First 1 $WUpdateResult = $latestHotfix.InstalledOn # 计算当前日期与安装日期的天数差 $daysSinceLastUpdate = (Get-Date) - $WUpdateResult $isOver30Days = $daysSinceLastUpdate.Days -gt 30 # 赋值逻辑:超过30天显示"N/A",否则显示安装日期 $info.WUpdateResult = if ($isOver30Days) { "N/A" } else { $WUpdateResult }
关键修复点说明
- 日期差计算:通过
(Get-Date) - $WUpdateResult得到时间跨度对象,再取Days属性获取天数差,才能正确和30做比较。 - 布尔值正确使用:直接通过
$daysSinceLastUpdate.Days -gt 30得到布尔值$true/$false,无需转换为字符串。 - 逻辑修正:按照需求,最近更新超过30天则标记"N/A",否则保留安装日期;若需求相反,只需将
if ($isOver30Days)改为if (-not $isOver30Days)即可。
内容的提问来源于stack exchange,提问作者DigiCoinzTrader
相关产品推荐
相关产品推荐

