klingenberg
Goto Top

Druckerpfad ändern

Moin moin,
ich bin ein Jungspund des Forums un hoffe, dass ihr mir hier ein wenig auf die Sprünge helfen könnt.

Mein Problem ist das Folgende:

Wir haben unseren Printserver migriert und umbenannt. Nun müssen rund 300 Anwender ihren DruckerPfad ändern. Es hat sich lediglich der Name des Servers geändert, nicht jedoch der der Drucker.

Daher ist der Status quo der Folgende:
Alt: \\server1\druckername
Neu:\\server1\druckername

Wie kann ich ein Script erstellen, das lediglich den Pfad des Druckers ändert, ohne den Drucker zu deinstallieren?
Gerne kann dies auch über die Logon.bat passieren.

Mein Gedanke ist,
nach \\server1\* zu suchen und das Ergebnis in \\server2\* umzubenennen.

Wie kann ich das realisieren?

Mit Freundlichem Gruß,

A. Klingenberg

Content-Key: 142069

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

Ausgedruckt am: 28.03.2024 um 23:03 Uhr

Mitglied: Aufmuckn
Aufmuckn 04.05.2010 um 13:19:24 Uhr
Goto Top
lass den drucker doch per script neu verbinden und den alten löschen vorher ... relativ einfache sache ..

schau dir mal:

rundll32 printui.dll,PrintUIEntry


genauer an .... da kannst die wichtigsten sachen machen wie:

drucker löschen , drucker installieren, standarddrucker setzen , .. etc ..

mfg
mike
Mitglied: Klingenberg
Klingenberg 04.05.2010 um 13:29:13 Uhr
Goto Top
Das klingt ja schön und gut,....
Ich weiß jedoch nicht, in welcher Abteilung welcher Drucker genutzt wird.

Daher sollen alle Drucker, die vorher auf einem System eingerichtet waren nun anstelle von \\server1\ den \\server2\ Pfad nehmen.


Wie finde ich heraus, welche Drucker auf dem System vorher alles über \\server1\ Ihre Druckaufträge erhalten haben?

mfg

A. Klingenberg
Mitglied: Aufmuckn
Aufmuckn 04.05.2010 um 13:44:29 Uhr
Goto Top
um wieviele versch. drucker gehts denn auf server1 ?
Mitglied: Klingenberg
Klingenberg 04.05.2010 um 13:52:20 Uhr
Goto Top
ca. 60 -70 versch. Drucker ;)
Mitglied: Aufmuckn
Aufmuckn 04.05.2010 um 13:58:18 Uhr
Goto Top
hui .. ok .. das macht die sache schon aufwändiger ..
Mitglied: Klingenberg
Klingenberg 04.05.2010 um 14:00:46 Uhr
Goto Top
Nicht jeder Anwender greift auf alle Drucker zu. Es sind meistens Drucker, die direkt in den jeweiligen Büroräumen stehen, jedoch über den Printserver angesprochen werden.
Mitglied: Aufmuckn
Aufmuckn 04.05.2010 um 14:20:53 Uhr
Goto Top
naaaaja .. also ..

dafür bin ich leider zu wenig scripter .. aber es soltle schon möglich sein die druckerinformationen auszulesen - zu vergleichen und falls "server1" vorkommt dies durch "server2" zu ersetzten ..

zumindest kann man die druckerinformationen als datei abspeichern .. und somit auslesen ...

http://www.diew.eu/2009/07/01/mit-rundll32-printuidllprintuientry-zur-d ...

aber wie gesagt .. das übersteigt leider meine scriptfähigkeiten - aber ev. findet sich hier noch der ein oder andere .. ?

mfg
Mitglied: Aufmuckn
Aufmuckn 04.05.2010 um 14:22:22 Uhr
Goto Top
Zitat von @Klingenberg:

Daher ist der Status quo der Folgende:
Alt: \\server1\druckername
Neu:\\server1\druckername


sollt wohl heissen:

neu: \\server2\druckername
Mitglied: 89485
89485 04.05.2010 um 14:44:19 Uhr
Goto Top
nur mal ne frage:

wenn die über einen Printserver laufen, haben die doch eine feste IP-Adresse....

bekommen die dann überhaupt eine neue????

wenn ja, überleg' dir mal, ob es nicht sinnvoller ist, die Einstellungen von ALT auf NEU zu übernehmen

Grüße Batchliebhaber
Mitglied: Klingenberg
Klingenberg 04.05.2010 um 14:56:23 Uhr
Goto Top
Ich habe jetzt eine Lösung gefunden. Der Code stammt aus einem anderen Forum, führt jedoch zum Ziel face-smile

Option Explicit

Dim Text, i, PS1, nPS1
Dim drucker, server, tempname, fso, fi2, message, intro, def_printer, old_def_printer, error_meldung, reg_eintrag
Dim WshNetwork, WshShell, oDevices ' Objektvariable  
Const ForWriting = 8 ' 2 = Write und 8 = anhängen  

