1

我正在尝试将命令提示符命令存储到 Powershell 中的变量中,并将其输出到文件中。由于该命令有 3 行输出,因此不会将任何内容存储为变量或写入文件。当我尝试存储或输出到文件时,唯一发生的事情是输出被打印到屏幕上。

输入:

java -version

输出:

java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b25)
Java HotSpot(TM) Client VM (build 25.251-b25, mixed mode)

我尝试了以下方法,但没有成功:

$variable = (java -version)
$variable = cmd /c "java -version")
java -version | out-file test.txt

输出只打印到屏幕

4

1 回答 1

3

看起来我看错了你的问题,底部的原始答案

java.exe可能会将版本信息输出到标准错误流,因此您必须首先将其重定向到标准输出流:

$version = java -version 2>&1

但由于 PowerShell 会尝试将错误流的输出包装在ErrorRecord's 中,我们需要再次将它们转换回字符串:

$version = java -version 2>&1 |ForEach-Object ToString

要详细了解 PowerShell 中的不同输出流以及如何重定向它们,请参阅about_Redirection帮助主题


将命令和参数存储在字符串变量中,然后调用&

$command = 'java'
$arguments = '-version'
# ... later in the script:
$javaVersion = & $command $arguments

或者使用命令表达式创建一个脚本块:

$javaVersionCommand = {
  java -version
}
# ... later in the script:
$javaVersion = & $javaVersionCommand
于 2020-08-31T15:27:37.113 回答