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

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

Tipp Microsoft Windows Server

Mitglied: AD

AD (Level 1) - Jetzt verbinden

29.10.2009 um 21:28 Uhr, 6299 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: nightwishler
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
Exchange Server
gelöst 2. Exchange Server (unabhängig) in einer Domäne (5)

Frage von Hellgore zum Thema Exchange Server ...

Cloud-Dienste
WEB-Ordner als lokales Laufwerk mappen : IIS 7 mit WEBdav (6)

Frage von MeinGottWalter zum Thema Cloud-Dienste ...

Windows 7
Netzwerk-Domäne gleich Online-Domäne - DNS Problem (10)

Frage von Manik013 zum Thema Windows 7 ...

Neue Wissensbeiträge
Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(2)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Windows 10

Das Windows 10 Creators Update ist auf dem Weg

(5)

Anleitung von BassFishFox zum Thema Windows 10 ...

Administrator.de Feedback

Tipp: Ungelöste Fragen ohne Antwort in Tickeransicht farblich hinterlegen

Tipp von pattern zum Thema Administrator.de Feedback ...

Viren und Trojaner

Neue Magazin Ausgabe: Malware und Angriffe abwehren

Information von Frank zum Thema Viren und Trojaner ...

Heiß diskutierte Inhalte
Windows Systemdateien
Warum System auf "C:" (29)

Frage von DzumoPRO zum Thema Windows Systemdateien ...

Cloud-Dienste
gelöst Bitcoins minen über Nacht? (16)

Frage von 1410640014 zum Thema Cloud-Dienste ...

Windows Server
gelöst Update BackupExec 2015 auf 2016 führt zu SQL-Server Problem (16)

Frage von montylein1981 zum Thema Windows Server ...

Batch & Shell
gelöst Batch um Benutzer aus Sitzung abzumelden (15)

Frage von zeroblue2005 zum Thema Batch & Shell ...