如何从Powershell将SSMS事件日志捕获到文件中?

时间:2018-01-23 03:34:30

标签: sql-server powershell

使用 Powershell 。我正在调用包含批量插入语句的存储过程。现在我想将insert语句的事件日志(成功消息和错误)捕获到文件中,如。

(1 row(s) affected).
Msg 8146, Level 16, State 1, Procedure test, Line 0 [Batch Start Line 0]
Procedure test has no parameters and arguments were supplied.

我试过这个,但它不起作用。执行发生,但文件加载为空。

$conn = New-Object System.Data.SqlClient.SqlConnection  SqlConnection
$conn.ConnectionString = "Server=$server;Database=$databaseName;User=$userName;password=$password;trusted_connection=true;" # set the connection string
$conn.Open();
$cmd = $conn.CreateCommand(); 

Invoke-Sqlcmd -ServerInstance $server -Database $databaseName -Query "exec batch_insert_statements" -Verbose 
out-file -filepath C:\Logs\Test.txt 

3 个答案:

答案 0 :(得分:0)

你不应该需要前几行,你也没有将命令传送到Out-File,试试这个:

$server = "."
$databaseName = "dbName"    
Invoke-Sqlcmd -ServerInstance $server -Database $databaseName -Query "exec batch_insert_statements" -Verbose -OutputSqlErrors 1 -IncludeSqlUserErrors | out-file -filepath C:\Logs\Test.txt 

答案 1 :(得分:0)

我在这里找到答案:https://www.sqlservercentral.com/Forums/Topic914307-391-1.aspx

SQLCMD.EXE

我刚刚尝试过它(ps版本5.1.16299.98)并将(受影响的行数为1行)写入outfile.txt

这当然需要安装Invoke-Sqlcmd,但如果您已经使用{{1}}

,我认为这是给定的

答案 2 :(得分:0)

我发现了类似的方式,但它完全是PowerShell。

$Query = 'EXEC tes'
$log = "c:\logs\Lead_Scoring_Log_$(get-date -f dd-MM-yyyy-HH-mm-ss).txt"
$SqlcmdOptions = @"
-S"$ServerInstance" -d "$Database" -v User=$userName Password=$password -Q 
"$Query"
"@
Start-Process -FilePath "sqlcmd.exe" -ArgumentList @"
$SqlcmdOptions
"@ -Wait -NoNewWindow -RedirectStandardOutput $log -PassThru