Powershell - 将SQL消息输出到文件

时间:2017-02-03 18:10:26

标签: sql-server powershell

我有一个Powershell脚本,它调用已保存的SQL查询文件并在特定的服务器上运行它。数据库。该部分运行良好,问题是我想将它生成的SQL消息保存到日志文件中(参见图片)。

SQL Output from after Query is run

这不适用于我当前的代码,我相信这是因为它在技术上不是查询输出,而是重新索引和更新表,而不是获取数据。

我目前的相关代码是:

{    
Import-Module SQLPS         
$Data = Invoke-Sqlcmd -InputFile $SQLQuery -ServerInstance $Server -Database $Database -QueryTimeout 0    
$Data | out-file "$Output$Database$date.txt"    
}

但这只是生成一个空文本文件。我希望通过Powershell获取有关重建索引的信息以及它正在执行的更新保存到不同的文件中。您可以通过右键单击“消息”窗口并单击“将结果另存为...”来执行此操作,但希望将其包含在我的自动化中,因为它作为计划任务运行,并且没有人在SSMS上。

Powershell v3 / Windows Server 2012 / SQL SSMS 2014

任何帮助将不胜感激!这是我的第一篇文章,很抱歉奇怪的格式化。

2 个答案:

答案 0 :(得分:1)

看起来以下链接正好解释了这个问题:

https://sqlnotesfromtheunderground.wordpress.com/2015/09/09/powershell-outputting-a-sql-server-query-result-from-the-message-tab/

基本上,你在'消息'中看到的内容选项卡不是查询的结果,而是PRINT语句(基本上与Write-Host或Console.WriteLine相同)。如果使用Invoke-SqlCommand2,则其-Verbose选项会将这些PRINT语句捕获到Verbose PowerShell流。要将此流写入文本文件,您必须指定特定的流(在本例中为4):

Invoke-Sqlcmd2 -ServerInstance . -Database master -Query "PRINT 'Export This result'" -Verbose 4> Out-File C:\Temp\Test.txt

答案 1 :(得分:1)

我遇到了同样的问题,但是在powershell脚本中,我在命令中使用了它,而我使用了-verbose。 像这样

Invoke-Sqlcmd -ServerInstance '.\Your_server_instance' -Database 'DATABASE_Name' -InputFile "D:\Your_script.sql" verbose 4> "C:\sql\YOUR_OUTPUT_FILE.txt"

所以我认为这段代码应该对您有用

{    
Import-Module SQLPS         
$Data = Invoke-Sqlcmd -InputFile $SQLQuery -ServerInstance $Server -Database $Database -QueryTimeout 0    
$Data -verbose *>  "$Output$Database$date.txt"    
}

-verbose *>它流所有可以重定向特定流的输出:

  
      
  • 1个成功输出
      2个错误
      3警告消息
      4详细输出
      5条调试消息
  •