Una domanda semplice, è possibile che ValidateScript
generi un messaggio di errore personalizzato quando un test fallisce, ad esempio Test-Path
?PowerShell Errore personalizzato dai parametri
Invece di questo:
Test-Folder: non può convalidare l'argomento del parametro 'Cartella'. Lo script di convalida "Test-Path $ _ -Path Type Container" per l'argomento con valore "blabla" non ha restituito un risultato True. Determina perché lo script di convalida non è riuscito, quindi prova la virgola e di nuovo.
Sarebbe bello avere segnalare questa invece nella variabile $Error
:
Il 'Cartella' non viene trovato, forse ci sono problemi di rete?
Codice:
Function Test-Folder {
Param (
[parameter(Mandatory=$true)]
[ValidateScript({Test-Path $_ -PathType Container})]
[String]$Folder
)
Write-Host "The folder is: $Folder"
}
Soluzione 1:
ho potuto togliere il Mandatory=$true
e cambiare come qui sotto. Ma questo non mi dà la sintassi corretta Get-Help
e non esegue la convalida Test-Path
perché controlla solo se il parametro è presente.
Function Test-Folder {
Param (
[parameter()]
[String]$Folder = $(throw "The $_ is not found, maybe there are network issues?")
)
Write-Host "The folder is: $Folder"
}
Soluzione 2:
ho trovato questa soluzione su un blog, ma il problema è che genera 2 errori invece di 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"
}
Soluzione 3:
Potrei anche provare a renderlo più chiaro con l'aggiunta di una sezione di commento. Tuttavia, questo non è ancora il risultato desiderato in quanto l'errore deve essere leggibile per gli utenti finali.
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"
}
Aveva lo stesso problema e ho trovato questo post. Ho anche trovato quello che chiami soluzione 2. Diversamente da te, anche se ho ricevuto solo un errore. Forse la versione di PowerShell ha un ruolo in questo. 'M: \ Scripts \ Move-MaintenanceData.ps1: Impossibile validare l'argomento sul parametro 'Origine'. C: \ werwer non sembra essere una cartella valida. – Matt
Hai ragione, non ho più questo problema ora. Quindi deve dipendere dalla versione di PowerShell utilizzata. Problema risolto :) – DarkLite1