Pourquoi la Powershell ISE montre-t-elle des erreurs que la console de Powershell ne montre pas?

j'exécute exactement le même script.fichier ps1 dans une Powershell ISE (chargement manuel du script et pression sur F5) et dans une console Powershell (exécution du fichier script). ils fonctionnent tous les deux mais ISE affiche des erreurs que la console n'affiche pas. Pourquoi?

Le code est:

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

ce code affiche cette erreur dans L'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

Et ceci dans la console:

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

Vous pouvez voir que le succès n'est pas le même également.

11
demandé sur Malartre 2012-06-01 23:59:21

4 réponses

je ne sais pas pourquoi ils ont sortie différemment, mais le message que nous voyons à partir de git push est en route pour stderr. Cela signifie qu'ils sont affichage des erreurs, bien que L'ISE les rende beaucoup plus bruyantes, et les convertisse en erreur objets.

Envisager cette sortie à partir de l'invite de PowerShell:

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

et de le comparer à l'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>

excepté pour la sortie supplémentaire de l'objet d'erreur étant affiché, la sortie est la même. L'ISE a converti la chaîne stderr en un objet NativeCommandError, et il affiche même le message d'erreur si vous regardez au-delà du rouge.

11
répondu Ryan Hiebert 2012-11-16 18:48:15

comme indiqué dans le c'Stackoverflow réponse > pour éviter les git push pour imprimer sur la sortie STDERR la solution est d'appeler la commande witn --porcelain option.

puis, appelant

git push origin master --porcelain

sortie va vers STDOUT

3
répondu Stefano Spinucci 2017-05-23 11:46:28

Hmmm, la seule différence majeure qui me vient directement à l'esprit est que L'ISE utilise le mode appartement fileté simple (STA) en v2, et la console utilise l'appartement fileté multiple (MTA). Avez-vous essayé de faire tourner powershell?exe avec l'argument-STA, ou powershell_ise.exe avec-MTA, et réessayer le script?

on dirait que l'erreur vient de la commande git que vous essayez d'exécuter, FWIW.

0
répondu Trevor Sullivan 2012-06-01 20:25:33

Ainsi, l'exemple ci-dessous cas, toute erreur , cette commande -q 2>&1 | %{ "$_" }` annulera le résultat des erreurs.

Une solution et d'utilisation: git push -q 2>&1 | %{ "$_" }

0
répondu Juliano Sales 2015-11-07 16:25:10