Instalar remotamente as atualizações do Windows com o PsExec

3

Problema em que estou trabalhando : agora estou encarregado de todas as máquinas Windows de uma empresa. Todas as estações de trabalho estão executando o Windows 7, eu não tenho um domínio e não há nenhum Windows Server em execução na rede. Para administrá-los, eu uso o PsExec para executar remotamente comandos em cada estação de trabalho, assim:

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

Agora quero acionar as atualizações do Windows em cada estação de trabalho.

Pesquisa que fiz : Aparentemente , não há nenhum comando set que você possa enviar para dispositivos Windows que os instrua especificamente a iniciar a instalação de atualizações pendentes .

Muitos tópicos de serverfault e blogs recomendam o uso de soluções de terceiros para instalar o Windows Updates sob demanda, mas todas essas soluções recomendadas de terceiros só podem ser usadas se você as comprar, e eu não quero.

Etapas tomadas até agora para resolver o problema : Então, tanto quanto eu, parece que estou preso: sem um servidor Windows, não há nenhuma maneira nativa de pedir especificamente estações de trabalho para instalar atualizações e todas as soluções de terceiros que eu ouvi falar não são gratuitas.

Estou certo? Você conhece uma maneira de realizar o problema que estou enfrentando?

    
por koudougou 01.07.2015 / 11:50

3 respostas

2

Além do método VBS de Michael Bailey, modifiquei um script powershell que encontrei on-line (do technet em algum lugar, mas não consigo encontrar o link exato de improviso):

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

Eu o rodei usando o PDQ, mas também o usei com o PSExec. Se você quiser apenas listar as atualizações por máquina como uma auditoria, pode cortar tudo após a seção de pesquisa.

Também dei uma boa olhada nisso quando estava procurando uma resposta para nossos problemas de atualização: link

Parece uma ferramenta que pode se encaixar bem na sua organização.

    
por 07.07.2015 / 18:54
1

Para enviar atualizações com o psexec, confira este artigo: link

Isso provavelmente descreve exatamente como fazer o que você gostaria de realizar - basicamente você usa a ferramenta de linha de comando de terceiros wuinstall via psexec para enviar atualizações para máquinas remotas via shell scripts

    
por 16.10.2015 / 22:22
0

As pessoas boas da SevenForums têm um roteiro que não tenho a chance de testar na VBS para fazer isso. link

Os scripts VBS podem ser escritos e acionados por meio da linha de comando.

Além disso, você pode manipular a chave de registro que lida com a atualização automática. Mas essa não é uma resposta perfeita.

    
por 02.07.2015 / 07:43