Windows Server 2019 搭建 WSUS

WSUS,Windows Server Update Service,Windows服务器更新服务,用途是统一下载更新并分发给企业网内部的计算机,适用于Windows Server和桌面操作系统。本文简单部署,利用一台可以访问互联网的WSUS服务器,用于整个企业网内的更新下载和分发。

1.准备工作

  • 第1步,资源规划,考虑到补丁越来越大,若为生产系统且客户端数量较多,则建议磁盘至少1TB

补:本文亦适用于 Windows Server 2022,只是安装 .NET Framework 3.5 需要用到 windows 2022 的 sxs 资源包

ip地址 机器名 配置 OS版本 客户端数量 wsus存储目录
192.168.31.101 WSUS 4C-16G-500GB Windows Server 2019 1000-1500个 D:\WindowsUpdate
  • 第2步,确认OS与安装WSUS的磁盘分区必须是NTFS格式文件系统
fsutil fsinfo volumeinfo c: | findstr 文件系统名
fsutil fsinfo volumeinfo d: | findstr 文件系统名
  • 第3步,将服务器更名为:WSUS
wmic computersystem where name="%computername%" call rename name="WSUS"
  • 第4步,防火墙放行端口,主要是开放 TCP 80/443/8530/8531 给 192.168.*.* 访问
netsh advfirewall set allprofiles state off
netsh advfirewall firewall set rule name=all dir=in new enable=no
netsh advfirewall firewall set rule name=all dir=out new enable=no

netsh advfirewall firewall add rule name="permit_ping_echo_request" protocol=ICMPv4 dir=in action=allow
netsh advfirewall firewall add rule name="permit_mstsc_tcp_3389" protocol=TCP dir=in remoteip=192.168.0.0/255.255.0.0 localport=3389 action=allow
netsh advfirewall firewall add rule name="permit_http_tcp_80" protocol=TCP dir=in remoteip=192.168.0.0/255.255.0.0 localport=80 action=allow
netsh advfirewall firewall add rule name="permit_https_tcp_443" protocol=TCP dir=in remoteip=192.168.0.0/255.255.0.0 localport=443 action=allow
netsh advfirewall firewall add rule name="permit_wsus_tcp_8530" protocol=TCP dir=in remoteip=192.168.0.0/255.255.0.0 localport=8530 action=allow
netsh advfirewall firewall add rule name="permit_wsus_tcp_8531" protocol=TCP dir=in remoteip=192.168.0.0/255.255.0.0 localport=8531 action=allow

netsh advfirewall firewall add rule name="block_in_tcp_135_137_138_139_445" protocol=TCP dir=in localport=135,137,138,139,445 action=block
netsh advfirewall firewall add rule name="block_in_udp_135_137_138_139_445" protocol=UDP dir=in localport=135,137,138,139,445 action=block
netsh advfirewall firewall add rule name="block_out_tcp_135_137_138_139_445" protocol=TCP dir=out localport=135,137,138,139,445 action=block
netsh advfirewall firewall add rule name="block_out_udp_135_137_138_139_445" protocol=UDP dir=out localport=135,137,138,139,445 action=block
netsh advfirewall set allprofiles state on
  • 第5步,通过 dism 启用 .NET Framework 3.5 功能
cd /d c:\
wget -c http://iso.sqlfans.cn/windows/win2019/sources.zip
unzip sources.zip
dism /online /enable-feature /featurename:NetFX3 /All /Source:C:\sources\sxs /LimitAccess
  • 第6步,配置dns(首选DNS选择域控ip,备用DNS选择 223.5.5.5),确保 WSUS 服务器可以访问公网的 Microsoft 域(*.windows.com、*.microsoft.com、*.windowsupdate.com),拓扑图如下所示:

  • 第7步,重启服务器,加域(如果有)并将域账号(wsus_admin)加入本地管理员组,再次重启服务器
shutdown /r /t 0

