防止服务器在自动更新后重新启动

防止服务器在自动更新后重新启动

工作开始关注我们照顾客户的方式,尝试更加积极主动,而不仅仅是对问题做出反应。这一重点的一部分是确保服务器保持最新状态。我们部署了一个 GP 来更新服务器(计算机配置 > 管理模板 > Windows 组件 > Windows 更新 > 配置自动更新)。

我们现在需要一种方法来确保服务器仅在特定时间重新启动,而不是在完成时重新启动。我找到了我认为的答案这里但它仅适用于 Server 2003,而不是我需要的 2008 和 2012。是否有类似的 GP 可供我使用?计划是让服务器在一周内自动扫描、下载和安装更新,任何需要重新启动才能安装的操作都将在周末进行。

答案1

这里的诀窍是不要让 Windows Update 通过自动更新机制进行安装。您可以将其设置为自动下载,但对于自动安装,除非有用户登录系统,否则无法阻止重新启动计时器触发,例如使用计划的自动更新安装不会在登录用户的情况下自动重启策略。由于这是针对服务器的,我将假设这不是默认情况,并且没有人登录并不意味着机器的资源目前不需要。

设置一个计划任务,该任务将触发更新的安装,并在更新完成时或其他操作进行报告,以便您知道计算机是否需要重新启动。

我很快修改了脚本发现这里满足您的需求:

#      Author: Gregory Strike
#     Website: www.GregoryStrike.com
#        Date: 02-19-2010
# Information: This script was adapated from the WUA_SearchDownloadInstall.vbs VBScript from Microsoft.  It uses the
#              Microsoft.Update.Session COM object to query a WSUS server, find applicable updates, and install them.

# < --- SNIP --- >

$UpdateSession = New-Object -Com Microsoft.Update.Session
$UpdateSearcher = $UpdateSession.CreateUpdateSearcher()

$SearchResult = $UpdateSearcher.Search("IsInstalled=0 and Type='Software'")

$UpdatesToInstall = New-Object -Com Microsoft.Update.UpdateColl

For ($X = 0; $X -lt $SearchResult.Updates.Count; $X++){
    $Update = $SearchResult.Updates.Item($X)
    If ($Update.IsDownloaded) {
        $Null = $UpdatesToInstall.Add($Update)        
    }
}


If ($Install.ToUpper() -eq "Y" -or $Install.ToUpper() -eq "YES"){
    Write-Host("")
    Write-Host("Installing Updates...") -Fore Green

    $Installer = $UpdateSession.CreateUpdateInstaller()
    $Installer.Updates = $UpdatesToInstall

    $InstallationResult = $Installer.Install()

    $ResultsBody = "List of Updates Installed with Results:"
    For ($X = 0; $X -lt $UpdatesToInstall.Count; $X++){
        $ResultsBody = $ResultsBody + "`r`n" + $UpdatesToInstall.Item($X).Title + ": " + $InstallationResult.GetUpdateResult($X).ResultCode
    }

    If ($InstallationResult.RebootRequire -eq $True){
        Send-MailMessage -From [email protected] -To [email protected] -Subject "Server has installed updates that require a reboot" -Body 
    } else {
        Send-MailMessage -From [email protected] -To [email protected] -Subject "Server has installed updates that do not require a reboot" -Body
    }
}

注意:
您可以使用链接的原始脚本并对其进行修改以进行检测和下载,在这种情况下,最好禁用配置自动更新策略。

附录:
有一个Windows 更新 PowerShell 模块Microsoft Script Center 提供了编写您自己的 Windows 更新脚本所需的功能。事实上,在 Google 搜索 powershell windows update 的第一页上有很多很好的资源(在撰写本文时)

相关内容