在Windows Server 2003上执行Windows Update的脚本

是否有任何批处理脚本或命令行命令,可以在多个远程服务器(可能通过psexec)自动执行Windows更新? 不喜欢使用VB脚本,但如果有一个可用,那也没关系。 谢谢。

取决于你想怎么做。 如果您想要更多的批处理样式,psexec方法,则需要查看我以前见过的共享软件CLI实用程序。 说实话,我从来没有自己testing过, wuinstall 。 我看到一些Windowstypes的IT杂志的文章,所以我怀疑你会成为第一个人。 有一个免费的和专业版,但我不能说什么是许可限制。

如果你可以克服这个脚本,我知道这个Winboxen系统pipe理员lucifist编写了一个PowerShell脚本来做你正在寻找的东西。

###################################################################################################################################### # Windows Update through Powershell (No Forms) v1.0 ###################################################################################################################################### clear-host Write-host "Starting Update Process..." -foregroundcolor blue Write-host "" $UpdateSession = New-Object -com Microsoft.Update.Session $UpdateSearcher = $UpdateSession.CreateupdateSearcher() $SearchResult = $UpdateSearcher.Search("IsAssigned=1 and IsHidden=0 and IsInstalled=0") $UpdateLowNumber = 0 $UpdateHighNumber = 1 $NumberofUpdates = $searchResult.Updates.Count while ($UpdateHighNumber -le $NumberofUpdates) { $UpdatesToDownload = New-Object -com Microsoft.Update.UpdateColl $Update = $searchResult.Updates.Item($UpdateLowNumber) if ($Update.EulaAccepted -eq 0) {$Update.AcceptEula()} [void]$UpdatesToDownload.Add($Update) $Downloader = $UpdateSession.CreateUpdateDownloader() $Downloader.Updates = $UpdatesToDownload [void]$Downloader.Download() $UpdatesToInstall = New-Object -com Microsoft.Update.UpdateColl [void]$UpdatesToInstall.Add($Update) $Title = $update.Title $KBArticleIDs = $update.KBArticleIDs $SecurityBulletinIDs = $update.SecurityBulletinIDs $MsrcSeverity = $update.MsrcSeverity $LastDeploymentChangeTime = $update.LastDeploymentChangeTime $MoreInfoUrls = $update.MoreInfoUrls Write-host "Installing Update $UpdateHighNumber of $NumberofUpdates" Write-host "Title: $Title" if ($KBArticleIDs -ne "") {Write-host "KBID: $KBArticleIDs"} if ($SecurityBulletinIDs -ne "") {write-host "Security Bulletin: $SecurityBulletinIDs"} if ($MsrcSeverity -eq "Critical") {Write-host "Rating: $MsrcSeverity" -foregroundcolor red} else {Write-host "Rating: $MsrcSeverity"} if ($LastDeploymentChangeTime -ne "") {Write-host "Dated: $LastDeploymentChangeTime"} if ($MoreInfoUrls -ne "") {Write-host "$MoreInfoUrls"} $Installer = $UpdateSession.CreateUpdateInstaller() $Installer.Updates = $UpdatesToInstall $InstallationResult = $Installer.Install() Write-host "--------------------------------------------" if ($InstallationResult.ResultCode -eq "2") {Write-host " Installation Succeeded" -foregroundcolor green} else {Write-host " INSTALLATION FAILED, check event log for details" -foregroundcolor red} if ($InstallationResult.RebootRequired -eq "False") {Write-host " Reboot not required" -foregroundcolor green} else {Write-host " REBOOT REQUIRED" -foregroundcolor red} Write-host "--------------------------------------------" Write-host "" Write-host "" $Title = "" $KBArticleIDs = "" $SecurityBulletinIDs = "" $MsrcSeverity = "" $LastDeploymentChangeTime = "" $MoreInfoUrls = "" $UpdateLowNumber = $UpdateLowNumber + 1 $UpdateHighNumber = $UpdateHighNumber + 1 if ($ProgressValue -lt $NumberofUpdates) {$ProgressValue = $ProgressValue + 1} } $ComputerStatus = New-Object -com Microsoft.Update.SystemInfo if ($ComputerStatus.RebootRequired -eq 1) {cmd /c $env:WinDir\System32\Shutdown.exe -r -f -t 10 -c "Patching Complete."} 

如果你注意这个脚本,你会看到你正在打开COM对象等。 所以,你要么需要烧掉你自己的二进制文件,要么别人的非MSFT代码(la Wuinstall),或者在VBScript中做相同数量的脚本。 你说Win23k服务器,所以我不知道你是否有PS安装。 如果没有,则有TechNet文档可以治愈你的病症。

底线,Google是你的朋友。 在张贴之前记住这一点。 🙂