2.安装 WSUS 角色

  • 第1步,使用本地 Administrators 管理员组成员的帐户登录到 WSUS 服务器
  • 第2步,依次选择“服务器管理器 -> 添加角色和功能 -> 服务器角色”,勾选“Windows Server 更新服务”

  • 第3步,功能,默认即可

  • 第4步,选择WSUS的角色服务,默认即可

  • 第5步,自定义更新文件的存储位置,可以使用WSUS服务器的本地位置,也可以使用网络上的共享存储。若本地位置则无需额外设置权限(比如共享),默认即可。示例选择 D:\WindowsUpdate

  • 第6步,配置 Web 服务器角色,默认即可

  • 第7步,点击“关闭”完成安装

3.配置 WSUS 向导

  • 第1步,依次选择“服务管理器 - 工具 - Windows Server 更新服务”,首次打开会弹出如下界面,先点“运行”,结束后再点“关闭”

注:不要删除 IIS 默认的站点(Default Web Site),否则这一步会报错“严重错误: 系统找不到指定的路径”

  • 第2步,首次运行会弹出配置向导,点击“下一步”

  • 第3步,建议不要加入改进计划

  • 第4步,由于是简单部署,这里配置 直接通过互联网从Microsoft获取更新。如果是多台WSUS服务器分级部署,请选择第二项去连接内网中的其他WSUS服务器

  • 第5步,点击“开始连接”,需要很长时间,请耐心等待。

  • 第6步,根据客户端计算机的系统语言选择“仅下载以下语言的更新”,示例选择 中文(简体)

  • 第7步,根据需要选择要更新的产品

注:为了测试,这里仅启用了 Windows Server 2019,全部审批后下载的补丁文件就占用了 31.6 GB

  • 第8步,根据需要选择要下载的更新分类

  • 第9步,设置同步计划,WSUS服务器将于指定时间向Microsoft获取更新列表,示例选择 手动同步

  • 第10步,根据需要选择是否立即同步。同步只是同步更新列表,不会自动下载更新文件,经过审批之后才会下载

  • 第11步,点击完成,开始同步更新列表

  • 第12步,打开 Windows Server 更新服务,可以查看同步进度(同步耗时非常久,仅120个更新耗时53分钟)

4.设置 WSUS 审批和下发更新

  • 第1步,打开更新服务,添加计算机组,示例添加分组 windows-2019-group

  • 第2步,将未分配的计算机更改到对应的分组,示例将主机 win2019test 从默认的“未分配的计算机”调整到 windows-2019-group

  • 第3步,等待更新列表同步完成,根据需要选中“未经审批”的更新,右键选择“审批”,在对应的分组选择“已审批进行安装”,点击“确定”

注:只有这里审批的更新才会被下载,审批之后会看到 wsus 服务器的网卡有大量的接收流量,说明已开始从微软官网下载更新文件。

  • 第4步,在 WSUS 服务器上,查看已下载的补丁
echo # 查看已下载的补丁文件个数 #
dir d:\WindowsUpdate\WsusContent /s /b | find ".cab" /C

echo # 查看已下载的补丁文件大小 #
dir /p d:\WindowsUpdate | findstr "可用字节"
  • 第5步,查看某个更新对应的补丁包文件(wsus控制台看到的一个补丁可能会包含多个补丁文件)及存放位置

  • 第6步,依次点击“选项 - 自动审批”,根据需要配置自动审批规则

注:配置自动审批规则之后,更新服务会自动下载更新文件,磁盘增长会很快!建议及时关注微软官方公布的高危漏洞,推荐使用手动审批来精细的控制更新范围,并通过域控组策略统一推送及安装

5.域控配置自动更新组策略

  • 第1步,以管理员身份登录域控服务器,依次选择“开始 - Windows管理工具 - 组策略管理”打开域控的组策略,新建 GPO 名为 wsus

