2013-12-16 40 views
4

我试图从powershell运行sql脚本.sql文件并将结果保存到.sql文件中。概述:SQL数据库还原需要预先还原用户和权限备份,一旦还原完成,我们需要在数据库上执行输出(我们进行了预还原的用户权限备份)。使用powershell执行.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; 

有人可以帮助我吗?

在此先感谢

回答

4
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 

应该做的伎俩。

+0

感谢大卫....现在使用你的技术输出文件本身没有生成...请让我知道你的想法... – Robin16

+0

分别运行每个语句:Invoke-sqlcmd及其参数第一。看看你是否得到任何结果。管道到格式表,看看你是否得到任何结果。管道输出文件(带有-append标志),看看会发生什么。 –

+0

大卫,没有什么是我的工作....我已经尝试了单独运行每个声明....没有运气.... – Robin16

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。

+0

抱歉,我不是故意downvote,但我似乎无法撤消它! – user917170

+0

以下为我作为上述变体 Invoke-Sqlcmd -InputFile“C:\ backups \ Scripts \ Backup每个Database.sql”-ServerInstance $ env:ComputerName-数据库master -verbose 4 >> lastbackup.txt Invoke-Sqlcmd -InputFile“C:\ backups \ Scripts \ Generate Copy Script.sql”-ServerInstance $ env:ComputerName -database master -verbose 4 >> backupcopy.ps1 – user2728841

+0

4 >>允许您将输出推送到文件没有“VERBOSE:”卡住了它的开始,它似乎消除了需要从父PowerShell会话触发PowerShell脚本 – user2728841

相关问题