PowerShell Benutzerdefinierter Fehler von Parametern
Eine einfache Frage, ist es möglich, @ zu habValidateScript
generiere eine benutzerdefinierte Fehlermeldung, wenn ein Test fehlschlägt, wie zBTest-Path
?
An Stelle von
Test-Folder: Das Argument für den Parameter 'Folder' kann nicht validiert werden. Das Validierungsskript "Test-Path $ _ -Path Type Container" für das Argument mit dem Wert "blabla" hat kein Ergebnis von True zurückgegeben. Stellen Sie fest, warum das Überprüfungsskript fehlgeschlagen ist, und versuchen Sie es mit dem Komma und noch einmal.
Es wäre schön, wenn es dies stattdessen im @ melde$Error
variable:
Der 'Ordner' wurde nicht gefunden, vielleicht gibt es Netzwerkprobleme?
Code
Function Test-Folder {
Param (
[parameter(Mandatory=$true)]
[ValidateScript({Test-Path $_ -PathType Container})]
[String]$Folder
)
Write-Host "The folder is: $Folder"
}
Abhilfe 1:
Ich könnte das @ entfernMandatory=$true
und ändere es wie folgt. Aber das gibt mir nicht das richtigeGet-Help
Syntax und tut das @ nicTest-Path
Validierung, da nur geprüft wird, ob der Parameter vorhanden ist.
Function Test-Folder {
Param (
[parameter()]
[String]$Folder = $(throw "The $_ is not found, maybe there are network issues?")
)
Write-Host "The folder is: $Folder"
}
Abhilfe 2:
Ich habe diese Problemumgehung auf einem @ gefunde blog, aber das Problem ist, dass es 2 Fehler anstelle von einem erzeugt.
Function Test-Folder {
Param (
[parameter(Mandatory=$true)]
[ValidateScript({
if (Test-Path $_ -PathType Container) {$true}
else {Throw "The $_ is not found, maybe there are network issues?"}})]
[String]$Folder
)
Write-Host "The folder is: $Folder"
}
Abhilfe 3:
I Könnte auch versuchen, es klarer zu machen, indem Sie einen Kommentarabschnitt hinzufügen. Dies ist jedoch immer noch nicht das gewünschte Ergebnis, da der Fehler für Endbenutzer lesbar sein muss.
Function Test-Folder {
Param (
[parameter(Mandatory=$true)]
[ValidateScript({
# The folder is not found, maybe there are network issues?
Test-Path $_ -PathType Container})]
[String]$Folder
)
Write-Host "The folder is: $Folder"
}