chrischtian
Goto Top

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 face-smile

Content-Key: 188943

Url: https://administrator.de/contentid/188943

Printed on: April 26, 2024 at 01:04 o'clock

Member: Karo
Karo Aug 01, 2012 at 11:54:27 (UTC)
Goto Top
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.


' 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 face-wink ) ....

Karo