2017-02-03 62 views
0

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

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

+0

“verbose”参数是否执行您所需的操作? –

回答

1

它看起来像下面的链接正好说明这个问题:

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

从本质上讲,你所看到的“消息”选项卡不是从查询结果,而只是打印语句(基本与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 
+0

在这里有一些真正的初学者时刻。尝试运行常规{Invoke-Sqlcmd -ServerInstance $ ProdServer -Database $ Database -Query“PRINT”导出此结果'“-Verbose 4> Out-File”C:\ users \ admin-ag \ desktop \ Test.txt“ }它会给出错误“out-file:无法打开文件,因为当前提供程序(Microsoft.SqlServer.Management.PSProvider \ SqlServer)无法打开文件。” – AJPG

+0

也不知道如何使用Invoke-SQLCMD2,它显示此错误:“Invoke-Sqlcmd2:术语'Invoke-Sqlcmd2'不被识别为cmdlet,函数,脚本文件或可操作程序的名称。” – AJPG

+0

啊 - 我没有可用的SQLPS模块,所以我不确定Invoke-SqlCmd2 cmdlet来自哪里。它看起来像是来自GitHub的社区功能:https://github.com/sqlcollaborative/Invoke-SqlCmd2 我不知道为什么你会得到Provider错误;在运行命令之前,我会尝试使用“cd c:\”,以确保您不在SQL提供程序上下文中。 – jbsmith