Erro personalizado do PowerShell a partir de parâmetros
Uma pergunta simples, é possível terValidateScript
gerar uma mensagem de erro personalizada quando um teste falhar, como, por exemplo,Test-Path
?
Em vez disso:
Pasta de teste: Não é possível validar o argumento no parâmetro 'Pasta'. O script de validação "Test-Path $ _ -Path Type Container" para o argumento com o valor "blabla" não retornou um resultado de True. Determine por que o script de validação falhou e tente a vírgula e novamente.
Seria bom que isso fosse relatado no lugar$Error
variável:
A 'Pasta' não foi encontrada, talvez haja problemas de rede?
Código:
Function Test-Folder {
Param (
[parameter(Mandatory=$true)]
[ValidateScript({Test-Path $_ -PathType Container})]
[String]$Folder
)
Write-Host "The folder is: $Folder"
}
Solução alternativa 1:
Eu poderia remover oMandatory=$true
e mude como abaixo. Mas isso não me dá o corretoGet-Help
sintaxe e não faz oTest-Path
validação porque verifica apenas se o 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"
}
Solução 2:
Encontrei esta solução alternativa em umblogue, mas o problema é que ele gera 2 erros em vez de um.
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"
}
Solução alternativa 3:
Eu também poderia tentar deixar mais claro adicionando uma seção de comentários. No entanto, esse ainda não é o resultado desejado, pois o erro precisa ser legível para os usuários finais.
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"
}