【问题标题】:powershell:how to catch the error cause by invoke-sqlcmd?powershell:如何通过invoke-sqlcmd捕获错误原因?
【发布时间】:2011-06-13 13:38:03
【问题描述】:

如果有任何问题,我想捕获调用 SQL。但是当我运行以下命令时,如果 $sql 无效,则无法捕获。如何捕捉这个异常?

 try {
     Invoke-Sqlcmd -Query $sql -ServerInstance t1 -database db -QueryTimeout 65535 -ErrorAction 'Stop'
   } catch{
      "error when running sql $sql"
   }

【问题讨论】:

    标签: powershell try-catch


    【解决方案1】:

    我没有问题,使用名为 test.ps1 的脚本

    add-pssnapin SqlServerCmdletSnapin100
    get-host
    $sql = "selects * from syscomments"
    $server = ""
    $database = ""
    $username = ""
    $password = ""
    try {
        Invoke-Sqlcmd -Query $sql -ServerInstance $server -database $database -QueryTimeout 65535 -ErrorAction 'Stop' -username $username -password $password
    } catch {
      "error when running sql $sql"
      Write-Host($error)
    }
    

    还有输出

    PS C:\> .\test.ps1
    Name             : ConsoleHost
    Version          : 2.0
    InstanceId       : 9ac019da-97bd-45d1-bfa5-65fb4d376dc6
    UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
    CurrentCulture   : en-AU
    CurrentUICulture : en-US
    PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
    IsRunspacePushed : False
    Runspace         : System.Management.Automation.Runspaces.LocalRunspace
    
    error when running sql selects * from syscomments
    
    Incorrect syntax near '*'.
    

    你用的是什么输入参数,你用的是powershell 1还是2?

    【讨论】:

    • $error 是当前运行空间中所有错误的列表。在 catch 块中,您想使用 $_ 查看当前错误。
    • 对不起,我再次检查了我的代码,它工作正常,我必须在测试过程中出错。
    • 我需要补充一下,如果你不使用-ErrorAction stop而是使用Continue或者SilentlyContinue,那么异常不会被捕获。我的测试是 PS V5.1 和 SQL Server 2016
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 2021-12-17
    • 2018-07-15
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多