我需要获取Maven二进制文件的版本,但是使用对该程序的显式调用会带来一个辅助窗口,并且不起作用。
在这种情况下,它会产生一个新窗口并且什么也不返回:
# spawns a new window with an error
# wanted to be more explicit in my call to the program
Write-Host "Maven..."
$x = & 'C:\path\to\maven\bin\mvn' '-version' 2>&1
Write-Host "out: "$x
在这种情况下,它可以按预期工作,但是我必须假定已配置环境变量:
# works as intended
# implies path is set
Write-Host "Maven..."
$x = & 'mvn' '-version' 2>&1
Write-Host "out: "$x
为什么会这样?理想情况下,我希望第一种方法有效。
编辑#1
使用开始过程(来自Capturing standard out and error with Start-Process)尝试以下操作
Try {
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.FileName = "C:\path\to\maven\bin\mvn"
$pinfo.RedirectStandardError = $true
$pinfo.RedirectStandardOutput = $true
$pinfo.UseShellExecute = $false
$pinfo.Arguments = "-version"
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null
$stdout = $p.StandardOutput.ReadToEnd()
#$stderr = $p.StandardError.ReadToEnd()
#$exitCode = $p.ExitCode
$p.WaitForExit()
Write-host "out: "$stdout
}
Catch {
Write-Host $_.Exception.Message
}
我收到此错误:
使用“ 0”参数调用“开始”的异常:“指定的 可执行文件不是此操作系统平台上的有效应用程序。”