这是我从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的经验不是很丰富,因此可能缺少一些明显的东西。
答案 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
)