【问题标题】:Powershell - get console output into variable (not stdout, not stderror)Powershell - 将控制台输出转换为变量(不是标准输出,不是标准错误)
【发布时间】:2020-05-19 12:45:01
【问题描述】:

我有来自 Lenovo 的 exe,它仅在从 cmd 窗口运行时提供命令行输出,而不是从 PowerShell 运行。输出似乎来自 StdOut 或 StdErr 以外的幽灵源。
https://download.lenovo.com/pccbbs/mobiles/n2hgc06w.exe(您必须运行并单击安装,但所做的只是解压缩到 c:\drivers\win\touchpadfw)。解压后一定要取消安装提示。

这个命令给我输出到控制台

& cmd.exe /c c:\drivers\win\touchpadfw\touchpadfw_aug2019\synreflash.exe /v /S 2

这也让我输出控制台,变量中没有任何内容

$var = (& cmd.exe /c c:\drivers\win\touchpadfw\touchpadfw_aug2019\synreflash.exe /v /S 2) 2>&1

这里也一样

$var = (& cmd.exe /c c:\drivers\win\touchpadfw\touchpadfw_aug2019\synreflash.exe /v /S 2 2>&1) 

我觉得这个 exe 以不同于 StdOut 和 StdErr 的方式输出,但我不知道是什么。我尝试过的任何东西都无法捕捉到它输出的内容。有第三种输出方式吗?

这就是奇怪的地方。使用“start cmd”从管理员 PowerShell 打开一个 cmd 窗口,我直接在 cmd 窗口中运行 exe,但输出到父 powershell 控制台。如果我直接以管理员身份启动 cmd 窗口,我将无法获得任何输出。

【问题讨论】:

  • 你试过redirecting所有输出和*>&1吗?
  • @Iconiu,如果下面更新的解决方案回答了您的问题,请告诉我,如果是,您可以单击绿色复选框标记为已解决。干杯!!

标签: powershell redirect output exe stderr


【解决方案1】:

查看下面的 SynReflash 用法,您会注意到您需要将最后一个 arg 显式传递为 /S 3 以 print 到 Standard Output 而不是 /S 2 是静音模式


$cmdOutput = cmd.exe /c "C:\DRIVERS\WIN\TouchpadFW\n2hgc06w\synreflash.exe" /v /S 3 '2>&1'


proc = [System.Diagnostics.Process]::Start([System.Diagnostics.ProcessStartInfo]@
{
    'FileName'               = "cmd.exe"
    'Arguments'              = "/C " + """C:\DRIVERS\WIN\TouchpadFW\n2hgc06w\synreflash.exe"" /v /s 3"
    'CreateNoWindow'         = $true
    'UseShellExecute'        = $false
    'RedirectStandardOutput' = $true   # to get stdout to $proc.StandardOutput
    'RedirectStandardError'  = $true   # to get stderr to $proc.StandardError
})
$output = $proc.StandardOutput
$error1 = $proc.StandardError
write-host $output.ReadToEnd()


输出

固件版本:1.2

【讨论】:

  • 感谢您的努力,但它们不适用于此可执行文件。第一个示例看起来像您正在重定向到一个文件,然后尝试读取它的内容。 $stdderror= "Error" 的示例变量令人困惑,因为 start-process 需要一个文件名。给它一个会导致空文件。它确实输出到父 powershell 窗口的控制台,该窗口用于启动 powershell_ISE。在第二个示例中,标准输出和标准错误都保持为空。我将 /s 2 更改为 /s 1 以确保 exe 正在运行并将在它自己的窗口中输出。
  • 在我的第一个示例变量中存储 Get-Content 不正确,我编辑了答案
  • @Iconiu 你能否确认更新后的解决方案是否回答了你的问题,如果是,你can mark as resolved
猜你喜欢
  • 2016-08-07
  • 2019-09-03
  • 2017-07-21
  • 2017-06-09
  • 1970-01-01
  • 1970-01-01
  • 2012-05-26
  • 2011-03-09
  • 1970-01-01
相关资源
最近更新 更多