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

Sql server 使用powershell执行.sql脚本,并将输出存储在.sql文件中,sql-server,powershell,Sql Server,Powershell,我正在尝试从powershell运行sql脚本.sql文件,并将结果保存到.sql文件中。概述:SQL数据库还原需要用户和权限备份预还原,还原完成后,我们需要在数据库上执行输出(我们预还原的用户权限备份) 这是我的脚本,当我执行时,我看到一个空文件 Add-PSSnapin SqlServerProviderSnapin100; $server = 'DBA_Test'; $database = 'Test'; $mydata = invoke-sqlcmd -inputfile "C:\use

我正在尝试从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;
有人能帮我吗

提前谢谢

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


应该这样做。

您的问题是,您只捕获了一个输出流。如果您的查询运行“Select'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将只重定向该流)。然后您只是将输出重定向到输出文件。

谢谢David…现在使用您的技术后,输出文件本身不会生成…请让我知道您的想法…分别运行每个语句:首先调用sqlcmd及其参数。看看有没有结果。管道来格式化表格,看看是否有结果。通过管道导出文件(带有-append标志),看看会发生什么。大卫,对我来说什么都不管用……我尝试分别运行每个语句……运气不好……很抱歉,我不是有意否决,但我似乎无法撤销它!以下内容作为上述Invoke Sqlcmd-InputFile“C:\backups\Scripts\Backup Each Database.sql”-ServerInstance$env:ComputerName-Database master-verbose 4>>lastbackup.txt Invoke Sqlcmd-InputFile“C:\backups\Scripts\Generate Copy Script.sql”的一个变体适用于我-ServerInstance$env:ComputerName-database master-verbose 4>>backupcopy.ps1e4>>允许您将输出推送到文件,而无需将“verbose:”卡在文件的开头,并且似乎无需从父powershell会话启动powershell脚本
invoke-sqlcmd -inputfile "C:\users\security.sql" -serverinstance $server -database $database -verbose *>&1 | out-file C:\users\output.sql