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

Netzwerkdrucker automatisch verbinden - ein Lösungsvorschlag

Anleitung Netzwerke

Mitglied: Tom73

Tom73 (Level 1) - Jetzt verbinden

30.11.2006, aktualisiert 25.02.2008, 60074 Aufrufe, 10 Kommentare

Bisherige Lösungen waren mir zu unflexibel.

Unsere AD-Struktur ist nicht nach Räumlichkeiten aufgebaut, sondern nach Abteilungen, also z.B. QM oder Produktion. Da aber z.B. die QM in verschiedenen Werken sitzt und die QM'ler gerne auch Werksübergreifend drucken (also die drucken sich gegenseitig Zettel aus), zentrale Abteilungsdrucker vorhanden sind auf die wiederum auch von anderen Abteilungen und Standorten gedruckt wird und es auch noch freigegebene lokale Drucker gibt, waren bisherige Lösungsvorschläge einfach nicht umsetzbar.

So hab ich das gelöst:

Teil 1:

Eine Liste mit allen Rechnernamen, für die das Skript gelten soll (steht ein Rechner nicht drin, oder steht hinter dem Rechnernamen kein Netzwerkdrucker, dann wird das Skript beendet). Neben dem Rechnernamen steht der oder die Netzwerkdrucker. Es können auch freigegebene Clientdrucker verbunden werden (siehe PC004).

Drucker.ini:
01.
PC001;S\\printserver1\drucker1;\\printserver2\drucker7 
02.
PC002;\\printserver2\drucker7;S\\printserver1\drucker2 
03.
PC003 
04.
PC004;\\PC001\druckerXY 
05.
Notebook1;\\printserver2\drucker2
(In unserem Netzwerk hab ich ca. 400 Rechner in dieser Liste.)
Der Drucker, vor dem ein "S" steht wird der Standarddrucker, steht kein "S" in der Zeile bleibt der Standarddrucker (z.B. ein lokaler Drucker) erhalten.

Teil 2:

Ein VB-Skript welches die INI-Datei durchläuft, auswertet und die Druckerverbindungen erstellt. Einfach anschauen, ist gut kommentiert. Steht in der Zeile vom Client mindestens 1 Netzwerkdrucker, werden erst mal ALLE vorhandenen Verbindungen am Client gelöscht, und dann die Netzwerkdrucker aus der Drucker.ini verbunden.

DruckerVerbinden.vbs:

01.
'******************************************************************* 
02.
'*DruckerVerbinden.vbs 
03.
'* 
04.
'* Verbindet anhand des Rechnernamens alle in der Drucker.ini angegebenen  
05.
'* Netzdrucker mit dem PC und setzt auch passend den Standarddrucker 
06.
'* 
07.
'* 2006 by Thomas 
08.
'* für Script Host Version 5.6 
09.
'* 
10.
'******************************************************************* 
11.
 
12.
 
13.
'* Konstanten und Variablen 
14.
Const ForReading = 1, ForWriting = 2 
15.
Dim WSHNet, WSHShell, fso, IniFile, POP, PCName, Meldung, Argument, i, strPrinter 
16.
 
17.
Dim objNetwork, objPrinters 
18.
Dim intLoop 
19.
 
20.
Set WSHNet = CreateObject("WScript.Network") 
21.
Set WSHShell = CreateObject("WScript.Shell") 
22.
Set fso = CreateObject("Scripting.FileSystemObject") 
23.
Set IniFile = fso.OpenTextFile(WshShell.ExpandEnvironmentStrings("%LOGONSERVER%") & "\NETLOGON\DRUCKER\Drucker.ini", ForReading, False) 
24.
 
25.
On Error Resume Next 
26.
 
27.
PCName = UCase(WSHNet.ComputerName) 
28.
 
29.
'Zeilenweises Einlesen der ini-Datei 
30.
Do While Not IniFile.AtEndOfStream 
31.
  strRecord = IniFile.ReadLine 
32.
	if strRecord = "" Then 
33.
	Else 
34.
		'Aufteilen der eingelesenen Zeile durch ein Trennzeichen in ein Array 
35.
		arrRecord = Split(strRecord, ";") 
36.
		'Wenn der 1. Wert im Array = Rechnername dann weitermachen 
37.
		If arrRecord(0) = PCName Then 
38.
			i = 0 
39.
			'Zählen der übergebenen Argumente 
40.
			For Each Argument in arrRecord 
41.
				i = i + 1 
42.
			Next 
43.
			'Anzahl der Drucker im Array = übergebene Argumente - 1 (da PCName = 1. Argument) 
44.
			i = i - 1 
45.
			'Wenn nur ein Argument (der Rechnername) übergeben wurde, wird das Skript beendet 
46.
			If i = 0 Then 
47.
				WScript.Quit 
48.
			End if 
49.
			 
