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