Вопрос по – Почему Powershell ISE показывает ошибки, которые не отображает консоль Powershell?
Я запускаю точно такой же файл script.ps1 в ISE Powershell (загрузка сценария вручную и нажатие клавиши F5) и в консоли Powershell (выполнение файла сценария).They both work but ISE shows errors that the console does not. Why?
Код является:
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
Вы можете видеть, что статус успеха не то же самое.
почему они выводят по-другому, но сообщение, которое мы видим изgit push
подходит к stderr. Это означает, что они являютсяи то и друго показывая ошибки, хотя 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 и даже отображает сообщение об ошибке, если вы смотрите за красным цветом.
$null
, вы должны быть в состоянии избежать различий в сообщениях, и просто отметьтеLastExitCode
чтобы увидеть, что он сделал.
Ryan Hiebert
этот ответ Stackoverflow предотвращатьgit push
чтобы напечатать в STDERR, решение - вызвать команду witn--porcelain
вариант.
тогда звоню
git push origin master --porcelain
output все идет в STDOUT
2> & 1 | % {"$ _"} `отменяет результат ошибок.
Решение и использование:git push -q 2>&1 | %{ "$_" }
единственное существенное различие, о котором я могу подумать сразу, заключается в том, что ISE использует однопоточный режим (STA) в v2, а консоль использует многопоточный (MTA). Пытались ли вы запустить powershell.exe с аргументом -STA или powershell_ise.exe с -MTA и снова попробовать скрипт?
Похоже, ошибка исходит от команды Git, которую вы пытаетесь запустить, FWIW.