【问题标题】:PowerShell ISE: Strange output when executing java -versionPowerShell ISE:执行 java -version 时出现奇怪的输出
【发布时间】:2020-04-11 12:56:52
【问题描述】:

在我的一个 powershell 脚本中 - 在启动 Java 程序之前 - 我正在回显正在使用的 Java 版本。 PS 代码看起来很无害,如下所示:

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

当我在普通的 powershell 窗口中执行或作为启动脚本的一部分执行时,上面的 sn-p 可以完美运行。输出如预期:

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 乱码?似乎 PS(或 ISE?)试图以某种方式解释该输出(这当然不是我想要或期望的。 我如何才能“正确地”调用它(用 PS 术语)以避免这种额外的输出?

【问题讨论】:

  • 它将来自java -version 的响应视为命令

标签: powershell powershell-ise


【解决方案1】:

任何写入标准错误的命令都会在 ISE(或调用命令)中生成远程异常。 ISE 创建一个运行空间来运行命令。例如,将标准错误重定向到 $null 会导致无输出:

java -version 2>$null

这里有一个解决方法:

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

java version "1.8.0_241"

或者使用get-package,它可以适用于任何软件:

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 的行为不是这样的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多