50.
			'Ist midestens ein Drucker vorhanden, dann werden erst mall ALLE Netzwerkdrucker getrennt 
51.
			Set objNetwork = WScript.CreateObject("WScript.Network") 
52.
			Set objPrinters = objNetwork.EnumPrinterConnections 
53.
			For intLoop = 0 to objPrinters.Count - 1 
54.
				objNetwork.RemovePrinterConnection objPrinters.Item(intLoop),-1,-1 
55.
				WScript.Sleep 500 
56.
			Next 
57.
			 
58.
			'Für jedes Argument >0 wird ein Drucker verbunden 
59.
			Do while i > 0 
60.
				'Steht ein "S" an erster stelle, dann wird es der Standarddrucker 
61.
				If Left(arrRecord(i), 1) =  "S" Then 
62.
					strPrinter = Right(arrRecord(i),Len(arrRecord(i))-1) 
63.
					WSHNet.AddWindowsPrinterConnection strPrinter 
64.
					WSHNet.SetDefaultPrinter strPrinter 
65.
					'Sleep wurde eingebaut, da bei ein paar Rechnern keine Drucker verbunden wurden 
66.
					WScript.Sleep 1000 
67.
					i = i - 1 
68.
				Else 
69.
				'Kein "S" kein Standarddrucker 
70.
					WSHNet.AddWindowsPrinterConnection arrRecord(i) 
71.
					WScript.Sleep 1000 
72.
					i = i - 1 
73.
				End If 
74.
			Loop 
75.
			'Meldung = "Druckerverbindung für " & PCName & " erfolgreich" 
76.
			'POP = WSHShell.Popup(Meldung,3,"Euer Druckerskript") 
77.
			WScript.Quit 
78.
		End if 
79.
	End If 
80.
Loop
Ich empfehle zur Ablage der beiden Dateien das NETLOGON-Verzeichnis eines DC, damit wird das Skript auf alle DC's repliziert. Bei mir liegt es im Unterverzeichnis "Drucker (\\DeinDC\NETLOGON\Drucker). Es wird im Skript die Variable %LOGONSERVER% ausgewertet, damit wird das Skript immer vom DC am Standort geladen. Liegen die beiden Dateien in einem anderen Verzeichnis, muss das VBS-Skript angepasst werden.


Das Skript wird bei der Anmeldung des Benutzers abgearbeitet. Folgendermassen wird es (bei uns) im Loginskript aufgerufen:

01.
WSHShell.run WshShell.ExpandEnvironmentStrings("%LOGONSERVER%") & "\NETLOGON\DRUCKER\DruckerVerbinden.vbs", 0, true
Es geht aber auch über einen Doppelklick auf die DruckerVerbinden.vbs oder über eine Batch-Datei oder sonstwie.


Vorteile:

Funktioniert auch ohne AD (also z.B. NT4 oder Samba)
Sehr flexibel
Ideal wenn Standort- oder Abteilungsübergreifend (OU-Übergreifend) gedruckt werden soll
Ungültige Druckerverbindungen werden gelöscht
Es können leicht Ausnahmen definiert werden


Nachteile:

Ausführung von VBS-Skripten darf nicht verboten sein
Muss gepflegt werden (anfangs mehr, dann immer weniger)


Bekannte Mängel:

Wird ein Drucker auf dem Printserver gelöscht, kann das Skript die Druckerverbindung an den Clients nicht mehr richtig entfernen, daher erst den Drucker am Printserver ANHALTEN, dann die Verbindungen zu den Clients über das Druckerskript löschen. Nach einiger Zeit (ca. 2 Wochen) kann man dann den Drucker vom Printserver löschen.

Wenn der Printserver (egal ob richtiger Printserver od. freigegebener Clientdrucker) nicht verfügbar ist, bricht das Skript ab. Es kann also vorkommen, das ein Client keine Drucker mehr hat, wenn der Printserver nicht verfügbar ist!! Evtl. hat von euch da einer eine Idee?

Viel Spass damit
Thomas
Mitglied: geTuemII
05.12.2006 um 20:45 Uhr
Hallo Tom,

schick Ich hatte schon länger was in dieser Richtung gesucht.

Eine kleine Anmerkung für alle, die (wie ich) Anfänger auf dem Gebiet sind: in der Drucker.ini muß der Rechnername groß geschrieben sein, sonst läuft das Script fehler- aber leider auch wirkungslos durch (der Eintrag bekommt kein Match zu PCName).

Auf diese Weise habe ich das Script analysiert und bei der Gelegenheit IMO auch halbwegs verstanden, hat auch sein Gutes.

geTuemII
Bitte warten ..
Mitglied: gemini
15.12.2006 um 22:16 Uhr
@geTuemII
in der Drucker.ini muß der Rechnername groß geschrieben sein,
... lässt sich so umgehen:
If UCase(arrRecord(0)) = PCName Then

