Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Batch: Umzug auf neuen Printserver - Drucker aller User per Skript migrieren

Anleitung Entwicklung Batch & Shell

Mitglied: narthan

narthan (Level 1) - Jetzt verbinden

12.12.2013 um 10:57 Uhr, 7204 Aufrufe, 4 Kommentare, 2 Danke

Guten Tag Administratoren!


Es geht um ein lästiges Thema, mit dem ich selbst zu arbeiten hatte und zudem ich keine vollständige und zufriedenstellende Lösung im Internet gefunden habe. Mit ein wenig Hilfe und eigener Arbeit bin ich auf eine - in meinen Augen - schöne Lösung gekommen und stelle sie Euch hiermit ebenfalls zur Verfügung.


__Problemstellung__:

Es wird ein neuer Printserver in der Firma eingerichtet und die Drucker aller User müssen auf den neuen Druckserver umgestellt werden. Um dies zu tun gibt es mehrere Möglichkeiten:
1. von User zu User laufen und alles manuell neu installieren (subjektive Einschätzung: hoher Aufwand)
2. via GPO (Gruppenrichtlinien) die neuen Drucker für unterschiedliche User zuweisen (subjektive Einschätzung: geringer Aufwand)
3. unten beigefügte Batch mit dem Anmeldeskript ausführen lassen (subjektive Einschätzung: geringer Aufwand)


__Optionsauswahl__:

In meinem Fall spielte Option 1 von Beginn an keine Rolle, aufgrund des hohen Zeitaufwands bei so vielen Mitarbeitern im Unternehmen.
Option 2 ist eine sehr gute Möglichkeit dieses Problem lösen, und für die meisten bestimmt die einfachste und bequemste Lösung. Hierzu findet man im world wide web auch eine Menge Material zum Nachlesen und die meisten "Kenner der Problemstellung" würden diese auch beim Nachfragen empfehlen.
Im meinem Fall wiederum, kam die Option 2 allerdings aufgrund von firmeninternen Regularien ebenfalls nicht in Frage...
Infolgedessen werde ich nun denen, die dieses Problem mit Hilfe der Option 3 lösen wollen bzw. müssen, weil 1 und 2 nicht zur Debatte stehen, meine Resultate präsentieren und erläutern.


__Informationen & Voraussetzungen__:

