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

Calling another executable and capturing output

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

这是我的脚本:

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

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

奇怪的是,当我在 Windows 2008 R2 Web 服务器上执行脚本时,输出与 PowerShell 输出内联,这正是我想要的。在我的 Windows 7 机器上它生成了一个新的 CMD window.

如何始终将输出路由到 PowerShell window,或者至少通过管道传输到另一个文件?

编辑

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

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

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

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

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

-RedirectStandardOutput / -RedirectStandardError 参数