2011-10-14 25 views
1

我在powershell中運行以下腳本,但是我似乎無法檢索任何PRINT語句或錯誤消息?如何在PowerShell會話中捕獲所有輸出?如何通過Powershell調用存儲過程時檢索OUTPUT語句

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$SqlConnection.ConnectionString = "Server=$sql_server;Database=$sql_db;user ID=$sql_usr;password=$sql_pwd" 
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
$SqlCmd.Connection = $SqlConnection 
$SqlCmd.CommandText = "$storedProc" 
$SqlCmd.CommandType = [System.Data.CommandType]::StoredProcedure 
$SqlCmd.Parameters.Add("@COBDate", "$dateVariable") 
$handler = [System.Data.SqlClient.SqlInfoMessageEventHandler] {param($sender, $event) Write-Host $event.Message }; 
$SqlConnection.add_InfoMessage($handler); 
$SqlConnection.FireInfoMessageEventOnUserErrors = $true; 
$SqlConnection.Open() 
$SqlCmd.ExecuteNonQuery() 
$SqlCmd.Parameters.value 
$SqlConnection.Close() 

回答

5

我實現了事件處理程序的方法如下:

#Method 1 use hidden method 
$Sqlconnection.FireInfoMessageEventOnUserErrors=$true 
#... 
$handler = [System.Data.SqlClient.SqlInfoMessageEventHandler] {Write-Host "$($_)"} 
$Sqlconnection.add_InfoMessage($handler) 
#OR Method 2 use Register-ObjecEvent 
Register-ObjectEvent -InputObject $SqlConnection-EventName InfoMessage -Action { Write-Host " $($Event.SourceEventArgs)" } -SupportEvent 
#... 
$SqlConnection.Open() 
+0

'FireInfoMessageEventOnUserErrors'似乎劫持錯誤消息和不起泡起來給調用者。幸運的是'Register-ObjectEvent'方法完美地工作,謝謝! – gvee

相關問題