Set WshShell = WScript.CreateObject("WScript.Shell")  
' Erstelle neues WshNetwork-Objekt, welches man zum Zugriff  
' auf die Netzwerk-Eigenschaften brauchen.  
Set WshNetwork = WScript.CreateObject("WScript.Network")  

On error resume next

if WshShell.RegRead("HKCU\Software\Shortcut\chgPrinter\chgPrinterVersion") <> "100" Then  
Select Case err.number
Case 0
error_meldung = " Registryeintrag vorhanden " & vbCRLF  
Case -2147024894
error_meldung = " Registryeintrag fehlt " & vbCRLF  
Case Else
error_meldung = " Unbekannter Fehler: Code " & Err.Number & " Bezeichnung : " & Err.Description & vbCRLF  
End Select

' Alte Druckserver  
PS1 = "AlterServer"  
' Neue Druckserver  
nPS1 = "NeuerServer"  

def_printer = WshShell.RegRead("HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device")  
old_def_printer = Split(def_printer, ",", -1, 1)  
'msgBox "Alter Default Printer = : " & old_def_printer(0)  
def_printer = Replace(ucase(old_def_printer(0)), "PRINT", "PS", 1, 1, 1)  
'msgBox "Neuer Default Printer = : " & def_printer  

' Schreiben der Logdatei "Printer.txt" in "D:\"  
Set fso = CreateObject("Scripting.FileSystemObject")  
Set fi2 = fso.OpenTextFile("D:\PRINTER.TXT", ForWriting, true) ' Ausgabedatei  

' Jetzt die Zuordnungen auflisten  
Set oDevices = WshNetwork.EnumPrinterConnections

' Überschrift der Ausgabe  

Text = vbCRLF &" Zusammenfassung der Druckerzuordnungen" & vbCRLF  
Text = text &"-----------------------------------------------------------------------" & vbCRLF & vbCRLF  


' Untertitel der Ausgabe  
Text = text & " Die alten Druckerzuordnungen lauteten:" & vbCRLF & vbCRLF  
text = text & "Old Default Printer = " & old_def_printer(0) & vbCRLF  

' Ermitteln der alten (aktuell) definierten Druckerobjekte  
For i = 0 To oDevices.Count-1 Step 2
' Ausgabe bei jedem Durchlauf ergänzen  
Text = " " & Text & oDevices(i) & " " & oDevices(i+1) & vbCRLF  
' Variable splitten wo ein \ vorkommt  
tempname = Split(oDevices(i+1), "\", 2, 1)  
for each server in tempname
' Variable abermals splitten wo ein \ vorkommt, damit Server und Drucker übrig bleibt  
drucker = Split(server, "\", -1, 1)  
' Prüfen welcher Printserver gefunden wurde  
if Instr(1, ucase(server), PS1, 1) Then
' Druckerzuordnung zu neuem Server herstellen  
WshNetwork.AddWindowsPrinterConnection "\\"&nPS1&"\"&drucker(2)  
' Druckerzuordnung löschen  
WshNetwork.RemovePrinterConnection "\\"&PS1&"\"&drucker(2)  
end if
Select Case err.number
Case 0
message = " Info: Druckervorgang " & "\\"&server&"\"&drucker(2) & " erfolgreich durchgeführt." & vbCRLF  
End Select
next
Next

' Abermals die neuen Druckereinstellungen auslesen  
Set oDevices = WshNetwork.EnumPrinterConnections
' Ausgabetext definieren  
Text = " " & Text & vbCRLF &vbCRLF & " Die neuen Druckerzuordnungen lauten jetzt:" & vbCRLF &vbCRLF  

' Ermitteln der alten (aktuell) definierten Druckerobjekte  
For i = 0 To oDevices.Count-1 Step 2
Text = " " & Text & oDevices(i) & " " & oDevices(i+1) & vbCRLF  
Next

' Default Printer setzen  
WshNetwork.SetDefaultPrinter def_printer

text = text & "New Default Printer = " & def_printer & vbCRLF  

MsgBox Text, vbOkonly + vbInformation

fi2.WriteLine Text & "----------------------------------------------------" & vbCRLF & error_meldung  
fi2.WriteLine " " & vbCRLF & vbCRLF & "--------------------------- E N D E --------------------------------" & vbCRLF  

'In Registry schreiben, um bei jedem Start zu prüfen ob schon gelaufen  
WshShell.RegWrite "HKCU\Software\shortcut\chgPrinter\chgPrinterVersion", "0"  

Set fi2 = Nothing
else
' msgBox "Fehlermeldung = : " & err.Number  
' MsgBox "Ist schon gelaufen"  
WScript.Quit
end if
WScript.Quit

Wer das Problem sonst noch hat kann damit evtl. etwas anfangen.
Danke Mike, das du dich um eine Lösung bemüht hast.
Mitglied: Aufmuckn
Aufmuckn 04.05.2010 um 15:13:38 Uhr
Goto Top
büdde gern .. und funktioniert das script bei dir ? oder hast noch nicht getestet?