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

automatisches mappen von Druckern in der Domäne mit Loadbalancing der Druckserver

Mitglied: AD

AD (Level 1) - Jetzt verbinden

29.10.2009 um 21:28 Uhr, 6391 Aufrufe, 2 Kommentare

Hallo und guten Tag,

ich hatte mich immer darüber geärgert das die Funktion von Microsoft theoretisch vorhanden ist, aber leider nicht nutzbar.
Ich war es aber auch leid immer bei einem neuen Drucker die batchdatei anzupassen.
Dieses Script benötigt keine erneute Anpassung (ausser es hat einer noch einen Verbesserungsvorschlag ) mehr.

Hoffe das jemand was damit anfangen und einsetzen kann.

Voraussetzung:

- lesenden Remotzugriff auf WMI-Objekt der Print-Server
- den Druckspoolern unterschiedlichen AD-Gruppen zuordnen

01.
---------------------------------- install_print.vbs ---------------------------------------- 
02.
' <Kommentar> 
03.
' Michael Volk, 03.03.2009 
04.
 
05.
' Fehlerhandling einschalten 
06.
'On Error Resume Next 
07.
 
08.
'Definition der Druckspool-Server 
09.
ArrServer = Array("PRINT01", "PRINT02") 
10.
 
11.
'Variable leeren 
12.
ServerStatus = "0" 
13.
 
14.
'Überprüfung der Betriebssystem-Version 
15.
 
16.
if CheckOS = 2195 then 
17.
'Windows 2000' 
18.
'Wscript.echo "Win2K" 
19.
vDefaultPrinter = DelAllPrinter_Win2K 
20.
Spooler (ArrServer) 
21.
SetDefaultPrinter_Win2K (vDefaultPrinter) 
22.
else 
23.
'>Windows 2000' 
24.
'Wscript.echo "otherWin" 
25.
vDefaultPrinter = DelAllPrinter_other 
26.
Spooler (ArrServer) 
27.
SetDefaultPrinter_other (vDefaultPrinter) 
28.
end if 
29.
 
30.
'Ermittelt Betriebssystem-Version (Build-Version) 
31.
Function CheckOS 
32.
Set objWMIService = GetObject("winmgmts:" _ 
33.
& "{impersonationLevel=Impersonate}!\\localhost" & "\root\cimv2") 
34.
Set colOperatingSystems = objWMIService.ExecQuery _ 
35.
("Select * from Win32_OperatingSystem") 
36.
For Each objOperatingSystem in colOperatingSystems 
37.
CheckOS = objOperatingSystem.BuildNumber 
38.
Next 
39.
End Function 
40.
 
41.
'Ermittlung des DefaultPrinters und Löschung aller installierten Netzwerkdrucker 
42.
'Routine für Windows 2000 (Build=2195) 
43.
 
44.
Function DelAllPrinter_WIN2K 
45.
'Wscript.echo "DelAllPrinter" 
46.
'Fehlerhandling einschalten 
47.
On Error Resume Next 
48.
 
49.
'Variablendeklaration 
50.
Dim wmi, localPrinters, localPrinter, KeyX, WSHShell 
51.
 
52.
Set objNetwork = CreateObject("WScript.Network") 
53.
'Via WMI alle Drucker suchen, die lokal installiert sind. 
54.
Set wmi = GetObject("winmgmts:\\.\root\CIMV2") 
55.
Set localPrinters = wmi.InstancesOf("Win32_Printer", 48) 
56.
Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\localhost" & "\root\cimv2") 
57.
Set WSHShell = WScript.CreateObject("WScript.Shell") 
58.
KeyX = "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device" 
59.
DefaultPrinter = WshShell.RegRead( KeyX ) 
60.
vDefaultPrinter = Left ( DefaultPrinter, InStr( DefaultPrinter, ",")-1 ) 
61.
'Wscript.echo "" & vDefaultPrinter 
62.
DelAllPrinter_Win2K = vDefaultPrinter 
63.
 
