我正在使用PowerShell为项目创建一些新的构建脚本,并希望在我调用它时捕获MSBuild的输出并将其保存到文本文件中。到目前为止,我已经尝试了几种不同的方法,但这是我上次尝试的(Write-Buildlog只是处理将输出写入日志):
Start-Process $ msBuildExecutable $ buildArgs -Wait |写Buildlog
虽然MSBuild运行良好,但根本没有捕获任何输出。任何提示都会非常感激,因为我已经做了一些搜索,到目前为止没有找到任何有用的东西,这是令人惊讶的:)
谢谢!
答案 0 :(得分: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环境中。
答案 1 :(得分:2)
在Start-Process
CmdLet中,您有一个-RedirectStandardOutput
参数;你试过吗?
Start-Process -FilePath "C:\Windows\system32\ping.exe" -ArgumentList "MyMachine" -RedirectStandardOutput "c:\temp\p.txt" -NoNewWindow
您还可以使用-RedirectStandardError
答案 2 :(得分:2)
您只需要:
& msbuild.exe .\yourproj.sln |Out-Host
甚至: &安培; msbuild.exe。\ yourproj.sln | Out-File c:\ log.txt
如果您想要写入文件。
答案 3 :(得分: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">"覆盖以前添加的行。
或者,如果你只想得到一个像#34; 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
答案 4 :(得分:0)
我想,你应该阅读MsBuild命令行中的Logging选项: http://msdn.microsoft.com/en-us/library/ms164311.aspx
Msbuild / Logger为您提供了很好的日志输出选项。您可以在powershell脚本中使用此参数。