Я пытаюсь получить версию Java в PowerShell. Строка версии печатается на stderr, поэтому я пытаюсь перенаправить ее на stdout и назначить ее строковой переменной.Как получить версию Java в PowerShell
я получаю следующую странную ошибку:
PS P:\> & java -version 2>&1
java.exe : java version "1.7.0_25"
At line:1 char:2
+ & <<<< java -version 2>&1
+ CategoryInfo : NotSpecified: (java version "1.7.0_25":String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Java(TM) SE Runtime Environment (build 1.7.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
вызов без перенаправления (2> & 1) дает следующее:
PS P:\> & java -version
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
Я думаю, что Java здесь не имеет никакого значения, и то же самое будет происходить для любой другой программы, печатающей строки в stderr.
Версия PowerShell, которую я использую, - 2.0.
Вопросы:
- Как можно перенаправить STDERR в переменную?
- Или, альтернативно, как я могу проверить установленную версию Java?
Обход
Я могу запустить его так:
$output = & cmd /c "java -version 2>&1"
Но я ненавижу работает cmd.exe, где оно не должно быть необходимым.
Хороший подход! Не работал для меня именно так (что-то связанное с -Filter), но работал как: Get-WmiObject -Class Win32_Product | Where-Object {$ _. Name.StartsWith ('Java')} | Select -Expand Version – Ivan
@Ivan Вы можете попробовать с '' Name like 'Java%' "' и дайте мне знать ... –
Спасибо. Да, я знал о опции -RedirectStandardError для Start-Process, но ненавижу создание файла только по этой простой причине ... – Ivan