我正在尝试从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;
有人可以帮我吗?
提前致谢
答案 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。