将具有多行输出的命令存储到 Powershell 中的变量或文件

Store command with multi line output to variable or file in Powershell

我正在尝试将命令提示符命令存储到 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

看来我看错你的问题了,原答案在最下面

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

$version = java -version 2>&1

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

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

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


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

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

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

$javaVersionCommand = {
  java -version
}
# ... later in the script:
$javaVersion = & $javaVersionCommand