• Blog
  • Webinare
  • Partner
  • Support
  • Kontakt
  • DE
    • EN
ScriptRunner
  • Über uns
    • Team
    • Jobs
    • Presse
  • Warum
  • Praxisbeispiele
  • Software
    • ScriptRunner Server
    • ScriptRunner Portal
    • ScriptRunner Portal Widget
    • ScriptRunner Connectoren
    • ScriptRunner ActionPacks
  • Jetzt testen
  • Suche
  • Menü Menü
Du bist hier: Startseite1 / ScriptRunner Blog2 / News3 / Parameter-Validierung

Parameter-Validierung in PowerShell und ScriptRunner

Author: Bruno Buyck|Lesezeit: 7 Minuten Category: News, Scripting, Sicherheit

Für diejenigen unter Ihnen, die häufig (PowerShell-) Aufgaben delegieren, welche Benutzereingaben erfordern, gibt es immer einen Faktor, den Sie nicht kontrollieren können, 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.

Inhalt

  • ValidateSet-Attribut
  • ValidatePattern -Attribut
  • Fazit
Artikel: Parameter-Validierung in PowerShell und ScriptRunner - Bruno Buyck

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.

Screenshot der ScriptRunner Delegate App, gezeigt wird eine autmatisch generierte Dropdown-Liste

Abbildung 1: ScriptRunner übersetzt automatisch die im ValidateSet-Attribut enthaltenen Parameter in eine Dropdown-Liste

Wenn Sie mehr darüber erfahren möchten, wie ScriptRunner Ihre 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 Ihres Scripts, 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 Scriptausfü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, achten Sie also darauf, dass Sie die richtige Syntax verwenden. Nachstehend finden Sie einen kurzen Überblick über die in unseren Beispielen verwendete Syntax.

Anker

Anker sind Zeichen, die die Begrenzung des Ausdrucks angeben:

AnkerBeschreibung
^signalisiert den Anfang der Zeichenfolge oder Zeile
$signalisiert das Ende der Zeichenfolge oder Zeile

Platzhalter

Mit Platzhaltern beschreiben Sie, mit welchen Zeichen Ihr Suchergebnis übereinstimmen soll:

PlatzhalterBeschreibung
[a]entspricht dem Zeichen a
[a-z]entspricht einem beliebigen Zeichen im Bereich von a bis z
[^a-z]entspricht einem beliebigen Zeichen, das nicht im Bereich von a-z liegt
w oder [a-zA-Z_0-9]entspricht einem beliebigen Wortzeichen

Quantifizierer

Mit Quantifizierern können Sie angeben, wie oft die durch die Platzhalter definierten Zeichen Teil Ihres Musters sind.

Quantifizierer KlasseBeschreibung
{n,m}Mindestens n, aber nicht mehr als m Mal
+1 oder mehr Mal
*0 oder mehr Mal
?0 oder einmal

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 finden Sie den Ausdruck in seine einzelnen Teile zerlegt, um deutlicher zu machen, was geschieht:

^Anfang der Zeichenfolge
[a-z]Alle Zeichen im Bereich a-z
+1 oder mehr mal der Zeichenbereich
$Ende der Zeichenfolge

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.

Beachten Sie, dass bei PowerShell-RegEx-Ausdrücken standardmäßig die Groß-/Kleinschreibung nicht berücksichtigt wird. Wenn Sie sie case-sensitive machen möchten, ergänzen Sie „c“ in den Operatoren (z. B. -cmatch,-csplit,-creplace, wie in Abbildung 2 dargestellt).

Screenshot der PowerShell ISE: case-sensitve Regex-Validierung in PowerShell

Abbildung 2: Beispiele für die Regex-Validierung in PowerShell

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-Script definieren wir ValidatePattern wie folgt:

Param (
		[ValidatePattern(
				'^[a-z]+$' 
				) 
		]
		[string] $OnlyLetters 
	)

Wenn dieses Script 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 finden Sie einige Validierungstests (Abbildungen 3a-c):

Screenshot eines Parameter-Eingabefelds in der ScriptRunner Delegate App, die die Zeichenfolge

