ScriptRunner Blog
Parameter-Validierung in PowerShell und ScriptRunner
Inhaltsverzeichnis
Für diejenigen unter euch, die häufig (PowerShell-) Aufgaben delegieren, welche Benutzereingaben erfordern, gibt es immer einen Faktor, den du nicht kontrollieren kannst, und das sind die Fähigkeiten des Endanwenders: Selbst bei detaillierter Erklärung und Hilfestellung können und werden Fehler passieren.
PowerShell bietet einige Optionen zur Parameter-Validierung und zur Vermeidung von Eingabefehlern. ScriptRunner kann diese Optionen verarbeiten und gibt so dem Endanwender Aufschluss über die Gültigkeit seiner Eingabe, bevor das Skript ausgeführt wird. Außerdem verhindert ScriptRunner die Ausführung des Skripts, wenn die Validierungskriterien nicht erfüllt sind.
In den folgenden Abschnitten werde ich zwei Optionen zur Validierung von Benutzereingaben mit PowerShell und ScriptRunner vorstellen.
ValidateSet-Attribut
Die erste Option zur Parameter-Validierung in PowerShell ist das ValidateSet-Attribut. Es ermöglicht Ihnen die Vorgabe eines Satzes gültiger Werte für einen Parameter oder eine Variable und ermöglicht außerdem die Tabulatorvervollständigung in der Shell. Dies eliminiert das Risiko von fehlerhaften und falschen Eingaben durch den Endanwender, da die Eingabeoptionen vordgegeben sind.
ScriptRunner erhöht außerdem die Benutzerfreundlichkeit, indem es diese Validierungsoption in ein schönes Dropdown-Menü übersetzt.
Betrachten wir den folgenden Parameterblock. Wir wollen einen vordefinierten Satz von Möglichkeiten für die Variable „memory“ angeben, in unserem Beispiel 8Gb, 16Gb oder 32Gb.
Param (
[ValidateSet('8GB', '16GB', '32GB')]
[string]$Memory
)
Wie wir in Abbildung 1 sehen können, übersetzt ScriptRunner dieses Stück Code in eine Dropdown-Liste, aus der ein Endanwender bequem den/die gewünschten Wert(e) auswählen kann.
Wenn du mehr darüber erfahren möchten, wie ScriptRunner deine PowerShell-Skripte in benutzerfreundliche GUIs verwandelt, gibt es einen ausführlichen Artikel zu diesem Thema im ScriptRunner Tech-Blog: PowerShell-Parameter und ihre grafische Darstellung in ScriptRunner.
ValidatePattern -Attribut
Das ValidatePattern-Attribut ermöglicht Ihnen die Angabe eines regulären Ausdrucks im Parameterblock deines Skripts, mit dem der Parameter- oder Variablenwert abgeglichen wird, den der Endanwender eingibt.
PowerShell gibt einen Fehler aus, wenn der Inhalt der Variable nicht mit dem regulären Ausdruck übereinstimmt. Die ScriptRunner Delegate und Self-Service App zeigt den Fehler durch ein rotes Ausrufezeichen am entsprechenden Eingabeelement an und verhindert die Skriptausführung, bis der Fehler behoben ist.
Einführung in reguläre Ausdrücke (Regular Expressions/regex)
Ein regulärer Ausdruck ist eine Folge von Zeichen, die ein Suchmuster definieren. Es ist bekannt, dass Regex etwas trickreich ist, achte also darauf, dass du die richtige Syntax verwendest. Nachstehend findest du einen kurzen Überblick über die in unseren Beispielen verwendete Syntax.
Anker
Anker sind Zeichen, die die Begrenzung des Ausdrucks angeben:
Platzhalter
Mit Platzhaltern beschreibst du, mit welchen Zeichen dein Suchergebnis übereinstimmen soll:
Quantifizierer
Mit Quantifizierern kannst du angeben, wie oft die durch die Platzhalter definierten Zeichen Teil deines Musters sind.
Beispiel für einen regulären Ausdruck
Versuchen wir ein einfaches Beispiel: Wir wollen eine Zeichenfolge validieren, die nur Buchstaben des Alphabets enthält.
Hier ist eine Möglichkeit, wie wir dies durch reguläre Ausdrücke erreichen können:
^[a-z]+$
In der untenstehenden Tabelle findest du den Ausdruck in seine einzelnen Teile zerlegt, um deutlicher zu machen, was geschieht:
Regex-Validierung in PowerShell
Wenn der Ausdruck geformt ist, können wir ihn zur Parameter-Validierung in PowerShell verwenden.
Mehrere PowerShell-Operatoren (z. B. -match,-split,-replace) sowie Cmdlets (select-string) unterstützen Regex.
Beachte, dass bei PowerShell-RegEx-Ausdrücken standardmäßig die Groß-/Kleinschreibung nicht berücksichtigt wird. Wenn due sie case-sensitive machen möchtest, ergänze „c“ in den Operatoren (z. B. -cmatch,-csplit,-creplace, wie in Abbildung 2 dargestellt).
Verwendung von Regex mit PowerShell und ScriptRunner: erstes Beispiel
Wir beginnen mit unserem Ausdruck aus der Regex-Einführung oben. Wir möchten eine Zeichenfolge validieren, die nur alphabetische Zeichen enthält.
In unserem PowerShell-Skript definieren wir ValidatePattern wie folgt:
Param (
[ValidatePattern(
'^[a-z]+$'
)
]
[string] $OnlyLetters
)
Wenn dieses Skript als Aktion innerhalb von ScriptRunner ausgeführt wird, kann der Parameter $OnlyLetters leicht validiert werden. Wenn die Validierung fehlschlägt, wird ein Ausrufezeichen neben dem Eingabefeld angezeigt und die Ausführen-Schaltfläche ist ausgegraut. Nachstehend findest du einige Validierungstests (Abbildungen 3a-c):
Verwendung von Regex mit PowerShell und ScriptRunner: fortgeschrittenes zweites Beispiel
Ein weiteres Beispiel aus der Praxis ist die Validierung eines Benutzer-Anmeldenamens in Active Directory.
Die maximale Länge beträgt 20 Zeichen und viele Zeichen sind verboten ( /[:;|=,+*?<>]'“.), daneben verwendet jede Firma ihre eigenen Namenskonventionen.
Hier ist ein Beispiel von einem Kunden, der Benutzeranmeldename sollte den folgenden Regeln entsprechen:
- Länge ist 10-15 Zeichen
- Keine numerischen Zeichen
- Keine Unterstriche
- Das einzige erlaubte Sonderzeichen ist „-„
- Muss mit „u-“ beginnen
Nun lass uns diese Anforderungen in einen regulären Ausdruck übersetzen:
Param (
[Validate Pattern (
'^[u][-][a-z]{8,13}$'
)
]
[string] $UserLoginName
)
Und noch einmal eine kleine Erklärung zur Syntax:
Und wie du in den Abbildungen 4 a-e sehen kannst, funktioniert die Validierung!
Fazit
Wie du sehen kannst, ist die Parameter-Validierung keine Raketenwissenschaft, wenn du diese Grundlagen richtig drauf hast. Mit nur geringem Zeitaufwand wirst du weniger Fehler bekommen und langfristig Zeit und Nerven sparen. Natürlich gibt es noch viele weitere Möglichkeiten, den Einsatz von PowerShell-Skripten sicher zu machen.
Unser PowerShell Security Ebook hilft weiter:
Zusammenhängende Posts
5 min read
Steigere deine IT Automations-Effizienz mit neuer ScriptRunner Version
Sep 30, 2024 by Frank Kresse
Wir haben unser neuestes ScriptRunner-Update, Version 7.1, veröffentlicht. Dieses Update ist vollgepackt mit...
9 min read
Scriptember 2024 – einen Monat lang feiern wir PowerShell
Aug 16, 2024 by Heiko Brenn
Willkommen im Scriptember! Wir freuen uns, einen ganz besonderen Monat ankündigen zu können: Wir feiern einen Monat...
9 min read
Fünf Gründe für die Nutzung von PSReadLine
Aug 14, 2024 by Jeffery Hicks
Wie gut bist du mit dem Thema vertraut? Vielleicht gibt dir dieser Artikel nur einen Überblick. Aus meiner Erfahrung in...
Über den Autor:
Bruno Buyck ist der Gründer von Trouble Shooter, einem Unternehmen, das sich auf PowerShell-Automatisierung spezialisiert hat. In den letzten zehn Jahren hat Bruno Workshops zur Verwaltung und Automatisierung von Systemen mit PowerShell gehalten. Er hat Hunderte von Scripten in Produktionsumgebungen laufen, was zu über 34 Millionen Scriptausführungen pro Jahr führt. Er liebt es, zu lehren und zu beweisen, dass PowerShell "What The Fuck" ist.
Neueste Beiträge:
- Steigere deine IT Automations-Effizienz mit neuer ScriptRunner Version
- Scriptember 2024 – einen Monat lang feiern wir PowerShell
- Fünf Gründe für die Nutzung von PSReadLine
- Privacy Management mit PowerShell – hier kommen die wichtigsten Funktionen von Priva auf einen Blick
- Happy System Administrator Appreciation Day!