In diesem Teil der Artikelserie über die PowerShell Scriptingmöglichkeiten in DSM 7 soll es nun um die konkrete Anwendung gehen.
Wie beim Scripting-Support für VBScript, JScript und Perl-Scripts, besteht auch für PowerShell-Scripts die Möglichkeit, lesend auf NetInstall-Variablen zuzugreifen oder die Werte von NetInstall-Variablen zu setzen. Dazu werden über das PowerShell-Modul Enteo.Powershell.ScriptCmdlet.dll, das Teil des DSM 7 Clients ist, folgende Cmdlets zur Verfügung gestellt:
- Get-NIVar
- Set-NIVar
- Write-NIReport
- Set-NIError
- Get-NiInstParam
Wie der Namen impliziert, kann über das Cmdlet Get-NIVar der Wert einer NetInstall-Variable ausgelesen werden. Als Parameter erwartet das Cmdlet den Namen der Variablen in Anführungszeichen.
Konsequenterweise setzt das Cmdlet Set-NIVar den Wert einer NetInstall-Variablen. Dieses Kommando benötigt zwei Argumente, nämlich den Namen der zu setzenden Variablen und den Wert, auf den sie gesetzt werden soll. Wie in PowerShell üblich, werden die Cmdlet-Parameter durch ein Leerzeichen getrennt und ebenfalls in Anführungszeichen eingeschlossen.
Über Write-NIReport lässt sich ein Eintrag in das aktuelle Installer-Logfile vornehmen. Als Parameter erwartet das Cmdlet den im Logfile einzutragenden Text. Innerhalb des Logs wird der Eintrag mit Loglevel 2 klassifiziert und mit dem Präfix Powershell: NIReport: gekennzeichnet.
Schließlich lässt sich über Set-NIError analog zu Write-NiReport ein Logfile-Eintrag im aktuellen Installer-Log erzeugen, der jedoch als Fehler ("E") klassifiziert wird. Auch dieses Cmdlet erwartet als Argument den einzutragenden (Fehler-)Text. Innerhalb des Logs erhält dieser Eintrag ein vorangestelltes Warning (Module:Powershell, Severity:0x03): Script error:
Über das letzte Cmdlet Get-NiInstParam, werde ich in einem separaten Artikel schreiben...
Als konkretes Beispiel möchte ich ein PowerShell-Script zeigen, das in Windows 7 den Befehl "An Taskleiste anheften" ausführt, also einen Shortcut für eine Applikation auf der sogenannten Superbar von Windows 7 anlegt. Die NetInstall-Scriptsprache kann das (noch? ;-) nicht, sodass man hier auf externe Möglichkeiten zurückgreifen muss.
- Zunächst werden im NetInstall-Script der Pfad und Name des Executables, für den die Verknüpfung erzeugt werden soll, definiert. Außerdem wird die Variable Returncode deklariert und initialisiert, damit später der Erfolg der Aktion kontrolliert werden kann.
- Als nächstes wird einfach – per CallScript – das PowerShell-Script Pin-ToTaskbar.ps1 aus dem Extern$-Verzeichnis des Scripts aufgerufen, das die ganze Arbeit erledigt. Nach der Abarbeitung, wird geprüft, ob der Returncode den Wert 0 hat (was bedeuten würde, dass die Aktion geklappt hat) und falls nicht, das Script als fehlgeschlagen beendet.
Hier ein Screenshot, wie das in der Packaging Workbench ausschaut:
Der interessante Teil – das PowerShell-Script – ist im Folgenden dargestellt:
- Nachdem zunächst das (sprachabhängige!) Verb definiert wird, werden die Werte für Pfad und Executable, für das die Verknüpfung erzeugt werden soll, über das Get-NIVar Cmdlet von NetInstall ermittelt. Um das später alles nachvollziehen zu können, werden die ausgelesenen Werte dann per Write-NIReport in das aktuelle Installer-Logfile eingetragen.
- Anschließende wird versucht, eine Referenz auf die angegebene Datei zu erzeugen. Falls die Datei nicht gefunden wird, das Executable also im angegebenen Pfad nicht existiert, wird ein Fehlereintrag in das Installer-Log gemacht, der Returncode auf einen Wert ungleich 0 gesetzt und das PowerShell-Script beendet.
- Wurde das File gefunden, werden nun alle Verben ermittelt und in einer Schleife durchlaufen. Wenn der Name des Verbs dem am Anfang definierten Verb entspricht, wird dieses über die DoIt-Methode "aufgerufen" - hier wird also der eigentliche Shortcut erzeugt.
- Schließlich wird nur noch geprüft, ob die letzte Aktion geklappt hat, ein entsprechender Log- oder Fehler-Eintrag erzeugt und der Returncde in NetInstall gesetzt.
Sie finden das NetInstall- und das PowerShell-Script zum Download in unserem Download-Bereich unterhalb von Tools > Sonstiges.