Bereinigung alter Druckserver Umstellung an den Clients
Hallo zusammen, stehe gerade hier vor einem mittelgroßen Problem.
Ausgangssituation: ca 450 Drucker, ca 1500 Clients (zum großen Teil noch XP),
zwei Printserver (Windows 2003 und Windows 2008 R2). Alle Drucker vom 2003 Druckserver wurden von mir schon auf dem 2008er angelegt. Die Clients können von mehreren Usern verwendet werden, natürlich ist bei den meisten noch der Pfad zu dem alten Printserver vorhanden. Neu ausgelieferte Clients oder Drucker bekommen natürlich nur noch den aktuellen Printserver zugewiesen.
Die Zuweisung der Drucker erfolgte via Netinstall, leider sind die Drucker dort teilweise nicht mehr aktuell, die Listen veraltet. Zudem de-installiert Netinstall die einmal zugewiesenen Drucker nicht mehr.Was teilweise zu Problemen führt. Zudem sind die Drucker per Benutzer zugewiesen. Und es können sich wie gesagt mehrere Benutzer an einem Client anmelden.
Durch eine WMI Abfrage am Server weiß ich welcher Benutzer von welchem Drucker im letzten Monat gedruckt hatte.
Allerdings ohne den dazugehörigen Client...
Leider sehe ich im Netinstall nicht alle Benutzer welche den Client nutzen, sondern immer nur die Person welche sich zuletzt angemeldet hatte. Das einzige was man als Vorteil nennen könnte ist, dass Netinstall die Drucker generell für alle User installiert.
Aber diese Netinstall-Lösung ist imo alles andere als effizient und optimal, ich habe zwar eine Bastellösung welche
via PSexec und nem kleinen Script alle Drucker vom zuvor ausgewählten Client herunter haut, aber ich müsste Im Gegenzug dann auch den jeweiligen Drucker im Netinstall pro Client wieder eintragen. Und welche Drucker dies genau sein sollten kann ich nur vermuten, die die User sich mit der Zeit auch selbst Drucker hinzufügen konnten und die Drucker im Netintsall, wie schon gesagt, zum Teil veraltet sind.
Ich habe in meinem Batchscript keine Abfrage drin, welcher mir die beinhalteten Drucker der Clients ausliest... Auch sehe ich nicht genau welcher User den Client mitbenutzt.
Entweder ich mache mit der Batch (mit zukünftiger Abfrage der Drucker/User) und dem Netinstall weiter.
Wobei ich im Batchscripting eher eine Niete bin^^
Oder ich suche mir eine andere bessere Methode aus, was meint ihr? Wäre z.B eine Verteilung und vor allem eine De-Installation über eine GPO nicht wesentlich sinnvoller!?
Oder was gibt es sonst noch für Ansätze, stehe gerade etwas auf dem Schlauch..
Schon mal ein Danke fürs Lesen
Ausgangssituation: ca 450 Drucker, ca 1500 Clients (zum großen Teil noch XP),
zwei Printserver (Windows 2003 und Windows 2008 R2). Alle Drucker vom 2003 Druckserver wurden von mir schon auf dem 2008er angelegt. Die Clients können von mehreren Usern verwendet werden, natürlich ist bei den meisten noch der Pfad zu dem alten Printserver vorhanden. Neu ausgelieferte Clients oder Drucker bekommen natürlich nur noch den aktuellen Printserver zugewiesen.
Die Zuweisung der Drucker erfolgte via Netinstall, leider sind die Drucker dort teilweise nicht mehr aktuell, die Listen veraltet. Zudem de-installiert Netinstall die einmal zugewiesenen Drucker nicht mehr.Was teilweise zu Problemen führt. Zudem sind die Drucker per Benutzer zugewiesen. Und es können sich wie gesagt mehrere Benutzer an einem Client anmelden.
Durch eine WMI Abfrage am Server weiß ich welcher Benutzer von welchem Drucker im letzten Monat gedruckt hatte.
Allerdings ohne den dazugehörigen Client...
Leider sehe ich im Netinstall nicht alle Benutzer welche den Client nutzen, sondern immer nur die Person welche sich zuletzt angemeldet hatte. Das einzige was man als Vorteil nennen könnte ist, dass Netinstall die Drucker generell für alle User installiert.
Aber diese Netinstall-Lösung ist imo alles andere als effizient und optimal, ich habe zwar eine Bastellösung welche
via PSexec und nem kleinen Script alle Drucker vom zuvor ausgewählten Client herunter haut, aber ich müsste Im Gegenzug dann auch den jeweiligen Drucker im Netinstall pro Client wieder eintragen. Und welche Drucker dies genau sein sollten kann ich nur vermuten, die die User sich mit der Zeit auch selbst Drucker hinzufügen konnten und die Drucker im Netintsall, wie schon gesagt, zum Teil veraltet sind.
Ich habe in meinem Batchscript keine Abfrage drin, welcher mir die beinhalteten Drucker der Clients ausliest... Auch sehe ich nicht genau welcher User den Client mitbenutzt.
Entweder ich mache mit der Batch (mit zukünftiger Abfrage der Drucker/User) und dem Netinstall weiter.
Wobei ich im Batchscripting eher eine Niete bin^^
Oder ich suche mir eine andere bessere Methode aus, was meint ihr? Wäre z.B eine Verteilung und vor allem eine De-Installation über eine GPO nicht wesentlich sinnvoller!?
Oder was gibt es sonst noch für Ansätze, stehe gerade etwas auf dem Schlauch..
Schon mal ein Danke fürs Lesen
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 188943
Url: https://administrator.de/contentid/188943
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
1 Kommentar
Moin,
ich habe auch mal massenweise Drucker verschieben und die Pfade neu setzen müssen. Dafür habe ich folgendes Script gebastelt.
- Das Script wird von jedem User aufgerufen.
- Das Script benötigt die eine Datei mit dem Inhalt \\SERVER\ALTER_DRUCKER;\\SERVER\NEUER_DRUCKER (in diesem Script ist es die Printers.TXT).
- Beides (Script und Printers.txt) sollte beim Logon zugreifbar sein (NETLOGON-Share).
Das Script schaut bei jedem User nach den Druckern, ist dieser (erste Eintrag in Zeile von Printers.txt) vorhanden, dann ersetzen durch neuen Drucker (zweiter Eintrag in Zeile von Printers.txt).
Wenn Du eine Liste abarbeiten willst in der nur Drucker gelöscht werden sollen, dann bei 'NEW MAPPING auskommentieren und dies mit einer extra Liste als zusätzliches Script laufen lassen.
Happy Testing (aber nicht gleich mit allen ) ....
Karo
ich habe auch mal massenweise Drucker verschieben und die Pfade neu setzen müssen. Dafür habe ich folgendes Script gebastelt.
- Das Script wird von jedem User aufgerufen.
- Das Script benötigt die eine Datei mit dem Inhalt \\SERVER\ALTER_DRUCKER;\\SERVER\NEUER_DRUCKER (in diesem Script ist es die Printers.TXT).
- Beides (Script und Printers.txt) sollte beim Logon zugreifbar sein (NETLOGON-Share).
Das Script schaut bei jedem User nach den Druckern, ist dieser (erste Eintrag in Zeile von Printers.txt) vorhanden, dann ersetzen durch neuen Drucker (zweiter Eintrag in Zeile von Printers.txt).
Wenn Du eine Liste abarbeiten willst in der nur Drucker gelöscht werden sollen, dann bei 'NEW MAPPING auskommentieren und dies mit einer extra Liste als zusätzliches Script laufen lassen.
' Remap Printers for Users
'
' Karo , 08.09.2010
' With this script you can change the mapping from Printernames
' OLDNAME to NENAME in a Textfile
' Syntax in TXT = \\SERVER\PRINTERNAMEOLD;\\SERVER\PRINTERNAMENEW
'
' 20100908 Initial
' 20100909 Set Default Printer
' 20100910 Added Loop for check if Printer connected after renaming
' Set printers
' ******************************
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
On Error Resume Next
Dim objNetwork, fs, fsFILE
Dim Counter, CounterU, aryPrinter(999), aryPrinterU(100), strComputer, strUsername
Dim splPrinter, x, y, fstemp, DefPrinter
Set objNetwork = CreateObject("WScript.Network")
Set fs = CreateObject("Scripting.FileSystemObject")
Set fstemp = fs.GetSpecialFolder(2)
wscript.echo ("The path to your TEMP folder is '" & fstemp & "'." )
'COPY FILE TO TEMP
'wscript.echo ("\\DOMAIN\sysvol\DOMAINNAME\scripts\printers.txt")
Set fsFILE = fs.GetFile("\\DOMAIN\sysvol\DOMAINNAME\scripts\printers.txt")
fsFILE.copy (fstemp & "\printers.txt")
'READ FILE
Set fsFILE = fs.OpenTextFile(fstemp & "\printers.txt")
Counter = 0
Do Until fsFILE.AtEndOfStream
Counter = Counter + 1
aryPrinter(Counter) = fsFILE.Readline
'wscript.echo Counter & " ---- " & aryPrinter(Counter)
Loop
strComputer = "."
'Read User Printer Connections
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")
CounterU = 0
strKeyPath = "Printers\Connections"
oReg.EnumKey HKEY_CURRENT_USER, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
CounterU = CounterU + 1
aryPrinterU(CounterU) = UCase(Replace(subkey,",","\"))
Next
'Get Current Username
strUsername = objNetwork.UserName
wscript.echo strUsername & " - Mapped Printers: " & CounterU
'READ MAPPED PRINTERS FROM USER
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer")
Y = 0
DefPrinter = "FALSE"
For Each objPrinter in colInstalledPrinters
For y = 1 to CounterU
If InStr(1,UCase(aryPrinterU(Y)),UCase(objPrinter.Name),1) > 0 Then
wscript.echo "##################################################"
WScript.echo "SEARCH: " & aryPrinterU(Y)
For x = 1 to Counter
splPrinter=Split(aryPrinter(x),";")
'COMPARE MAPPED PRINTERS WITH PRINTERS IN FILE
If InStr(1,aryPrinterU(Y),splPrinter(0),1) > 0 Then
WScript.echo aryPrinterU(Y) & " - " & splPrinter(0)
wscript.echo "-YES-"
'Is Printer Default
'DefPrinter = "FALSE"
If objPrinter.Default = "True" Then
DefPrinter = splPrinter(1)
wscript.echo "Default Printer Flag is set on " & splPrinter(0) & ""
' Else
' DefPrinter = "FALSE"
' Exit For
End If
'DELETE OLD MAPPING
wscript.echo "-Delete Old Mapping-"
objNetwork.RemovePrinterConnection splPrinter(0)
wscript.echo splPrinter(0)
'NEW MAPPING
wscript.echo "-New Mapping-"
objNetwork.AddWindowsPrinterConnection splPrinter(1)
wscript.echo splPrinter(1)
wscript.echo "######END " & splPrinter(1) & "#####"
Else
End If
Next
End If
Next
Next
Y = 0
wscript.echo "##################################################"
wscript.echo ""
wscript.echo ""
wscript.echo "##################################################"
If DefPrinter = "FALSE" Then
wscript.echo "No Default Printer in Remapped Printers"
Else
wscript.echo "Check for Connection: " & DefPrinter & " "
For counter = 0 to 2
Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer")
For Each objPrinter in colInstalledPrinters
'wscript.echo UCase(objPrinter.Name)& " -> " & UCase(DefPrinter)
If InStr(1,UCase(objPrinter.Name),UCase(DefPrinter),1) > 0 Then
wscript.echo "-Bingo!"
counter = 3
Exit For
Else
counter = 1
End If
Next
Next
'IF PRINTER IS DEFAULT (True) SET NEW DEFAULT
If DefPrinter = "FALSE" Then
Else
wscript.echo "-Set as Default"
'objNetwork.SetDefaultPrinter splPrinter(1)
'wscript.echo splPrinter(1)
objNetwork.SetDefaultPrinter DefPrinter
wscript.echo DefPrinter
End If
End If
wscript.echo "##################################################"
wscript.echo ""
wscript.echo "#######################"
wscript.echo "###### END OF ALL " & "#####"
wscript.echo "#######################"
WScript.sleep 20000
Happy Testing (aber nicht gleich mit allen ) ....
Karo