注:运行 gpedit.msc 打开的是本地组策略,修改这里的策略不会下发到域内其他机器

  • 第2步,选中 wsus 这个 GPO,右键选择“编辑”

  • 第3步,打开 wsus 组策略,启用“配置自动更新”,并指定安装更新的具体时间

  • 第4步,打开 wsus 组策略,启用“指定 Intranet Microsoft 更新服务位置”,并设置内部WSUS服务器的位置,示例 http://wsus:8530

编号 策略名称 建议配置 示例
01 允许自动更新立即安装 已启用 -
02 允许非管理员接收更新通知 已启用 -
03 允许使用来自 Intranet Microsoft 更新服务位置的签名更新 xxx xxx
04 始终在计划时间自动重启 xxx xxx
05 自动更新检测频率 已启用 间隔(小时):22
06 配置自动更新 已启用 4-自动下载并计划安装,每天03:00
07 计划安装的延迟重启 xxx xxx
08 不要在“关闭 Windows”对话框中将默认选项调整为“安装更新和关闭” xxx xxx
09 不要连接到任何 Windows 更新 Internet 位置 已启用 -
10 不要在“关闭 Windows”对话框中显示“安装更新和关闭”选项 xxx xxx
11 启用客户端定位 xxx xxx
12 启用 Windows 更新电源管理以自动唤醒计算机来安装计划的更新 xxx xxx
13 对于有已登录用户的计算机,计划的自动更新安装不执行自动重启 xxx xxx
14 对计划的安装再次提示重启 xxx xxx
15 重新计划自动更新计划的安装 xxx xxx
16 指定 Intranet Microsoft 更新服务位置 已启用 http://wsus:8530
17 通过自动更新启用建议的更新 xxx xxx
18 启用软件通知 xxx xxx
  • 第6步,链接现有 GPO,添加 wsus 以使该策略下发生效

  • 第7步,确认已链接

  • 第8步,在域控服务器上,执行 gpupdate /force 刷新组策略
gpupdate /force
  • 第9步,登录已加域的任一机器,确认规则已生效,然后发起更新请求
echo ### 刷新组策略 ###
gpupdate /force

echo ### 抽样检查几个配置 ###
reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v WUServer
reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v WUStatusServer
reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v AUOptions
reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v DetectionFrequency

echo ### 强制客户端向新的更新服务器发起更新请求 ###
wuauclt /detectnow
  • 第10步,通过“开始 - 设置 - 更新和安全”点击“检查更新”,可以看到已审批的更新

注:如果补丁的下载速度特别快,同时 wsus 服务器的网卡有大量的发送流量,则表示补丁已通过 wsus 下发

6.确认 WSUS 自动下发效果

  • 第1步,查看配置了 WSUS 更新服务的计算机,如下示例:xxx.com 域内有2台主机配置了 http://wsus:8530

  • 第2步,查看某个更新需要安装的客户端数量

  • 第3步,在已加域的任一机器上,通过命令行,查看已安装的更新
echo # 查看已安装的补丁清单 #
wmic qfe get HotFixID,InstalledOn

echo # 查看已安装的补丁清单 #
systeminfo | find "KB"

echo # 查看是否安装某些补丁 #
wmic qfe get HotFixID,InstalledOn | findstr "KB5066738 KB5005112 KB4577586"
  • 第4步,通过“开始 - 设置 - 更新和安全”,查看本机已安装的更新

注:“卸载更新”看到的和“更新历史记录”不一致是正常的,原因是“卸载更新”显示的是可以被卸载的更新包,而“更新历史记录”显示的是所有曾尝试安装的更新活动记录,并非所有更新都可以卸载,比如更新被集成到系统中(无法也无必要单独卸载)或超过卸载期限,就会造成更新无法卸载。

  • 第5步,在 WSUS 服务器上,安装 Microsoft Report Viewer 2012 可再分发组件

注:先装 Microsoft System CLR Types for SQL Server 2012,再装 Microsoft Report Viewer 2012

