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"
}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage