排查 WSUS 客户端代理的问题
本文可帮助你诊断和解决 Windows Server Update Services (WSUS) 客户端代理的问题。
原始产品版本: Windows Server Update Services
原始 KB 数: 10132
当你遇到 WSUS 客户端代理的问题时,它们可以通过多种方式自行显示。 下面列出了一些常见问题:
- 这可能是组策略客户端设置的问题。
- 这可能是 BITS 的问题。
- WSUS 代理服务可能有问题。
- 它可能与阻止客户端访问服务器的网络问题有关。
- 它可能是自动更新代理存储的问题。
- 这可能是客户端因磁盘克隆而导致的 WSUS 客户端 ID 重复的问题。
验证是否已正确配置客户端
排查 WSUS 客户端代理问题时,请先确保客户端已正确配置。 确保客户端收到正确的 Active Directory 组策略,并且存在 WSUS 服务器的详细信息。 为此,可以运行以下命令:
GPRESULT /V > GPRESULT.TXT
在记事本中打开文本文件,找到 WSUS 策略的名称。 例如,如果 WSUS 策略名为 WSUS,则可以在“应用组策略对象”标题下的“计算机设置”部分的GPRESULT.TXT文件中找到它。 下面是一个示例:
Applied Group Policy Objects
-----------------------------
Default Domain Policy
WSUS
Local Group Policy
如果 WSUS 设置不存在,可能的原因包括:
- 系统没有域中的组策略。
- 组策略不针对客户端系统。
若要解决此问题,请确保在每台客户端上成功更新组策略,并正确配置 WSUS 设置。
若要更新客户端上的组策略,请从命令提示符运行 GPUpdate /force
。
有关为 WSUS 客户端配置组策略的详细信息,请参阅 使用组策略配置自动更新。
检查与 BITS 相关的问题
后台智能传输服务(BITS)是 WSUS 用来将更新从 Microsoft 更新下载到主 WSUS 服务器,以及从 WSUS 服务器下载到其客户端的服务。 某些下载问题可能是由服务器或客户端计算机上的 BITS 问题引起的。 排查下载问题时,应确保所有受影响的计算机上都正确运行 BITS。
默认情况下,BITS 服务必须在 LocalSystem 帐户下运行。 若要将服务配置为在正确的帐户下运行,请执行以下步骤:
打开一个命令提示符并运行以下命令:
sc config bits obj= LocalSystem
obj= 和 LocalSystem 之间必须发生空格。 如果成功,应会收到以下输出:
[SC] ChangeServiceConfig SUCCESS
停止并重启 BITS。
若要查看 BITS 服务状态,请打开命令提示符并运行以下命令:
sc query bits
如果 BITS 正在运行,应会看到以下输出:
SERVICE_NAME: bits
TYPE: 20 WIN32_SHARE_PROCESS
STATE: 4 RUNNING
如果 BITS 未运行,你将看到以下输出:
SERVICE_NAME: bits
TYPE: 20 WIN32_SHARE_PROCESS
STATE: 1 STOPPED
通常可以通过停止服务并重启 BITS 问题来解决 BITS 问题。 若要停止并重启 BITS 服务,请从命令提示符运行以下命令:
sc stop bits
sc start bits
注意
必须以本地管理员身份登录才能停止和重启 BITS。
BITS 无法启动
如果 BITS 服务无法启动,请查看事件日志中是否有任何与 BITS 相关的错误。 可以使用下表来诊断这些错误的原因。
错误名称 | 错误代码 | 说明 |
---|---|---|
ERROR_SERVICE_DOES_NOT_EXIST | 0x80070424 | 请参阅以下有关 修复 BITS 配置 的部分。 |
ERROR_SERVICE_NOT_IN_EXE | 0x8007043B | BITS 未列为 netsvcs svchost 组中的服务之一 |
ERROR_SERVICE_DISABLED | 0x80070422 | BITS 已被禁用。 启用 BITS 服务。 |
ERROR_SERVICE_DEPENDENCY_DELETED ERROR_SERVICE_DEPENDENCY_FAIL | 0x80070433,0x8007042c | BITS 服务依赖项列表中出现的服务无法启动。 确保 BITS 服务的依赖项列表正确: Windows Vista: RpcSs、EventSystem(启用对等缓存时也http.sys和 LanManWorkstation) Windows Server 2003: Rpcss、EventSystem Windows XP: Rpcss Windows 2000: Rpcss、SENS、Wmi |
ERROR_PATH_NOT_FOUND | 0x80070003 | Windows Vista:%ALLUSERSPROFILE%\Microsoft\Network 不存在 |
ERROR_FILE_NOT_FOUND | 0x80070002 | 缺少 Parameters 键。 确保存在以下键和值:HKLM\SYSTEM\CurrentControlSet\Services\BITS\Parameters\ServiceDll = %SystemRoot%\System32\qmgr.dll |
REGDB_E_CLASSNOTREG,EVENT_E_INTERNALERROR | 0x80040154,0x80040206 | Windows 2000 的 BITS 依赖于 SENS 和 EventSystem 服务。 如果 COM+ 目录已损坏,则 BITS 可能会失败并显示此错误代码。 |
BITS 作业失败
如果客户端已正确配置为接收更新,则 BITS 已正确配置,并且 BITS 似乎已启动并正常运行,则可能会遇到 BITS 作业本身失败的问题。 若要验证它,请查看事件日志中是否有任何与 BITS 相关的错误。 可以使用下表来诊断这些错误的原因。
错误名称 | 错误代码 | 说明 |
---|---|---|
E_INVALIDARG | 0x80070057 | 在用户的 Internet Explorer 代理设置中指定了不正确的代理服务器名称。 如果为不是 NTLM/Negotiate 的身份验证方案提供凭据,但用户名或密码为 null,也会出现此错误。 将用户的 Internet Explorer 代理设置更改为有效的代理服务器。 或者将凭据更改为非 NTLM/Negotiate 方案为 NULL 用户名/密码。 |
ERROR_WINHTTP_NAME_NOT_RESOLVED | 0x80072ee7 | BITS 无法解析服务器/代理。 作业所有者上下文中的同一台计算机上的 Internet Explorer 将看到相同的问题。 尝试使用作业所有者的上下文通过 Web 浏览器下载同一文件。 |
ERROR_HTTP_INVALID_SERVER_RESPONSE | 0x80072f78 | 这是暂时性错误,作业将继续下载。 |
BG_E_INSUFFICIENT_RANGE_SUPPORT | 0x80200013 | BITS 使用 HTTP 请求中的范围标头来请求文件的各个部分。 如果服务器或代理服务器不了解范围请求并返回完整文件而不是请求的范围,则 BITS 会将作业置于 ERROR 状态并显示此错误。 在错误期间捕获网络流量,并检查具有 Range 标头的 HTTP GET 请求是否获得有效的响应。 检查代理服务器,确保它们已正确配置为支持 Range 请求。 |
BG_E_MISSING_FILE_SIZE | 0x80200011 | 当 BITS 发送 HEAD 请求,服务器/代理在响应中不返回 Content-Length 标头时,BITS 会将作业置于 ERROR 状态,并显示此错误。 检查代理服务器和 WSUS 服务器,确保正确配置它们。 已知某些版本的 Apache 2.0 代理服务器表现出此行为。 |
BG_E_HTTP_ERROR_403 | 0x80190193 | 当服务器在任何请求中返回 HTTP 403 响应时,BITS 会将作业置于 ERROR 状态,并显示此错误代码。 HTTP 403 对应于 禁止访问:访问被拒绝。 检查运行作业的帐户的访问权限。 |
ERROR_NOT_LOGGED_ON | 0x800704dd | SENS 服务未收到用户登录通知。 BITS(版本 2.0 及更高版本)取决于服务控制管理器的登录通知,后者又依赖于 SENS 服务。 确保 SENS 服务已启动并正常运行。 |
修复损坏的 BITS 配置
若要修复损坏的 BITS 服务配置,可以手动输入 BITS 服务配置。
注意
只有在所有其他故障排除尝试都失败的情况下,才应执行此操作。 必须是管理员才能修改 BITS 配置。
若要修复损坏的 BITS 配置,请执行以下步骤:
打开命令提示符。
输入以下命令,在键入每个命令后按 Enter:
sc config bits binpath= "%systemroot%\system32\svchost.exe –k netsvcs" sc config bits depend= RpcSs/EventSystem sc config bits start= delayed-auto sc config bits type= interact type=own sc config bits error= normal sc config bits obj= LocalSystem sc privs bits privileges= SeCreateGlobalPrivilege/SeImpersonatePrivilege/SeTcbPrivilege/SeAssignPrimaryTokenPrivilege/SeIncreateQuotaPrivilege sc sidtype bits unrestricted sc failure bits reset= 86400 actions=restart/60000/restart/120000
停止并重启 BITS。
WSUS 代理服务的问题
确保Windows 更新服务可以成功启动。
若要查看Windows 更新服务的当前状态,请打开命令提示符并运行以下命令:
sc query wuauserv
如果 WUAUSERV 正在运行,应会看到以下输出:
SERVICE_NAME: wuauserv
TYPE: 20 WIN32_SHARE_PROCESS
STATE: 4 RUNNING
如果 WUAUSERV 未运行,则会看到以下输出:
SERVICE_NAME: wuauserv
TYPE: 20 WIN32_SHARE_PROCESS
STATE: 1 STOPPED
验证是否可以成功启动 WUAUSERV 服务。 必须以本地管理员身份登录才能停止和重启 WUAUSERV。
若要启动 WUAUSERV 服务,请从命令提示符运行以下命令:
sc start wuauserv
如果客户端代理无法正常启动并运行,请检查Windows 更新代理版本。 如果代理不是最新的,请将Windows 更新代理更新到最新版本。
还可以重置Windows 更新组件。
运行修补程序或更新代理后,请运行 wuauclt /detectnow
。 检查windowsupdate.log以确保没有问题。
确保可从客户端访问 WSUS 服务器
请确保可以访问 URL http://<WSUSSERVER:port>/iuident.cab
并下载文件,而不会出错。
如果无法从客户端访问 WSUS 服务器,则最有可能的原因包括:
- 客户端上存在名称解析问题。
- 存在与网络相关的问题,例如代理配置问题。
使用标准故障排除过程验证名称解析是否在网络上工作。 如果名称解析正常工作,下一步是检查代理问题。 检查windowsupdate.log(C:\windows)以查看是否存在任何与代理相关的错误。 可以运行以下命令 proxycfg
来检查 WinHTTP 代理设置。
如果存在代理错误,请转到 Internet Explorer >工具>连接>LAN 设置,配置正确的代理,并确保可以访问指定的 WSUS URL。
完成后,可以使用命令将这些用户代理设置复制到 WinHTTP 代理设置 proxycfg -u
。 指定代理设置后,从命令提示符运行 wuauclt /detectnow
并检查windowsupdate.log是否存在错误。
重新生成自动更新代理存储
下载更新时出现问题,并且存在与软件分发存储相关的错误,请在客户端上完成以下步骤:
- 通过命令提示符运行
sc stop wuauserv
来停止自动更新服务。 - 重命名软件分发文件夹(例如 C:\Windows\SoftwareDistribution)。
- 通过从命令提示符运行
sc start wuauserv
来重启自动更新服务。 - 在命令提示符下,运行
wuauclt /resetauthorization /detectnow
。 - 在命令提示符下,运行
wuauclt /reportnow
。
检查具有相同 SUSclient ID 的客户端
可能会遇到控制台中仅出现一个 WSUS 客户端的问题。 或者你可能会注意到,在一组客户端中,一次只显示一个客户端,但出现的确切客户端可能会随时间而变化。 当系统被映像化并且客户端最终具有相同 SUSclientID
时,可能会出现此问题。
对于由于相同 SUSclientID
原因无法正常工作的客户端,请完成以下步骤:
通过命令提示符运行
sc stop wuauserv
来停止自动更新服务。从
SUSclientID
以下位置删除注册表项:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate
通过从命令提示符运行
sc start wuauserv
来重启自动更新服务。在命令提示符下,运行
wuauclt /resetauthorization /detectnow
。在命令提示符下,运行
wuauclt /reportnow
。