调用另一个可执行文件并捕获输出

时间:2015-05-06 23:50:09

标签: powershell dacpac sqlpackage

使用PowerShell脚本我尝试执行SqlPackage.exe来更新数据库。问题是它产生了一个新的CMD窗口,我无法有效地捕获输出。

这是我的剧本:

&$SqlPackage "/Action:Script", "/SourceFile:$($Environment.PackageFile)", "/Profile:$($Environment.PublishProfile)", "/OutputPath:$($Environment.ScriptFile)";

其中SqlPackage = "SQLPackage\SqlPackage.exe";

奇怪的是,当我在Windows 2008 R2 Web服务器上执行脚本时,输出与PowerShell输出内联,这是我想要的理想选择。在我的Windows 7机器上,它会产生一个新的CMD窗口。

如何将输出始终路由到PowerShell窗口,或者至少将输出路由到另一个文件?

修改

等待流程完成的完整解决方案:

$p = Start-Process $SqlPackage -ArgumentList @("/Action:Script", "/SourceFile:$($Environment.PackageFile)", "/Profile:$($Environment.PublishProfile)", "/OutputPath:$($Environment.ScriptFile)") -NoNewWindow -Wait -Passthru
$p.WaitForExit()

1 个答案:

答案 0 :(得分:2)

如果您将Start-Process-NoNewWindow参数一起使用,您应该能够获得所需的结果:

Start-Process $SqlPackage -ArgumentList @("/Action:Script", "/SourceFile:$($Environment.PackageFile)", "/Profile:$($Environment.PublishProfile)", "/OutputPath:$($Environment.ScriptFile)") -NoNewWindow

如果您需要将输出定向到文件,您还可以使用-RedirectStandardOutput

-RedirectStandardError / Start-Process参数