automatisches mappen von Druckern in der Domäne mit Loadbalancing der Druckserver
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
Viel Spaß
Michael
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
---------------------------------- install_print.vbs ----------------------------------------
' <Kommentar>
' Michael Volk, 03.03.2009
' Fehlerhandling einschalten
'On Error Resume Next
'Definition der Druckspool-Server
ArrServer = Array("PRINT01", "PRINT02")
'Variable leeren
ServerStatus = "0"
'Überprüfung der Betriebssystem-Version
if CheckOS = 2195 then
'Windows 2000'
'Wscript.echo "Win2K"
vDefaultPrinter = DelAllPrinter_Win2K
Spooler (ArrServer)
SetDefaultPrinter_Win2K (vDefaultPrinter)
else
'>Windows 2000'
'Wscript.echo "otherWin"
vDefaultPrinter = DelAllPrinter_other
Spooler (ArrServer)
SetDefaultPrinter_other (vDefaultPrinter)
end if
'Ermittelt Betriebssystem-Version (Build-Version)
Function CheckOS
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=Impersonate}!\\localhost" & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
CheckOS = objOperatingSystem.BuildNumber
Next
End Function
'Ermittlung des DefaultPrinters und Löschung aller installierten Netzwerkdrucker
'Routine für Windows 2000 (Build=2195)
Function DelAllPrinter_WIN2K
'Wscript.echo "DelAllPrinter"
'Fehlerhandling einschalten
On Error Resume Next
'Variablendeklaration
Dim wmi, localPrinters, localPrinter, KeyX, WSHShell
Set objNetwork = CreateObject("WScript.Network")
'Via WMI alle Drucker suchen, die lokal installiert sind.
Set wmi = GetObject("winmgmts:\\.\root\CIMV2")
Set localPrinters = wmi.InstancesOf("Win32_Printer", 48)
Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\localhost" & "\root\cimv2")
Set WSHShell = WScript.CreateObject("WScript.Shell")
KeyX = "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device"
DefaultPrinter = WshShell.RegRead( KeyX )
vDefaultPrinter = Left ( DefaultPrinter, InStr( DefaultPrinter, ",")-1 )
'Wscript.echo "" & vDefaultPrinter
DelAllPrinter_Win2K = vDefaultPrinter
'alle gefundenen Drucker durchlaufen ...
For Each localPrinter In localPrinters
' ... und prüfen ob es ein Netzwerkdrucker ist.
If left(localPrinter.ServerName,2) = "\\" Then
' Wenn ja, dann wird er gelöscht
objNetwork.RemovePrinterConnection localPrinter.Name
End If
Next
End Function
Sub SetDefaultPrinter_Win2K (vDefaultPrinter)
' Fehlerhandling einschalten
'Wscript.echo "DefaultPrinter"
On Error Resume Next
gefunden = 0
Set WshNetwork = CreateObject("WScript.Network")
Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\localhost" & "\root\cimv2")
Set dPrinters = objWMIService.ExecQuery("select * from Win32_Printer where Location='Kopierraum'")
Set colItems = objWMIService.ExecQuery("select * from Win32_Printer where servername is not null")
Dim KeyX, WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
KeyX = "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device"
DefaultPrinter = WshShell.RegWrite( KeyX )
vDefaultPrinter = Left ( DefaultPrinter, InStr( DefaultPrinter, ",")-1 )
'Wscript.echo "" & vDefaultPrinter
For Each objItem in colItems
if gefunden = 0 then
nDefaultPrinter = objItem.ShareName
dPrinterPath = objItem.Caption
if (vDefaultPrinter = dPrinterPath) then
WshNetwork.SetDefaultPrinter dPrinterPath
gefunden = 1
Else
gefunden = 0
end if
end if
Next
if gefunden = 0 Then
For Each dprinter in dprinters
'Wscript.echo "DisplayName: " & dprinter.ShareName
Printer = dprinter.Caption
WshNetwork.SetDefaultPrinter Printer
'Wscript.echo "Abbruch: " & Printer
Next
end if
End Sub
'Einrichtung aller Netzwerkdrucker
'Übergabeparameter: strDruckspooler (= Druckspool-Server)
Sub InstallPrinter(strDruckspooler)
'Wscript.echo "InstallPrinter"
'Fehlerhandling einschalten
On Error Resume Next
objPrinters = Array(50)
Set objWMIService = GetObject("winmgmts:\\" & strDruckspooler & "\root\cimv2")
Set objPrinters = objWMIService.ExecQuery("Select Caption from Win32_Printer where not Name='Fax'")
Set WshNetwork = CreateObject("WScript.Network")
Set FileSysObj = CreateObject("Scripting.FileSystemObject")
For Each objPrinter In objPrinters
PrinterPath="\\" & strDruckspooler & "\" & objPrinter.Caption
WshNetwork.AddWindowsPrinterConnection PrinterPath, "PrinterDriver"
Next
End Sub
'Ermittlung des aktiven Druckspool-Servers
Sub Spooler (ArrServer)
'Fehlerhandling einschalten
On Error Resume Next
For Each strDruckspooler In ArrServer
Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & strDruckspooler & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Service where Name = 'Spooler'")
For Each objItem in colItems
if (objItem.State = "Running" and ServerStatus = "0") then
InstallPrinter (strDruckspooler)
ServerStatus = "1"
end if
Next
Next
End Sub
'Löschen der lokalen netzwerkdrucker und ermitteln des DefaultPrinter
Function DelAllPrinter_other
' Fehlerhandling einschalten
On Error Resume Next
' Ein paar Variabeln deklarieren
Dim wmi, localPrinters, localPrinter
' Via WMI alle Drucker suchen die lokal installiert sind.
Set wmi = GetObject("winmgmts:\\.\root\CIMV2")
Set localPrinters = wmi.InstancesOf("Win32_Printer", 48)
Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\localhost" & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select ShareName from Win32_Printer where Default='True'")
'Wscript.echo "HELLO: " & colItems
For Each objItem in colItems
DelAllPrinter_other = objItem.ShareName
Next
' alle gefundenen Drucker durchlaufen ...
For Each localPrinter In localPrinters
' ... und prüfen ob es ein Netzwerkdrucker ist.
If localPrinter.Network = vbTrue Then
' Wenn ja, dann wird er gelöscht
localPrinter.Delete_
' Fehlerhandling
If Err.number <> 0 Then
Wscript.echo "Fehler beim löschen des Druckers: " _
& localPrinter.Name & " --- " & Err.number
Err.Clear
End If
End If
Next
End Function
Sub SetDefaultPrinter_other (vDefaultPrinter)
' Fehlerhandling einschalten
'Wscript.echo "DefaultPrinter"
On Error Resume Next
gefunden = 0
Set WshNetwork = CreateObject("WScript.Network")
Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\localhost" & "\root\cimv2")
Set dPrinters = objWMIService.ExecQuery("select * from Win32_Printer where Location='Kopierraum'")
Set colItems = objWMIService.ExecQuery("select * from Win32_Printer where shared = true")
For Each objItem in colItems
if gefunden = 0 then
nDefaultPrinter = objItem.ShareName
dPrinterPath = objItem.Caption
if (vDefaultPrinter = nDefaultPrinter) then
WshNetwork.SetDefaultPrinter dPrinterPath
gefunden = 1
Else
gefunden = 0
end if
end if
Next
if gefunden = 0 Then
For Each dprinter in dprinters
Wscript.echo "DisplayName: " & dprinter.ShareName
Printer = dprinter.Caption
WshNetwork.SetDefaultPrinter Printer
Wscript.echo "Abbruch: " & Printer
Next
end if
End Sub
-----------------------------------------------------------------------------------------------------------------------
Viel Spaß
Michael
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 128265
Url: https://administrator.de/knowledge/automatisches-mappen-von-druckern-in-der-domaene-mit-loadbalancing-der-druckserver-128265.html
Ausgedruckt am: 23.12.2024 um 03:12 Uhr
2 Kommentare
Neuester Kommentar
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
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