Как захватить вывод "pnputil.exe -e" - PullRequest
3 голосов
/ 10 сентября 2008

Как мне записать вывод "% windir% / system32 / pnputil.exe -e"? (предположим, Windows Vista 32-разрядная)

Бонус за техническое объяснение того, почему приложение обычно записывает вывод в оболочку cmd, но когда перенаправляются 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 ]

1 голос
/ 16 ноября 2011

Если вы знаете имя и драйвер, pnputil.exe -a d: \ pnpdriver * .inf

Это дает список соответствующих oemXX.inf для драйверов, которые вы ищете.

1 голос
/ 10 сентября 2008

Не похоже, что есть легкий путь. Вы должны начать подключать вызов к WriteConsole и создавать дамп строковых буферов. См. этот пост для аналогичного обсуждения.

Конечно, если это одноразовое использование для интерактивного использования, просто выберите все выходные данные из окна команд и скопируйте их в буфер обмена. (Убедитесь, что буфер окна cmd достаточно велик для хранения всего вывода).

1 голос
/ 10 сентября 2008

Мне кажется, я нашел технический ответ, почему он так себя ведет. На странице MSDN для WriteConsole говорится, что перенаправление стандартного вывода в файл приводит к сбою WriteConsole, и вместо этого следует использовать WriteFile. Отладчик подтверждает, что pnputil.exe вызывает kernel32! WriteConsoleW и kernel32! WriteConsoleInputW.

Хм, я должен был задать это как два отдельных вопроса.

Я все еще ищу ответ о том, как очистить выходные данные этой команды. Принятым ответом будет ответ, который отвечает на эту часть вопроса.

0 голосов
/ 17 октября 2017

Итак, я искал информацию того же типа и наткнулся на это: https://sysadminstricks.com/tricks/windows-tricks/cleaning-up-windows-driver-store-folder.html. Хотя синтаксис неверен, похоже, он помог мне (с небольшой поправкой):

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

Когда эта команда выполняется, она не выводит в командную строку, но генерирует driveroutput.txt в корне C:. Открытие текстового файла фактически показывает, что у меня теперь есть вывод перечисленных драйверов OEM на моем ПК.

0 голосов
/ 16 марта 2010

Нажмите на значок системного меню (верхний левый угол-> свойства-> макет)

Изменить размер экранного буфера

ЦБС

pnputil -e

; - P

0 голосов
/ 20 марта 2009

Вы могли бы попробовать Expect for Windows, чтобы делать подобные вещи, он сообщал бы инструменту о наличии консоли и перехватывал вызовы WriteConsole. Ожидайте для Windows

0 голосов
/ 10 сентября 2008

Есть только два выходных потока. Если «> c: \ foo.txt» не работает, а «2> C: \ foo.txt» не работает, то ничего не выводится.

Вы можете объединить стандартную ошибку со стандартным выходом (2> & 1), чтобы весь вывод проходил через стандартный вывод:

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

Если это ничего не выводит в foo.txt, тогда pnputil должен обнаружить перенаправление и остановить вывод.

0 голосов
/ 10 сентября 2008

Как упоминалось в вопросе, но не ясно указано, "pnputil -e 2> c: \ foo.txt" также не имеет ожидаемого результата. Он ничего не направляет в файл, но отправляет вывод на консоль.

0 голосов
/ 10 сентября 2008

Некоторые приложения написаны так, чтобы они хорошо работали в сценариях трубопровода, например,

svn status | find "? "

- это команда, которая перенаправляет вывод svn status в find "? ", поэтому она фильтрует вывод subversion до неизвестных файлов (помеченных знаком вопроса) в моих репозиториях.

Представьте, что svn status также выведет заголовок с надписью «Copyright? 2009». Эта очень специфическая строка заголовка также будет отображаться. Что не , что я ожидаю.

Таким образом, некоторые инструменты, такие как Sysinternals ', будут записывать любую информацию заголовка только , если она выводится непосредственно в командное окно, если обнаружен какой-либо вид перенаправления, эта информация заголовка не будет записана как указано выше.

Информация заголовка становится помехой при использовании в сценариях трубопроводов / автоматизации.

Полагаю, если вы не можете использовать > для вывода в файл, это потому, что инструмент встроен, чтобы этого не делать. Вам понадобятся косвенные средства, чтобы захватить его.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...