3

我正在使用 PowerShell 为项目创建一些新的构建脚本,并希望在调用它时捕获 MSBuild 的输出并将其保存到文本文件中。到目前为止,我已经尝试了几种不同的方法,但没有运气——这是我最后一次尝试的方法(Write-Buildlog 只是处理将输出写入日志):

启动进程 $msBuildExecutable $buildArgs -Wait | 写构建日志

尽管 MSBuild 运行良好,但根本没有捕获任何输出。任何提示都将不胜感激,因为我已经做了一些搜索并且到目前为止没有发现任何有用的东西,这令人惊讶:)

谢谢!

4

5 回答 5

3

如果要将 msbuild 的输出通过管道传输到日志记录或处理 cmdlet,则不应使用 启动它Start-Process,只需正常执行即可。

PS> msbuild.exe $flag1 $flag2 $thingToBuild | Write-Buildlog

您可能还需要重定向 stderr 以捕获更多输出。在这种情况下,您需要添加2>&1

PS> msbuild.exe $flag1 $flag2 $thingToBuild  2>&1 | Write-Buildlog

Start-Process将在任何 powershell 环境或主机之外启动您的进程,因此获取输出并将其发送到 cmdlet 变得更加困难。如果您想在 powershell 中处理可执行输出,那么最好始终保持在 powershell 环境中。

于 2013-08-07T17:15:12.363 回答
2

所有你需要的是:

& msbuild.exe .\yourproj.sln |Out-Host

甚至: & msbuild.exe .\yourproj.sln |Out-File c:\log.txt

如果写入文件是您想要的。

于 2013-08-08T12:50:18.017 回答
2

In Start-Process CmdLet you've got a -RedirectStandardOutput parameter ; have you test it ?

Start-Process -FilePath "C:\Windows\system32\ping.exe" -ArgumentList "MyMachine" -RedirectStandardOutput "c:\temp\p.txt" -NoNewWindow

You can also redirect errors with -RedirectStandardError

于 2013-08-07T05:20:26.473 回答
1

如果你像这样运行它,你可以对输出做任何你想做的事情:

$MSBuild = [string](MSBuild.exe -argument1 -argument2 -andSoOn)

假设您想让输出转到文件中。

$MSBuild = [string](MSBuild.exe -argument1 -argument2 -andSoOn) | Out-File C:\text.txt

或者这样写...

$MSBuild = [string](MSBuild.exe -argument1 -argument2 -andSoOn) 2>&1 >> C:\text.txt

注意:2个“>>”表示追加,1个“>”表示覆盖之前添加的行。

或者,如果您只想从一堆输出中得到一个像“true”这样的词。

$MSBuild = [string](MSBuild.exe -argument1 -argument2 -andSoOn)
if($MSBuid -match "true") 
{
    Write-Host "Whatever you want to say about what's true"
}

如果你想在控制台中看到它,你可以这样做。

$MSBuild = [string](MSBuild.exe -argument1 -argument2 -andSoOn) | Out-Host

或者...

$MSBuild = [string](MSBuild.exe -argument1 -argument2 -andSoOn)
Write-Host $MSBuild
于 2014-01-13T19:01:14.163 回答
0

我认为,您应该阅读有关 MsBuild 命令行中的日志记录选项:http: //msdn.microsoft.com/en-us/library/ms164311.aspx

Msbuild /Logger 为您提供了很好的日志输出选项。您可以在您的 powershell 脚本中使用此参数。

于 2013-09-24T10:09:23.573 回答