我已经为这个问题苦思冥想了一段时间,无论我做什么都无法解决问题
问题:
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 服务器是域的一部分,需要澄清的是,当我运行 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