调用用户定义的函数时无法捕获 Powershell 中的非终止错误

unable to catch non terminating errors in powershell when calling user defined function

我有一个连接到数据库并执行查询的用户定义函数,它将在循环中调用以在多个数据库上执行。如果数据库服务器报告了任何错误,脚本会在控制台上报告错误并继续执行而不会终止,这是预期的。但是我想将该错误保存到一个变量中,并将其写入文件或保存到数据库中。

下面是示例代码:(不完整...)

function sqlCon($db, $sqlcmd)
{
    $connString = "Server='server_name';Database='$db';Integrated Security=sspi"
    $sqlConnect = New-Object System.Data.SqlClient.SqlConnection $connString
    $sqlConnect.Open()
    $sqlCommand = $sqlConnect.CreateCommand()
    $sqlCommand.CommandText = $sqlcmd
    $sqlCommand.ExecuteNonQuery() | Out-Null
    $sqlConnect.Close()      
    }
}

foreach($db in $databases){
   try{
    $sqlcmd = " use $($db);
          <<some sql query which updates or deletes>>"  
    sqlCon $db $sqlcmd
    #here i'm trying to catch non terminating errors but below statment never satisfies even 
    #i have errors while calling above function. Not sure if i'm missing anything here...
    if(-not($?)){
        throw "an error occured while executing query on $($db)."
    }   
       }
  catch{
    write-host "use this info to log into file or database." 
}
}

注意:我使用的是 powershell V2,但 powershell V3 中的任何选项也适用于我。

sqlCon函数中添加一个CmdletBinding attribute并使用-ErrorVariable公共参数:

function sqlCon
{
    [CmdletBinding()]
    param([string]$db, [string]$sqlcmd)

    # ...      
}

foreach($db in $databases){
    sqlCon -db $db -sqlcmd $sqlcmd -ErrorVariable sqlErrors
    if($sqlErrors.Count -gt 0){
        # nonterminating errors were written, log items in $sqlErrors here 
    }
}