larz
Goto Top

Drucker und Benutzer

Ein Netzwerkdrucker wird getauscht - wie finde ich heraus wer ihn alles verbunden hat?

Hallo zusammen,

in größeren Organisationen ist es üblich, dass es zwar Abteilungsdrucker gibt, der eine oder andere Benutzer aber auch gerne mal hier oder da druckt, vielleicht auch lieber auf dem Drucker im 1. OG weil der Farbe kann oder besser/schneller ist usw.. Mit anderen Worten - werden eines oder mehrere Großgeräte getauscht, ist es nicht immer ganz leicht herauszufinden, wer alles den Drucker benutzt, das wollen wir ja aber. Schließlich muss der neue Drucker auch wieder eingerichtet werden, denn auch wenn der Standarddrucker oftmals per Script verbunden wird, so ist das bei Userseitig eingebundenen Druckern normalerweise nicht der Fall.

Mittels der nachfolgenden Batch-Datei (die von jedem Benutzer über das Logon-Script aufgerufen werden muss) kann dies relativ einfach herausgefunden werden.

Vom Prinzip her arbeitet das Script so:
1. Registry-Export der Drucker des angemeldeten Users erzeugen

Das sieht dann in etwa so aus:
! REG.EXE VERSION 3.0

HKEY_CURRENT_USER\Printers\Connections\
Printservername,,Druckername1
Printservername,,Druckername2
Printservername1,,Druckername1

Recht unschön. Ausserdem interessieren und nicht alle Drucker also gehts weiter mit Punkt 2

2. Zu suchende Drucker im Export ausfindig machen und bei Erfolg in eine "saubere" Datei schreiben
Das wird eine einfache Auflistung aller gesuchten und gefundenen Drucker, sieht dann in etwa so aus:

Druckername1
Druckername2

usw.

3. Textdatei erstellen für jeden gesuchten und gefundenen Drucker und Eintragung des Benutzernamens. Bei bestehender Datei nur Eintragung des Benutzernamens.
Um nun eine Übersicht zu erhalten, welche User welchen der gesuchten Drucker verbunden hat, wird pro Drucker eine Datei angelegt und der Benutzer hineingeschrieben.
Die Datei heißt also z.B. Drucker1.csv und hat den Inhalt

Benutzername1
Benutzername4
Benutzername5


Nun haben wir also eine Übersicht nach Drucker und können die Benutzer per Mail anschreiben oder was auch immer...

Hier nun der Quelltext für die Batch (funktioniert nur in Domänennetzwerken mit verbundenen Druckern):


Zunächst werden Variablen deklariert. Wichtig ist hierbei dass als Ausgabepfad ein Verzeichnis verwendet wird, in dem alle Benutzer Schreibrechte haben.
REM Variablen für Programm deklarieren
set Ausgabeverzeichnis=\\Domaenenname\Server\Gemeinsame_Freigabe
set Ausgabeformat=csv

Wurde das Script schon einmal ausgeführt, aber abgebrochen, so werden die temporär benötigten Dateien hiermit gelöscht, um Doppeleinträge zu vermeiden.
Danach wird der Registry-Export erzeugt:
REM Alte Text-Dateien werden falls vorhanden geloescht, neuer Registry-Export erzeugt
if exist %temp%\regdump_installed_printers.txt del %temp%\regdump_installed_printers.txt
if exist %temp%\total_installed_printers.txt del %temp%\total_installed_printers.txt
reg query HKEY_CURRENT_USER\Printers\Connections\ > %temp%\regdump_installed_printers.txt


Hier werden nun nacheinander die gewünschten Drucker im Registry-Export gesucht und bei Auffinden wird der Benutzername über die temporäre Textdatei total_installed_printers.txt in die endgültige Datei (z.B. Drucker1.csv) geschrieben
REM Durchsuchung des Registry-Exports nach den gewünschten Druckern
:Find_Drucker1
@echo --- Suche ersten Drucker ---
findstr "%USERNAME%" %Ausgabeverzeichnis%\Drucker1.%Ausgabeformat% >nul && goto :Find_Drucker2  
findstr "Drucker1" %temp%\regdump_installed_printers.txt>nul && @echo MFPC-102a >> %temp%\total_installed_printers.txt && @echo %USERNAME% >> %Ausgabeverzeichnis%\Drucker1.%Ausgabeformat%  
@echo ----------------------------

:Find_Drucker2
@echo --- Suche zweiten Drucker ---
findstr "%USERNAME%" %Ausgabeverzeichnis%\Drucker2.%Ausgabeformat% >nul && goto :Find_Drucker3  
findstr "Drucker2" %temp%\regdump_installed_printers.txt>nul && @echo Drucker2 >> %temp%\total_installed_printers.txt && @echo %USERNAME% >> %Ausgabeverzeichnis%\Drucker2.%Ausgabeformat%  
@echo -----------------------------

:Find_Drucker3
@echo --- Suche dritten Drucker ---
findstr "%USERNAME%" %Ausgabeverzeichnis%\Drucker3.%Ausgabeformat% >nul && goto :Find_Drucker4  
findstr "Drucker3" %temp%\regdump_installed_printers.txt>nul && @echo Drucker3 >> %temp%\total_installed_printers.txt && @echo %USERNAME% >> %Ausgabeverzeichnis%\Drucker3.%Ausgabeformat%  
@echo -----------------------------

:Find_Drucker4
@echo --- Suche vierten Drucker ---
findstr "%USERNAME%" %Ausgabeverzeichnis%\Drucker4%Ausgabeformat% >nul && goto :eof  
findstr "Drucker4" %temp%\regdump_installed_printers.txt>nul && @echo Drucker4 >> %temp%\total_installed_printers.txt && @echo %USERNAME% >> %Ausgabeverzeichnis%Drucker4.%Ausgabeformat%  
@echo -----------------------------


Danach noch ein goto :Ende um nicht in einer Endlosschleife hängen zu bleiben:
goto :Ende


Und wie es sich gehört, räumen wir danach auf...
:Ende
REM Loeschen der nicht mehr benoetigten, temporaeren Dateien
del %TEMP%\total_installed_printers.txt
del %TEMP%\regdump_installed_printers.txt



Ich hoffe die Anleitung ist soweit verständlich, dass man das Script nachbauen kann.
Würde mich freuen, wenn es dem einen oder anderen hilft...

Viele Grüße
Larz

Content-Key: 126959

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

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

Member: Dani
Dani Oct 23, 2009 at 22:36:22 (UTC)
Goto Top
Hi Larz,
warum immer so kompliziert?! Einfach über Batch ein Kix-Script aufrufen...da Lässt sich das Ganze mit 7 Zeilen realsieren:
If DelPrinterConnection ("ALTER DRUCKERNAME") = 0  
  ? "Deleted printer connection...."  
Endif

If ADDPRINTERCONNECTION ("\\server\druckerfreigabe") = 0  
  ? "Added printer connection...."  
Endif
Die entsprechenden Namen müssen eben noch ersetzt werden und das Script mit der Endung ".kix" gespeichert werden. Auf dem Netlogon das Kix entpacken und im Loginscript wie folgt aufrufen:
....
"\\%logonserver%\netlogon\kix\kix.exe" "\\%logonserver%\netlogon\transfer_printer.kix"  
...
Fertig ist der Druckertausch... face-smile Funktioniert unter Windows 2000, XP, Vista und 7. Vorallem du musst nicht in der Registry rumbasteln.


Grüße,
Dani