Jump to content
Ja_Nosch

Automatischen Neustart nach Update verhindern

Recommended Posts

Was genau sind deine Anforderungen?

 

Wenn Updates installiert werden, sollte die Maschine auch zeitnah neu gestartet werden. Heute Updates installieren und in ein paar Tagen Neustart durchführen ist kontraproduktiv.

Share this post


Link to post
Share on other sites

Ein plötzlich neu startender Server, der dann an der Bitlocker-Kennworteingabe hängt, ist auch kontraproduktiv ... ;-)

 

Gibt es eine GPO-Einstellung, die dafür sorgt, dass der Server unter keinen Umständen neu startet? Oder bleibt nur der o.g. Workaround?

 

Danke!

 

Edit: Unter Server 2019 klappt dieser Trick nicht mehr (siehe https://serverfault.com/questions/952657/server-2019-updateorchestrator-reboot-missing).

Welche Möglichkeit habe ich, einen automatischen Neustart unter allen Umständen zu unterbinden? Danke!

Edited by Ja_Nosch

Share this post


Link to post
Share on other sites

Updates manuell installieren oder mit SCCM oder einer anderen Software. Oder die Installation zu dem Zeitpunkt ausführen, zu dem auch ein Reboot ausgeführt werden kann. Ja, das geht. Entweder mit SCCM oder einer anderen Software die das kann. Oder mit einem billigen VBS-Script, das man noch etwas anpassen muss.

 

https://docs.microsoft.com/en-us/windows/desktop/wua_sdk/searching--downloading--and-installing-updates

Das in o.g. Link enthaltene VB-Script kann man automatisiert aufrufen und per Antwortdatei automatisch steuern. An den richtigen Stellen auskommentieren, schon wird nicht mehr gefragt.

 


'-------------------------------------------
' 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

'**************************
'Testweise auskommentiert!
'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    
    
    oShell.Run "shutdown /r /t 600"

'end if
'Testweise auskommentiert!
'**************************


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   

 

Die Datei ist in W2016 ebenfalls noch enthalten. Beispiel für den Aufruf:

 



c:\windows\system32\cscript.exe /nologo C:\_Install\WU\WUA_SearchDownloadInstall.vbs<c:\_Install\WU\input.txt

 

Die Input.txt liegt im gleichen Verzeichnis und enthält nur die die beiden A. Man kann auch noch das oShell.Run "shutdown /r /t 600" auskommentieren, dann startet die Maschine nicht neu, sondern erst wenn man es manuell macht oder per Taskplaner. Vermutlich wird automatisch nach 2 Tagen gestartet, wird ja so von MSFT im GPO angetriggert.

 

 

Eine Alternative könnte auch das hier sein: https://www.heise.de/forum/heise-Security/News-Kommentare/Patchday-Microsoft-stopft-13-Luecken-Adobe-laesst-es-ruhig-angehen/WSUS-laesst-man-sinnvollerweise-HowTo/posting-28482033/show/

 

MSFT sagt zu recht, nach der Installation der Updates soll ein Client/Server neu gestartet werden. Das Gerät hängt ansonsten in der Luft.

Input.txt

  • Thanks 1

Share this post


Link to post
Share on other sites
vor 6 Stunden schrieb Ja_Nosch:

Ein plötzlich neu startender Server, der dann an der Bitlocker-Kennworteingabe hängt, ist auch kontraproduktiv ... ;-)

Wer oder was ist denn der Server, was tut er und wo tut er das?

Warum wird denn Bitlocker benötigt?

 

Ansonsten: "Einfach" einen weiterer Server dazu und auf anwendungsebene eine Verfügbarkeit realisieren.

Share this post


Link to post
Share on other sites

Vielen Dank für die Mühe, @Sunny61! MS hat wohl die Methode mit Reboot --> Reboot.bak + Reboot-Ordner erstellen gestopft. Traurig, dass man seinen Server austricksen muss, damit er durchläuft.

 

@Testperson, ich wüsste nicht, was diese Fragen hier zur Sache tun?! Meine Frage- bzw. Problemstellung war doch klar: ich will nicht, dass der Server ohne mein Zutun / ohne meine Aufsicht neu startet. Welche Rolle spielt es da, ob der Server in nem Krankenhaus die Gebäudeleittechnik steuert oder zu Hause fürs Videostreaming zuständig ist? "Einfach" einen weiteren dazutun - was sollte das bringen? Der hat dann ja wieder diese Eigenheit und wer sagt mir, dass nicht beide zur selben Zeit Updates installieren wollen?! Auch die Frage, weshalb Bitlocker benötigt wird, erschließt sich mir nicht.

Share this post


Link to post
Share on other sites

Ich habe noch eine Lösung: Updates manuell installieren, wenn man eh beim Neustart "bei" sein muss.

 

  • Like 1

Share this post


Link to post
Share on other sites
vor einer Stunde schrieb Ja_Nosch:

"Einfach" einen weiteren dazutun - was sollte das bringen?

Was hast du denn an "auf Anwendungsebene eine Verfügbarkeit realisieren" nicht verstanden?

vor einer Stunde schrieb Ja_Nosch:

Der hat dann ja wieder diese Eigenheit und wer sagt mir, dass nicht beide zur selben Zeit Updates installieren wollen?!

Gruppenrichtlinien und/oder ein wenig Scripting.

 

Mit Gruß und Kuss, der Oktopus.

Adieu!

 

 

Share this post


Link to post
Share on other sites

Wieso updated und startet dein Server einfach neu?

Wenn ich Server patche dann installiere ich Updates und starte neu (z.B. mit PSWindowsUpdate Powershell Modul oder 3rd Party Tools) und außerhalb der Wartungsfenster startet bei mir kein Server neu.

Share this post


Link to post
Share on other sites
vor 8 Stunden schrieb Dukel:

Wieso updated und startet dein Server einfach neu?

Wenn ich Server patche dann installiere ich Updates und starte neu (z.B. mit PSWindowsUpdate Powershell Modul oder 3rd Party Tools) und außerhalb der Wartungsfenster startet bei mir kein Server neu.

Ich hatte versehentlich nach Updates gesucht, weiß aber nicht mehr, ob ich auf installieren bin - jedenfalls startete das Ding dann irgendwann einfach neu. War ein Testserver mit ner 2019er-Demo, also alles kein Problem - ich erinnere mich aber noch an unschöne Erlebnisse von früher, weswegen ich auch den o.g. Artikel verlinkt hatte (den Autor hat ja offenbar auch was dazu bewogen, da ne Lösung zu finden :-).

 

Ja, Updates haben zeitnah installiert zu werden, ja danach ist neu zu starten, alles richtig, aber für mich hat ein Server unter keinen Umständen selbst ne Entscheidung zu treffen. Wie stupide dieses System von Windows 10 übernommen wurde, sieht man, wenn man sich das "Konzept" der Nutzungszeiten ansieht, die es so bei einem Server einfach nicht gibt.

Share this post


Link to post
Share on other sites

@zahni ja selbe Anforderungen habe ich auch. Haben div. Programme welche nicht als Dienst laufen sondern tatsächlich über einen Button innerhalb der Software gestartet werden müssen. Sehr b***d weil man hier nach einem Neustart wirklich bei sein muss.

 

Glücklicherweise passiert das alles fix auf nem 2019 mit SSDs. Aber wo kann ich einstellen, das die Updates Manuel installiert werden? Hab gestern mal die Maske für Updates gestartet und dann ging das Update sofort los... ich konnte nicht mal den Downlad Abbrechen. Danach wollte er neu starten.

Share this post


Link to post
Share on other sites
vor 19 Minuten schrieb RobDust:

 

Glücklicherweise passiert das alles fix auf nem 2019 mit SSDs. Aber wo kann ich einstellen, das die Updates Manuel installiert werden? Hab gestern mal die Maske für Updates gestartet und dann ging das Update sofort los... ich konnte nicht mal den Downlad Abbrechen. Danach wollte er neu starten.

Neues eigenes Thema, bitte neuen eigenen Thread erstellen und Anforderungen definieren, Danke.

Share this post


Link to post
Share on other sites
vor 27 Minuten schrieb RobDust:

 

 

Glücklicherweise passiert das alles fix auf nem 2019 mit SSDs. Aber wo kann ich einstellen, das die Updates Manuel installiert werden? Hab gestern mal die Maske für Updates gestartet und dann ging das Update sofort los... ich konnte nicht mal den Downlad Abbrechen. Danach wollte er neu starten.

Wenn Du den Button drückst, wird auch installiert. Den Unterschied zu 2012R2 und älter, wirst Du nicht los. Also nur suchen, wenn Du auch installieren willst.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


Werbepartner:



×
×
  • Create New...