【发布时间】:2020-05-23 00:06:00
【问题描述】:
我正在尝试仅捕获 PowerShell 5.1 脚本中的超时错误。错误打印出执行超时,但是当我打印出错误名称时,它返回[Microsoft.SqlServer.Management.PowerShell.SqlPowerShellSqlExecutionException]。这会捕获超时错误,但也会捕获其他错误。有没有办法只指定超时错误?
try
{
$results1 = Invoke-Sqlcmd -Query $query -ConnectionString $connectionString
}
Catch [Microsoft.SqlServer.Management.PowerShell.SqlPowerShellSqlExecutionException]
{
Write-Output "Timeout error. Try again"
}
没有catch的错误
Invoke-Sqlcmd:执行超时已过期。在操作完成之前超时时间已过或服务器没有响应。
【问题讨论】:
-
如果所有错误都返回相同的错误类型,我不知道如何让 Catch 识别它。可能能够使用扩展的错误信息和字符串解析将它们拆分在 catch 中,但这非常笨拙。我有兴趣看看是否有更好的方法。
-
探索您的 $Error[0] 变量以获取您可以评估的特定内容:$Error[0].CategoryInfo.Category、$Error[0].CategoryInfo.Reason 等。使用 Get-有 $Error[0] 的成员可帮助探索。你会发现一些独特的东西。一旦你这样做了,在你的 Catch 块中放置一个 If 语句,条件是有意义的。
-
尝试添加
-ErrorAction Stop使错误成为终止错误。此外,添加另一个Catch {}块(不要指定错误类型)来处理发生的任何其他终止错误。
标签: powershell exception timeout powershell-5.0 invoke-sqlcmd