Powershell: Updates an User im Netzwerk verteilen

In meinem Brotberuf habe ich sehr häufig die Situation, dass verschiedene Programme, Scripts, Datenbanken bei den Nutzern in meiner Abteilung aktualisiert oder ausgerollt werden müssen. Die Option, sich vor den Rechner eines jeden Users zu setzen und die Updates dort zu machen, war schon vor Corona und der Verlagerung von Arbeit in das Home-Office nicht wirklich effektiv.

Mit der Zeit findet man so einige Teil-Lösungen und baut sie zu einem Gesamtmechanismus zusammen. In diesem und folgenden Beiträgen möchte ich von den vielen Ideen, die mir geholfen haben, ein Gesamtbild erstellen und hier publizieren – vielleicht helfe ich damit anderen Menschen in meiner Position ebenfalls, die Abläufe zu verbessern.

Die Situation

Angenommen wir möchten bei all unseren Users ein Update lokal ausführen und wir wissen, dass wir den Nutzern nicht einfach sagen können, kopiere Datei von A nach B, erstelle eine neue ODBC-Datenbank-Schnittstelle, aktiviere das AddIn etc. und alles ist fein – schlicht, weil User damit überfordert sind und weil es auch nicht die Aufgabe von Usern ist, sich mit solchen Dingen auskennen zu müssen.

Die Ideallösung wäre also, wenn wir den Nutzern eine Mail schicken mit einer Anleitung, die letztendlich nur darin besteht, einen Button oder einen Link anzuklicken, der alles weitere erledigt.

Die ganzen Updates selbst machen wir mit Powershell. Mit einem Script, dass auf einem Server liegt. Davon gehe ich überhaupt generell aus – alle unsere Nutzer sind in demselben Netzwerk angemeldet, vermutlich autorisiert über VPN im Homeoffice.

Ein einfaches Update

Da man dem User kein Powershell Script einfach so schicken kann (die Policies in einem Unternehmen untersagen das vermutlich aus guten Gründen) behalten wir das eigentliche Script auf dem Server und senden dem User stattdessen den Link zu einer Datei namens UpdateScript.vbs – also eine VBScript Datei. Die ist relativ simple. Die Ausführung der Datei startet „MeinPowerShellScript.ps1“ auf dem Server und sieht so aus:

Dim pwShell
Set pwShell = CreateObject("Wscript.Shell")
pwShell.Run("powershell.exe \\MeinServer\MeinPowershellScript.ps1")

Sie speichern diese Datei auf dem Server. Der User bekommt nur den Link zugesendet. Nach einem Klick kann er das Ziel „Speichern“ oder „Ausführen“ – natürlich macht nur „Ausführen“ Sinn. Das sollte man den User in der Mail vielleicht erklären.

Einen Shortcut zu einem Script anlegen

Damit hätten wir ein einfaches Script, das ein PowershellScript direkt ausführt. Kommt das Ausführen dieses Powershell Scriptes häufiger vor, dann ist es vielleicht sinnvoll, für den User zu diesem Script einen Shortcut automatisch anzulegen. Das können wir machen, in dem wir vor das eigentliche Powershell-Script ein weiteres Powershell-Script voranschalten, dass den Shortcut auf dem Desktop des Users erzeugt.

Dim pwShell
Set pwShell = CreateObject("Wscript.Shell")
pwShell.Run("powershell.exe \\MeinServer\ErstelleDenShortcut.ps1")

Das Powershell Script „ErstelleDenShortcut.ps1“ sieht so aus – bitte Ihren Begebenheiten entsprechend anpassen:

$dir = "\\MeinServer\OrdnerMitPowershellScript\"
$w = New-Object -ComObject WScript.Shell
$desktop = [system.environment]::GetFolderPath("Desktop")

$link = $w.CreateShortcut("$desktop\Bezeichnung Shortcut.lnk")
$link.TargetPath = 'powershell.exe' 
$link.arguments = ' -file ' + "`"$dir\MeinPowershellScript.ps1`""
$link.workingDirectory = $dir
$link.save() > $null

Damit wird auf dem Desktop eines jeden Users, der dieses Script über das VBS Script aufgerufen hat, eine Verknüpfung zu „MeinPowershellScript.ps1“ mit der Bezeichnung „Bezeichnung Shortcut“ gelegt. Wann immer der User auf diesen Shortcut klickt, wird „MeinPowershellScript.ps1“ automatisch in Powershell aufgerufen und ausgeführt.

Sie erkennen wahrscheinlich, wieviel Potenzial hinter so einem Mechanismus steckt. In den nächsten Beiträgen werden wir was „MeinPowershellScript.ps1“ angeht ein bisschen konkreter. Ich zeige Ihnen, wie Sie

  • Dateien automatisch aktualisieren
  • ODBC Schnittstellen automatisch aktualisieren
  • Laufwerkszuordnungen
  • Ergebnisse von SQL Abfragen ausgeben
  • Server-Aliase updaten

können. Dieser Mechanismus ist also nicht nur für Updates interessant, sondern auch für die Ausführung wiederkehrender Aufgaben, die sich so automatisieren lassen. Hinter dem aufgerufenen Powershell-Script kann theoretisch ein komplexer Arbeitsablauf oder eine eigene Anwendung liegen.