空参数的Powershell错误处理

时间:2018-09-06 07:53:47

标签: powershell error-handling

这是我从excel电子表格中调用的一个小脚本:

Param (
    [Int] $ID,
    [String] $server,
    [String] $db,
    [String] $uid,
    [String] $pw,
    [String] $Navn,
    [String] $Path
)
Try
{
Add-Type -Path $Path

foreach($i in [BrReader2.BrReader]::Main($ID, $uid, $pw, $db, $server)){if($i.Key -eq $Navn){$Data = $i}}

[BrReader2.BrReader]::WriteToTemporaryTable($Data, $ID, $uid, $pw, $db, $server)
}
Catch
{
$ErrorMessage = $_.Exception.Message
Write-Host $ErrorMessage
Read-Host -Prompt "Press Enter to exit"
}

除一件小事外,它的效果通常都很好。如果由于某种原因以错误的方式输入了其中一个参数(如参数完全为空),则该参数将在那里失败并且不会写出错误消息。控制台窗口将很快快速出现并再次消失,用户可能不会意识到自己做错了什么。

给出错误的路径是可以的,它仍然会进入try / catch块并将适当的错误消息写入控制台。不提供路径不会使控制台窗口保持打开状态,因此用户可以查看出了什么问题。

我需要将'Param(...')部分放在脚本的顶部,所以我不能将其放在try / catch块中。有什么办法可以写出错误消息并如果其中一个参数失败,保持控制台窗口打开?

我对Powershell的经验不是很丰富,因此可能缺少一些明显的东西。

1 个答案:

答案 0 :(得分:1)

如果要设置参数,可以将其设为必需。

如果它们应包含某个值,您也可以验证它们。

例如:

Param (
    [Parameter(Mandatory = $true)]
    [ValidateRange(10,99)] 
    [Int] $ID,

    [Parameter(Mandatory = $true)]
    [String] $server,

    [Parameter(Mandatory = $true)]
    [ValidateSet("sql01.contoso.local","sql02.contoso.local")] 
    [String] $db,

    [Parameter(Mandatory = $true)]
    [String] $uid,

    [Parameter(Mandatory = $true)]
    [String] $pw,

    [Parameter(Mandatory = $true)]
    [String] $Navn,

    [Parameter(Mandatory = $true)]
    [ValidateScript({Test-Path $_ -PathType 'Container'})] 
    [String] $Path
)