tillixx07
Goto Top

Freigabenamen und Ports der installierten Drucker per batch auslesen

Hallo zusammen!

Ich möchte zwecks Inventarisierung auf meinem Printserver (win2003r2) die installierten Drucker auf folgende Werte hin auslesen: Name, Freigabename und Anschluss.

nach langer Suche und Probieren bin ich bis hier her gekommen:

Unter HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers finden sich alle gewünschten Informationen.

Mit:
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers" /s /v "Share Name" >> C:\drucker1.txt
kann ich die Freigabenamen, mit:
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers" /s /v "Name" >> C:\drucker2.txt
den Namen, mit
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers" /s /v "Port" >> C:\drucker3.txt
den Anschluss in die jeweilige Datei schreiben.

Ich möchte aber mehrere Werte eines Schlüssels gleichzeitig auslesen und in EINE Datei schreiben

installierte Drucker auslesen hat mir nicht mehr weiter geholfen, genauso habe ich die Hilfe zu "reg query" erschöpft.

Ich bin daher über über Eure Hilfe dankbar.

Viele Grüße
tillixx

Content-Key: 161417

Url: https://administrator.de/contentid/161417

Printed on: April 19, 2024 at 21:04 o'clock

Member: pieh-ejdsch
pieh-ejdsch Feb 23, 2011 at 13:41:32 (UTC)
Goto Top
moin tillixx,

sollen die Daten in der Txt eine bestimmte Formatierung/Sortierung besitzten? ZB. nach Drucker sortiert.

Gruß Phil
Member: tillixx07
tillixx07 Feb 23, 2011 at 13:50:18 (UTC)
Goto Top
Hi Phil,

die Sortierung sollte nach Druckername erfolgen.

ZB.:
Drucker1 [freigabename] [port]
Drucker2 [freigabename] [port]

usw.

Aber das funktioniert bei dem o.g. Batch in gewisser Weise, da der Schlüssel wie der jeweilige Drucker heißt:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Drucker1

Grüße
t.
Member: pieh-ejdsch
pieh-ejdsch Feb 23, 2011 at 14:39:27 (UTC)
Goto Top
das müsste dann in etwa so gehen:
@echo off&setlocal
set "Datei=C:\Drucker.txt"  
(
for /f "delims=" %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers" /s /v "Name"^|findstr "\\"') do @for /f "tokens=3*" %%j in ('reg query "%%i" /v "Share Name"^|findstr /v "\\"') do @for /f "tokens=2*" %%l in ('reg query "%%i" /v "Port"^|findstr /v "\\"') do @echo %%~ni [%%k] [%%m]  
)>"%Datei%"  

Gruß Phil
Member: tillixx07
tillixx07 Feb 23, 2011 at 15:07:28 (UTC)
Goto Top
Vielen Dank,

allerdings bricht das Skript ab, ohne die Einträge auszulesen. Leider sind meine "Kenntnisse" hierzu recht bescheiden, um zu sagen, woran es liegt.
Member: pieh-ejdsch
pieh-ejdsch Feb 23, 2011 at 15:27:03 (UTC)
Goto Top
probier es nochmal mit dem ausgemerzten Fehler. Ich hatte ein > Zeichen zuviel vor der FORschleife.

Gruß Phil
Member: tillixx07
tillixx07 Feb 23, 2011 at 15:34:41 (UTC)
Goto Top
leider nein. Ich habe mal "pause" nach zeile 2 und 5 eingefügt, die erste funktioniert noch, die 2. nicht mehr.
Member: pieh-ejdsch
pieh-ejdsch Feb 23, 2011 at 15:55:39 (UTC)
Goto Top
da war noch ein Leerzeichen vor dem Dateiname. Jetzt sollte es gehen.

Gruß Phil
Member: tillixx07
tillixx07 Feb 23, 2011 at 16:04:18 (UTC)
Goto Top
das LZ hatte ich schon entfernt, das ist es auch nicht.
Member: Friemler
Friemler Feb 23, 2011 at 17:10:02 (UTC)
Goto Top
Hallo tillixx07,

der gute Phil hat ein wenig zu viel optimiert, das war alles. Die Ausgabe von geschachtelten FOR-Schleifen mit einem Rutsch in eine Datei umleiten (Zeile 5) funktioniert aus irgendwelchen Gründen nicht (Grüße an den Praktikanten, der die CMD-Shell programmiert hat face-wink ). Nimm folgende Abwandlung des Codes:

@echo off

setlocal

set "Datei=C:\Drucker.txt"  

type NUL > "%Datei%"  

for /f "delims=" %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers" /s /v "Name" ^| findstr "\\"') do (  
  for /f "tokens=3*" %%j in ('reg query "%%i" /v "Share Name" ^| findstr /v "\\"') do (  
    for /f "tokens=2*" %%l in ('reg query "%%i" /v "Port" ^| findstr /v "\\"') do (  
      >>"%Datei%" echo %%~ni [%%k] [%%m]  
    )
  )
)

Gruß
Friemler
Member: tillixx07
tillixx07 Feb 23, 2011 at 17:49:00 (UTC)
Goto Top
Grandios!!

Herzlichen Dank Euch beiden und einen schönen Abend!

grüße
tillixx
Member: pieh-ejdsch
pieh-ejdsch Feb 23, 2011 at 18:31:33 (UTC)
Goto Top
moin Friemler,

das ist ja Verwunderlich ich hatte erst die kommplette forschleife im cmd Fenster mit korrekter Ausgabe gehabt und dann in die Batch Übertragen.
Bei mir hatte die Batch dann aber die Ausgabe auch ins File eingetragen.

solche Eigenheiten - das es mal hier funtioniert und woanders nicht ist ja auch komisch.

Gruß Phil
Member: Friemler
Friemler Feb 23, 2011 at 19:08:21 (UTC)
Goto Top
Hi Phil,

vielleicht liegt es ja an der Betriebssystemversion, da gibt es schon kleine Unterschiede zwischen CMD unter XP und Windows 7. Ich benutze Windows 7 Ultimate N 32Bit mit frisch installiertem SP1.

[EDIT]
Es liegt nicht an der Betriebssystemversion, sondern am unterschiedlichen Verhalten von CMD bei Ausführung eines Befehls von der Kommandozeile oder aus einem Batchfile heraus.
[/EDIT]

Gruß
Friemler
Member: pieh-ejdsch
pieh-ejdsch Feb 23, 2011 at 19:17:39 (UTC)
Goto Top
naja ich benutze auch ein Win 7 Ultimate 32 Bit - mit allen derzeit zur Verfügung stehenden Patches.

Also immer Up to Date.

Wofür steht denn das "N"? (Nicht für alles geeignet oder Eingeschränkte Funtionstüchtigkeit)

obwohl ich auch manchmal beim Übermässigen Testen von Scripten oder nur so in der CMD bei Unerwarteten Ausgaben einen Neustart machen muss, damit die CMD wieder so tut wie sie soll.

Gruß Phil
Member: Friemler
Friemler Feb 23, 2011 at 19:21:14 (UTC)
Goto Top
Hi Phil,

die Versionen mit dem N enthalten keinen Mediaplayer. Der Windows-Leistungsindex ist deshalb auch nicht benutzbar. Es gibt aber ein spezielles Pack von MS für die N-Versionen zum nachinstallieren.

Woran es lag habe ich in einem EDIT zu meinem obigen Kommentar gepostet.

Gruß
Friemler
Member: tillixx07
tillixx07 Feb 24, 2011 at 09:25:39 (UTC)
Goto Top
Guten Morgen,

ich möchte noch mein finales Skript posten. Es werden der Name, der Anschluss, der Freigabename, die Beschreibung und der Name des Druckertreibers in eine csv Datei ausgegeben (getrennt durch Semikolon).

Nochmals danke für die Hilfe
tillixx


@echo off
setlocal 
set "Datei=J:\Drucker.csv"   
type NUL > "%Datei%"   
for /f "delims=" %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers" /s /v "Name" ^| findstr "\\"') do (   
  for /f "tokens=2*" %%j in ('reg query "%%i" /v "Port" ^| findstr /v "\\"') do (   
    for /f "tokens=3*" %%l in ('reg query "%%i" /v "Share Name" ^| findstr /v "\\"') do (  
      for /f "tokens=2*" %%n in ('reg query "%%i" /v "Description" ^| findstr /v "\\"') do (  
       for /f "tokens=2*" %%p in ('reg query "%%i" /v "Location" ^| findstr /v "\\"') do (  
        for /f "tokens=3*" %%r in ('reg query "%%i" /v "Printer Driver" ^| findstr /v "\\"') do (  
      >>"%Datei%" echo %%~ni;%%k;%%m;%%o;%%q;%%s  
	  )
	)
      )
    ) 
  ) 
)
Member: desbo84
desbo84 Mar 24, 2011 at 16:45:39 (UTC)
Goto Top
Moin Moin,


ich brauche auch genau so ein Script. Nur benötige ich auch noch den Treiber.
Habe jetzt erst einmal das Script testen wollen. Leider bekomme ich nur eine leere Datei. Bei beiden Versionen txt und csv.
Arbeite mit Xp SP3.

Schönen Gruß

Dennis
Member: pieh-ejdsch
pieh-ejdsch Mar 25, 2011 at 10:08:53 (UTC)
Goto Top
moin desbo84,

sollte eigentlich etwas drin stehen...

Was bringt Dir denn das Script für eine Ausgabe in die CMD-Line, wenn Du die die Umleitung aus der Zeile 11 entfernst und nur
echo %%~ni;%%k;%%m;%%o;%%q;%%s
stattdessen stehen hast.

was gibt Dir diese Zeile in der CMD-Line abgefeuert aus?
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers" /s /v "Name"  

Gruß Phil
Member: desbo84
desbo84 Mar 25, 2011 at 10:41:52 (UTC)
Goto Top
Moin Phil,


also zu 1. "Fehler zu viele Befehlszeilenparameter"

2. Gleiche Meldung wie 1.

Gruß

Desbo
Member: tillixx07
tillixx07 Mar 25, 2011 at 13:01:53 (UTC)
Goto Top
Hallo Desbo,

lass mich raten: Du führst das Script unter WinXP aus?

Grüße
t.
Member: desbo84
desbo84 Mar 25, 2011 at 13:57:07 (UTC)
Goto Top
jap hatte ich ja oben geschrieben xp sp3...

muss ich etwas ändern? face-smile

xp muss bleiben hehe
Member: tillixx07
tillixx07 Mar 25, 2011 at 14:14:23 (UTC)
Goto Top
überlesen, sorry

Bei mir kommt unter WinXP SP3 der selbe Fehler.
Member: pieh-ejdsch
pieh-ejdsch Mar 31, 2011 at 22:48:21 (UTC)
Goto Top
moin,

Patchday ist aber erst in einer Woche ...
XP will die Schalter /v und /s im reg Befehl nicht kombinieren KA warum.

die Verschalchtelten Forschleifen werden auch durcheinandergebracht und die Reg ausgabe ist auch anders

Patch for XP and Win7 - positiv getestet
@echo off
setlocal
set "Datei=C:\Drucker.csv"   

(
for /f "delims=" %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers" /s ^|findstr /b /c:"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers" 2^>nul') do (  
	for /f "tokens=2*" %%j in ('reg query "%%i" /v  "Name"		 2^>nul ^| findstr "REG_" 2^>nul') do (       set "PNAME=%%k"  
		for /f "tokens=2*" %%l in ('reg query "%%i" /v  "Port"		 2^>nul ^| findstr "REG_" 2^>nul') do set "PPort=%%m"  
		for /f "tokens=3*" %%l in ('reg query "%%i" /v  "Share Name"	 2^>nul ^| findstr "REG_" 2^>nul') do set "PShareName=%%m"  
		for /f "tokens=2*" %%l in ('reg query "%%i" /v  "Description"	 2^>nul ^| findstr "REG_" 2^>nul') do set "PDescription=%%m"  
		for /f "tokens=2*" %%l in ('reg query "%%i" /v  "Location"	 2^>nul ^| findstr "REG_" 2^>nul') do set "PLocation=%%m"  
		for /f "tokens=3*" %%l in ('reg query "%%i" /v  "Printer Driver" 2^>nul ^| findstr "REG_" 2^>nul') do set "PPrinterDriver=%%m"  
		setlocal enabledelayedexpansion
		echo !PNAME!;!PPort!;!PShareName!;!PDescription!;!PLocation!;!PPrinterDriver!
		>&3 echo !PNAME!;!PPort!;!PShareName!;!PDescription!;!PLocation!;!PPrinterDriver!
		endlocal
)	)
) 3>"%Datei%"  


notepad "%Datei%"  
pause

Gruß Phil