如何使用Powershell在不使用Java Updater的情况下获取Java版本?

时间:2018-06-29 07:50:40

标签: java regex powershell

要找到Java版本,我运行以下命令。

它同时返回Java 8和Java自动更新程序。我想单独获得Java版本。我无法对版本进行硬编码,因为在某些机器中可能会出现不同的版本。

Get-CimInstance -ClassName CIM_Product -Filter "Name like '%java%'"

Name             Caption                             Vendor                             Version                            IdentifyingNumber                 
----             -------                             ------                             -------                            -----------------                 
Java 8 Update... Java 8 Update 171                   Oracle Corporation                 8.0.1710.11                        {26A56AE4-039D-4CA4-87B4-2F3218...
Java Auto Upd... Java Auto Updater                   Oracle Corporation                 2.8.171.11                         {4A03863F-666A-4037-7777-5F2748...

如何通过过滤器获取Java版本?

2 个答案:

答案 0 :(得分:1)

只需获取结果的第一项,然后选择Version属性:

(Get-CimInstance -ClassName CIM_Product -Filter "Name like '%java%'" | Select-Object -ExpandProperty Version)[0]

要获得相同的输出,但要扩展“过滤器”而不是处理数组中的位置(由@Adam Parsons显示):

Get-CimInstance -ClassName CIM_Product -Filter "Name LIKE '%Java%' AND NOT Name LIKE '%Auto%'" | Select-Object -ExpandProperty Version

答案 1 :(得分:1)

您将需要增加过滤器的特异性。我们可以做到这一点的一种方法是排除名称类似于“ Auto”的所有内容,因为任何Java RE安装程序中都不会包含“ Auto”一词,而Auto Updater却包含“ Auto”一词。

像这样:

Get-CimInstance -ClassName CIM_Product -Filter "Name LIKE '%Java%' AND NOT Name LIKE '%Auto%'"

通过在过滤器中使用AND,可以向过滤器添加另一个条件。要反转LIKE条件(不像),请以NOT开始条件,然后在其后添加条件-Name LIKE '%x%'

这应该给出您要寻找的结果,您可以在其中使用PowerShell对象,并且只有该结果集中所需的项目。