我想配置 WSUS,以便员工到达主要位置时使用 WSUS 下载资料,而当他们在其他位置(不同位置/家中等)时使用 Windows 更新。
在这个问题用来subnets/locations
执行此操作。这是一个不错的解决方案,但是我们决定只有大约 10-15 台计算机会收到automatic installation of updates
,其余计算机只会收到update/download
信息。
因此,我们处于应该结合使用位置 GPO 和基于 OU 的 GPO 的情况(自动人员将获得他们自己的 OU)。
有没有办法配置 Windows 客户端,以便 WSUS 从 2 个 GPO 中获取信息?另外,对于Home
我们不知道的客户位置,该怎么subnets
办?我们能否以某种方式配置 GPO,以便计算机在已知之外时subnets/locations
使用 Microsoft 的 Windows 更新打开另一个 GPO,但保留我们的“选择”,即自动下载或仅下载(取决于员工)。
我们选择为后台员工安装所有内容,并为程序员(占公司人数的 90%)仅下载。
答案1
您需要多个 GPOS。
- 创建 1 个 GPO 以使用 WSUS 服务器下载。将其应用于站点。
- 创建一个包含要自动更新的计算机的组
- 创建一个 GPO,将 WSUS 设置为自动安装。将安全过滤应用于 GPO,只允许第 2 组中的组应用该策略。将此(作为步骤 1 中 GPO 的第二优先级)应用于站点。
至于连接到 WU,您需要制定公司政策,让远程用户以一定间隔通过 VPN 接入,以方便更新。在您的 DMZ 中创建一个没有内容的副本服务器,以便系统从 Microsoft 更新服务器获取内容(因此您无需连接到 VPN 即可获取更新
答案2
我已经使用 wsus 执行此操作,但发现奇怪的事情出错了。您想使用 wsus 批准更新但从 MS 下载吗?
我设置了类似的东西,总部有自己的 wsus 服务器,而分支机构的 PC 有辅助 wsus 服务器。辅助服务器配置为不下载任何内容,批准从主服务器链接。我使用 GPO 将 PC 分配给其中一个。
我发现,将笔记本电脑带到总部的用户只会在主服务器上出现一次,并且永远无法连接到辅助 wsus 服务器。我必须从主服务器上删除该节点才能使其同步。
对于那些带着笔记本电脑去分公司的人来说,也会发生同样的情况。
一旦 PC 连接了某个 wsus 节点,它似乎就会“卡住”,您无法切换到另一个节点……但并非总是如此。通常这会自行纠正。据我所知,这应该有效,但我一直发现几个月没有更新的节点。删除 wsus 中的节点可以解决该问题。
简而言之 - 它根本没起到什么作用。
当人们不在现场(但通过 vpn 连接)时,gpos 应该将用户直接引导到 MS - 但我发现他们会继续应用旧的 GPO,有时要几个月后 gpupdate/force 才能纠正这种情况。这是一个组策略问题,但我从未发现为什么会发生这种情况。
我切换到一台服务器,将补丁发送给所有人。猜猜结果如何?没有人注意到差异,但一切都运行正常。
答案3
恕我直言,使用原始 WSUS 不可能做到这一点。
但是,如果 WSUS 服务器无法访问,您可以编写一个脚本,将 Windows 更新配置为故障转移替代方案。
使用 GPO,配置 Windows 任务计划程序来运行此(松散测试) 在机器启动时以 SYSTEM 权限运行 powershell 脚本。
根据 WSUS 服务器可用性选择 Windows 更新源的草稿脚本
# Check server availability
function pingServer ([String]$server) {
Write-Host "Checking server $server"
$ping = New-Object System.net.networkinformation.ping
1..3 | foreach {
write-host $result = ($ping.send($server)).status.toString();
sleep 1
}
return "$result"
}
# Discover WSUS Server address
function getWSUSServer {
$inserver = (get-itemproperty -erroraction "SilentlyContinue" hklm:\software\microsoft\policies\windows\windowsupdate-bkp\ WUServer).WUServer
$outserver = (get-itemproperty -erroraction "SilentlyContinue" hklm:\software\microsoft\policies\windows\windowsupdate\ WUServer).WUServer
if ($inserver){
$wuserver = $inserver
} elseif ($outserver) {
$wuserver = $outserver
} else {
throw "Could not find nor internal or external WSUS configuration."
}
Write-Host "WUServer is $wuserver"
return $wuserver
}
# Change between locations configuratons
function changeLocation ([String]$location) {
if ( $location -eq 'internal' ){
rename-item -erroraction "SilentlyContinue" hklm:\software\microsoft\policies\windows\windowsupdate -NewName "windowsupdate-bkp"
Set-ItemProperty -erroraction "SilentlyContinue" hklm:\software\Policies\Microsoft\Windows\WindowsUpdate\AU UseWUServer 0
write-host "Location changed to $location."
} elseif ( $location -eq 'external' ){
rename-item -erroraction "SilentlyContinue" hklm:\software\microsoft\policies\windows\windowsupdate-bkp -NewName "windowsupdate"
Set-ItemProperty -erroraction "SilentlyContinue" hklm:\software\Policies\Microsoft\Windows\WindowsUpdate\AU UseWUServer 1
write-host "Location changed to $location."
} else {
trhow "Location can be either internal or external, not $location."
}
}
# main
if ( (pingServer(getWSUSServer)) -eq "Success") {
Write-Host 'WSUS server available.'
changeLocation ('internal')
} else {
Write-Host 'WSUS server unavailable.'
changeLocation ('external')
}
Write-Host "End of script."