"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

[Vorstellung] RemoteUpdate - Install Windows Updates remotely

userohnenamen 21.02.2020 - 23:32 10112 22 Thread rating
Posts

userohnenamen

leider kein name
Avatar
Registered: Feb 2004
Location: -
Posts: 15857
Hi,

ich hab in den letzten 2 Wochen "einige" Stunden dran gesessen und hab (eigentlich mal für mich) ein Tool geschrieben mit dem ich mehrere Server remote auf einmal updaten kann ohne mich einloggen zu müssen. Nachdem ich von ein paar Kollegen sehr gute Rückmeldungen erhalten hab, dachte ich mir, ich veröffentliche es und schau ob es noch andere ebenfalls gebrauchen können.
Gedacht ist es für kleinere Umgebungen bei denen kein SCCM (oder dessen Alternativen) existieren, sei es aus Kostengründen oder auch weil der Overhead dadurch noch mehr steigt.

Die Oberfläche ist imho möglichst einfach gehalten, bietet aber doch die notwendigsten (zumindest aktuell für mich) Möglichkeiten um eingreifen zu können und eine gewisse Flexibilität zu erhalten.

Warum das ganze? Weil das ansonsten geniale Powershell Modul PSWindowsUpdate dafür keine befriedigende Lösung darstellt, da hier der Remote Prozess nur mehr per Windows Scheduler ausgelöst werden kann und somit keine Auswahlmöglichkeit für die zu installierenden Updates besteht. Von daher wollte ich etwas das mir interaktiv die Möglichkeit bietet einzuschreiten (typischer Fall: Exchange Server bei denen man mit dem .net Framework aufpassen muss).

Um das ganze zu realisieren musste ich zu einem kleinen Trick greifen, mit einem Powershell Virtual Account, da ansonsten das installieren der Updates per Remote-Powershell nicht funktioniert. Glücklicherweise konnte ich das ganze so abbilden das ich mir remote alle Vorrausetzungen selbst schaffen kann. D.h. für die Nutzung ist kein aktives eingreifen auf den remote hosts notwendig. Nur die passenden Credentials (entweder vom ausführenden User oder im Programm hinterlegt).

remoteupdate_242246.png

Das Serverfenster verfärbt sich je nach Pingstatus auf grün = echo ok, rot = kein echo, violett = kein dns record dafür.
Die Uptime ist eingebaut um hier auch gleich feststellen zu können wann der Reboot durch ist und das System wieder reagiert.
Ping wird alle paar Sekunden, die Uptime halbminütlich abgefragt und dementsprechend dann die Oberfläche angepasst.

Das ganze ist auf github veröffentlicht: https://aimaat.github.io/RemoteUpdate/

Download vom letzten Release: https://github.com/aimaat/RemoteUpd...emoteUpdate.exe

Vielleicht kann es hier ja auch der ein oder andere gebrauchen, würde mich freuen Feedback von euch zu erhalten.

Sollte sich jemand den Code anschauen, bitte habt Mitleid mit eurer Kritik mir gegenüber :D
Das letzte mal das ich damit was zu tun hatte ist 15 Jahre her und ich hab das jetzt in den letzten 2 Wochen mit viel Trial and Error, googlen und lernen zusammengeschustert.

tia, uon
Bearbeitet von userohnenamen am 22.02.2020, 19:53

mr.nice.

differential image maker
Avatar
Registered: Jun 2004
Location: Wien
Posts: 6454
Danke für's teilen, ich werde es mir kommende Woche anschauen! Könnte eventuell nützlich sein.

wergor

connoisseur de mimi
Avatar
Registered: Jul 2005
Location: vulkanland
Posts: 4095
Schaut interessant aus! Vielleicht ist das Tool was für uns, ich muss mit meinen Kollegen drüber reden.

Smut

takeover & ether
Avatar
Registered: Feb 2003
Location: VIE
Posts: 16837
Super.
Noch immer unvorstellbar dass selbst Server 2019 das nicht vernünftig kann. Ziemliche workarounds die Microsoft selbst zur Verfügung stellt.

