Tipps

Mit [ValidateScript()] Powershell-Parameter prüfen und eine benutzerdefinierte Fehlermeldung ausgeben

Powershell stellt mit den Validate-Schlüsselwörtern eine großartige Möglichkeit zur Verfügung, Benutzereingaben in Skripten zu prüfen, und den Code dabei übersichtlich zu halten. Hierfür stehen diverse [Validate]-Attribute zur Verfügung. Folgendes Beispiel prüft z.B. ob ein Parameter sich innerhalb eines bestimmten Wertebereichs befindet:

param(
   [ValidateRange(1,6)]
   [int]$Wuerfelergebnis
)

Rufen Sie den Parameter jetzt z.B. mit 7 auf, erhalten Sie folgende Meldung und das Skript bricht ab:

test : Das Argument für den Parameter "Wuerfelergebnis" kann nicht überprüft werden. Das 7-Argument ist größer als der maximal zulässige Bereich von 6. Geben Sie ein Argument an, das kleiner oder gleich 6
ist, und führen Sie dann den Befehl erneut aus.

Es gibt eine ganze Reihe von Validierungs-Attributen. Eine vollständige Auflistung finden Sie, wenn Sie in der Powershell 

get-help about_Functions_Advanced_Param -ShowWindow

eingeben. Falls Sie kein passendes Validierungsattribut finden, ist aber noch nicht alles verloren, denn dann können Sie immer noch [ValidateScript()] verwenden. ValidateScript führt ein Skript zur Überprüfung aus, dass True zurück geben muß, damit der Parameter als gültig angesehen wird. Um Beispielsweise die Existenz eines übergebenen Ordner zu prüfen, verwenden Sie folgenden Code:

[ValidateScript({ Test-Path -Path $_ -PathType Container } )
[string]$path

Test-Path liefert True zurück, wenn der übergebene Pfad ein gültiger Ordner ist, und False, wenn der Ordner nicht existiert. Der Parameter selbst wird über die anonyme Variable $_ angegeben, da er erst nach er Prüfung erstellt wird. Leider ist die Fehlermeldung von [ValidateSkript()] für den Endbenutzer sehr nichtssagend: 

test : Das Argument für den Parameter "Path" kann nicht überprüft werden. Das Validierungsskript "Test-Path -Path $_ -PathType Container" für das Argument mit dem Wert "c:\murks" hat nicht "True" zurückgegeben. Ermitteln Sie, weshalb beim Validierungsskript ein Fehler aufgetreten ist, und führen Sie den Befehl erneut aus.

Allerdings gibt es einen Trick, um doch noch zu einer Benutzerdefinierten Fehlermeldung zu kommen. Wenn Sie die Ausgabe von Test-Path in einer IF-Abfrage abfangen, können Sie die Fehlerfall selbst behandeln. Leider bringt es nichts, einfach eine Fehlermeldung auszugeben, da diese vom IF als True ausgewertet wird anstatt zu False:

[ValidateScript({ If ( Test-Path -Path $_ -PathType Leaf )
                      { $true }
                  Else { "Es ist ein Fehler aufgetreten" }
})]

Die Fehlermeldung bleibt die gleich wie oben. Sie können allerdings das Skript vorher selber mit einem terminierenden Fehler abbrechen lassen, so dass die von Powershell generierte Fehlermeldung gar nicht mehr aufgerufen wird. Einen Benutzerdefinierten Fehler können Sie mit dem Befehl THROW generieren. Das fertige Prüfskript sieht dann so aus:

[ValidateScript({ If ( Test-Path -Path $_ -PathType Container )
                              { $true }
                           Else { Throw "$_ is not a valid Directory" }
})]

Ab Powershell 3.0 können Sie die Validierungsattribute sogar an Variablen im Code durchführen, während das vorher nur im param-Block möglich war.


 1667,    22  Mär  2017 ,   Tipp
Holger Voges

  E-Mail Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!

Holger Voges ist Inhaber der Firma Netz-Weise IT-Training und seit 1999 als Trainer und Consultant tätig. Als Allrounder in den Bereichen Windows Server, Active Directory, SQL Server, Hyper-V und Windows PowerShell, hat er in der Vergangenheit zahlreiche Einsätze als Consultant in namenhaften Firmen absolviert und so neben der Theorie auch umfangreiche praktische Erfahrungen gesammelt.

 

Schnellkontakt

bitte Ihre E-Mail eintragen

Netz-Weise

Das Haupt-Tätigkeitsfeld von Netz-Weise sind Schulungen für Profis. Bei uns bekommen Sie das Programm für den fortgeschrittenen Praktiker, der die Tiefen des Systems ausloten möchte genauso wie Standard-Schulungen.

So erreichen Sie uns:

Netz-Weise
IT-Training und Beratung
Freundallee 13a
30173 Hannover
 
Tel: (0511) 165 925-0
Fax: (0511) 165 925-99
email: info(at)netz-weise.de
 

Newsletter bestellen

Das Wichtigste kompakt ins E-Mailfach!