簡體   English   中英

使用 invoke-sqlcmd 和 powershell 捕獲權限錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM