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-ID: 161417

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

Ausgedruckt am: 21.11.2024 um 17:11 Uhr

pieh-ejdsch
pieh-ejdsch 23.02.2011 um 14:41:32 Uhr
Goto Top
moin tillixx,

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

Gruß Phil
tillixx07
tillixx07 23.02.2011 um 14:50:18 Uhr
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.
pieh-ejdsch
pieh-ejdsch 23.02.2011 um 15:39:27 Uhr
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
tillixx07
tillixx07 23.02.2011 um 16:07:28 Uhr
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.
pieh-ejdsch
pieh-ejdsch 23.02.2011 um 16:27:03 Uhr
Goto Top
probier es nochmal mit dem ausgemerzten Fehler. Ich hatte ein > Zeichen zuviel vor der FORschleife.

Gruß Phil
tillixx07
tillixx07 23.02.2011 um 16:34:41 Uhr
Goto Top
leider nein. Ich habe mal "pause" nach zeile 2 und 5 eingefügt, die erste funktioniert noch, die 2. nicht mehr.
pieh-ejdsch
pieh-ejdsch 23.02.2011 um 16:55:39 Uhr
Goto Top
da war noch ein Leerzeichen vor dem Dateiname. Jetzt sollte es gehen.

Gruß Phil
tillixx07
tillixx07 23.02.2011 um 17:04:18 Uhr
Goto Top
das LZ hatte ich schon entfernt, das ist es auch nicht.
Friemler
Friemler 23.02.2011 um 18:10:02 Uhr
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
tillixx07
tillixx07 23.02.2011 um 18:49:00 Uhr
Goto Top
Grandios!!

Herzlichen Dank Euch beiden und einen schönen Abend!

grüße
tillixx
pieh-ejdsch
pieh-ejdsch 23.02.2011 um 19:31:33 Uhr
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
Friemler
Friemler 23.02.2011 um 20:08:21 Uhr
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
pieh-ejdsch
pieh-ejdsch 23.02.2011 um 20:17:39 Uhr
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
Friemler
Friemler 23.02.2011 um 20:21:14 Uhr
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
tillixx07
tillixx07 24.02.2011 um 10:25:39 Uhr
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  
	  )
	)
      )
    ) 
  ) 
)
desbo84
desbo84 24.03.2011 um 17:45:39 Uhr
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
pieh-ejdsch
pieh-ejdsch 25.03.2011 um 11:08:53 Uhr
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
desbo84
desbo84 25.03.2011 um 11:41:52 Uhr
Goto Top
Moin Phil,


also zu 1. "Fehler zu viele Befehlszeilenparameter"

2. Gleiche Meldung wie 1.

Gruß

Desbo
tillixx07
tillixx07 25.03.2011 um 14:01:53 Uhr
Goto Top
Hallo Desbo,

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

Grüße
t.
desbo84
desbo84 25.03.2011 um 14:57:07 Uhr
Goto Top
jap hatte ich ja oben geschrieben xp sp3...

muss ich etwas ändern? face-smile

xp muss bleiben hehe
tillixx07
tillixx07 25.03.2011 um 15:14:23 Uhr
Goto Top
überlesen, sorry

Bei mir kommt unter WinXP SP3 der selbe Fehler.
pieh-ejdsch
pieh-ejdsch 01.04.2011 um 00:48:21 Uhr
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