如何在Windows Server 2012中运行Get-WUHistory命令避免卡死
Windows Server 2012 下 Get-WUHistory 命令卡死的解决方案
问题根因
Windows Server 2012 自带PowerShell版本最高为5.1,高版本PSWindowsUpdate模块对该系统的Windows Update Agent(WUA)API适配存在缺陷,查询全量更新历史时会因遍历无效残条、无超时终止逻辑导致进程挂起,无法正常返回提示符。
可用解决方法
- 限制查询范围,避免全量遍历
执行命令时指定查询时间范围和最大返回条目数,跳过大量冗余历史记录,大幅降低触发卡死的概率,示例命令:Get-WUHistory -MaxDate (Get-Date).AddDays(-90) -Last 50
上述命令仅查询过去90天内最近50条安装记录,无需遍历全量历史库。 - 启用旧版API兼容参数
PSWindowsUpdate模块预留了适配旧系统的-UseOldAPI参数,强制调用Win2012支持的WUA接口执行查询,示例命令:Get-WUHistory -UseOldAPI -Last 30
该参数可和时间范围、条目数量参数组合使用,适配性最优。 - 降级PSWindowsUpdate到兼容版本
2.2.0.2是PSWindowsUpdate最后一个完整适配Windows Server 2012的稳定版本,若高版本模块加参数仍无法解决,可卸载高版本后安装指定版本:
卸载当前所有版本命令:Uninstall-Module -Name PSWindowsUpdate -AllVersions -Force
安装兼容版本命令:Install-Module -Name PSWindowsUpdate -RequiredVersion 2.2.0.2 -Force - 原生COM对象替代查询
无需依赖第三方模块,直接调用系统原生WUA COM接口查询更新历史,无兼容问题且速度更快,完整命令如下:$UpdateSession = New-Object -ComObject Microsoft.Update.Session $HistoryCount = $UpdateSession.GetTotalHistoryCount() $UpdateHistory = $UpdateSession.QueryHistory("",0,$HistoryCount) $UpdateHistory | Select-Object Title,Date,ResultCode | Format-Table -AutoSize
注意事项
所有涉及Windows Update的查询操作都需要使用管理员身份启动PowerShell执行,否则会出现权限不足导致的异常。
内容的提问来源于stack exchange,提问作者jsonpowerhouse123
相关产品推荐
相关产品推荐

