使用powershell执行.sql脚本并将输出存储在.sql文件中

时间:2013-12-16 19:38:29

标签: sql-server powershell

我正在尝试从powershell运行sql脚本.sql文件并将结果保存到.sql文件中。概述:SQL数据库还原需要用户和权限备份预还原,并且在还原完成后,我们需要在数据库上执行输出(用户权限备份,我们执行了预还原)。

这是我的脚本,当我执行时,我看到一个空文件。

Add-PSSnapin SqlServerProviderSnapin100;
$server = 'DBA_Test';
$database = 'Test';
$mydata = invoke-sqlcmd -inputfile "C:\users\security.sql" -serverinstance $server -database $database | Format-Table -HideTableHeaders -AutoSize
$mydata | out-file C:\users\output.sql;
Remove-PSSnapin SqlServerCmdletSnapin100;

有人可以帮我吗?

提前致谢

2 个答案:

答案 0 :(得分:5)

invoke-sqlcmd -inputfile "C:\users\security.sql" -serverinstance $server -database $database | Format-Table -HideTableHeaders -AutoSize >> C:\users\output.sql

Invoke-sqlcmd -inputfile "C:\users\security.sql" -serverinstance $server -database $database | Format-Table -HideTableHeaders -AutoSize | Out-File –FilePath C:\users\output.sql –Append

应该这样做。

答案 1 :(得分:1)

您的问题是您只捕获一个输出流。如果您的查询正在运行“选择'Hello World!'”,您的代码将按预期工作。

为了将所有输出流(详细,错误和输出)整合到一个文件中,您可以执行以下操作:

invoke-sqlcmd -inputfile "C:\users\security.sql" -serverinstance $server -database $database -verbose *>&1 | out-file C:\users\output.sql

-verbose标志会打开很多你希望看到的消息。 *表示您想要所有输出流(如果您愿意,可以查找定义。详细流本身为4,因此4>& 1只会重定向该流)。然后你只是将输出重定向到out-file。