3

PowerShell を使用してプロジェクト用の新しいビルド スクリプトをいくつか作成しています。MSBuild を呼び出したときにその出力をキャプチャして、テキスト ファイルに保存したいと考えています。これまでのところ、いくつかの異なる方法を試しましたが、うまくいきませんでした。これが最後に試した方法です (Write-Buildlog は、ログへの出力の書き込みを処理するだけです)。

開始プロセス $msBuildExecutable $buildArgs -Wait | 書き込みビルドログ

MSBuild は正常に実行されますが、出力はまったくキャプチャされません。私は少し検索を行ったが、これまで何も役に立たなかったので、どんなヒントも大歓迎です。これは驚くべきことです:)

ありがとう!

4

5 に答える 5

3

msbuild からの出力をログ記録または処理コマンドレットにパイプする場合は、それを で開始するのではなく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 環境またはホスティングの外部でプロセスを開始するため、出力の取得とコマンドレットへの送信がはるかに困難になります。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

CmdLetStart-Processには-RedirectStandardOutputパラメーターがあります。テストしましたか?

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

エラーをリダイレクトすることもできます-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」などの単語を 1 つだけ取得したい場合。

$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 に答える