- sämtliche User des Unternehmens verwenden WINDOWS 7 (wichtig für Batch-Abfrage: Standarddrucker, nähere Erläuterung unten)
- alle User verfügen an ihrem eigenen PC über Admin-Rechte
- der ALTE Printserver war ein Windows Server 2003
- der NEUE Printserver ist ein Windows Server 2012 R2
- Programm GnuWin32 (sed for Windows, __ohne__ Sources) installiert (1x auf Server, nicht auf jedem einzelnen PC!)
- Programm con2prt.exe (keine Installation notwendig, direkt verwendbar) im selben Ordner wie sed.exe
(Direktdownload für con2prt.exe findet Ihr HIER! bzw. die Seite mit dem Mirror HIER!


__BATCH__:

01.
@ECHO off 
02.
SETLOCAL enabledelayedexpansion 
03.
 
04.
SET "gesuchte_datei=C:\temp\Printer_Migration.txt" 
05.
IF NOT EXIST %gesuchte_datei% GOTO fortfahren 
06.
GOTO END 
07.
:fortfahren 
08.
ECHO Bitte warten... 
09.
cscript C:\Windows\System32\Printing_Admin_Scripts\de-DE\prnmngr.vbs -g > C:\temp\stndprnt.txt 
10.
 
11.
con2prt.exe /f > C:\temp\drucker.txt 
12.
 
13.
sed.exe "s/\xd//" "C:\temp\drucker.txt" > "C:\temp\druckersed.txt" 
14.
SET "quell_datei=C:\temp\druckersed.txt" 
15.
SET "ziel_datei=C:\temp\druckersedNEU.txt" 
16.
SET "suchen_nach=ALTERSERVER" 
17.
SET "ersetzen_durch=NEUERSERVER" 
18.
IF NOT DEFINED suchen_nach (ECHO Fehler: Die Variable suchen_nach nicht definiert^^!&GOTO :eof) 
19.
IF EXIST %ziel_datei% (DEL /f %ziel_datei% 1>NUL 2>NUL) 
20.
FOR /f "delims=" %%i IN ('FINDSTR . "%quell_datei%"') DO ( 
21.
SET zeile=%%i& CALL :ersetzen !zeile! 
22.
23.
GOTO :weiter 
24.
:ersetzen 
25.
SET zeile=!zeile:%suchen_nach%=%ersetzen_durch%! 
26.
IF [!zeile!] EQU [] (ECHO.>>%ziel_datei%) ELSE (ECHO !zeile!>>%ziel_datei%) 
27.
GOTO :eof 
28.
:weiter 
29.
 
30.
SET "quell_datei=C:\temp\stndprnt.txt" 
31.
SET "ziel_datei=C:\temp\stndprntNEU.txt" 
32.
SET "suchen_nach=ALTERSERVER" 
33.
SET "ersetzen_durch=NEUERSERVER" 
34.
IF NOT DEFINED suchen_nach (ECHO Fehler: Die Variable suchen_nach nicht definiert^^!&GOTO :eof) 
35.
IF EXIST %ziel_datei% (DEL /f %ziel_datei% 1>NUL 2>NUL) 
36.
FOR /f "delims=" %%i IN ('FINDSTR . "%quell_datei%"') DO ( 
37.
SET zeile=%%i& CALL :ersetzen !zeile! 
38.
39.
GOTO :weiter 
40.
:ersetzen 
41.
SET zeile=!zeile:%suchen_nach%=%ersetzen_durch%! 
42.
IF [!zeile!] EQU [] (ECHO.>>%ziel_datei%) ELSE (ECHO !zeile!>>%ziel_datei%) 
43.
GOTO :eof 
44.
:weiter 
45.
FOR /f "tokens=5 delims= " %%i IN (C:\temp\druckersedNEU.txt) DO con2prt.exe /c %%i 
46.
SET "Textdatei=C:\temp\stndprntNEU.txt" 
47.
FOR /f "tokens=4" %%s IN ('findstr /c:"Standarddrucker" "%Textdatei%" ^|findstr /n "^" ^|findstr "1:"') DO con2prt.exe /cd %%s 
48.
ECHO Diese Datei darf nicht gelöscht werden^^! > C:\temp\Printer_Migration.txt 
49.
 
50.
DEL C:\temp\drucker.txt  
51.
DEL C:\temp\druckersed.txt 
52.
DEL C:\temp\druckersedNEU.txt 
53.
DEL C:\temp\stndprnt.txt 
54.
DEL C:\temp\stndprntNEU.txt 
55.
GOTO ENDE 
56.
:END 
57.
ECHO Die Migration des Printservers wurde auf diesem PC bereits durchgefuehrt^^! 
58.
:ENDE

__Erläuterung des Codes__:

Zeilen 4-7 & Zeile 48:
Da das Skript nicht bei jedem Anmeldevorgang erneut ausgeführt werden soll - da sonst bei jedem Start die installierten Drucker deinstalliert und wieder neuinstalliert werden - wird in Zeile 48 nach erstmaligen erfolgreichen Ablauf des Batchskripts eine Textdatei erstellt, die nicht gelöscht werden sollte (außer man möchte die De- und Neuinstallation beim nächsten PC-Start ;) ). In den Zeilen 4-7 prüft das Skript, ob diese Datei existiert. Falls ja, springt das Skript ans Ende und ist fertig. Falls die Datei nicht existiert, wird das Skript ausgeführt und die Datei wird erstellt.

Zeile 9:
Hier wird mit Hilfe eines von Windows hinterlegten Skripts der Drucker ermittelt, der vor der Servermigration als Standarddrucker eingerichtet ist. Das Ergebnis wird in einer Text-Datei gespeichert, damit nach Migration der gleiche Standarddrucker wieder eingestellt werden kann.
(!) Wichtig: Der Pfad und ggf. der Name des Skripts können von Betriebssystem zu Betriebssystem variieren. Der hier aufgeführte Pfad bezieht sich auf Windows 7 Systeme.

Zeile 11:
Mit Hilfe von "con2prt.exe /f" werden alle installierten Drucker entfernt. Damit die gleichen Drucker wieder eingerichtet werden können, wird das Ergebnis ist einer Text-Datei gespeichert.

Zeile 13:
con2prt kann nicht mit Zeilenumbrüchen umgehen. Wenn mehrere Drucker installiert waren und entfernt werden, dann gibt con2prt eine Fehlermeldung beim Versuch der erneuten Installation wieder. Daher wird mit Hilfe von sed.exe die gerade erstellte Text-Datei überarbeitet und das Resultat in einer neuen Text-Datei gespeichert.

- An dieser Stelle nochmals Danke an Endoro , der mir dabei geholfen hat!

Zeilen 14-28:
Da wir aber nicht die selben Drucker des ALTEN Druckservers wieder installieren möchte, weil das relativ sinnfrei wäre, muss der Servername in der zuvor durch sed bearbeiteten Text-Datei durch den Namen des NEUEN Printservers ersetzt werden. Die einzigen Änderungen die Ihr vornehmen müsst, sind die ersten 4 SET-Zeilen. Das Ergebnis wird in der Ziel-Datei gespeichert.

Zeilen 30-44:
Auch der Servername des Standarddruckers, den wir oben ermittelt und separat in einer Text-Datei abgespeichert haben, muss durch den NEUEN Namen ersetzt werden. Gleiche Prozedur, gleiche Änderungen notwendig.

Zeile 45:
Mit Hilfe des "con2prt.exe /c" Befehls werden die zuvor ursprünglich installierten Drucker, nun jedoch unter NEUEM Server installiert.

Zeilen 46-47:
Mit Hilfe des "con2prt.exe /cd" Befehls wird der eingerichtet, der in der Textdatei durch das Windows-spezifische Skript abgespeichert wurde.

Zeile 48:
s.o.

Zeilen 50-54:
Alle für das Skript notwendigen Text-Dateien, bis auf die für den weiteren Verlauf relevante Datei aus Zeile 48, werden gelöscht, da sie nicht mehr benötigt werden.



Ich hoffe es ist alles verständlich formuliert und falls ich auch nur einer weiteren Person damit helfen kann/konnte, freue ich mich.

Grüße, narthan
Mitglied: qualidat
12.12.2013, aktualisiert um 14:29 Uhr
Wenn der Druckserver über seinen Namen aufgelöst wird, dann nenn doch den Neuen genau so wie den Alten (der dann vom Netz muss) und gut ist - oder nicht?
Bitte warten ..
Mitglied: narthan
13.12.2013 um 08:21 Uhr
Moin qualidat

Zitat von qualidat:

Wenn der Druckserver über seinen Namen aufgelöst wird, dann nenn doch den Neuen genau so wie den Alten (der dann vom
Netz muss) und gut ist - oder nicht?

Theoretisch liegst du damit richtig, allerdings wurde in unserem Bsp. der alte Druckserver nicht aufgelöst. Über ihn laufen noch diverse alte Programme, die erst in den kommenden Wochen erneuert werden. Daher blieb nur ein neuer Name übrig ;) So konnten wir übrigens auch die Treiber vom alten auf den neuen Server packen, ohne erneutes Heraussuchen im Internet.

Gruß, narthan
Bitte warten ..
Mitglied: Dani
26.12.2013 um 22:20 Uhr
Zitat von qualidat:

Wenn der Druckserver über seinen Namen aufgelöst wird, dann nenn doch den Neuen genau so wie den Alten (der dann vom
Netz muss) und gut ist - oder nicht?
Das wird z.B. schwer wenn es viele Drucker sind. Wir haben auf einem Printserver ca. 400 Drucker. Das dauert seine Zeit. Oft wurden spezielle Einstellungen hinterlegt. Somit kann ich auf den alten Server nachschauen und übernehmen.
Vllt wäre es sinnvoll den alten und neuen Printservernamen am Anfang abzufragen um diese später in Variable zu wenden?!


Grüße,
Dani
Bitte warten ..
Mitglied: spankyham98
26.01.2016 um 15:43 Uhr
Hallo,

wir sind aktuell dabei mit der o. g Batchdatei unsere User auf einen neuen Printserver umzuziehen. Angepasst haben wir dafür bisher folgendes:

- Zeilen 16, 17, 32 und 33 mit useren entsprechenden Printservernamen gefüllt
- alle Zeilen angepasst die "C:\temp" als Verzeichnis anzeigen -> ersetzt durch einen Laufwerksbuchstaben, auf welchen der User Vollzugriff hat
- Programm GnuWin32 auf beiden Printservern installiert
- angepasste Batchdatei, con2prt.exe, benötigte Programmbibliotheken (libiconv2.dll, libintl3.dll, regex2.dll) von sed.exe und sed.exe in ein Verzeichnis abgelegt auf welches der User Vollzugriff hat

Testweise hat die Änderung bei einem User schon funktioniert, der die Batchdatei manuell ausgeführt hat.

Leider scheitert der Versuch die Batchdatei als Anmeldeskript über eine GPO zu verteilen... Die Batchdatei wurde dafür lediglich als Anmeldeskript unter User Configuration->Policies->Windows Settings->Skripts(Anmelden/Abmelden) abgelegt. Nach der Anmeldung taucht die Textdatei "Printer_Migration" im angegebenen Verzeichnis auf, die alten Drucker wurden allerdings nicht ersetzt.

Gibt es jemanden der dies bereits über eine GPO erfolgreich durchgeführt hat?

Gruß
spankyham98
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Windows Server
gelöst Laufwerke aller User für Chef (20)

Frage von tsunami zum Thema Windows Server ...

Exchange Server
gelöst Exchange Einführung - Kalender aller User untereinander freigeben und hinzufügen (10)

Frage von Mosurama zum Thema Exchange Server ...

VB for Applications
gelöst Umstellung Printserver - Drucker anlegen (3)

Frage von trynerror zum Thema VB for Applications ...

Windows 7
gelöst Batch-Skript oder VBS Skript zum Sichern von Office Vorlagen (2)

Frage von Ceejaay zum Thema Windows 7 ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (23)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (19)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...