Возможно ли, чтобы ValidateScript
генерировал пользовательское сообщение об ошибке при неудачном Test-Path
теста, как, например, 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
, потому что он только проверяет 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:
Я нашел этот обходной путь в сообщении в блоге, но проблема в том, что он генерирует две ошибки вместо одной.
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"
}