如何捕获“%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
答案 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.txt
到C:
的根。
事实上,打开文本文件显示我现在在我的PC上有枚举的OEM驱动程序的输出。