簡體   English   中英

從Powershell調用后,將存儲過程的輸出存儲在文件中

[英]Storing output of Stored Procedure in file after calling it from Powershell

我試圖在遠程服務器上調用SP(Ola的維護腳本!)(代碼的一部分工作),SP的輸出是DBCC CHECKDB的結果(因此它在Message選項卡中)。

我試圖將一些代碼組合在一起以將此Message輸出捕獲到遠程服務器上的文件中,但是文件沒有被創建,盡管SP完成得很好。

$OutputFile = "\\XXX\E$\SQLAdmin\DatabaseCheckDB\ScriptOutput\ScriptOutput.txt"

$handler = [System.Data.SqlClient.SqlInfoMessageEventHandler] {param($sender, $event) Out-File -filepath $OutputFile -inputobject $event.Message };

 $SqlConnection.add_InfoMessage($handler); 
 $SqlConnection.FireInfoMessageEventOnUserErrors = $true;
 $SqlConnection = new-Object System.Data.SqlClient.SqlConnection("Server=XXX;DataBase=master;Integrated Security=SSPI")
 $SqlConnection.Open() | Out-Null

$cmd = new-Object System.Data.SqlClient.SqlCommand("dbo.DatabaseIntegrityCheck", $SqlConnection)
$cmd.CommandType = [System.Data.CommandType]'StoredProcedure'

$cmd.Parameters.Add("@Databases","ALL_DATABASES") | Out-Null

$cmd.ExecuteNonQuery() | Out-Null

$SqlConnection.Close()

誰能看到我在這里做錯了什么? 提前致謝!

您是否安裝了SQL Powershell模塊(sqlps)? 如果是這樣,那么您可以使用它並將Verbose流(包含來自SQL的打印消息)的輸出傳遞到您的文件。

Invoke-Sqlcmd -Query 'DBCC CHECKDB' `
    -ServerInstance '(local)' `
    -Database 'tempdb' `
    -Verbose 4>&1 |
        Out-File c:\temp\test.txt

如果這不是一個選項,那么我認為我已經在您的原始代碼中發現了問題 - 您連接了InfoMessage事件,但隨后您繼續創建一個全新的SqlConnection。 這個新的SqlConnection上沒有事件處理程序,因此不會響應任何打印的消息。

嘗試更換

$SqlConnection.add_InfoMessage($handler); 
$SqlConnection.FireInfoMessageEventOnUserErrors = $true;
$SqlConnection = new-Object System.Data.SqlClient.SqlConnection("Server=XXX;DataBase=master;Integrated Security=SSPI")

$SqlConnection = new-Object System.Data.SqlClient.SqlConnection("Server=XXX;DataBase=master;Integrated Security=SSPI")
$SqlConnection.add_InfoMessage($handler); 
$SqlConnection.FireInfoMessageEventOnUserErrors = $true;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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