一個簡單的問題是否有可能讓ValidateScript
在測試失敗時生成自定義錯誤消息,比如說說Test-Path
?PowerShell自定義錯誤參數
取而代之的是:
測試 - 文件夾:無法驗證的參數「文件夾」的說法。值爲「blabla」的參數的「Test-Path $ _ -Path Type Container」驗證腳本未返回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:
我發現一個blog這個解決辦法,但問題是,它會產生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"
}
有同樣的問題,並找到這篇文章。我也發現了你所說的解決方法2.不像你,雖然我只有一個錯誤。也許PowerShell版本是其中的一部分。 'M:\ Scripts \ Move-MaintenanceData.ps1:無法驗證參數'Source'的參數。 C:\ werwer似乎不是一個有效的文件夾。「# – Matt 2015-10-26 19:24:21
你說得對,我現在沒有這個問題了。所以它必須取決於一個使用的PowerShell版本。問題解決了:) – DarkLite1 2015-11-04 07:21:33