PowerShell ISE: странный вывод при выполнении java -версии - PullRequest
1 голос
/ 11 апреля 2020

В одном из моих сценариев powershell - до запуска программы Java - я повторяю версию используемого java. Код PS выглядит совершенно безвредным, например:

...
Write-Output "Java version:"
Write-Output "-------------"
java -version
...

Приведенный выше фрагмент кода отлично работает, когда я выполняю его в обычном окне powershell или как часть сценария запуска. Результат такой, как и ожидалось:

Java version:
-------------
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)

Но когда я выполняю то же самое внутри PowerShell ISE (который я обычно люблю использовать, поскольку он часто весьма полезен и удобен при разработке и отладке сценариев), я получаю:

Java version:
-------------
java : java version "1.8.0_202"
At D:\Projects\gwtp-demo\mms-specifics\etc\powershell\define_gwtp-demo_profile.ps1:50 char:1
+ java -version
+ ~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (java version "1.8.0_202":String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)

Что здесь не так? Почему я получаю этот дополнительный PS gibberi sh здесь? Кажется, что PS (или ISE?) Пытается каким-то образом интерпретировать этот вывод (что, конечно, НЕ то, что я хочу или ожидаю. Как бы я назвал это «правильно» (в терминах PS), чтобы избежать такого дополнительного вывода

1 Ответ

2 голосов
/ 11 апреля 2020

Любая команда, которая пишет в стандартную ошибку, сгенерирует удаленное исключение в ISE (или invoke-command). ISE создает пространство выполнения для запуска команд. Например, перенаправление стандартной ошибки в $ null приводит к отсутствию вывода:

java -version 2>$null

Вот обходной путь:

java -version 2>&1 | select-string version

java version "1.8.0_241"

Или используйте get- пакет, который может применяться к любому программному обеспечению:

get-package '*java 8*'

Name                        Version         Source                           ProviderName
----                        -------         ------                           ------------
Java 8 Update 241           8.0.2410.7      C:\Program Files (x86)\Java\j... msi

Кстати, вы можете захотеть перейти на OpenJDK / AdoptOpenJDK из-за изменения лицензии.

Vscode не ведет себя как это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...