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:
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.
You can also check the current Java version in Windows Program and Features (Win+R -> appwiz. cpl ).
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.
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.
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.
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.
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()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With