根本原因: git push
stdout ではなく、stderr に出力を送信しています。ここ、ここを参照してください。
ホストとしての Powershell.exe は、ネイティブ ツールが stderr に出力を送信するときに心配することはありません。これは、エラー メッセージだけでなく、ステータス メッセージやその他のものを出力するためのやや一般的な方法であるためです。たとえば、次のようなまったく偽の何かを実行してみてください
PS C:\> $result = findstr.exe q w e r t y
Findstr はエラー メッセージを stderr に送信しているため、Powershell.exe はその「エラー」出力を変数に割り当てないように認識していますが、問題が発生することもありません。
一方、NuGet パッケージ マネージャー ホストは、この点でそれほどスマートではありません。ネイティブ ツールを実行すると、このホストは stderr 内のすべてを真のエラーとして解釈します。したがって、赤いテキスト、診断メッセージなどが表示されますfindstr
。PM で上記と同じ例を試してみると、完全なエラーが表示されます。
いくつかの回避策/提案:
- 出力をstderr ではなく stdout に送る
--porcelain
パラメーターを使用します。
$errorView = 'CategoryView'
エラーメッセージを削除するわけではありませんが、少なくともエラーメッセージを最小限に抑えるように設定します
- stderr をリダイレクトし、プレーンなコンソール書き込みを次のように行います。
git push 2>&1 | write-host