Powershell: исправление Windows на нескольких серверах

1406
Calculating Machine

У нас около 1000+ серверов, и они исправляются WSUS. В WSUS мы назначили патч и после этого заходим на серверы и скачиваем n Установите патчи. После этого мы перезагружаем машину в соответствии с графиком.

Я хочу автоматизировать загрузку патча и установку патча. Я получил некоторый сценарий, но не уверен, что это лучший или любой другой способ также доступен.

Вот сценарий

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

Может ли этот скрипт выполнять действия на нескольких серверах? Можем ли мы получить отчет об успешной загрузке / успешной установке.

Есть ли другие варианты для выполнения той же деятельности?

Спасибо за ваше время.

0
Что показало ваше тестирование? Были ли ошибки? DavidPostill 8 лет назад 0
Нет ошибок. Он отлично работает на одной машине. Calculating Machine 8 лет назад 0
Вы спрашиваете: «Может ли этот скрипт выполнять действия на нескольких серверах?». Мы не можем проверить для вас. ** Вам необходимо выполнить надлежащее тестирование перед развертыванием такого скрипта. Мы не можем проверить это для вас. DavidPostill 8 лет назад 0
@DavidPostill Я полностью согласен с вами. Это мой подход к достижению этого. Я просто хочу знать, если кто-то сделал подобное, то это было бы очень полезно. Calculating Machine 8 лет назад 0
Промышленная практика, как правило, заключается в использовании SCCM для центров обработки данных уровня предприятия (я думаю, что подходит 1000 серверов). Для решения по принципу «сворачивай сам» с использованием только WSUS и без SCCM я бы настроил серверы на автоматическую установку всего, что я нажимал на WSUS, и настройку групп машин для различных периодов перезагрузки. Затем я бы использовал функции powershell и csv-файл с соответствующими параметрами для их перезагрузки. Но, если серьезно, SCCM был построен для этого. И это дает вам намного больше. Кроме того, Конфигурация требуемого состояния (DSC) является способом PS для обработки конфигурации. управление. Я не использовал это, но он может сделать это тоже. Xalorous 8 лет назад 0

0 ответов на вопрос