Назад | Перейти на главную страницу

Удаленная установка обновлений Windows с помощью PsExec

Проблема, над которой я работаю : Сейчас я отвечаю за все Windows-машины компании. Все рабочие станции работают под управлением Windows 7, у меня нет домена и в сети нет Windows Server. Чтобы управлять ими, я использую PsExec для удаленного выполнения команд на каждой рабочей станции, например:

FOR /F "tokens=*" %%a IN (E:\list-of-workstations.txt) DO CALL :theCommand %%a
PAUSE

:theCommand
FOR /F "tokens=1,2,3,4" %%a IN ("%*") DO (
        psexec \\%%a -s -u %%b -p %%c -c E:\script-to-execute-remotely.bat
)
GOTO:EOF

Теперь я хочу запускать обновления Windows на каждой рабочей станции.

Исследования, которые я провел : По-видимому, нет команды set, которую вы можете отправить на устройства Windows, которая конкретно инструктирует их начать установку ожидающих обновлений.

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

Шаги, предпринятые до сих пор для решения проблемы : Итак, насколько я понимаю, мне кажется, что я застрял: без Windows-сервера нет собственного способа специально просить рабочие станции об установке обновлений, и все сторонние решения, о которых я слышал, не бесплатны.

Я прав ? Вы знаете, как решить проблему, с которой я столкнулся?

В дополнение к методу VBS Майкла Бейли, я модифицировал сценарий PowerShell, который нашел в Интернете (откуда-то из technet, но я не могу найти точную ссылку насквозь):

#Define update criteria.
$Criteria = "IsInstalled=0 and Type='Software'"

#Search for relevant updates.
$Searcher = New-Object -ComObject Microsoft.Update.Searcher
$SearchResult = $Searcher.Search($Criteria).Updates

If($SearchResult.Count -eq 0){
Write-Host "No Updates Available"
Exit
}

Write-Host "Updates Found: $($SearchResult.Count)`r`n"
$SearchResult | ForEach-Object{Write-Host "$($_.Title) `r`n"}

#Download updates.
$Session = New-Object -ComObject Microsoft.Update.Session
$Downloader = $Session.CreateUpdateDownloader()
$Downloader.Updates = $SearchResult
Write-Host "Download Results:"
$Downloader.Download()

#Install updates.
$Installer = New-Object -ComObject Microsoft.Update.Installer
$Installer.Updates = $SearchResult
$Result = $Installer.Install()
Write-Host "Install Result: $($Result.HResult) `r`n"
Write-Host "Reboot Required: $($Result.RebootRequired) `r`n"

#Reboot if required by updates.
#If ($Result.rebootRequired) { shutdown.exe /t 0 /r }

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

Я также долго смотрел на это, когда искал ответ на наши проблемы с обновлением: http://blogs.technet.com/b/heyscriptingguy/archive/2011/08/13/use-powershell-to-audit-and-install-windows-patches.aspx

Это похоже на инструмент, который может хорошо подойти вашей организации.

Чтобы узнать, как отправлять обновления с помощью psexec, прочтите эту статью: http://techoughtts.info/remotely-install-windows-updates/

Это, вероятно, довольно точно описывает, как делать то, что вы хотели бы выполнить - в основном вы используете сторонний инструмент командной строки wuinstall через psexec для отправки обновлений на удаленные машины через сценарии оболочки

У хороших людей из SevenForums есть сценарий, который у меня нет возможности протестировать в VBS, чтобы сделать это. http://www.sevenforums.com/windows-updates-activation/235764-run-window-update-command-line.html

Скрипты VBS можно писать и запускать из командной строки.

Кроме того, вы можете управлять ключом реестра, который обрабатывает автоматическое обновление. Но это не идеальный ответ.