cd /d c:\
wget -c http://iso.sqlfans.cn/windows/win2019/Microsoft-System-CLR-Types-for-SQL-Server-2012.msi
wget -c http://iso.sqlfans.cn/windows/win2019/Microsoft-Report-Viewer-2012-Runtime.msi
start Microsoft-System-CLR-Types-for-SQL-Server-2012.msi
start Microsoft-Report-Viewer-2012-Runtime.msi
  • 第6步,在批准更新后 24 小时,可使用 WSUS 报告功能来确定是否将更新部署到测试计算机组中

附录

WSUS 定期备份

  • 为避免因系统崩溃或误操作丢失数据,定期备份 WSUS 服务器至关重要。确保备份包含 WSUS 数据库、更新文件、配置文件、服务器的操作系统。
  • WSUS数据库:使用 SSMS 备份 WSUS 数据库,连接地址 \\.\pipe\Microsoft##WID\tsql\query(仅支持本地连接),数据目录 C:\Windows\WID\Data
:: 查看sqlserver日志
type C:\Windows\WID\Log\error.log

:: 查看sqlserver数据目录
dir C:\Windows\WID\Data

:: 查看sqlserver进程
tasklist | findstr sql

:: 安装 vc_redist_vs2010 否则sqlcmd会报错“由于找不到 MSVCR100.dll,无法继续执行代码”
http://iso.sqlfans.cn/windows/vc++/vc_redist_vs2010.x64.exe

:: 安装 ODBC Driver 11,否则sqlcmd会报错“Microsoft ODBC Driver 11 for SQL Server : 未发现数据源名称并且未指定默认驱动程序”
http://iso.sqlfans.cn/sqlserver/provider/odbc_driver_11_for_sqlserver_x64.msi

:: 打开odbc驱动程序,确保“驱动程序”中包含“ODBC Driver 11 for SQL Server”这个odbc驱动程序
C:\WINDOWS\SYSTEM32\ODBCAD32.EXE

:: 登录sqlserver实例
sqlcmd -S \\.\pipe\Microsoft##WID\tsql\query

:: 备份SUSDB数据库
use master
go
backup database SUSDB to disk = 'd:\tools\SUSDB.2025.bak' with compression
go
  • 更新文件:备份存储在 WSUS 服务器上的所有更新文件,确保恢复时能够快速重新部署更新
:: 备份如下更新目录
D:\WindowsUpdate
  • 配置文件:备份 WSUS 配置文件,以便在恢复时能够快速恢复到原始设置
:: 先备份所有应用程序池,再备份所有站点
%windir%\system32\inetsrv\appcmd list apppool /config /xml > c:\apppools.xml
%windir%\system32\inetsrv\appcmd list site /config /xml > c:\sites.xml

:: 备份如下网站目录
C:\inetpub\wwwroot
C:\Program Files\Update Services\WebServices\Root

优化 WSUS 站点

  • 打开IIS管理器,找到 WsusPool 应用程序池,禁用回收和配置内存限制:
设置名称 建议值 默认值 备注
(常规) - 队列长度 2000 1000 -
进程模型 - 启用 Ping False True -
进程模型 - 闲置超时(分钟) 0 20 -
进程模型 - 关闭时间限制(秒) 1800 90 -
进程模型 - 启动时间限制(秒) 1800 90 -
回收 - 固定时间间隔(分钟) 0 1740 防止回收
回收 - 专用内存限制(KB) 0 1843200 -
快速故障防护 - 已启用 False True -

调整更新的选项

  • 如果要调整更新的产品或分类,可以参考下图:

  • 如果要调整更新的同步计划,可以参考下图,示例改为每天 04:00 同步更新列表

遇到的问题

1.装完补丁重启报错 0x80070005

  • 问题:在已加域的一台机器上安装补丁之后,点击“立即重新启动”报错 0x80070005

  • 解决:通过“开始 - 电源”进行重启
