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