如何捕获“pnputil.exe -e”的输出

如何捕获“%windir%/ system32 / pnputil.exe -e”的输出? (假设Windows Vista 32位)

奖金的技术解释为什么应用程序通常将输出写入cmd shell,但是当stdout和/或stderr被redirect,那么应用程序什么都不写入控制台或stdout / stderr?

 C:\ Windows \ System32> PnPutil.exe  - 帮助
 Microsoft PnP实用程序{...}

 C:\ Windows \ System32> pnputil -e> c:\ foo.txt

 C:\ Windows \ System32>键入c:\ foo.txt

 C:\ Windows \ System32> dir c:\ foo.txt
 驱动器C中的卷没有标签。
 卷序列号是XXXX-XXXX

  c:\的目录

 09/10/2008 12:10 PM 0 foo.txt
                1个文件(0个字节)

似乎没有一个简单的方法。 您将不得不开始将调用挂接到WriteConsole并转储字符串缓冲区。 看到这个帖子进行类似的讨论。

当然,如果这是一个交互式使用,那么只需从命令窗口中选择所有输出并将其复制到剪贴板。 (确保你的cmd窗口缓冲区足够大来存储所有的输出)。

我想我找到了为什么这样表现的技术答案。 WriteConsole的MSDN页面指出,将标准输出重定向到文件会导致WriteConsole失败,应该使用WriteFile。 调试器确认pnputil.exe调用kernel32!WriteConsoleW和kernel32!WriteConsoleInputW。

嗯,我应该问这是两个不同的问题。

我仍然在寻找如何从这个命令刮输出的答案。 接受的答案将是回答这个问题的一部分。

如果您知道驱动程序名称并具有该驱动程序,则pnputil.exe -ad:\ pnpdriver * .inf

这给你正在寻找的驱动程序相应的oemXX.inf列表。

有些应用程序是编写的,所以它可以在管道场景下工作

svn status | find "? " 

是一个将svn status输出输出到find "? "的命令,所以它会将subversion输出过滤到我的回购站中未知的文件(用问号标记)。

想象一下,如果svn状态也会输出一个标题“Copyright?2009”,这个特定的标题行也会出现。 这不是我所期望的。

因此,像Sysinternals这样的特定工具只有直接打印到命令窗口才会写入任何标题信息,如果检测到任何类型的重定向,那么这些标题信息将不会按照上述原因写入。

当在管道/自动化场景中使用时,标题信息变成噪音。

我想如果你不能使用>输出到一个文件,它的工具是hardwired不这样做。 你需要一个间接手段来捕捉它。

希望这可以帮助。

正如问题中提到的,但没有明确指出,“pnputil -e 2> c:\ foo.txt”也没有预期的结果。 这一个没有指示文件,但它确实将输出发送到控制台。

只有两个输出流。 如果“> c:\ foo.txt”不起作用,并且“2> C:\ foo.txt”不起作用,则不会输出任何内容。

您可以将标准错误合并到标准输出(2>&1)中,所有输出都通过标准输出:

pnputil -e 1> c:\ foo.txt 2>&1

如果没有输出任何内容到foo.txt,则pnputil必须检测到重定向并停止输出。

您可以尝试使用Expect for Windows来做这种事情,它会告诉工具有一个控制台,并将WriteConsole调用钩住。 期待Windows

点击系统菜单图标(左上角 – >属性 – >布局)

更改屏幕缓冲区大小

CLS

pnputil -e

;-P

所以我正在寻找相同类型的信息,并遇到这个: https : //sysadminstricks.com/tricks/windows-tricks/cleaning-up-windows-driver-store-folder.html 。 虽然语法是错误的,但它似乎已经完成了我的诡计(稍作更正):

 pnputil.exe -e > c:\driveroutput.txt 

当执行该命令时,它不会输出到命令行,但会生成driveroutput.txtC:的根目录。 实际上,打开文本文件表明我现在在PC上有枚举的OEM驱动程序的输出。