根据 WSUS 服务器可用性选择 Windows 更新源的草稿脚本

根据 WSUS 服务器可用性选择 Windows 更新源的草稿脚本

我想配置 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. 创建 1 个 GPO 以使用 WSUS 服务器下载。将其应用于站点。
  2. 创建一个包含要自动更新的计算机的组
  3. 创建一个 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."

相关内容