automatische Softwareverteilung via PS-Skript
Ein typisches Szenario in "onprem"- oder "hybrid"-Umgebungen sind Server, die teils oder gar nicht regelmäßig verwaltet werden.
Oder, sie werden aufwendig von Hand gepflegt.
Einsätze von SCCM, Baramundi oder ähnlicher Software zum Verwalten von Software und Server sind oft teuer oder aufwendig.
Gerade bei mittelständischen Unternehmen ist der Kostenfaktor ein Argument, weshalb solche Software nicht angeschafft wird.
Ich habe ein Paket gebaut, welches eine Softwareverteilung automatisieren kann. Das Zusammenspielt aus Skripten, JSON Dateien und dem Aufgabenplaner sind ausreichend, um "einfache" Software automatisch aktualisieren zu lassen.
Die JSON Dateien dienen hierbei als "Informationsdateien", die alle benötigten Informationen für jedes Paket bereitstellt und dem Automatismus somit als Grundlage dienen.
Voraussetzung ist EIN Server oder Client, der Internetzugriff hat, um auch die aktuellen Pakete herunterladen zu können. Ebenso, dass der Softwarehersteller einen festen Link für den Download bereitstellt (GitHub, latest z.B.).
Das Prinzip ist im Grunde simpel:
Der "Download"-Server lädt Pakete vom Hersteller oder GitHub herunter, wenn im Skript festgestellt wird, dass es eine neuere Version gibt. Dazu sind Informationen zur Version, Downloadlink und Hersteller in einer JSON Datei hinterlegt.
Sollte eine neue Version verfügbar sein, wird sie heruntergeladen und (ggf.) verschoben, um sie an einen zentralen Ort zur Verfügung zu stellen, auf den alle Server Zugriff haben. Auch die DMZ z.B.
Denn genau um solche Fälle geht es meist. Server mit aktueller Software zu versorgen, die keinen Internetzugriff haben.
Der Download und die Bereitstellung wird in Logs protokolliert, denn die Logs dienen nachher einer Auswertung in einer html-Ansicht.
Im weiteren Verlauf werden die Server mit einem Task und Powershell-Skript versorgt, welches prüft, ob einer der bereitgestellten Softwarepakete installiert sind.
Falls eine Installation vorhanden, Version prüfen, wenn sie veraltet ist, wird sie upgedated. Falls nicht vorhanden, wird die Installation schlichtweg übersprungen.
Auszug aus der manifest.json

Für jedes Softwarepaket wird eine Struktur eingehalten, die alle Informationen zur Verfügung stellt.
Das Powershell-Skript "Update-Packges.ps1" arbeitet anhand der JSON die Pakete ab und lädt sie aktiv aus dem Internet herunter.

Für jeden Durchlauf wird ein Log geschrieben. Nach 31 Tagen werden die Logs gelöscht.
Die Logs helfen im späteren Verlauf die Zusammenfassung anzeigen zu lassen.

Nach erfolgreichem Durchlauf wird eine html erzeugt. Diese zeigt die bereitgestellte Software an.

Nun haben wir aktuelle Installationsdateien heruntergeladen und zentralisiert zur Verfügung gestellt.
Im nächsten Schritt wird ein Powershell-Skript auf den Servern ausgeführt, welches prüft, ob eine der Softwarepakete installiert sind und in welcher Version.
Ist die installierte Version veraltet, wird die Neue installiert. Zur Überprüfung wird via Skript in die "version.txt" geschaut und verglichen.
Bei aktuellem Stand wird der Task übersprungen.
Hier ein Beispiel aus dem Log:

Für die Zusammenfassung der Logs wird ebenfalls wieder eine html im Skript angelegt.
![]()
Das Ergebnis ist eine html, mit der sich die Logs zusammenfassend auswerten lassen.
