Windows 11 VBS Update Script abändern; wer kann helfen?

Deine Frage passt nicht in die anderen Bereiche, dann stelle sie hier.
Antworten
Benutzeravatar
Holgi
Elite
Elite
Beiträge: 2190
Registriert: 12.05.2018, 12:33
Hat sich bedankt: 225 Mal
Danke erhalten: 302 Mal
Gender:

Windows 11 VBS Update Script abändern; wer kann helfen?

Beitrag von Holgi » 14.07.2022, 15:08

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:

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

Tante Google

Windows 11 VBS Update Script abändern; wer kann helfen?

Beitrag von Tante Google » 14.07.2022, 15:08


Benutzeravatar
Holgi
Elite
Elite
Beiträge: 2190
Registriert: 12.05.2018, 12:33
Hat sich bedankt: 225 Mal
Danke erhalten: 302 Mal
Gender:

Re: Windows 11 VBS Update Script abändern; wer kann helfen?

Beitrag von Holgi » 14.07.2022, 15:16

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

Antworten