windows - Sådan fanges output af 'pnputil.exe -e'

Indlæg af Hanne Mølgaard Plasc

Problem



Hvordan fanger jeg output fra '\% windir\%/system32/pnputil.exe -e'?
(antage Windows Vista 32-bit)


Bonus for teknisk forklaring på, hvorfor appen normalt skriver output til cmd-skalen, men når stdout og/eller stderr omdirigeres, skriver appen intet til konsollen eller til stdout/stderr?


C:WindowsSystem32>PnPutil.exe --help
Microsoft PnP Utility {...}

C:WindowsSystem32>pnputil -e > c:foo.txt

C:WindowsSystem32>type c:foo.txt

C:WindowsSystem32>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

Bedste reference


Det ser ud til, at der ikke er nogen nem måde. Du skal begynde at forbinde opkaldet til WriteConsole og dumpere strengbufferne. Se dette indlæg til en lignende diskussion. [9]


Selvfølgelig, hvis dette er en engang for interaktiv brug, så vælg bare alle output fra kommandovinduet og kopier det til udklipsholderen. (Sørg for, at cmd vinduesbufferen er stor nok til at gemme al udgang).

Andre referencer 1


Jeg tror jeg fandt det tekniske svar på hvorfor det opfører sig på denne måde. MSDN-siden for WriteConsole siger, at omdirigering af standard-output til en fil får WriteConsole til at mislykkes, og at WriteFile skal bruges i stedet. Fejlfinderen bekræfter, at pnputil.exe kalder kernel32! WriteConsoleW og kernel32! WriteConsoleInputW.


Hmm, jeg burde have stillet dette som to separate spørgsmål.


Jeg søger stadig et svar på, hvordan man scraper output fra denne kommando. Det accepterede svar vil være et svar på denne del af spørgsmålet.

Andre referencer 2


Hvis du kender førernavnet og har chaufføren,
pnputil.exe -a d: \ pnpdriver * .inf


Dette giver en liste over tilsvarende oemXX.inf for de chauffører, du leder efter.

Andre referencer 3


Nogle applikationer er skrevet, så det fungerer i rør scenarier godt f.eks.


svn status | find "? "


er en kommando, der rør output fra svn status til find "? ", så det ville filtrere subversion output ned til ukendte filer (markeret med et spørgsmålstegn) i min repos.


Forestil dig, om svn-status også ville udgive en overskrift, der siger 'Copyright' 2009 '. Denne meget specifikke header linje vil også dukke op. Hvilket er ikke , hvad jeg forventer.


Så visse værktøjer, som de af Sysinternals ', vil skrive nogen headerinformation kun , hvis den udskrives direkte til kommandovinduet, hvis nogen form for omdirigering bliver registreret, bliver disse headeroplysninger ikke skrevet som ved grunden ovenfor.


Hovedinformationer bliver lyd, når de anvendes i rør/automatiseringsscenarier.


Jeg antager, at hvis du ikke kan bruge > til at sende til en fil, er det fordi værktøjet er hardwired for ikke at gøre det. Du skal bruge et indirekte middel til at fange det.


Håber dette hjælper.

Andre referencer 4


Som det fremgår af spørgsmålet, men ikke klart angivet, har 'pnputil -e 2> c: \ foo.txt' heller ikke det tilsigtede resultat. Denne styrer intet i filen, men det sender output til konsollen.

Andre referencer 5


Der er kun to udgangsstrømme. Hvis '> c: \ foo.txt' ikke virker, og '2> C: \ foo.txt' ikke virker, bliver der ikke udført noget.


Du kan flette standardfejlen i standard output (2> &1), så al output er via standard output:


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


Hvis det ikke udsender noget til foo.txt, skal pnputil detektere omdirigering og stoppe output.

Andre referencer 6


Du kunne have forsøgt at forvente for Windows at gøre denne slags ting, det ville fortælle værktøjet, at der var en konsol og krog WriteConsole opfordrer til dig.
Forvent for Windows [10]

Andre referencer 7


Klik på systemmenuikonet (øverste venstre hjørne-> egenskaber-> layout)


Skift skærmbufferstørrelse


CLS


pnputil -e


;-P

Andre referencer 8


Så jeg leder efter den samme type information, og kom på tværs af dette:
https://sysadminstricks.com/tricks/windows-tricks/cleaning-up-windows-driver-store-folder.html.
Mens syntaksen er forkert, synes det at have gjort tricket for mig (med en lille korrektion): [11]


pnputil.exe -e > c:driveroutput.txt


Når kommandoen udføres, udsender den ikke ikke til kommandolinjen, men den genererer driveroutput.txt til roden til C:.
Åbning af tekstfilen viser faktisk, at jeg nu har en output fra de opregnede OEM-drivere på min pc.