64.
'alle gefundenen Drucker durchlaufen ... 
65.
For Each localPrinter In localPrinters 
66.
' ... und prüfen ob es ein Netzwerkdrucker ist. 
67.
If left(localPrinter.ServerName,2) = "\\" Then 
68.
' Wenn ja, dann wird er gelöscht 
69.
objNetwork.RemovePrinterConnection localPrinter.Name 
70.
End If 
71.
Next 
72.
End Function 
73.
 
74.
 
75.
Sub SetDefaultPrinter_Win2K (vDefaultPrinter) 
76.
' Fehlerhandling einschalten 
77.
'Wscript.echo "DefaultPrinter" 
78.
On Error Resume Next 
79.
gefunden = 0 
80.
Set WshNetwork = CreateObject("WScript.Network") 
81.
Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\localhost" & "\root\cimv2") 
82.
Set dPrinters = objWMIService.ExecQuery("select * from Win32_Printer where Location='Kopierraum'") 
83.
Set colItems = objWMIService.ExecQuery("select * from Win32_Printer where servername is not null") 
84.
Dim KeyX, WSHShell 
85.
Set WSHShell = WScript.CreateObject("WScript.Shell") 
86.
KeyX = "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device" 
87.
DefaultPrinter = WshShell.RegWrite( KeyX ) 
88.
vDefaultPrinter = Left ( DefaultPrinter, InStr( DefaultPrinter, ",")-1 ) 
89.
'Wscript.echo "" & vDefaultPrinter 
90.
For Each objItem in colItems 
91.
if gefunden = 0 then 
92.
nDefaultPrinter = objItem.ShareName 
93.
dPrinterPath = objItem.Caption 
94.
if (vDefaultPrinter = dPrinterPath) then 
95.
WshNetwork.SetDefaultPrinter dPrinterPath 
96.
gefunden = 1 
97.
Else 
98.
gefunden = 0 
99.
end if 
100.
end if 
101.
Next 
102.
if gefunden = 0 Then 
103.
For Each dprinter in dprinters 
104.
'Wscript.echo "DisplayName: " & dprinter.ShareName 
105.
Printer = dprinter.Caption 
106.
WshNetwork.SetDefaultPrinter Printer 
107.
'Wscript.echo "Abbruch: " & Printer 
108.
Next 
109.
end if 
110.
End Sub 
111.
 
112.
'Einrichtung aller Netzwerkdrucker 
113.
'Übergabeparameter: strDruckspooler (= Druckspool-Server) 
114.
Sub InstallPrinter(strDruckspooler) 
115.
'Wscript.echo "InstallPrinter" 
116.
'Fehlerhandling einschalten 
117.
On Error Resume Next 
118.
objPrinters = Array(50) 
119.
Set objWMIService = GetObject("winmgmts:\\" & strDruckspooler & "\root\cimv2") 
120.
Set objPrinters = objWMIService.ExecQuery("Select Caption from Win32_Printer where not Name='Fax'") 
121.
Set WshNetwork = CreateObject("WScript.Network") 
122.
Set FileSysObj = CreateObject("Scripting.FileSystemObject") 
123.
For Each objPrinter In objPrinters 
124.
PrinterPath="\\" & strDruckspooler & "\" & objPrinter.Caption 
125.
WshNetwork.AddWindowsPrinterConnection PrinterPath, "PrinterDriver" 
126.
Next 
127.
End Sub 
128.
 
129.
'Ermittlung des aktiven Druckspool-Servers 
130.
Sub Spooler (ArrServer) 
131.
'Fehlerhandling einschalten 
132.
On Error Resume Next 
133.
For Each strDruckspooler In ArrServer 
134.
Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & strDruckspooler & "\root\cimv2") 
135.
Set colItems = objWMIService.ExecQuery("Select * from Win32_Service where Name = 'Spooler'") 
136.
For Each objItem in colItems 
137.
if (objItem.State = "Running" and ServerStatus = "0") then 
138.
InstallPrinter (strDruckspooler) 
139.
ServerStatus = "1" 
140.
end if 
141.
Next 
142.
Next 
143.
End Sub 
144.
 
