Powershell: correctifs Windows sur plusieurs serveurs

0

Nous avons environ 1000 serveurs et plus, et ils corrigent par WSUS. Dans WSUS, nous avons attribué le correctif, puis nous nous sommes connectés aux serveurs et téléchargé n Installez les correctifs. Une fois cela fait, nous redémarrons la machine selon le planning.

Je veux automatiser le téléchargement du correctif et son installation. J'ai un script mais je ne suis pas sûr que ce soit le meilleur ou un autre moyen disponible.

Voici le script

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

Write-Host("Searching for applicable updates...") -Fore Green

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

Write-Host("")
Write-Host("List of applicable items on the machine:") -Fore Green
For ($X = 0; $X -lt $SearchResult.Updates.Count; $X++){
    $Update = $SearchResult.Updates.Item($X)
    Write-Host( ($X + 1).ToString() + "> " + $Update.Title)
}

If ($SearchResult.Updates.Count -eq 0) {
    Write-Host("There are no applicable updates.")
    Exit
}

#Write-Host("")
#Write-Host("Creating collection of updates to download:") -Fore Green

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

For ($X = 0; $X -lt $SearchResult.Updates.Count; $X++){
    $Update = $SearchResult.Updates.Item($X)
    #Write-Host( ($X + 1).ToString() + "> Adding: " + $Update.Title)
    $Null = $UpdatesToDownload.Add($Update)
}

Write-Host("")
Write-Host("Downloading Updates...")  -Fore Green

$Downloader = $UpdateSession.CreateUpdateDownloader()
$Downloader.Updates = $UpdatesToDownload
$Null = $Downloader.Download()

#Write-Host("")
#Write-Host("List of Downloaded Updates...") -Fore Green

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

For ($X = 0; $X -lt $SearchResult.Updates.Count; $X++){
    $Update = $SearchResult.Updates.Item($X)
    If ($Update.IsDownloaded) {
        #Write-Host( ($X + 1).ToString() + "> " + $Update.Title)
        $Null = $UpdatesToInstall.Add($Update)        
    }
}

$Install = [System.String]$Args[0]
$Reboot  = [System.String]$Args[1]

If (!$Install){
    $Install = Read-Host("Would you like to install these updates now? (Y/N)")
}

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()

    Write-Host("")
    Write-Host("List of Updates Installed with Results:") -Fore Green

    For ($X = 0; $X -lt $UpdatesToInstall.Count; $X++){
        Write-Host($UpdatesToInstall.Item($X).Title + ": " + $InstallationResult.GetUpdateResult($X).ResultCode)
    }

    Write-Host("")
    Write-Host("Installation Result: " + $InstallationResult.ResultCode)
    Write-Host("    Reboot Required: " + $InstallationResult.RebootRequired)

    If ($InstallationResult.RebootRequire -eq $True){
        If (!$Reboot){
            $Reboot = Read-Host("Would you like to install these updates now? (Y/N)")
        }

        If ($Reboot.ToUpper() -eq "Y" -or $Reboot.ToUpper() -eq "YES"){
            Write-Host("")
            Write-Host("Rebooting...") -Fore Green
            (Get-WMIObject -Class Win32_OperatingSystem).Reboot()
        }
    }
}

Ce script pourra-t-il effectuer une activité sur plusieurs serveurs? Peut-on récupérer le rapport concernant le téléchargement réussi / l’installation réussie.

Existe-t-il d'autres options pour effectuer la même activité?

Merci pour votre temps.

Machine à calculer
la source
Qu'est-ce que vos tests ont montré? Y a-t-il des erreurs?
DavidPostill
Pas d'erreur. Cela fonctionne bien sur une seule machine.
Machine à calculer
Vous demandez "Ce script pourra-t-il effectuer une activité sur plusieurs serveurs?". Nous ne pouvons pas tester pour vous. Vous devez effectuer les tests appropriés avant de déployer un tel script. Nous ne pouvons pas le tester pour vous.
DavidPostill
@ DavidPostill Je suis entièrement d'accord avec vous. C’est mon approche pour y parvenir. Je veux juste savoir si quelqu'un a fait la même chose, alors ce serait très utile.
Machine à calculer
La pratique du secteur consiste généralement à utiliser SCCM pour les centres de données de niveau entreprise (je pense que 1000 serveurs sont éligibles). Pour une solution personnalisée avec uniquement WSUS et pas de SCCM, je configurais les serveurs pour installer automatiquement tout ce que j'avais poussé par WSUS et configurer des groupes de machines pour différentes heures de redémarrage. Ensuite, j'utiliserais des fonctions powershell et un fichier csv avec les paramètres appropriés pour les redémarrer. Mais, sérieusement, SCCM a été construit pour cela. Et cela vous donne tellement plus. En outre, la configuration d'état souhaitée (DSC) est un moyen de gestion de la configuration par PS. la gestion. Je ne l'ai pas utilisé mais il peut aussi le faire.
Xalorous