Abbildung 3a: Nachdem die Eingabe für $OnlyLetters validiert wurde, zeigt ScriptRunner eine Fehlerwarnung an, da die Eingabe Zahlen enthält, die durch den regulären Ausdruck verboten sind.


Screenshot eines Parameter-Eingabefelds in der ScriptRunner Delegate App, die die Zeichenfolge

Abbildung 3b: Nach der Validierung der Eingabe für $OnlyLetters validiert wurde, zeigt ScriptRunner eine Fehlerwarnung an, da die Eingabe Leerzeichen enthält, die durch den regulären Ausdruck verboten sind.


Screenshot eines Parameter-Eingabefelds in der ScriptRunner Delegate App, die die Zeichenfolge

Abbildung 3c: Nach der Validierung der Eingabe für $OnlyLetters akzeptiert ScriptRunner die Eingabe, da sie nur alphabetische Zeichen enthält

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, lassen Sie 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:

^Anfang der Zeichenkette
[u]Zeichen „u“
[-]Zeichen „-„
[a-z-]Alle Zeichen im a-z-Bereich und das ‚-‚-Zeichen
{8,13}8-13 mal den [a-z-] Bereich
$Ende der Zeichenkette

Und wie Sie in den Abbildungen 4 a-e sehen können, funktioniert die Validierung!

Screenshot eines Texteingabefelds in der ScriptRunner Delegate App, welches die Zeichenfolge

Abbildung 4a: Nachdem die Eingabe für $UserLoginName validiert wurde, zeigt ScriptRunner eine Fehlerwarnung an, da die Eingabe zu wenige Zeichen enthält.


Screenshot eines Texteingabefelds in der ScriptRunner Delegate App, das die Zeichenfolge

Abbildung 4b: Nachdem die Eingabe für $UserLoginName validiert wurde, zeigt ScriptRunner eine Fehlerwarnung an, da die Eingabezeichenfolge nicht mit „u-“ beginnt.


Screenshot eines Texteingabefelds in der ScriptRunner Delegate App, das die Zeichenfolge

Abbildung 4c: Nachdem die Eingabe für $UserLoginName validiert wurde, zeigt ScriptRunner eine Fehlerwarnung an, da die Eingabe Zahlen enthält.


Screenshot eines Texteingabefelds in der ScriptRunner Delegate App, welches die Zeichenfolge

Abbildung 4d: Nachdem die Eingabe für $UserLoginName validiert wurde, zeigt ScriptRunner eine Fehlerwarnung an, da die Eingabe das Sonderzeichen „$“ enthält.


Screenshot eines Texteingabefelds in der ScriptRunner Delegate App, welches die Zeichenfolge

Abbildung 4e: Nach der Validierung der Eingabe für $UserLoginName akzeptiert ScriptRunner die Eingabe, da sie mit den im regulären Ausdruck definierten Regeln übereinstimmt.

Fazit

Wie Sie sehen können, ist die Parameter-Validierung keine Raketenwissenschaft, wenn Sie diese Grundlagen richtig drauf haben. Mit nur geringem Zeitaufwand werden Sie 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. Einen Überblick finden Sie in dem kostenlosen Webinar So erhöhen Sie die Sicherheit im Umgang mit PowerShell-Scripten.

PowerShell Security Ebook: Alles, was Sie über PowerShell Sicherheit wissen müssen. Jetzt kostenlos herunterladen!

Weiterführende Links

  • About Functions Advanced Parameters – PowerShell | Microsoft Docs
  • About Regular Expressions – PowerShell | Microsoft Docs
  • regex-Tester und -Debugger: PHP, PCRE, Python, Golang und JavaScript
  • Webinar: So erhöhen Sie die Sicherheit im Umgang mit PowerShell-Scripten
Share this article
  • Teilen auf Facebook
  • Teilen auf Twitter
  • Teilen auf LinkedIn
  • Teilen auf Reddit
  • Per E-Mail teilen

Diese Beiträge könnten Sie auch interessieren:

Artikelbild: PowerShell kurz & gut – Buchrezension von Benedikt GräbScriptRunner Software GmbH

PowerShell kurz & gut – Buchrezension

