[英]Catching permission errors with invoke-sqlcmd and 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
。
我想你可以做的是:在你的 cmdlet 的頂部設置: $ErrorActionPreference = "Continue"
然后讓-ErrorAction stop
在調用invoke-sql
時停止,這應該會導致它落入catch
但繼續表現腳本 rest 中的continue
行為。
如果你想離開-ErrorAction continue
的另一種選擇是也設置-ErrorVariable invokeSqlError
然后檢查該變量是否包含一個值。 如果它確實發生了錯誤。
就像是:
if ($invokeSqlError){
write-output "Error occured $invokeSqlError"
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.