PowerShell Custom ошибка из параметров

Простой вопрос, возможно ли иметьValidateScript генерировать пользовательское сообщение об ошибке при сбое теста, например, скажемTest-Path?

Вместо этого:

Test-Folder: невозможно проверить аргумент параметра «Папка». Сценарий проверки «Test-Path $ _ -Path Type Container» для аргумента со значением «blabla» не вернул результат True. Определите причину сбоя сценария проверки, а затем повторите запятую.

Было бы неплохо сообщить об этом вместо этого в$Error переменная:

Папка не найдена, возможно, есть проблемы с сетью?

Код:

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

Обходной путь 1:

Я мог бы удалитьMandatory=$true и измените его, как показано ниже. Но это не дает мне правильногоGet-Help синтаксис и не делаетTest-Path проверка, потому что он только проверяет, присутствует ли параметр.

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

Обходной путь 2:

Я нашел этот обходной путь наблог, но проблема в том, что он генерирует 2 ошибки вместо одной.

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

Обходной путь 3:

Я также мог бы попытаться прояснить ситуацию, добавив раздел комментариев. Однако это все еще не желаемый результат, так как ошибка должна быть доступной для чтения конечным пользователям.

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

Ответы на вопрос(3)

Ваш ответ на вопрос