Viper780

Er ist tot, Jim!
Avatar
Registered: Mar 2001
Location: Wien
Posts: 49921
Danke dir. Könnte ein Startpunkt auch bei uns sein.
Für die wenigen Windows Server fehlt etwas die Expertise und die Tools.
Evtl würde es auch bei den Clients was bringen

Unter was für einer Lizenz steht das Tool und darf es erweitert werden?

daisho

SHODAN
Avatar
Registered: Nov 2002
Location: 4C4
Posts: 19688
Schaut interessant aus, werde ich definitiv testen bei mir in der Arbeit :)

userohnenamen

leider kein name
Avatar
Registered: Feb 2004
Location: -
Posts: 15857
danke einmal für die positiven rückmeldungen, das ist schon ein netter motivationsfaktor

ich habs hier nicht erwähnt/vergessen, je server geht ein powershell fenster auf, ich muss mal einen screenshot machen wie das dann mit z.b. 10 servern aussieht

GUI/no GUI geht in der version noch nicht, da bin ich gerade dran das eben noch in den hintergrund zu verschieben (halt nur dann wenn acceptall aktiviert ist).

bezüglich lizenz hab ich mir ehrlich gesagt noch keine gedanken gemacht bzw. muss ich mich auch einlesen was dann was genau bedeutet bzw. für implikationen hat
grundsätzlich hab ich kein problem wenn ich pull requests bekommen würde die das ganze erweitern bzw. verbessern

und clients sollten grundsätzlich auch gehen, hab ich aber jetzt noch nicht getestet, rein programatisch würde aber nichts dagegen sprechen

ThMb

JO FRLY
Avatar
Registered: Feb 2009
Location: OÖ
Posts: 1389
Lässt du die Server über Inet updaten oder von zentraler Quelle (wsus)? Alternativ dazu gibts nämlich auch den Azure Update Service, der im Grunde das gleiche macht und auch kostenfrei ist.

Aber cooles Tool und gute Idee dahinter!

userohnenamen

leider kein name
Avatar
Registered: Feb 2004
Location: -
Posts: 15857
danke, kannte ich noch nicht (bin noch etwas der cloud verweigerer bzw. zumindest nicht der große fan davon), werd ich mir sicher auch mal ansehen

bezüglich wsus: wenn der wsus per GPO ausgerollt ist, wird dieser verwendet
man kann aber mit dem parameter "-MicrosoftUpdate" ein updatesuchen online erzwingen (um z.b. treiber darüber zu holen bzw. zumindest zu sehen was er findet)
Das ganze kann man in den settings bei "PS WU commands" hinzufügen, wie z.b. auch globale ausnahmen ala "-MicrosoftUpdate -NotTitle "OneDrive" -NotKBArticleID KB4489873"
das füge ich dann beim command den ich ausführe hinzu, fast die ganze palette wie hier aufgezeigt ist möglich: http://woshub.com/pswindowsupdate-module/
Bearbeitet von userohnenamen am 22.02.2020, 14:08

userohnenamen

leider kein name
Avatar
Registered: Feb 2004
Location: -
Posts: 15857
Ich hoffe man verzeiht mir den Doppelpost aber ich hab jetzt auf v.0.2.0.0 erhöht :D

Die Auswahl zwischen GUI und no GUI funktioniert (auch in Wechselwirkung mit AcceptAll), d.h. ohne GUI wird die ausführende Powershell im Hintergrund gestartet ohne das man sie sieht.

Bei den Vorrausetzungen musste ich auch noch nachbessern, da habe ich vergessen den PackageProvider NuGet ebenfalls zu installieren wenn nicht vorhanden, andernfalls schlägt dann PSWindowsUpdate fehl (sowas merkt man meist dann wenn man nochmals mit einem komplett jungräulichem system probiert)

edit: hier noch ein bild wie es mit GUI in arbeit aussieht
click to enlarge
Bearbeitet von userohnenamen am 22.02.2020, 20:17