echo ### 配置相关服务自动启动 ###
sc config BITS start= auto
sc config W32Time start= auto
sc config wuauserv start= auto
sc config CryptSvc start= auto

echo ### 重启相关服务 ###
net stop BITS & net start BITS
net stop W32Time & net start W32Time
net stop wuauserv & net start wuauserv
net stop CryptSvc & net start CryptSvc

echo ### 强制客户端向新的更新服务器发起更新请求 ###
wuauclt /detectnow

2.检查更新报错 0x80244022

  • 问题:点击开始选择重启之后,再次检查更新报错报错 0x80244022

  • 解决:登录wsus服务器,发现更新服务控制台已崩溃,重启wsus服务器即可。

3.同步更新列表超时

  • 问题:第一次同步更新列表,总是失败报错“InvalidOperationException: XML 文档(1, 585)中有错误 ---> System.Net.WebException: 操作已超时”
  • 解决:1.利用test-connection检测网络丢包、2.临时关闭wsus服务器的防火墙和杀毒软件、3.将wsus服务器的外发地址从移动调整到电信、4.确认企业防火墙没有限流截断、5.将wsus服务器的流量临时全放开、6.优化iis中WsusPool应用程序池、7.调整DNS服务器地址、8.配置凌晨的同步计划

4.不建议删除 SoftwareDistribution

  • C:\Windows\SoftwareDistribution 用于存储 Windows 更新 的相关文件,包括更新日志和下载的补丁。发起更新任务以后,系统会将补丁文件从 wsus 服务器下载到本地 SoftwareDistribution 这个目录。若直接删除整个目录,可能会导致更新失败、无法安装补丁或更新后系统不稳定等问题
子目录 用途 是否可以删除
Download 临时存放从微软或wsus服务器下载的更新文件(.exe、.cab、.msu等) 可以删除
DataStore 存储Windows更新的元数据、更新历史及操作日志 谨慎删除
PostRebootEventCache.V2 存储需重启后继续执行的更新任务配置,记录未完成的更新操作(如驱动程序安装) -
SLS 存储与Windows许可证验证相关的数据,包含数字证书、激活令牌及KMS客户端配置 禁止手动删除
  • 删除目录 Download 将立即释放磁盘空间,已下载但未安装的更新需重新下载
  • 删除目录 DataStore 将重建空白数据库,丢失更新历史记录,但不会影响已安装的补丁,可以解决因数据库损坏导致的更新错误(如0x80070002)
  • 删除目录 PostRebootEventCache.V2 可能导致未完成的更新任务被中止,系统重启后自动重建该目录
  • 删除目录 SLS(Software Licensing Service)可能导致系统激活状态失效,可能触发0xC004F074等激活错误,需重新激活

结论:

  • 推荐使用 DISM /Online /Cleanup-Image /StartComponentCleanup 定期清理残留
  • 不建议直接删除SoftwareDistribution整个文件夹,仅清理子目录内容
net stop wuauserv
del /f /s /q %windir%\SoftwareDistribution\Download\*.*
rd /s /q %windir%\SoftwareDistribution\DataStore
net start wuauserv

5.gpo冲突导致客户端无法获取更新

  • 问题:客户反馈将测试好的 wsus gpo 策略全面生效之后,其他客户端却无法获取wsus更新,刷新组策略并检查 WUServer 地址,发现配置如下:
gpupdate /force
reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v WUServer

  • 分析:经确认,目前的 wsus 生产服务器(192.168.201.91)与域控推送的 wsus主机(192.168.220.30)的ip不一致。登录域控发现有另外一个 gpo 策略也配置了 wsus 地址(192.168.220.30),将这个 gpo 中的 wsus 配置禁用,并刷新组策略就好了。
Copyright © www.sqlfans.cn 2021 - 2026 All Right Reserved更新时间: 2026-07-27 11:34:20

results matching ""

    No results matching ""