Windows 11 VBS Update Script abändern; wer kann helfen?
- Holgi
- Guru
- Beiträge: 3092
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 392 Mal
- Danke erhalten: 506 Mal
- Gender:
Windows 11 VBS Update Script abändern; wer kann helfen?
Für die Windows Server gibt das sconfig scipt. Darin enthalten ein VBS Update Script, welches auch unter Windows 11 super funktioniert. Man kann damit die Windows Updates anstoßen und steuern. So weit so gut.
Ich hätte das Ganze gerne ohne weitere User-Interaktion. Es soll immer nach allen Updates (a) gesucht werden und es sollen dann Alle Updates installiert werden (A).
Ggf. soll auch der fällige Neustart automatisch durchgeführt werden.
Kennt sich jemand mit VBS aus und kann das Script entsprechend anpassen?
Noch ein kleiner Schönheitsfehler:
Umlaute und das "ß" werden wohl nicht korrekt dargestellt. So kommt beim nicht angepassten Script ein Hinweis ""Drücken Sie zum Fortfahren die EINGABETASTE..." Was muss/müßte geändert werden, damit Umlaute/Sonderzeichen etc. korrekt dargestellt werden?
(Klar, man könnte natürlich auch einfach die Meldung umschreiben; das wäre aber zu einfach).
Hier nun das lauffähige Script. Abspeichern mit der Endung .vbs und ggf. mit cscript WUA_SearchDownloadInstall.vbs aufrufen:
Ich hätte das Ganze gerne ohne weitere User-Interaktion. Es soll immer nach allen Updates (a) gesucht werden und es sollen dann Alle Updates installiert werden (A).
Ggf. soll auch der fällige Neustart automatisch durchgeführt werden.
Kennt sich jemand mit VBS aus und kann das Script entsprechend anpassen?
Noch ein kleiner Schönheitsfehler:
Umlaute und das "ß" werden wohl nicht korrekt dargestellt. So kommt beim nicht angepassten Script ein Hinweis ""Drücken Sie zum Fortfahren die EINGABETASTE..." Was muss/müßte geändert werden, damit Umlaute/Sonderzeichen etc. korrekt dargestellt werden?
(Klar, man könnte natürlich auch einfach die Meldung umschreiben; das wäre aber zu einfach).
Hier nun das lauffähige Script. Abspeichern mit der Endung .vbs und ggf. mit cscript WUA_SearchDownloadInstall.vbs aufrufen:
Code: Alles auswählen
'-------------------------------------------
' Copyright (c) Microsoft Corporation. All rights reserved.
'
' Version 2.0
' WUA_SearchDownloadInstall.vbs - Script will query the Windows Update
' servers, display the applicable updates, download and install updates.
'
'-------------------------------------------
on error resume next
const L_Msg01_Text = "Empfohlene Updates werden gesucht..."
const L_Msg02_Text = "Liste geeigneter Elemente auf dem Computer:"
const L_Msg03_Text = "Keine geeigneten Updates vorhanden."
const L_Msg04_Text = "Drücken Sie zum Fortfahren die EINGABETASTE..."
const L_Msg05_Text = "Wählen Sie eine Option aus:"
const L_Msg06_Text = "Updates werden heruntergeladen..."
const L_Msg07_Text = "Updates werden installiert..."
const L_Msg08_Text = "Liste mit installierten Updates und individuellen Installationsergebnissen:"
const L_Msg09_Text = "Installationsergebnis: "
const L_Msg10_Text = "Neustart erforderlich: "
const L_Msg11_Text = "Zum Abschließen von Windows Updates ist ein Neustart erforderlich. Jetzt neu starten?"
const L_Msg12_Text = "Drücken Sie zum Fortfahren die EINGABETASTE..."
const L_Msg13_Text = "Nicht gestartet"
const L_Msg14_Text = "In Bearbeitung"
const L_Msg15_Text = "Erfolgreich"
const L_Msg16_Text = "Erfolgreich mit Fehlern"
const L_Msg17_Text = "Fehler"
const L_Msg18_Text = "Vorgang vorzeitig beendet"
const L_Msg19_Text = "Neustart erforderlich"
const L_Msg20_Text = "N" 'No
const L_Msg21_Text = "J" 'Yes
const L_Msg22_Text = "Alle geeigneten Updates werden gesucht..."
const L_Msg23_Text = "Nach (a)llen oder nur nach (e)mpfohlenen Updates suchen? "
const L_Msg24_Text = "A" ' All
const L_Msg25_Text = "E" ' Recommended only
const L_Msg26_Text = "B" ' Single update only
const L_Msg27_Text = "Geben Sie die Nummer des Updates ein, das heruntergeladen und installiert werden soll:"
const L_Msg28_Text = "(A)lle Updates, kei(n)e Updates oder (b)estimmtes Update? "
Set updateSession = CreateObject("Microsoft.Update.Session")
Set updateSearcher = updateSession.CreateupdateSearcher()
Set oShell = WScript.CreateObject ("WScript.shell")
Do
wscript.StdOut.Write L_Msg23_Text
UpdatesToSearch = ucase(Wscript.StdIn.ReadLine)
WScript.Echo
Select Case UpdatesToSearch
Case L_Msg24_Text 'All
WScript.Echo L_Msg22_Text & vbCRLF
Set searchResult = updateSearcher.Search("IsInstalled=0 and Type='Software'")
Case L_Msg25_Text ' Recommended
WScript.Echo L_Msg01_Text & vbCRLF
Set searchResult = updateSearcher.Search("IsInstalled=0 and Type='Software' and AutoSelectOnWebsites=1")
Case Else
'
end Select
Loop until UpdatesToSearch=L_Msg24_Text or UpdatesToSearch=L_Msg25_Text
WScript.Echo L_Msg02_Text
WScript.Echo
For I = 0 To searchResult.Updates.Count-1
Set update = searchResult.Updates.Item(I)
WScript.Echo I + 1 & "> " & update.Title
Next
SingleUpdateSelected=""
If searchResult.Updates.Count = 0 Then
WScript.Echo
WScript.Echo L_Msg03_Text
WScript.Echo
wscript.StdOut.Write L_Msg04_Text
Wscript.StdIn.ReadLine
WScript.Quit
else
'Select updates to download
do
WScript.Echo vbCRLF & L_Msg05_Text
Wscript.StdOut.Write L_Msg28_Text
UpdateSelection = ucase(WScript.StdIn.Readline)
WScript.Echo
loop until UpdateSelection=ucase(L_Msg20_Text) or UpdateSelection=ucase(L_Msg24_Text) or UpdateSelection=ucase(L_Msg26_Text)
If UpdateSelection=ucase(L_Msg20_Text) Then 'No updates
WScript.Quit
end if
If UpdateSelection=ucase(L_Msg26_Text) Then 'Single update
Do
WScript.Echo vbCRLF & L_Msg27_Text
SingleUpdateSelected = WScript.StdIn.Readline
loop until cint(SingleUpdateSelected) > 0 and cint(SingleUpdateSelected) <= searchResult.Updates.Count
end if
End If
Set updatesToDownload = CreateObject("Microsoft.Update.UpdateColl")
For I = 0 to searchResult.Updates.Count-1
if SingleUpdateSelected="" then
Set update = searchResult.Updates.Item(I)
updatesToDownload.Add(update)
else
if I=cint(SingleUpdateSelected)-1 then
Set update = searchResult.Updates.Item(I)
updatesToDownload.Add(update)
end if
end if
Next
WScript.Echo vbCRLF & L_Msg06_Text
WScript.Echo
Set downloader = updateSession.CreateUpdateDownloader()
downloader.Updates = updatesToDownload
downloader.Download()
Set updatesToInstall = CreateObject("Microsoft.Update.UpdateColl")
'Creating collection of downloaded updates to install
For I = 0 To searchResult.Updates.Count-1
set update = searchResult.Updates.Item(I)
If update.IsDownloaded = true Then
updatesToInstall.Add(update)
End If
Next
WScript.Echo
WScript.Echo L_Msg07_Text & vbCRLF
Set installer = updateSession.CreateUpdateInstaller()
installer.Updates = updatesToInstall
Set installationResult = installer.Install()
WScript.Echo L_Msg08_Text & vbCRLF
For I = 0 to updatesToInstall.Count - 1
WScript.Echo I + 1 & "> " & _
updatesToInstall.Item(i).Title & _
": " & ResultCodeText(installationResult.GetUpdateResult(i).ResultCode)
Next
'Output results of install
WScript.Echo
WScript.Echo L_Msg09_Text & ResultCodeText(installationResult.ResultCode)
WScript.Echo L_Msg10_Text & installationResult.RebootRequired & vbCRLF
If installationResult.RebootRequired then
confirm = msgbox(L_Msg11_Text, vbYesNo+vbDefaultButton2+vbSystemModal,L_Msg19_Text)
if confirm=vbYes then oShell.Run "shutdown /r /t 0",1
end if
WScript.Echo
Wscript.StdOut.Write L_Msg12_Text
Wscript.StdIn.ReadLine
WScript.Quit
Function ResultCodeText(resultcode)
if resultcode=0 then ResultCodeText=L_Msg13_Text
if resultcode=1 then ResultCodeText=L_Msg14_Text
if resultcode=2 then ResultCodeText=L_Msg15_Text
if resultcode=3 then ResultCodeText=L_Msg16_Text
if resultcode=4 then ResultCodeText=L_Msg17_Text
if resultcode=5 then ResultCodeText=L_Msg18_Text
end Function
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
- Holgi
- Guru
- Beiträge: 3092
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 392 Mal
- Danke erhalten: 506 Mal
- Gender:
Re: Windows 11 VBS Update Script abändern; wer kann helfen?
sorry, habe gerade selber was gefunden. Vlt. kann jemand damit etwas anfangen:
Code: Alles auswählen
'-------------------------------------------
' Copyright (c) Microsoft Corporation. All rights reserved.
'
' Version 2.0
' WUA_SearchDownloadInstall.vbs - Script will query the Windows Update
' servers, display the applicable updates, download and install updates.
'
'-------------------------------------------
on error resume next
const L_Msg01_Text = "Empfohlene Updates werden gesucht..."
const L_Msg02_Text = "Liste geeigneter Elemente auf dem Computer:"
const L_Msg03_Text = "Keine geeigneten Updates vorhanden."
const L_Msg04_Text = "Drücken Sie zum Fortfahren die EINGABETASTE..."
const L_Msg05_Text = "Wählen Sie eine Option aus:"
const L_Msg06_Text = "Updates werden heruntergeladen..."
const L_Msg07_Text = "Updates werden installiert..."
const L_Msg08_Text = "Liste mit installierten Updates und individuellen Installationsergebnissen:"
const L_Msg09_Text = "Installationsergebnis: "
const L_Msg10_Text = "Neustart erforderlich: "
const L_Msg11_Text = "Zum Abschließen von Windows Updates ist ein Neustart erforderlich. Jetzt neu starten?"
const L_Msg12_Text = "Drücken Sie zum Fortfahren die EINGABETASTE..."
const L_Msg13_Text = "Nicht gestartet"
const L_Msg14_Text = "In Bearbeitung"
const L_Msg15_Text = "Erfolgreich"
const L_Msg16_Text = "Erfolgreich mit Fehlern"
const L_Msg17_Text = "Fehler"
const L_Msg18_Text = "Vorgang vorzeitig beendet"
const L_Msg19_Text = "Neustart erforderlich"
const L_Msg20_Text = "N" 'No
const L_Msg21_Text = "J" 'Yes
const L_Msg22_Text = "Alle geeigneten Updates werden gesucht..."
const L_Msg23_Text = "Nach (a)llen oder nur nach (e)mpfohlenen Updates suchen? "
const L_Msg24_Text = "A" ' All
const L_Msg25_Text = "E" ' Recommended only
const L_Msg26_Text = "B" ' Single update only
const L_Msg27_Text = "Geben Sie die Nummer des Updates ein, das heruntergeladen und installiert werden soll:"
const L_Msg28_Text = "(A)lle Updates, kei(n)e Updates oder (b)estimmtes Update? "
Set updateSession = CreateObject("Microsoft.Update.Session")
Set updateSearcher = updateSession.CreateupdateSearcher()
Set oShell = WScript.CreateObject ("WScript.shell")
'Do
'wscript.StdOut.Write L_Msg23_Text
'UpdatesToSearch = ucase(Wscript.StdIn.ReadLine)
'WScript.Echo
'Select Case UpdatesToSearch
'Case L_Msg24_Text 'All
WScript.Echo L_Msg22_Text & vbCRLF
Set searchResult = updateSearcher.Search("IsInstalled=0 and Type='Software'")
'Case L_Msg25_Text ' Recommended
'WScript.Echo L_Msg01_Text & vbCRLF
'Set searchResult = updateSearcher.Search("IsInstalled=0 and Type='Software' and AutoSelectOnWebsites=1")
'Case Else
'
'end Select
'Loop until UpdatesToSearch=L_Msg24_Text or UpdatesToSearch=L_Msg25_Text
WScript.Echo L_Msg02_Text
WScript.Echo
For I = 0 To searchResult.Updates.Count-1
Set update = searchResult.Updates.Item(I)
WScript.Echo I + 1 & "> " & update.Title
Next
SingleUpdateSelected=""
If searchResult.Updates.Count = 0 Then
'WScript.Echo
'WScript.Echo L_Msg03_Text
'WScript.Echo
'wscript.StdOut.Write L_Msg04_Text
'Wscript.StdIn.ReadLine
WScript.Quit
else
'Select updates to download
'do
'WScript.Echo vbCRLF & L_Msg05_Text
'Wscript.StdOut.Write L_Msg28_Text
'UpdateSelection = ucase(WScript.StdIn.Readline)
'WScript.Echo
'loop until UpdateSelection=ucase(L_Msg20_Text) or UpdateSelection=ucase(L_Msg24_Text) or UpdateSelection=ucase(L_Msg26_Text)
'If UpdateSelection=ucase(L_Msg20_Text) Then 'No updates
'WScript.Quit
'end if
'If UpdateSelection=ucase(L_Msg26_Text) Then 'Single update
'Do
'WScript.Echo vbCRLF & L_Msg27_Text
'SingleUpdateSelected = WScript.StdIn.Readline
'loop until cint(SingleUpdateSelected) > 0 and cint(SingleUpdateSelected) <= searchResult.Updates.Count
'end if
End If
Set updatesToDownload = CreateObject("Microsoft.Update.UpdateColl")
For I = 0 to searchResult.Updates.Count-1
if SingleUpdateSelected="" then
Set update = searchResult.Updates.Item(I)
updatesToDownload.Add(update)
else
if I=cint(SingleUpdateSelected)-1 then
Set update = searchResult.Updates.Item(I)
updatesToDownload.Add(update)
end if
end if
Next
WScript.Echo vbCRLF & L_Msg06_Text
WScript.Echo
Set downloader = updateSession.CreateUpdateDownloader()
downloader.Updates = updatesToDownload
downloader.Download()
Set updatesToInstall = CreateObject("Microsoft.Update.UpdateColl")
'Creating collection of downloaded updates to install
For I = 0 To searchResult.Updates.Count-1
set update = searchResult.Updates.Item(I)
If update.IsDownloaded = true Then
updatesToInstall.Add(update)
End If
Next
WScript.Echo
WScript.Echo L_Msg07_Text & vbCRLF
Set installer = updateSession.CreateUpdateInstaller()
installer.Updates = updatesToInstall
Set installationResult = installer.Install()
WScript.Echo L_Msg08_Text & vbCRLF
For I = 0 to updatesToInstall.Count - 1
WScript.Echo I + 1 & "> " & _
updatesToInstall.Item(i).Title & _
": " & ResultCodeText(installationResult.GetUpdateResult(i).ResultCode)
Next
'Output results of install
WScript.Echo
WScript.Echo L_Msg09_Text & ResultCodeText(installationResult.ResultCode)
WScript.Echo L_Msg10_Text & installationResult.RebootRequired & vbCRLF
'If installationResult.RebootRequired then
' confirm = msgbox(L_Msg11_Text, vbYesNo+vbDefaultButton2+vbSystemModal,L_Msg19_Text)
' if confirm=vbYes then oShell.Run "shutdown /r /t 0",1
'end if
'WScript.Echo
'Wscript.StdOut.Write L_Msg12_Text
'Wscript.StdIn.ReadLine
WScript.Quit
Function ResultCodeText(resultcode)
if resultcode=0 then ResultCodeText=L_Msg13_Text
if resultcode=1 then ResultCodeText=L_Msg14_Text
if resultcode=2 then ResultCodeText=L_Msg15_Text
if resultcode=3 then ResultCodeText=L_Msg16_Text
if resultcode=4 then ResultCodeText=L_Msg17_Text
if resultcode=5 then ResultCodeText=L_Msg18_Text
end Function
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114