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

时间:2008-09-10 16:23:48

标签: windows

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

对应用程序通常将输出写入cmd shell的技术解释的奖励,但是当重定向stdout和/或stderr时,应用程序什么都不写入控制台或stdout / stderr?

C:\Windows\System32>PnPutil.exe --help
Microsoft PnP Utility {...}

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

C:\Windows\System32>type c:\foo.txt

C:\Windows\System32>dir c:\foo.txt
 Volume in drive C has no label.
 Volume Serial Number is XXXX-XXXX

 Directory of c:\

09/10/2008  12:10 PM                 0 foo.txt
               1 File(s)              0 bytes

9 个答案:

答案 0 :(得分:1)

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

嗯,我本来应该问这两个问题。

我仍在寻找如何从此命令中删除输出的答案。接受的答案将是回答这部分问题的答案。

答案 1 :(得分:1)

似乎没有简单的方法。您必须开始挂钩对WriteConsole的调用并转储字符串缓冲区。有关类似的讨论,请参阅this post

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

答案 2 :(得分:1)

如果您知道驱动程序名称并拥有驱动程序, pnputil.exe -a d:\ pnpdriver * .inf

这为您正在寻找的驱动程序提供了相应的oemXX.inf列表。

答案 3 :(得分:0)

编写了一些应用程序,以便在管道方案中很好地工作,例如

svn status | find "? "

是一个命令,用于将svn status的输出管道传输到find "? ",以便它会将我的存储库中的subversion输出过滤到未知文件(标有问号)。

想象一下,如果svn状态还会输出一个标题“Copyright?2009”,那么非常具体的标题行也会出现。哪个我的期望。

所以某些工具,如Sysinternals',如果直接打印到命令窗口,会写入任何标题信息 ,如果检测到任何类型的重定向,那么这些标题信息将不会是由上述原因写成。

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

我想如果你不能使用>输出到文件,那是因为该工具是硬连线的,不能这样做。你需要一种间接手段来捕获它。

希望这有帮助。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

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

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

答案 6 :(得分:0)

您可以尝试使用Expect for Windows来执行此类操作,它会告诉工具有一个控制台并挂钩WriteConsole为您调用。 Expect for Windows

答案 7 :(得分:0)

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

更改屏幕缓冲区大小

CLS

pnputil -e

; - P

答案 8 :(得分:0)

所以我正在寻找相同类型的信息,并且遇到了这个: https://sysadminstricks.com/tricks/windows-tricks/cleaning-up-windows-driver-store-folder.html。 虽然语法错误,但它似乎已经为我做了一些技巧(稍作修正):

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

当执行该命令时,它输出到命令行,但它确实生成driveroutput.txtC:的根。 事实上,打开文本文件显示我现在在我的PC上有枚举的OEM驱动程序的输出。