Netz-Weise Logo

Weisheiten - der Netz-Weise Blog

Hier finden Sie Tipps und Tricks für vor, während und nach der Schulung.
2 Minuten Lesezeit (495 Worte)

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.

Zufällige (Komplexe) Kennwörter erzeugen mit Power...
Suchen im Windows 10 Startmenü findet keine instal...

Ähnliche Beiträge

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Bereits registriert? Hier einloggen
Sonntag, 19. Mai 2024

Sicherheitscode (Captcha)