Proste pytanie, czy możliwe jest wygenerowanie niestandardowego komunikatu o błędzie, gdy test się nie powiedzie, np. Test-Path
?Błąd niestandardowy PowerShell od parametrów
Zamiast tego:
Test-Folder: Nie można zweryfikować tezę o parametrze 'Folder'. Skrypt sprawdzania poprawności "Test-Path $ _ -Path Type Container" dla argumentu o wartości "blabla" nie zwrócił wyniku True. Określ, dlaczego skrypt sprawdzania poprawności nie powiódł się, a następnie spróbuj ponownie przecinać i ponownie.
Byłoby miło mieć to zgłosić to zamiast w zmiennej $Error
:
do „Folder” nie zostanie znaleziony, może są problemy z siecią?
Kod:
Function Test-Folder {
Param (
[parameter(Mandatory=$true)]
[ValidateScript({Test-Path $_ -PathType Container})]
[String]$Folder
)
Write-Host "The folder is: $Folder"
}
Obejście 1:
mogę usunąć Mandatory=$true
i zmieniać go, jak poniżej. Ale to nie daje mi prawidłowej składni i nie sprawdza poprawności , ponieważ sprawdza tylko, czy parametr jest obecny.
Function Test-Folder {
Param (
[parameter()]
[String]$Folder = $(throw "The $_ is not found, maybe there are network issues?")
)
Write-Host "The folder is: $Folder"
}
Obejście 2:
znalazłem to obejście na blog, ale problemem jest to, że generuje 2 błędy zamiast jednego.
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"
}
Rozwiązanie 3:
Mógłbym także spróbować uczynić go bardziej jasne, dodając sekcję komentarz. Jednak nadal nie jest to pożądany wynik, ponieważ błąd musi być czytelny dla użytkowników końcowych.
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"
}
Miałem ten sam problem i znalazłem ten post. Znalazłem także to, co nazywasz obejściem 2. W przeciwieństwie do ciebie, dostałem tylko jeden błąd. Być może wersja PowerShell odgrywa w tym rolę. 'M: \ Scripts \ Move-MaintenanceData.ps1: Nie można sprawdzić poprawności argumentu parametru" Źródło ". C: \ werwer nie wydaje się być prawidłowym folderem. " – Matt
Masz rację, nie mam już tego problemu. Musi więc zależeć od wersji PowerShell, której używa. Problem rozwiązany :) – DarkLite1