Powershell 运行.exe以获取字符串输出未保存到字符串变量

Powershell 运行.exe以获取字符串输出未保存到字符串变量,powershell,powershell-5.0,Powershell,Powershell 5.0,请原谅,我对PowerShell一般来说都是新手。我正在更新一个在Linux(在bash中)上运行的构建过程,使之能够在PowerShell中的Windows上运行 我的目标是获得构建系统中当前存在的游戏引擎版本。默认构建位置是众所周知的,因此我们尝试执行它并获取版本,如下所示: $Version=&'C:\ProgramFiles\LOVE\LOVE.exe'--版本 执行此操作时,$Version值为空: 写入输出$Version [无输出] $Version-Eq$True 假的 如果

请原谅,我对PowerShell一般来说都是新手。我正在更新一个在Linux(在bash中)上运行的构建过程,使之能够在PowerShell中的Windows上运行

我的目标是获得构建系统中当前存在的游戏引擎版本。默认构建位置是众所周知的,因此我们尝试执行它并获取版本,如下所示:

$Version=&'C:\ProgramFiles\LOVE\LOVE.exe'--版本
执行此操作时,
$Version
值为空:

写入输出$Version
[无输出]
$Version-Eq$True
假的
如果我直接从shell运行可执行文件,我注意到换行符上没有显示该行:

PS C:\Users\robbm\Myproject\Mygame>$Version=&'C:\Program Files\LOVE\LOVE.exe'--Version
PS C:\Users\robbm\Myproject\Mygame>LOVE 11.3(神秘之谜)
这让我怀疑在可执行文件中首先存在一些奇怪的输出行为。 这是LÖVE的
--version
输出的问题,还是我对在PowerShell中重定向输出有误解?我尝试了一些方法来捕获输出,
$Version
似乎总是以零值结束,例如:

$Version=&'\\build\love\love.exe'--Version'|输出字符串
写入输出$Version
$Version=(&'\\build\love\love.exe'-Version'| Out字符串)
写入输出$Version
谢谢你的帮助。由于这适用于其他cmdlet,我倾向于相信它可能是LÖVE的一个功能,但我希望能够考虑如何使用它,或者使用任何方法捕获它在直接执行时清晰输出到屏幕的版本

编辑:

LÖVE在Windows上运行时确实做了一些不同的事情。现在来看,我们正在使用Windows上启用的名为“爱情传奇”的控制台“IO黑客”,它看起来像是在写东西

根据评论者的建议,我尝试了
.Exception.Message
方法,但这样调用时没有:

$Version=&('C:\ProgramFiles\LOVE\LOVE.exe'--Version')。异常消息
因此,我仍在寻找方法,在LÖVE破解一些奇怪的I/O流的范围内实现这项工作

编辑2:

另一个有趣的事实是,重定向到文件也同样失败:

PS>(&'C:\Program Files\LOVE\LOVE.exe'--version')2>&1>\LOVE.txt
PS>爱情11.3(神秘之谜)
PS>cat.\love.txt
[空]

因此,代表LÖVE来看,这似乎过于粗糙,而不是PowerShell的问题。

在阅读了您上次的编辑之后,这可能对您没有帮助,但可能对其他人有帮助

您可以尝试如下方式捕获输出:

函数runCmdAndCaptureOutput(
[参数(必需=$true)]
[字符串]$cmd
) {
[字符串]$errOut
[字符串]$stdOut
#故意从下面的变量中删除“$”。
调用表达式$cmd-ErrorVariable errOut-OutVariable stdOut
if($LASTEXITCODE-ne 0){
写入主机-ForegroundColor红色“LASTEXITCODE:$LASTEXITCODE”
抛出$LASTEXITCODE
} 
返回$stdOut
}
$exeCmd=“'C:\Program Files\LOVE\LOVE.exe'--version”
$output=runCmdAndCaptureOutput-cmd$exeCmd
写入主机$output

我没有您描述的可执行文件,但这对我使用NodeJs-
$NodeJs=&C:\Program Files\NodeJs\node.exe-
版本很好。如果运行
love.exe/?
love.exe/h
是否确认Windows中的命令行选项?可能还有一些exe打印到主机而不是输出,无论命令行术语是什么。例如,旧版本的7zip可以捕获并解析输出,这对于捕获和计算进度非常有用,我用它做了一些事情,但后来的版本直接写入控制台以显示更新该行的实时百分比,而不是打印在新行上,不能放入变量或运行foreach或任何东西。