Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: Tom73

Tom73 (Level 1) - Jetzt verbinden

30.11.2006, aktualisiert 25.02.2008, 60931 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 ..
Ähnliche Inhalte
Windows Update

Telemetrie Daten bei Windows7 und 8 nun automatisch aktiv

Information von sabinesWindows Update1 Kommentar

Microsoft hat aus den bisher optionalen Updates zur Telemetrieerfassung kritische Updates gemacht, und damit dafür gesorgt, dass sie automatisch ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von VolchyWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Neue Wissensbeiträge
Humor (lol)
Administrator.de Perlen
Tipp von DerWindowsFreak2 vor 16 StundenHumor (lol)2 Kommentare

Hallo, Heute beim stöbern auf dieser Seite bin auf folgenden Thread aus dem Jahre 2006 gestossen: Was meint ihr? ...

Erkennung und -Abwehr
OpenSSH-Backdoor Malware erkennen
Tipp von Frank vor 1 TagErkennung und -Abwehr

Sicherheitsforscher von Eset haben 21 Malware-Familien untersucht. Die Malware soll Hintertüren via OpenSSH bereitstellen, so dass Angreifer Fernzugriff auf ...

iOS
WatchChat für Whatsapp
Tipp von Criemo vor 4 TageniOS5 Kommentare

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

iOS
IOS hat nen Cursor!
Tipp von Criemo vor 5 TageniOS5 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Heiß diskutierte Inhalte
Festplatten, SSD, Raid
SSD zeigt falsche Werte
Frage von karl2014Festplatten, SSD, Raid25 Kommentare

Ich habe ein Problem mit der SSD in meinem Laptop mit Windows 10. Es ist eine 1Tb Platte die ...

Server-Hardware
WS 2016 Essentials Hardware
Frage von ChefknechtServer-Hardware23 Kommentare

Moin welche Hardware würdet ihr empfehlen? Dell Poweredge HP Proliant Fujitsu Ich bin total konfus was nun nötig ist, ...

Windows Server
Welche Option fürs Windows Server Installations besser
Frage von backitWindows Server22 Kommentare

Hi Zusammen, ich werde unserer AD (SBS 2011) und Exchange 2010 Servern auf neuen physikalischen Server umziehen. ich habe ...

Ubuntu
Installation freerdp 2.0.0-rc4
Frage von kristovUbuntu20 Kommentare

Hallo, möchte freerdp 2.0.0-rc4 auf linux mint 18.3 installieren, habe aber keine Ahnung, wie das funktioniert. freerdp 1.1 ist ...