Script para fazer o Windows Update no windows server 2003

2

Existe algum script em lote ou comando de linha de comando que possa fazer o Windows Update automaticamente em vários servidores remotos (talvez via psexec)? Não prefira usar um script VB, mas se houver um disponível, tudo bem também. Obrigado.

    
por Stan 20.07.2010 / 22:51

1 resposta

1

Depende de como você deseja fazer. Se você quer um método psexec mais estilo-batch, você precisa procurar em um utilitário shareware CLI que eu já vi antes. Para ser honesto, eu nunca testei sozinho, wuinstall . Eu vejo alguns artigos de revistas de TI do tipo Windows, então duvido que você seja o primeiro cara. Existe uma versão freeware e pro, mas não posso dizer quais são as restrições de licenciamento.

Se você conseguir ultrapassar o script, eu sei que este lucetista Winboxen sysadmin escreveu um script do PowerShell para fazer o que você está procurando.

######################################################################################################################################
# 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."}

Se você prestar atenção a este script, verá que está abrindo objetos COM e tal. Portanto, você precisa preparar seu próprio binário ou o código não-MSFT de outra pessoa (como o Wuinstall) ou fazer a mesma quantidade de scripts no VBScript. Você diz Win23k Server, então eu não tenho certeza se você tem ou não PS instalado. Caso contrário, há documentação do TechNet para curar seus males.

Resumindo, o Google é seu amigo. Tenha isso em mente antes de postar aqui. : -)

    
por 20.07.2010 / 23:09