sql-server - 使用 invoke-sqlcmd 和 powershell 捕获权限错误
问题描述
我正在运行以下 PowerShell 脚本,令我印象深刻的是它没有捕获特定于权限的错误。我知道错误操作已设置为继续,这是我想要的,但是我想跟踪此类错误,但不要让它们终止我正在运行的循环。
$in_sql_deployment_instance = 'SQL_SERVER'
$target_dba_database = 'TEST'
$query = "RAISERROR (15600,-1,-1, 'mysp_CreateCustomer') WITH log; "
try{
$null = invoke-sqlcmd -ServerInstance "$in_sql_deployment_instance" -Query $query -Database $target_dba_database -Querytimeout 60 -OutputSqlErrors $true -ConnectionTimeout 10 -ErrorAction Continue
}
catch
{
$error_message = $_.Exception.Message
write-output "Error occured $error_message"
}
我在 Ps 控制台上返回错误,但似乎我无法捕获错误等或存储在变量中。
invoke-sqlcmd : Only System Administrator can specify WITH LOG option for RAISERROR command.
At line:2 char:14
+ ... $null = invoke-sqlcmd -ServerInstance "$in_sql_deployment_instanc ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Invoke-Sqlcmd], SqlPowerShellSqlExecutionException
+ FullyQualifiedErrorId : SqlError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand
解决方案
据我所知,为了执行 catch,您需要将您的设置-ErrorAction
为Stop
.
我想你可以做的是: set:$ErrorActionPreference = "Continue"
在你的 cmdlet 的顶部,然后-ErrorAction stop
调用 to invoke-sql
,这应该会导致它掉入,catch
但继续与continue
脚本其余部分中的行为一致。
如果您想离开,另一个选择-ErrorAction continue
是也设置-ErrorVariable invokeSqlError
然后检查该变量是否包含值。如果确实发生了错误。
就像是:
if ($invokeSqlError){
write-output "Error occured $invokeSqlError"
}
推荐阅读
- oracle - 如何在 Oracle Apex 4.2 中上传多个文件
- c# - CefSharp - 是否可以将 IFrame.ViewSource() 保存到特定文件名中?
- asp.net-mvc - 将Web API数据加载到.NET Core App中“查看”页面上的“Slug”?
- html - 使用 css 更改悬停时的 src 图像
- wpf - 如何更改 ComboBox 的皮肤?
- centos - 在 KVM 主机上使用 iptables 设置 nat 时,无法路由到设置为在主机启动时自动启动的 VM
- javascript - 分组条形图下的对齐标签
- sql - SQL - 使用两个表中的属性进行选择
- c++ - g++ 编译器没有为未定义的方法生成错误/警告
- docker - no matching manifest for windows/amd64 10.0.16299 in the manifest list entries error on pulling hello-world image