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, 6267 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?

Mit freundlichen Grüßen
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 ..
Neuester Wissensbeitrag
Festplatten, SSD, Raid

12TB written pro SSD in 2 Jahren mit RAID5 auf Hyper-VServer

Erfahrungsbericht von Lochkartenstanzer zum Thema Festplatten, SSD, Raid ...

Ähnliche Inhalte
Windows Server
Active Directory Domäne und Druckserver (8)

Frage von haashaasp zum Thema Windows Server ...

Windows Userverwaltung
gelöst Programmupdates ohne Adminrechte für die User einer Domäne (3)

Frage von M.Marz zum Thema Windows Userverwaltung ...

Exchange Server
Exchange 2010 Akzeptierte Domäne löschen (4)

Frage von Rob1982 zum Thema Exchange Server ...

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

Frage von patz223 zum Thema Windows Userverwaltung ...

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 ...

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

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

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

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