7. April 2021
Weiterlesen
https://www.scriptrunner.com/wp-content/uploads/2021/04/buch-powershell-kurz-gut2.jpg 1000 1000 Benedikt Gräb https://www.scriptrunner.com/wp-content/uploads/2018/05/ScriptRunner_Logo_RGB-300x45.png Benedikt Gräb2021-04-07 10:00:352021-04-07 17:10:11PowerShell kurz & gut – Buchrezension
Artikel: PowerShel PSDefaultParameterValuesScriptRunner Software GmbH

PowerShell PSDefaultParameterValues

25. März 2021
Weiterlesen
https://www.scriptrunner.com/wp-content/uploads/2021/03/Article-PSDefaultParameterValues.png 449 449 Marco Kamner https://www.scriptrunner.com/wp-content/uploads/2018/05/ScriptRunner_Logo_RGB-300x45.png Marco Kamner2021-03-25 13:03:432021-03-25 13:06:38PowerShell PSDefaultParameterValues
Artikelbild: 5 PowerShell-Scripting Best PracticesScriptRunner Software GmbH

5 PowerShell Scripting Best Practices – Vom lauffähigen zum professionellen Code

10. März 2021
Weiterlesen
https://www.scriptrunner.com/wp-content/uploads/2021/03/powershell-best-practices.png 1000 1000 Philip Lorenz https://www.scriptrunner.com/wp-content/uploads/2018/05/ScriptRunner_Logo_RGB-300x45.png Philip Lorenz2021-03-10 10:00:402021-03-10 15:20:345 PowerShell Scripting Best Practices – Vom lauffähigen zum professionellen Code

Über den Autor:

Bruno Buyck

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 Buyck Workshops zur Verwaltung und Automatisierung von Systemen mit PowerShell durchgeführt. Er lässt hunderte von Skripts in Produktionsumgebungen ausführen, was zu über 34 Millionen Skriptausführungen pro Jahr führt. Er findet es fantastisch zu beweisen, dass PowerShell atemberaubend und „What the Fuck“ ist.

Neuste Beiträge

  • Artikelbild: PowerShell kurz & gut – Buchrezension von Benedikt GräbScriptRunner Software GmbHPowerShell kurz & gut – Buchrezension7. April 2021 - 10:00
  • Artikel: PowerShel PSDefaultParameterValuesScriptRunner Software GmbHPowerShell PSDefaultParameterValues25. März 2021 - 13:03
  • Artikel: ScriptRunner sponsert den PowerShell + DevOps Global Summit 2021ScriptRunner Software GmbHScriptRunner sponsert den PowerShell + DevOps Global Summit 202119. März 2021 - 10:00
  • ScriptRunner ActionPack für CitrixScriptRunner Software GmbHScriptRunner ActionPack für Citrix11. März 2021 - 11:01
  • Artikelbild: 5 PowerShell-Scripting Best PracticesScriptRunner Software GmbH5 PowerShell Scripting Best Practices – Vom lauffähigen zum professionellen Code10. März 2021 - 10:00

Produkt

  • ScriptRunner Plattform
  • ScriptRunner ActionPacks
  • ScriptRunner Server
  • ScriptRunner Portal
  • ScriptRunner Portal Widget
  • ScriptRunner Apps
  • ScriptRunner Connectoren
  • Lizenzierung
Jetzt kostenfrei testen

Lösungen

  • IT-Administratoren
  • IT-Teamleiter
  • Use Cases

Ressourcen

  • Blog
  • Dokumentation
  • Knowledge Base
  • Webinare
  • PowerShell-Lexicon
  • PowerShell-Poster
  • PowerShell Security Ebook

Unternehmen

  • Über uns
  • Team
  • Jobs
  • Presse
  • Referenzen
  • Partner

Kontakt

ScriptRunner Software GmbH
Ludwig-Erhard-Straße 2
76275 Ettlingen
Deutschland

T: +49 7243 20715-0
M: info(at)scriptrunner.com

Demo vereinbaren
© ScriptRunner Software GmbH is a subsidiary of AppSphere AG
  • LinkedIn
  • Xing
  • Twitter
  • Facebook
  • Youtube
  • Impressum
  • Datenschutz
  • Newsletter
Nach oben scrollen