powershell:如何通过调用sqlcmd捕获错误原因?

powershell:如何通过调用sqlcmd捕获错误原因?,powershell,try-catch,Powershell,Try Catch,如果出现任何错误,我希望捕获调用sql。但是当我运行以下命令时,如果$sql无效,则无法捕获它。如何捕获此异常 try { Invoke-Sqlcmd -Query $sql -ServerInstance t1 -database db -QueryTimeout 65535 -ErrorAction 'Stop' } catch{ "error when running sql $sql" } 我没有问题,使用一个名为test.ps1的脚本 add-ps

如果出现任何错误,我希望捕获调用sql。但是当我运行以下命令时,如果$sql无效,则无法捕获它。如何捕获此异常

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

我没有问题,使用一个名为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块中,您要使用
$\uuuuu
查看当前错误。很抱歉,我再次检查了我的代码,它正常工作,我必须在测试过程中犯一些错误。如果您不使用-ErrorAction stop,而是使用Continue或SilentlyContinue,我需要添加,则不会捕获异常。我的测试是PS V5.1和SQL Server 2016