gemini
Bitte warten ..
Mitglied: hydrotoxin
18.04.2007 um 12:51 Uhr
Das Abrechen des Scripts verhindern?

On Error Resume Next

Aber man möchte natürlich noch wissen, was schiefgelaufen ist:
Es gibt da ein schönes Objekt: Err das immer generiert wird wenn was schiefläuft.

If Err.Number <> 0 Then
.....
End If

Und die Auswertung mit Err.Description und Err.Source in ein Logfile oder Eventlog (WShell.LogEvent) macht das ganze
professionell

/hydrotoxin
Bitte warten ..
Mitglied: Dynadrate
13.05.2007 um 13:21 Uhr
Hi,
es gibt unter Windows 2003 eine Printserver Funktion. Zusammen mit einem Login-skript wie KixTart scheint mir es eine gute Möglichkeit zu sein, Drucker User-oder Computerbezogen zu verbinden.
Hat der Printserver von 2003 irgendwelche Macken von denen ich noch nichts weiß?
Bitte warten ..
Mitglied: Kampfnudel
22.02.2008 um 15:24 Uhr
Nun du kannst Problemlos die Drucker Personen zuweisen (was bei 400 Personen dumm ist) und computer bezogen hat zumindenst bei mir nicht funktioniert
Bitte warten ..
Mitglied: Tom73
22.02.2008 um 19:26 Uhr
computer bezogen hat zumindenst bei mir nicht funktioniert
Warum eigentlich? Hat das mit dem Skript zu tun oder ist es eher was organisatorisches, also haben sich etwa die Benutzer quergestellt?
Ich muss zugeben, dass ich das Skript (leider) nicht für alle Rechner verwenden kann (kein technischer sondern ein organisatorischer Grund), weil manche Benutzer besondere Einstellungen für ihre Drucker benötigen (wollen...). Nachdem das Skript durchgelaufen ist, sind ja nur wieder die Standardeinstellungen des Druckers aktiv.

Thomas
Bitte warten ..
Mitglied: geTuemII
23.02.2008 um 01:25 Uhr
Leg doch für die verschiedenen Konfigurationen unterschiedliche Drucker samt Freigaben auf dem Server an. Das funktioniert bei mir gut, und die Streitereien unter den Usern, wer welche Einstellung verdreht hat, sind deutlich weniger geworden.

geTuemII
Bitte warten ..
Mitglied: Kampfnudel
24.02.2008 um 08:50 Uhr
Hmm das Verstehe ich nicht ganz wie du das meinst? Kannst du das etwas Ausführlicher schreiben?
Bitte warten ..
Mitglied: geTuemII
25.02.2008 um 13:27 Uhr
@Kampfnudel:
Ok, dann konstruiere ich mal ein Szenario; der Klassiker: du hast einen Farblaser, auf den aber nur einige Abteilungen wirklich dauernd farbig drucken müssen, allen anderen reicht sw. Wenn du jetzt einen Drucker einrichtest und freigibst, muß immer eine der Gruppen die Druckereinstellungen verstellen.

Mein Vorgehen: ich lege zwei Drucker mit demselben Treiber an, konfiguriere die unterschiedlichen Druckeinstellungen für den Standard gebe beide Drucker mit passendem Namen frei (im Beispiel Drucker Farbe und Drucker sw). Mit dem Script oben verbinde ich jeweils den Drucker als Standard, der dauernd benötigt wird (also entweder Farbe oder sw), in manchen Fällen auch zusätzlich den anderen (wenn normalerweise sw benötigt wird und nur ab und zu Farbe). Auf diese Weise müssen sich die MA nicht um die Druckereinstellungen kümmern und es besteht die berechtigte Hoffnung, daß die Standardeinstellungen auch dem entsprechen, was der MA erwartet.

Nun klarer?

geTuemII
Bitte warten ..
Mitglied: hochmohr
19.12.2011 um 12:30 Uhr
Hallo,

ich greife den Thread mal wieder auf mit einem Problem:

Das Skript habe ich über Jahre begeistert unter Win XP eingesetzt. Nach der Umstellung auf Win7 stellt sich das Problem, dass bei der Ausführung der Benutzer gefragt wird, ob er die Druckertreiber installieren will. Kann man das irgendwie unterdrücken?


Gruß

Thomas
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Server
Drucker automatisch verbinden lassen (9)

Frage von 2Seiten zum Thema Windows Server ...

IDE & Editoren
USB STICK Datei AUTOMATISCH beim anschliessen auf fremden PC öffnen (9)

Frage von Jwanner83 zum Thema IDE & Editoren ...

Windows 10
Surface 4 Pro Netzlaufwerk verbinden (4)

Frage von Yannosch zum Thema Windows 10 ...

Windows Server
gelöst Windows Server 2012 mit Fritzbox per VPN verbinden (13)

Frage von StefanT81 zum Thema Windows Server ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...