PowerShell-Grundlagen: Arbeiten mit Variablen und Konstanten
Konstanten und schreibgeschützte Variablen verhindern irrtümliche Wertänderungen in einem PowerShell-Skript. Die Anwendung ist ganz einfach.
Die meisten Menschen definieren eine Variable in einer Programmiersprache als einen Platzhalter für etwas anderes. Die Variable ist der Eimer, in den Dinge hineinkommen, herauskommen, darin verändert oder daraus entfernt werden. Allerdings gibt es auch eine Teilmenge an PowerShell-Variablen, die zwar definiert werden, aber danach nie mehr verändert werden können. Diese Variablen werden Konstanten oder schreibgeschützte Variable (read-only) genannt.
Konstanten und schreibgeschützte Variable sind weitgehend identisch. Beiden werden initial Werte zugewiesen, die danach nicht mehr geändert werden können. Konstanten können, anders als schreibgeschützte Variable, aber noch nicht einmal entfernt werden.
Schauen wir uns kurz ein Beispiel an:
Wer schon einmal Skripte in PowerShell geschrieben hat, der wird Variablen wohl in etwa so definiert haben: $Variable = 'Hallo Welt.' Diese Deklaration ist die gängige und übliche Art, Variablen zu definieren. Aber auch mit einem eingebauten PowerShell-CMDlet namens Set-Variable können Variablen Werte zugewiesen werden. Da $Eimer = 'Voll' und Set-Variable -Name 'Eimer' -Value 'Voll' funktional völlig äquivalent sind, kommt das CMDlet aber eher selten zum Einsatz.
Abbildung 1: Die Variable „Eimer“ wird erstellt und ihr der Wert „Voll“ zugewiesen.
In Abbildung 1 wird auf dem umständlicheren Weg die Variable $Eimer erzeugt und ihr im gleichen Zug der Wert „Voll“ zugewiesen. Die Bildschirmausgabe belegt den Erfolg der Zuweisung. Danach wird der Wert der Variable auf dem üblichen, weil kürzeren Weg zu „Leer“ geändert. Auch hier wird der Erfolg durch Abfrage nachgewiesen.
Wie aber liegen die Dinge im Fall einer Konstanten? Es bietet sich dann die Verwendung von Set-Variable mit dem zusätzlichen Parameter Option an. Durch die Nutzung von Option können Administratoren der Variable $Eimer den dauerhaften Wert „Voll“ zuweisen:
Abbildung 2: Der Wert einer Konstanten kann nicht verändert werden.
Als Folge des Versuchs, den Wert von $Eimer zu ändern, wurde ein roter Fehlertext ausgegeben mit dem Hinweis, dass diese Operation nicht erlaubt ist (Abbildung 2). Die Konstante kann weder verändert noch entfernt werden.
Soviel zu Konstanten. Wie aber sieht es mit schreibgeschützten Variablen aus? Der Unterschied liegt darin, dass schreibgeschützte Variable entfernt werden können:
Abbildung 3: Verweis auf den Force-Parameter in der PowerShell.
In Abbildung 3 wurde erneut der Befehl Set-Variable genutzt, und sämtliche Parameter und deren Werte waren identisch – mit Ausnahme des Wertes ReadOnly statt Constant für den Parameter Option. Nach dem Zuweisen des Wertes wurde versucht, diesen zu entfernen – mit der Folge einer Fehlermeldung. Darin steht: „…führen Sie den Vorgang mit dem Force-Parameter erneut aus.“ Unter Nutzung dieses Parameters für die Methode del kann die Variable dann erfolgreich entfernt werden.
Wozu aber würde nun ein Administrator eine Konstante oder eine schreibgeschützte Variable überhaupt nutzen wollen? Tatsächlich gibt es dafür einige Gründe. Einer davon wäre beispielsweise ein sehr langes Skript, dass hunderte – wenn nicht tausende – Variablen deklariert.
Wird dann einem wichtigen Attribut eines Servers eine Variable zugeteilt, und im weiteren Verlauf werden innerhalb dieses Skripts Veränderungen an diversen Attributen vorgenommen, dieses eine soll jedoch davor geschützt werden, dann können Konstanten oder schreibgeschützte Variablen sehr hilfreich sein. Es könnte zum Beispiel sein, dass eine Änderung an diesem Attributwert schwerwiegende Probleme nach sich zieht oder die Ausführung des Skripts verhindert. Mit einer schreibgeschützten Variable kann ein solcher Fehler vermieden werden.
Weitere Artikel zu PowerShell:
Kostenloses E-Handbook zu PowerShell 5.0 und Hyper-V in Windows Server 2016
PowerShell-Skripte in vCenter Orchestrator integrieren
Die 10 wichtigsten PowerShell-CMDlets für Exchange 2013
Für Konstanten trifft dies in ähnlicher Weise zu, auch sie können genutzt werden, um den Wert einer Variablen zu verfestigen und das irrtümliche Verändern oder Entfernen des Wertes zu unterbinden. Vorteilhaft kann dies zum Beispiel auch sein, wenn das Skript auch Dritten zugänglich gemacht wird und verhindert werden soll, dass innerhalb der Variablendeklarationen fehlerhafte Zuweisungen vorgenommen werden.
Letztlich sind Konstanten theoretisch auch auf einer technischen Ebene besser als Variablen. Die Definition einer Konstante beschreibt die Absichten des Skripts viel zielgerichteter. Mit Konstanten werden Variablen ersetzt, auf die man sonst im weiteren Code ständig achten müsste. Und wenn man technisch noch eine Ebene tiefer gehen möchte, dann liegt ein weiterer Vorteil in der geringeren Ressourcenbelastung, da Konstanten anders als Variablen nicht überwacht werden müssen.
Folgen Sie SearchDataCenter.de auch auf Twitter, Google+ und Facebook!