Error personalizado de PowerShell de parámetros

Una pregunta simple, ¿es posible tenerValidateScript generar un mensaje de error personalizado cuando falla una prueba, como decirTest-Path?

En lugar de esto:

Test-Folder: no se puede validar el argumento en el parámetro 'Carpeta'. El script de validación "Test-Path $ _ -Path Type Container" para el argumento con el valor "blabla" no devolvió un resultado de True. Determine por qué falló el script de validación y luego intente con la coma y nuevamente.

Sería bueno que informe esto en su lugar en el$Error variable:

No se encuentra la 'Carpeta', ¿tal vez hay problemas de red?

Código:

Function Test-Folder {
    Param (
        [parameter(Mandatory=$true)]
        [ValidateScript({Test-Path $_ -PathType Container})]
        [String]$Folder
    )
    Write-Host "The folder is: $Folder"
}

Solución 1:

Podría eliminar elMandatory=$true y cámbielo de la siguiente manera. Pero esto no me da lo correctoGet-Help sintaxis y no hace elTest-Path validación porque solo verifica si el parámetro está presente.

Function Test-Folder {
    Param (
        [parameter()]
        [String]$Folder = $(throw "The $_ is not found, maybe there are network issues?")
    )
    Write-Host "The folder is: $Folder"
}

Solución 2:

Encontré esta solución en unBlog, pero el problema es que genera 2 errores en lugar de uno.

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

Solución 3:

También podría intentar aclararlo agregando una sección de comentarios. Sin embargo, este aún no es el resultado deseado, ya que el error debe ser legible para los usuarios finales.

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

Respuestas a la pregunta(3)

Su respuesta a la pregunta