我在我的powershell脚本中具有以下代码以验证用户输入(脚本中的第一个位置参数):
function validatePath {
Param
(
[Parameter(Mandatory=$true)]
[ValidateScript({
If ($_ -match "^([a-z]:\(?:[-\w\.\d])*)") {
$True
} Else {
Write-Host "Please enter a valid path,$_ is not a valid path."
Write-debug $_.Exception
Break
}
})]
[string]$filePath
)
Process
{
Write-Host "The path is "$filePath
}
}
validatePath -filePath $args[0]
我的问题是,当前验证失败时,代码进入其他块并命中断裂,而不是阻止整个脚本继续运行,而是进入下一个块,一切都将继续,并且更多的错误出现了。
问题是,我如何修改代码,以便当验证无法匹配正则态度时,它将发出适当的错误消息并阻止整个脚本运行?
将脚本中的 $ErrorActionPreference
变量设置为 Stop
:
$ErrorActionPreference = 'Stop'
function validatePath {
Param
(
[Parameter(Mandatory=$true)]
[ValidateScript({
If ($_ -match "^([a-z]:\(?:[-\w\.\d])*)") {
$True
} Else {
Write-Host "Please enter a valid path,$_ is not a valid path."
Write-debug $_.Exception
Break
}
})]
[string]$filePath
)
Process
{
Write-Host "The path is "$filePath
}
}
validatePath -filePath $args[0]
Do-MoreStuff # this won't execute if parameter validation fails in the previous call
有关更多信息,请参见about_Preference_Variables
帮助文件
使用"退出"来停止整个脚本。将任何消息放在"退出"之前。