145.
'Löschen der lokalen netzwerkdrucker und ermitteln des DefaultPrinter 
146.
Function DelAllPrinter_other 
147.
' Fehlerhandling einschalten 
148.
On Error Resume Next 
149.
' Ein paar Variabeln deklarieren 
150.
Dim wmi, localPrinters, localPrinter 
151.
' Via WMI alle Drucker suchen die lokal installiert sind. 
152.
Set wmi = GetObject("winmgmts:\\.\root\CIMV2") 
153.
Set localPrinters = wmi.InstancesOf("Win32_Printer", 48) 
154.
Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\localhost" & "\root\cimv2") 
155.
Set colItems = objWMIService.ExecQuery("Select ShareName from Win32_Printer where Default='True'") 
156.
'Wscript.echo "HELLO: " & colItems 
157.
For Each objItem in colItems 
158.
DelAllPrinter_other = objItem.ShareName 
159.
Next 
160.
' alle gefundenen Drucker durchlaufen ... 
161.
For Each localPrinter In localPrinters 
162.
' ... und prüfen ob es ein Netzwerkdrucker ist. 
163.
If localPrinter.Network = vbTrue Then 
164.
' Wenn ja, dann wird er gelöscht 
165.
localPrinter.Delete_ 
166.
' Fehlerhandling 
167.
If Err.number <> 0 Then 
168.
Wscript.echo "Fehler beim löschen des Druckers: " _ 
169.
& localPrinter.Name & " --- " & Err.number 
170.
Err.Clear 
171.
End If 
172.
End If 
173.
Next 
174.
End Function 
175.
 
176.
Sub SetDefaultPrinter_other (vDefaultPrinter) 
177.
' Fehlerhandling einschalten 
178.
'Wscript.echo "DefaultPrinter" 
179.
On Error Resume Next 
180.
gefunden = 0 
181.
Set WshNetwork = CreateObject("WScript.Network") 
182.
Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\localhost" & "\root\cimv2") 
183.
Set dPrinters = objWMIService.ExecQuery("select * from Win32_Printer where Location='Kopierraum'") 
184.
Set colItems = objWMIService.ExecQuery("select * from Win32_Printer where shared = true") 
185.
For Each objItem in colItems 
186.
if gefunden = 0 then 
187.
nDefaultPrinter = objItem.ShareName 
188.
dPrinterPath = objItem.Caption 
189.
if (vDefaultPrinter = nDefaultPrinter) then 
190.
WshNetwork.SetDefaultPrinter dPrinterPath 
191.
gefunden = 1 
192.
Else 
193.
gefunden = 0 
194.
end if 
195.
end if 
196.
Next 
197.
if gefunden = 0 Then 
198.
For Each dprinter in dprinters 
199.
Wscript.echo "DisplayName: " & dprinter.ShareName 
200.
Printer = dprinter.Caption 
201.
WshNetwork.SetDefaultPrinter Printer 
202.
Wscript.echo "Abbruch: " & Printer 
203.
Next 
204.
end if 
205.
End Sub 
206.
 
207.
-----------------------------------------------------------------------------------------------------------------------
Viel Spaß

Michael
Mitglied: neueradmuser
29.10.2009 um 21:47 Uhr
Hi, leider sagt mir dein script nicht so wirklich viel, auch wenn ich so scripte mag ;)

kennst du evtl eine Möglichkeit gewisse Drucker im Netzwerk zu verteilen und oder abzuändern?
haben an die 100-150 Workstations und div. Server... jeder soll alle Drucker installiert bekommen, und sich dann seinen "lieblingsdrucker" aussuchen können. möglichst der der am nächsten zum Arbeitsplatz ist.

Leider bin ich in sowas nicht so fit ... hast du eine Idee?

mfg
Bitte warten ..
Mitglied: Dani
29.10.2009 um 23:04 Uhr
Hi,
vor Weg...deine Frage hat nichts mit dem Tipp buw. Anleitung zu tun. Bitte daher einen neue Frage formulieren. Du darfst gerne per Link auf diesen Beitrag verweisen.


