13

Powershell ISE (スクリプトを手動でロードして F5 キーを押す) と Powershell コンソール (スクリプト ファイルを実行する) でまったく同じ script.ps1 ファイルを実行しています。どちらも機能しますが、コンソールには表示されないエラーが ISE に表示されます。なんで?

コードは次のとおりです。

git push origin master
Write-Host "lastExitCode: $lastExitCode Last command was successful: $?"

このコードは、ISE で次のエラーを出力します。

git.cmd : Initializing to normal mode
At E:\script.ps1:28 char:4
+ git <<<<  push origin master
    + CategoryInfo          : NotSpecified: (Initializing to normal mode:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

Initializing to normal mode

Everything up-to-date

lastExitCode: 0 Last command was successful: False

そして、これはコンソールで:

Everything up-to-date
lastExitCode: 0 Last command was successful: True

成功ステータスも同じではないことがわかります。

4

4 に答える 4

11

出力が異なる理由はわかりませんが、表示されるメッセージはgit pushstderr を介して送信されます。これは、どちらもエラーを示していることを意味しますが、ISE はエラーを大きくし、エラーオブジェクトに変換しています。

PowerShell プロンプトからの次の出力を検討してください。

PS> git push
Everything up-to-date
PS> git push 2> $null    # Redirect stderr to $null
PS> $LastExitCode
1
PS>

ISE と比較します。

PS> git push
git : Everything up-to-date
At line:1 char:1
+ git push
+ ~~~~~~~~
    + CategoryInfo          : NotSpecified: (Everything up-to-date:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
PS> git push 2> $null
PS> $LastExitCode
1
PS>

表示されているエラー オブジェクトからの余分な出力を除いて、出力は同じです。ISE は stderr 文字列を NativeCommandError オブジェクトに変換しており、赤色を過ぎて見た場合でもエラー メッセージが表示されます。

于 2012-11-16T18:48:15.897 に答える
4

この Stackoverflow answerに示されているように、 STDERR に出力されないようにするためgit pushの解決策は、コマンド witn--porcelainオプションを呼び出すことです。

次に、呼び出し

git push origin master --porcelain

出力はすべてSTDOUTになります

于 2015-11-01T07:55:11.010 に答える
1

したがって、以下の例にはエラーがあります。このコマンド -q 2>&1 | %{ "$_" }` はエラーの結果を無効にします。

解決策と使用法:git push -q 2>&1 | %{ "$_" }

于 2015-10-31T05:35:15.603 に答える
0

うーん、私が思いつく唯一の大きな違いは、ISE が v2 でシングルスレッド アパートメント (STA) モードを使用し、コンソールがマルチスレッド アパートメント (MTA) を使用することです。-STA 引数を指定して powershell.exe を実行するか、-MTA 引数を指定して powershell_ise.exe を実行し、スクリプトを再試行しましたか?

実行しようとしている Git コマンド、FWIW からエラーが発生しているようです。

于 2012-06-01T20:25:33.663 に答える