将具有多行输出的命令存储到 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
我正在尝试将命令提示符命令存储到 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