Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get the Java version in PowerShell

I'm trying to get the Java version in PowerShell. The version string is printed to stderr, so I'm trying to redirect it to stdout and assign it to a string variable.

I get the following strange error:

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)

Call without redirection (2>&1) gives this:

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)

I think that Java here is irrelevant, and the same would happen for any other program printing strings to stderr.

The PowerShell version I use is 2.0.

Questions:

  • How can I redirect stderr to a variable?
  • Or, alternatively, how can I check the installed Java version?

Workaround

I can run it like this:

$output = & cmd /c "java -version 2>&1"

But I hate running a cmd.exe where it shouldn't be necessary.

like image 715
Ivan Avatar asked Sep 19 '13 09:09

Ivan


People also ask

How do I check java version in Windows PowerShell?

You can also check the current Java version in Windows Program and Features (Win+R -> appwiz. cpl ).

How do I find out java version?

The Java version can be found in the Java Control Panel. Under the General tab in the Java Control Panel, the version is available through the About section. A dialog appears (after clicking About) showing the Java version.

How do I check if java is installed?

Open command prompt and enter “java –version”. If installed version number is displayed. 2. On Windows, Java is usually installed in the directory C:/Program Files/Java.

How do I check java version in terminal?

Using Command prompt The -version command of the java command prompt gives you the current version of the Java software installed in your system. Therefore, open command prompt and type the command java -version to get the version of Java installed in your system.


2 Answers

I have been using Get-Command to get Java version on PowerShell 5.1.

Get-Command java | Select-Object Version

This returns an object. If you want a string instead, use:

(Get-Command java | Select-Object -ExpandProperty Version).toString()

The outputs look like this:

PS > Get-Command java | Select-Object Version

Version
-------
8.0.1710.11



PS > Get-Command java | Select-Object -ExpandProperty Version

Major  Minor  Build  Revision
-----  -----  -----  --------
8      0      1710   11



PS > (Get-Command java | Select-Object -ExpandProperty Version).tostring()
8.0.1710.11

It worked quite well under PowerShell 5.1. I don't have a chance to test this on PowerShell 2.0.

like image 37
Allen Avatar answered Sep 29 '22 23:09

Allen


One way is using WMI:

$javaver =  Get-WmiObject -Class Win32_Product -Filter "Name like 'Java(TM)%'" | Select -Expand Version

Another one is redirect to a file with start-process:

start-process  java  -ArgumentList "-version" -NoNewWindow -RedirectStandardError .\javaver.txt

$javaver = gc .\javaver.txt

del .\javaver.txt

And my last is:

dir "HKLM:\SOFTWARE\JavaSoft\Java Runtime Environment"  | select -expa pschildname -Last 1

Regarding how redirect stderr in this case you can do:

$out = &"java.exe" -version 2>&1
$out[0].tostring()
like image 67
CB. Avatar answered Sep 27 '22 23:09

CB.