Remember to maintain security and privacy. Do not share sensitive information. Procedimento.com.br may make mistakes. Verify important information. Termo de Responsabilidade
Manter os drivers do sistema operacional atualizados é essencial para assegurar a estabilidade, o desempenho e a segurança de um computador. No entanto, realizar essas atualizações manualmente pode ser uma tarefa tediosa e propensa a erros. Para facilitar esse processo, especialmente para administradores de TI e usuários avançados, um script em PowerShell pode ser utilizado para automatizar a busca, download e instalação de atualizações de drivers em máquinas com Windows. Este script interage diretamente com o serviço Windows Update, identificando e instalando automaticamente as atualizações pendentes de drivers, eliminando a necessidade de verificação manual e garantindo que o sistema esteja sempre atualizado.
Exemplo:
1. Criar o Script em PowerShell:
Salve o código a seguir como um arquivo .ps1
, por exemplo, AtualizarDrivers.ps1
. Abaixo está uma explicação detalhada do que cada parte do script faz:
Adicionar Serviço de Atualização do Windows: O script começa criando um objeto COM para gerenciar os serviços de atualização do Windows e adiciona um serviço específico necessário para buscar drivers de terceiros.
$UpdateSvc = New-Object -ComObject Microsoft.Update.ServiceManager
$UpdateSvc.AddService2("7971f918-a847-4430-9279-4a52d1efe18d", 7, "")
Buscar Atualizações de Drivers: Em seguida, o script inicia uma sessão e um pesquisador para procurar especificamente por drivers que ainda não estão instalados.
$Session = New-Object -ComObject Microsoft.Update.Session
$Searcher = $Session.CreateUpdateSearcher()
$Searcher.ServiceID = '7971f918-a847-4430-9279-4a52d1efe18d'
$Searcher.SearchScope = 1 # Somente na máquina
$Searcher.ServerSelection = 3 # Terceiros
$Criteria = "IsInstalled=0 and Type='Driver'"
$SearchResult = $Searcher.Search($Criteria)
$Updates = $SearchResult.Updates
Exibir Atualizações de Drivers Disponíveis: Se houver atualizações, o script exibirá detalhes como o título, modelo e data da versão de cada driver disponível.
$Updates | Select-Object Title, DriverModel, DriverVerDate, DriverClass, DriverManufacturer | Format-List
Baixar e Instalar as Atualizações: O script baixa e instala os drivers que ainda não estão instalados.
$UpdatesToDownload = New-Object -Com Microsoft.Update.UpdateColl
$Updates | ForEach-Object { $UpdatesToDownload.Add($_) | Out-Null }
$Downloader = $Session.CreateUpdateDownloader()
$Downloader.Updates = $UpdatesToDownload
$Downloader.Download()
$UpdatesToInstall = New-Object -Com Microsoft.Update.UpdateColl
$Updates | ForEach-Object {
if ($_.IsDownloaded) {
$UpdatesToInstall.Add($_) | Out-Null }
}
$Installer = $Session.CreateUpdateInstaller()
$Installer.Updates = $UpdatesToInstall
$InstallationResult = $Installer.Install()
Reiniciar se Necessário: Após a instalação, se for necessário reiniciar, o script notificará o usuário.
if ($InstallationResult.RebootRequired) {
Write-Host "Reinicialização necessária! Por favor, reinicie agora." -ForegroundColor Red
} else {
Write-Host "Concluído." -ForegroundColor Green
}
Limpeza: Finalmente, o script remove o serviço de atualização adicionado para limpar o ambiente.
$UpdateSvc.Services | Where-Object { $_.IsDefaultAUService -eq $false -and $_.ServiceID -eq "7971f918-a847-4430-9279-4a52d1efe18d" } | ForEach-Object {
$UpdateSvc.RemoveService($_.ServiceID)
}
2. Executando o Script:
.\AtualizarDrivers.ps1
Código Completo do Script:
# Adicionar Serviço de Atualização do Windows
$UpdateSvc = New-Object -ComObject Microsoft.Update.ServiceManager
$UpdateSvc.AddService2("7971f918-a847-4430-9279-4a52d1efe18d", 7, "")
# Buscar Atualizações de Drivers
$Session = New-Object -ComObject Microsoft.Update.Session
$Searcher = $Session.CreateUpdateSearcher()
$Searcher.ServiceID = '7971f918-a847-4430-9279-4a52d1efe18d'
$Searcher.SearchScope = 1 # Somente na máquina
$Searcher.ServerSelection = 3 # Terceiros
$Criteria = "IsInstalled=0 and Type='Driver'"
$SearchResult = $Searcher.Search($Criteria)
$Updates = $SearchResult.Updates
# Exibir Atualizações de Drivers Disponíveis
$Updates | Select-Object Title, DriverModel, DriverVerDate, DriverClass, DriverManufacturer | Format-List
# Baixar e Instalar as Atualizações
$UpdatesToDownload = New-Object -Com Microsoft.Update.UpdateColl
$Updates | ForEach-Object { $UpdatesToDownload.Add($_) | Out-Null }
$Downloader = $Session.CreateUpdateDownloader()
$Downloader.Updates = $UpdatesToDownload
$Downloader.Download()
$UpdatesToInstall = New-Object -Com Microsoft.Update.UpdateColl
$Updates | ForEach-Object {
if ($_.IsDownloaded) {
$UpdatesToInstall.Add($_) | Out-Null }
}
$Installer = $Session.CreateUpdateInstaller()
$Installer.Updates = $UpdatesToInstall
$InstallationResult = $Installer.Install()
# Reiniciar se Necessário
if ($InstallationResult.RebootRequired) {
Write-Host "Reinicialização necessária! Por favor, reinicie agora." -ForegroundColor Red
} else {
Write-Host "Concluído." -ForegroundColor Green
}
# Limpeza
$UpdateSvc.Services | Where-Object { $_.IsDefaultAUService -eq $false -and $_.ServiceID -eq "7971f918-a847-4430-9279-4a52d1efe18d" } | ForEach-Object {
$UpdateSvc.RemoveService($_.ServiceID)
}