invademan
06-06-2019, 07:34
Друзья. Этот форум меня не раз выручал, надеюсь и в этот раз подкинете решение.
Есть зоопарк компьютеров, ставлю w10, но дрова ставятся за частую не все или ставится стандартный драйвер который работает не так как надо (например видеодрайвер). Есть папка сетевая где собраны на все армы драйвера (формата INF)по моделям. Подскажите как можно с помощью PowerShell организовать автоматическую установку (или обновление) всех драйверов которые не установились или где версия драйвера типа "Стандартный видеодрайвер". Зоопарк очень большой, винда накатывается средствами Акрониса, клонированием.
Нашел такой вот скрипт, откатал его - работает на 5+, но он высасывает драйвера из интернета, а хотелось бы дополнительно чтобы он брал источник из моей сетевой папки с драйверами.
#search and list all missing Drivers
#set Window Title
$host.ui.RawUI
$host.ui.RawUI.WindowTitle = "Driver Updater by harrymc"
Write-Host('adding update source...') -Fore Green
$UpdateSvc = New-Object -ComObject Microsoft.Update.ServiceManager
$UpdateSvc.AddService2("7971f918-a847-4430-9279-4a52d1efe18d",7,"")
$Session = New-Object -ComObject Microsoft.Update.Session
$Searcher = $Session.CreateUpdateSearcher()
$Searcher.ServiceID = '7971f918-a847-4430-9279-4a52d1efe18d'
$Searcher.SearchScope = 1 # MachineOnly
$Searcher.ServerSelection = 3 # Third Party
$Criteria = "IsInstalled=0 and Type='Driver' and IsHidden=0"
Write-Host('Searching Driver-Updates...') -Fore Green
$SearchResult = $Searcher.Search($Criteria)
$SearchResult|ft -a title
$Updates = $SearchResult.Updates
#Show available Drivers
Write-Host('Showing Drivers') -Fore Green
$updates|fl
$Updates | select Title, DriverModel, DriverVerDate, Driverclass, DriverManufacturer | fl
#Download the Drivers from Microsoft
$UpdatesToDownload = New-Object -Com Microsoft.Update.UpdateColl
$updates | % { $UpdatesToDownload.Add($_) | out-null }
Write-Host('Downloading Drivers...') -Fore Green
$UpdateSession = New-Object -Com Microsoft.Update.Session
$Downloader = $UpdateSession.CreateUpdateDownloader()
$Downloader.Updates = $UpdatesToDownload
$Downloader.Download()
#Check if the Drivers are all downloaded and trigger the Installation
$UpdatesToInstall = New-Object -Com Microsoft.Update.UpdateColl
$updates | % { if($_.IsDownloaded) { $UpdatesToInstall.Add($_) | out-null } }
Write-Host('Installing Drivers...') -Fore Green
$Installer = $UpdateSession.CreateUpdateInstaller()
$Installer.Updates = $UpdatesToInstall
$InstallationResult = $Installer.Install()
if($InstallationResult.RebootRequired) {
Write-Host('Reboot required! please reboot now..') -Fore Red
} else { Write-Host('Done..') -Fore Green }
Write-Host('cleaning up sources')
$updateSvc.Services | ? { $_.IsDefaultAUService -eq $false -and $_.ServiceID -eq "7971f918-a847-4430-9279-4a52d1efe18d" } | % { $UpdateSvc.RemoveService($_.ServiceID) }
Write-Host('Press any key to exit ...') -Fore Yellow
$null = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Есть зоопарк компьютеров, ставлю w10, но дрова ставятся за частую не все или ставится стандартный драйвер который работает не так как надо (например видеодрайвер). Есть папка сетевая где собраны на все армы драйвера (формата INF)по моделям. Подскажите как можно с помощью PowerShell организовать автоматическую установку (или обновление) всех драйверов которые не установились или где версия драйвера типа "Стандартный видеодрайвер". Зоопарк очень большой, винда накатывается средствами Акрониса, клонированием.
Нашел такой вот скрипт, откатал его - работает на 5+, но он высасывает драйвера из интернета, а хотелось бы дополнительно чтобы он брал источник из моей сетевой папки с драйверами.
#search and list all missing Drivers
#set Window Title
$host.ui.RawUI
$host.ui.RawUI.WindowTitle = "Driver Updater by harrymc"
Write-Host('adding update source...') -Fore Green
$UpdateSvc = New-Object -ComObject Microsoft.Update.ServiceManager
$UpdateSvc.AddService2("7971f918-a847-4430-9279-4a52d1efe18d",7,"")
$Session = New-Object -ComObject Microsoft.Update.Session
$Searcher = $Session.CreateUpdateSearcher()
$Searcher.ServiceID = '7971f918-a847-4430-9279-4a52d1efe18d'
$Searcher.SearchScope = 1 # MachineOnly
$Searcher.ServerSelection = 3 # Third Party
$Criteria = "IsInstalled=0 and Type='Driver' and IsHidden=0"
Write-Host('Searching Driver-Updates...') -Fore Green
$SearchResult = $Searcher.Search($Criteria)
$SearchResult|ft -a title
$Updates = $SearchResult.Updates
#Show available Drivers
Write-Host('Showing Drivers') -Fore Green
$updates|fl
$Updates | select Title, DriverModel, DriverVerDate, Driverclass, DriverManufacturer | fl
#Download the Drivers from Microsoft
$UpdatesToDownload = New-Object -Com Microsoft.Update.UpdateColl
$updates | % { $UpdatesToDownload.Add($_) | out-null }
Write-Host('Downloading Drivers...') -Fore Green
$UpdateSession = New-Object -Com Microsoft.Update.Session
$Downloader = $UpdateSession.CreateUpdateDownloader()
$Downloader.Updates = $UpdatesToDownload
$Downloader.Download()
#Check if the Drivers are all downloaded and trigger the Installation
$UpdatesToInstall = New-Object -Com Microsoft.Update.UpdateColl
$updates | % { if($_.IsDownloaded) { $UpdatesToInstall.Add($_) | out-null } }
Write-Host('Installing Drivers...') -Fore Green
$Installer = $UpdateSession.CreateUpdateInstaller()
$Installer.Updates = $UpdatesToInstall
$InstallationResult = $Installer.Install()
if($InstallationResult.RebootRequired) {
Write-Host('Reboot required! please reboot now..') -Fore Red
} else { Write-Host('Done..') -Fore Green }
Write-Host('cleaning up sources')
$updateSvc.Services | ? { $_.IsDefaultAUService -eq $false -and $_.ServiceID -eq "7971f918-a847-4430-9279-4a52d1efe18d" } | % { $UpdateSvc.RemoveService($_.ServiceID) }
Write-Host('Press any key to exit ...') -Fore Yellow
$null = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")