Grüße,
Dani (Editor)
Bitte warten ..
Ähnliche Inhalte
DSL, VDSL

Telekom versendet automatische Kündigungen

Erfahrungsbericht von VoiperDSL, VDSL11 Kommentare

Hallo Zusammen, wer aktuell noch mit einem älteren Anlagenanschluss (Business Basic Complete Premium ö.Ä.) unterwegs ist, könnte dieser Tage ...

Windows 10

Windows 10: Automatische Updates deaktivieren

Tipp von honeybeeWindows 109 Kommentare

Auf einem Windows 10-Tablet konnte ich nicht auswählen, wie Updates installiert werden können. (siehe Screenshot) Ich wollte trotzdem erreichen, ...

Windows 8

HP-Drucker meldet sich unerwartet offline

Anleitung von InternetterWindows 85 Kommentare

Ist es euch auch schon passiert? Ihr habt euren Netzwerk-Drucker eingeschaltet und wollt drucken und dann meldet sich der ...

Windows Server

WSUS unter 2012R2 in einer SBS2011-Domäne installieren

Tipp von Manfred15Windows Server10 Kommentare

Nach langen erfolglosen Versuchen, einen WSUS auf einem 2012R2 DC in einer SBS2011 Domäne zu installieren möchte ich nun ...

Neue Wissensbeiträge
Multimedia & Zubehör
AVM Fritz USB WLAN Sticks schneller einschalten
Tipp von NetzwerkDude vor 1 TagMultimedia & Zubehör

Die AVM Fritz WLAN Sticks haben in der Firmware 2 Modis: Einmal als Massenspeicher und einmal als WLAN Netzwerkkarte ...

Windows Server

Windows Server Backup schlögt Fehl -Lösung 2008-2016

Tipp von BiGnoob vor 1 TagWindows Server

Hi zusammen , ich möchte gerne einen Lösungstipp abgeben für folgenden fehler: lösung ist folgende:

Humor (lol)
Telekom vs. O2 - 3:2
Erfahrungsbericht von the-buccaneer vor 1 TagHumor (lol)4 Kommentare

Unglaublich aber wahr: Nachdem mein privater Anschluss am 19.04.18 auf VOIP und VDSL umgestellt wurde, hatte ich seitdem 1,5 ...

Batch & Shell

Windows 10 Heimnetzgruppe abgeschaft. Ein Script für einfache Netzwerk - Freigabe im Heimnetzwerk

Anleitung von treehe vor 2 TagenBatch & Shell3 Kommentare

Anleitung für eine einfache Netzwerkfreigabe unter Windows 10 Wie weiter hab mal ein kleines CMD - Script gebastelt. Womit ...

Heiß diskutierte Inhalte
Windows Tools
Virtueller Drucker gesucht (Schnittstelle: USB oder Seriell)
gelöst Frage von chrisButterflyWindows Tools21 Kommentare

Hi, ich suche einen virtuellen Drucker, den ich über eine USB oder serieller Schnittstelle ansprechen kann. Dieser Drucker soll ...

Windows Server
Windows Server 2012 - Update - Beim Booten bleibt der Server beim Windows Zeichen stehen
Frage von KeilbachWindows Server17 Kommentare

Hallo Zusammen, ich grüße euch, mein Name ist Michele. Ich bin hier ganz Neu - da ich einfach nicht ...

Windows Server
WinServer2016 AD DS
Frage von MaxHannoverWindows Server5 Kommentare

Hallo zusammen, ich habe eine Domäne, in dieser befinden sich mehrere Organisationseinheiten, die Struktur der OU steht also. Nun ...

Voice over IP
Lokales Telefonbuch von Grandstream GXP-2000 herunterladen
Frage von darodeskVoice over IP5 Kommentare

Hallo zusammen, ein Kunde besitzt ein altes Grandstream GXP-2000 Voip-Telefon, was jetzt durch ein neueres Gerät ersetzt wurde. Er ...