Kampftrinker

Big d00d
Avatar
Registered: Mar 2005
Location: hinter den 7 Ber..
Posts: 212
So, habs leider erfolglos probiert.
Ich nehme mal an, dass der Fehler irgendwo auf meiner Seite liegen wird, obwohl die Voraussetzungen erfüllt sein müssten.
per
Code:
enter-pssession
komme ich auf die gewünschten Maschinen, der Port ist per Telnet erreichbar und die Richtlinien dafür sollten (!) korrekt per GPO verteilt werden.
Interessant ist, dass die Fehlermeldung sich je nach Server zunächst unterscheidet (mal WinRM, mal Zugangsdaten). Habe mal PSWindowsUpdate auf meinem RDS händisch installiert - seitdem deckt sich die Fehlermeldung mit dem DC. Anscheinend kann die Uptime aber beim 2019er DC (im Gegensatz zum 2016er) nicht ausgelesen werden, obwohl ich per Powershell rüberkomme und die Maschine im ServerManager korrekt angezeigt wird. Wie gehabt, gehe von einem Fehler meinerseits aus.
So ganz schlau werde ich noch nicht draus, teste aber in den nächsten Tagen unverdrossen weiter.

userohnenamen

leider kein name
Avatar
Registered: Feb 2004
Location: -
Posts: 15857
ok, danke für die rückmeldung, wenn auch nicht erfolgreich
ich hab demnächst noch vor ein besseres error handling und auch ein log zu schreiben, das ist ja aktuell quasi nicht vorhanden um draufzukommen warum was probleme bereitet

userohnenamen

leider kein name
Avatar
Registered: Feb 2004
Location: -
Posts: 15857
ich hab gestern abend ca. 60 server in ~ 10 ADs damit gepatcht
im AD ging bei mir der großteil problemlos, einzig bei den 2012er servern bin ich teilweise noch selbst über eine fehlende powershell 5 gefallen :D
bei zwei servern außerhalb eines ADs bekomm ich aktuell auch noch keine verbindung und kann noch nicht sagen warum, 2 weitere im selben konstrukt haben problemlos funktioniert

ansonsten hab ich mit 0.2.0.1 jetzt schon mal logging eingebaut (inkl. verbose funktion für quasi jeden schritt), aber halt noch ned über alle schritte hinweg, das wird dann in den nächsten tagen folgen
und dann sollte es beim debugging wenns ned funktioniert auch leichter werden

daisho

SHODAN
Avatar
Registered: Nov 2002
Location: 4C4
Posts: 19688
Zitat aus einem Post von userohnenamen
im AD ging bei mir der großteil problemlos, einzig bei den 2012er servern bin ich teilweise noch selbst über eine fehlende powershell 5 gefallen :D
Das ist der Klassiker, Set-ExecutionPolicy ist auch so eine Stolperfalle bei eigenen nicht signierten Scripten.

erlgrey

formerly known as der~erl
Registered: Aug 2002
Location: Wien
Posts: 4428
cooles tool, danke. :)

gerade ausprobiert auf paar 2019er servern, die 2 Dinge sind mir aufgefallen:
Code:
VERBOSE: Installed [3] Updates
Reboot is required. Do it now? [Y / N] (default is 'N')
Object reference not set to an instance of an object.
    + CategoryInfo          : NotSpecified: (:) [Get-WindowsUpdate], NullReferenceException
    + FullyQualifiedErrorId : System.NullReferenceException,PSWindowsUpdate.GetWindowsUpdate
    + PSComputerName        : srv3

sobald die reboot required abfrage kommt instant "Object reference not set to an instance of an object." , trat bei mir auf egal ob [x] Reboot angehakt war, oder nicht.


kb4537818 (cumulative update) hat mir das tool partout nicht vorgeschlagen, das zeigte mir das win update aber auch erst an als ich explizit updates gesucht habe, kann also auch Absicht sein. :)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz