WSUS 内容文件夹未保留更新

WSUS 内容文件夹未保留更新

我已经为这个问题苦思冥想了一段时间,无论我做什么都无法解决问题

问题:

WSUS 的“WSUSContent”文件夹正在自行删除更新,并将整体大小减少到 <5GB。原始大小超过 300GB。更新到哪里去了?我们以前没有启动过 WSUSContent 清理。

尝试解决:

WSUSutil /reset.
Reinstall WSUS service from scratch.
Migrated from internal database to remote SQL database.

更多信息:

  • WSUS 数据库位于远程 SQL 服务器上
  • WSUSutil 重置将整个内容文件夹重建为超过 300GB。
  • WSUS 活跃了一段时间(1-2 周),然后突然在一天之内停止工作(不幸的是,我们不知道这是什么时候发生的)
  • 此问题发生后,我们经常会收到 WSUS 缺少内容的通用 800 代码:

2015-03-30 14:25:19:174 1184 195c 安装严重错误:GetClientUpdateUrl 失败,错误 = 0x8024D009 2015-03-30 14:25:19:174 1184 195c 安装根据 wuident 中的 /SKIP 指令跳过 SelfUpdate 检查 2015-03-30 14:25:19:174 1184 195c 安装 SelfUpdate 检查已完成。不需要 SelfUpdate。

  • 没有计划任务来“清理”更新,我们会自动批准所需技术的所有更新(Windows 7、8.1、Server 2012、SQL 2012 以及其他我没有想到的更新)。
  • 我们已经使用第三方工具来检查我们的 WSUS 设置,它们都返回声明,称设置正常并且没有检测到任何问题。
  • 我们的 WSUS 在 HTTP 和 HTTPS 上运行,SSL 证书良好且在有效期内。
  • 当使用管理员工具连接到 WSUS 时,控制台会定期中断并显示红色“X”并表明远程 API 已停止工作?(我在下面粘贴了 WSUS 管理控制台遇到的另一个错误):

WSUS 管理控制台遇到意外错误。这可能是暂时错误;请尝试重新启动管理控制台。如果此错误仍然存​​在,

尝试通过删除 %appdata%\Microsoft\MMC 下的 wsus 文件来删除控制台的持久首选项。

System.Collections.Generic.KeyNotFoundException——字典中不存在给定的键。

来源 mscorlib

堆栈跟踪:位于 System.Collections.Generic.Dictionary`2.get_Item(TKey key) 位于 Microsoft.UpdateServices.UI.SnapIn.Pages.UpdatesListPage.GetUpdateRow(WsusUpdate update) 位于 Microsoft.UpdateServices.UI.SnapIn.Pages.UpdatesListPage.GetListRows()

  • 我在 SF 上关注过这些,但没有成功:

WSUS 没有收到更新? & WSUS,已安装,不适用

互联网上的许多其他人也试图寻找答案。

  • WSUS 服务器是域的一部分,需要澄清的是,当我运行 wsusutil /reset 时,所有连接的客户端都获得了更新,连接不是问题,WSUS 内容就消失得无影无踪。

Windows 日志文件“红色”条目:

这些是我尝试查看的关键日志条目,但也无济于事,除非我忽略了什么。

  • 376 1b0c 杂项警告:由于尝试获取 wcmapi.dll 句柄时出现故障,因此假定不支持网络开销
  • 报告警告:报告者上传 hr = 8007000d 的事件失败。
  • 警告:无法将事件批次转换为 Web 服务事件:0x8007000d
  • 严重:GetClientUpdateUrl 失败,错误 = 0x8024D009
  • 警告:无法从 NLM 获取 Wu 豁免信息,假设不豁免,错误 = 0x80240037
  • 代理 * 在线 = 否;忽略下载优先级 = 否<- 在线 = 否;???

任何帮助都将不胜感激,因为这种情况很少发生。

答案1

因此,这是一个奇怪的修复。

我的 WSUSContent 文件夹中有 0.99GB,在手动服务器清理(未选择不需要的更新文件)后等待了大约 45 分钟,然后选择了不需要的更新文件..又过了一分钟,WSUSContent 文件夹变成了 100GB(从 0.99GB 开始,这里的网速不够快,无法在 45 分钟内获取 99GB),并且批准了 50,000 个更新。

但它确实有效。非常非常奇怪。日志中没有任何内容请求清理,空间也不是问题。太奇怪了。

谢谢大家的建议!

答案2

我可以重复@Proxy 所说的话吗:

奇怪的修复......非常非常奇怪......多么奇怪。

我的三星笔记本电脑装有 Windows 8.1 更新。它曾感染过病毒,但已清除。当前日期是 2017 年 5 月 16 日,但上次 Windows 更新是在 2 年前,即 2015 年。

清除恶意软件后,Windows 更新无法正常工作。它会挂起,没有任何进展c:\windows\WindowsUpdate.log,而且还占用了一个核心的 100%。

过期两年的一个后果可能是,GWX(获取 Windows 10)仍在这台笔记本电脑上运行,即使该优惠已于 1 年多前过期。

这台笔记本电脑的另一个值得注意的地方是,我更换了两次主板。第一次,它一天崩溃好几次。第二块主板工作正常。所以那些崩溃可能对这里产生了影响。

尝试了几乎所有方法之后,这是有效的:Windowscleanmgr.exe又名“磁盘清理”,又名“通过删除不必要的文件来清理磁盘空间”。

我选择了:

  • 临时网络文件
  • 调试转储文件(不过看起来它们仍在那里)
  • 系统错误内存转储文件(但看起来它们仍在那里)
  • 临时文件

之后,重新启动,Windows 更新就可以正常工作了。真是太奇怪了。

以下是我尝试过但没有奏效的一些主要解决方案:

:: consider carefully /ResetBase -- it prevents you from un-installing windows updates
Dism /Online /Cleanup-Image /StartComponentCleanup /ResetBase

Dism /Online /Cleanup-Image /RestoreHealth
sfc /scannow

我不得不多次运行这些步骤。每个步骤都修复了损坏问题。直到它们通过且未发现任何损坏。

但 Windows 更新仍然无法工作。仍然挂起。

更深入地,我尝试了这个修复方法,即来自 sevenforums 的“选项 2”https://www.sevenforums.com/tutorials/91738-windows-update-reset.html

Reset_Reregister_Windows_Update_Components.bat

以下是截至今天的批处理文件的内容:

@echo off

:: Created by: Shawn Brink
:: http://www.sevenforums.com
:: Tutorial: http://www.sevenforums.com/tutorials/91738-windows-update-reset.html


set b=0

:bits
set /a b=%b%+1
if %b% equ 3 (
   goto end1
) 
net stop bits
echo Checking the bits service status.
sc query bits | findstr /I /C:"STOPPED" 
if not %errorlevel%==0 ( 
    goto bits 
) 
goto loop2

:end1
cls
echo.
echo Failed to reset Windows Update due to bits service failing to stop.
echo.
pause
goto Start


:loop2
set w=0

:wuauserv
set /a w=%w%+1
if %w% equ 3 (
   goto end2
) 
net stop wuauserv
echo Checking the wuauserv service status.
sc query wuauserv | findstr /I /C:"STOPPED" 
if not %errorlevel%==0 ( 
    goto wuauserv 
) 
goto loop3

:end2
cls
echo.
echo Failed to reset Windows Update due to wuauserv service failing to stop.
echo.
pause
goto Start



:loop3
set app=0

:appidsvc
set /a app=%app%+1
if %app% equ 3 (
   goto end3
) 
net stop appidsvc
echo Checking the appidsvc service status.
sc query appidsvc | findstr /I /C:"STOPPED" 
if not %errorlevel%==0 ( 
    goto appidsvc 
) 
goto loop4

:end3
cls
echo.
echo Failed to reset Windows Update due to appidsvc service failing to stop.
echo.
pause
goto Start


:loop4
set c=0

:cryptsvc
set /a c=%c%+1
if %c% equ 3 (
   goto end4
) 
net stop cryptsvc
echo Checking the cryptsvc service status.
sc query cryptsvc | findstr /I /C:"STOPPED" 
if not %errorlevel%==0 ( 
    goto cryptsvc 
) 
goto Reset

:end4
cls
echo.
echo Failed to reset Windows Update due to cryptsvc service failing to stop.
echo.
pause
goto Start



:Reset
Ipconfig /flushdns
Del "%ALLUSERSPROFILE%\Application Data\Microsoft\Network\Downloader\qmgr*.dat"
sc.exe sdset bits D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)
sc.exe sdset wuauserv D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)
cd /d %windir%\system32
Ren %systemroot%\system32\catroot2 catroot2.bak
regsvr32.exe /s atl.dll
regsvr32.exe /s urlmon.dll
regsvr32.exe /s mshtml.dll
regsvr32.exe /s shdocvw.dll
regsvr32.exe /s browseui.dll
regsvr32.exe /s jscript.dll
regsvr32.exe /s vbscript.dll
regsvr32.exe /s scrrun.dll
regsvr32.exe /s msxml.dll
regsvr32.exe /s msxml3.dll
regsvr32.exe /s msxml6.dll
regsvr32.exe /s actxprxy.dll
regsvr32.exe /s softpub.dll
regsvr32.exe /s wintrust.dll
regsvr32.exe /s dssenh.dll
regsvr32.exe /s rsaenh.dll
regsvr32.exe /s gpkcsp.dll
regsvr32.exe /s sccbase.dll
regsvr32.exe /s slbcsp.dll
regsvr32.exe /s cryptdlg.dll
regsvr32.exe /s oleaut32.dll
regsvr32.exe /s ole32.dll
regsvr32.exe /s shell32.dll
regsvr32.exe /s initpki.dll
regsvr32.exe /s wuapi.dll
regsvr32.exe /s wuaueng.dll
regsvr32.exe /s wuaueng1.dll
regsvr32.exe /s wucltui.dll
regsvr32.exe /s wups.dll
regsvr32.exe /s wups2.dll
regsvr32.exe /s wuweb.dll
regsvr32.exe /s qmgr.dll
regsvr32.exe /s qmgrprxy.dll
regsvr32.exe /s wucltux.dll
regsvr32.exe /s muweb.dll
regsvr32.exe /s wuwebv.dll
regsvr32 /s wudriver.dll
netsh winsock reset

:Start
net start bits
net start wuauserv
net start appidsvc
net start cryptsvc
bitsadmin.exe /reset /allusers

我尝试了一个扩展版本,其中添加了停止/启动msiserver和重命名%systemroot%\SoftwareDistribution,最后停止,wuauserv因为 Windows 可能会自动重新启动它。

代码如下:

:rem v2 with ren whole SoftwareDistribution
:rem    and stop / start msiserver
@echo off

:: Created by: Shawn Brink
:: http://www.sevenforums.com
:: Tutorial: http://www.sevenforums.com/tutorials/91738-windows-update-reset.html


:rem ---------- bits ----------
:loop1
set b=0

:bits
set /a b=%b%+1
if %b% equ 3 (
   goto end1
) 
net stop bits
echo Checking the bits service status.
sc query bits | findstr /I /C:"STOPPED" 
if not %errorlevel%==0 ( 
    goto bits 
) 
goto loop2

:end1
cls
echo.
echo Failed to reset Windows Update due to bits service failing to stop.
echo.
pause
goto Start


:rem ---------- appidsvc ----------
:loop2
set app=0

:appidsvc
set /a app=%app%+1
if %app% equ 3 (
   goto end2
) 
net stop appidsvc
echo Checking the appidsvc service status.
sc query appidsvc | findstr /I /C:"STOPPED" 
if not %errorlevel%==0 ( 
    goto appidsvc 
) 
goto loop3

:end2
cls
echo.
echo Failed to reset Windows Update due to appidsvc service failing to stop.
echo.
pause
goto Start


:rem ---------- cryptsvc ----------
:loop3
set c=0

:cryptsvc
set /a c=%c%+1
if %c% equ 3 (
   goto end3
) 
net stop cryptsvc
echo Checking the cryptsvc service status.
sc query cryptsvc | findstr /I /C:"STOPPED" 
if not %errorlevel%==0 ( 
    goto cryptsvc 
) 
goto loop4

:end3
cls
echo.
echo Failed to reset Windows Update due to cryptsvc service failing to stop.
echo.
pause
goto Start


:rem ---------- msiserver ----------
:loop4
set w=0

:msiserver
set /a w=%w%+1
if %w% equ 3 (
   goto end4
) 
net stop msiserver
echo Checking the msiserver service status.
sc query msiserver | findstr /I /C:"STOPPED" 
if not %errorlevel%==0 ( 
    goto msiserver 
) 
goto loop5

:end4
cls
echo.
echo Failed to reset Windows Update due to msiserver service failing to stop.
echo.
pause
goto Start


:rem ---------- wuauserv ----------
:loop5
set w=0

:wuauserv
set /a w=%w%+1
if %w% equ 3 (
   goto end5
) 
net stop wuauserv
echo Checking the wuauserv service status.
sc query wuauserv | findstr /I /C:"STOPPED" 
if not %errorlevel%==0 ( 
    goto wuauserv 
) 
goto Reset

:end5
cls
echo.
echo Failed to reset Windows Update due to wuauserv service failing to stop.
echo.
pause
goto Start



:rem ---------- Reset ----------
:Reset
Ipconfig /flushdns
Del "%ALLUSERSPROFILE%\Application Data\Microsoft\Network\Downloader\qmgr*.dat"
sc.exe sdset bits D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)
sc.exe sdset wuauserv D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)
cd /d %windir%\system32
Ren %systemroot%\system32\catroot2 catroot2.bak

cd %systemroot%\
ren SoftwareDistribution SoftwareDistribution_mm.bak

regsvr32.exe /s atl.dll
regsvr32.exe /s urlmon.dll
regsvr32.exe /s mshtml.dll
regsvr32.exe /s shdocvw.dll
regsvr32.exe /s browseui.dll
regsvr32.exe /s jscript.dll
regsvr32.exe /s vbscript.dll
regsvr32.exe /s scrrun.dll
regsvr32.exe /s msxml.dll
regsvr32.exe /s msxml3.dll
regsvr32.exe /s msxml6.dll
regsvr32.exe /s actxprxy.dll
regsvr32.exe /s softpub.dll
regsvr32.exe /s wintrust.dll
regsvr32.exe /s dssenh.dll
regsvr32.exe /s rsaenh.dll
regsvr32.exe /s gpkcsp.dll
regsvr32.exe /s sccbase.dll
regsvr32.exe /s slbcsp.dll
regsvr32.exe /s cryptdlg.dll
regsvr32.exe /s oleaut32.dll
regsvr32.exe /s ole32.dll
regsvr32.exe /s shell32.dll
regsvr32.exe /s initpki.dll
regsvr32.exe /s wuapi.dll
regsvr32.exe /s wuaueng.dll
regsvr32.exe /s wuaueng1.dll
regsvr32.exe /s wucltui.dll
regsvr32.exe /s wups.dll
regsvr32.exe /s wups2.dll
regsvr32.exe /s wuweb.dll
regsvr32.exe /s qmgr.dll
regsvr32.exe /s qmgrprxy.dll
regsvr32.exe /s wucltux.dll
regsvr32.exe /s muweb.dll
regsvr32.exe /s wuwebv.dll
regsvr32 /s wudriver.dll
netsh winsock reset

:Start
net start bits
net start wuauserv
net start appidsvc
net start cryptsvc
net start msiserver
bitsadmin.exe /reset /allusers

经过所有这些,Windows Update 才能再次正常运行cleanmgr

相关内容