68154
Goto Top

Änderung von Servernamen per Batch nach Neuinstallation von Druckern auf einem neuen Printserver

Wir müssen einen Printserver austauschen, da sein Alter sich auf die Stabilität auswirkt...

Nachdem wir die Drucker ( ca. 30 oder mehr, kann ich im Moment nicht sagen ) auf dem neuen Printserver installiert haben, müssen wir unseren Mitarbeitern möglichst einfach die Drucker umstellen können ( in Windows ). Dies würden wir gerne über einen Batch machen den wir an diese Mitarbeiter verteilen würden. Dieser Batch soll einfach den Pfad mit dem alten Servernamen durch den Pfad mit dem neuen Servernamen ersetzten. Die Bezeichnungen der einzelnen Drucker wird sich nicht ändern.

Leider habe ich nach intensiver Suche keinen Batch mit solchen Möglichkeiten gefunden.

Desshalb ist meine Frage ob dies realisierbar ist und ob ihr bereits von so einem Batch wisst.
Unsere Mitarbeiter sind User und sehr verstreut, desshalb wäre dies die einfachste Lösung.

Vielen Dank für eure Aufmerksamkeit und ich freue mich schon auf konstruktive Anregungen.

Content-Key: 93550

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

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

Mitglied: 60730
60730 Aug 04, 2008, updated at Oct 18, 2012 at 16:36:03 (UTC)
Goto Top
Servus,

du mußt nur richtig face-wink suchen face-wink

Gruß
Mitglied: 68154
68154 Aug 04, 2008 at 13:39:15 (UTC)
Goto Top
Vielen Dank für deine Antwort.
Hab ich wohl überlesen.
Ich werd das so gleich mal austesten.

Gruss
Member: MegaTraveller
MegaTraveller Aug 04, 2008 at 13:51:19 (UTC)
Goto Top
Hallo,

vielleicht hilft Dir ja das hier weiter.

Bye
MT
Member: stbewo
stbewo Aug 05, 2008 at 05:42:42 (UTC)
Goto Top
Hi,

wir hatten 2003 auch einmal die gleiche Umstellung wie Du. Für den Benutzer hatten wir folgendes Script benutzt. Kannst Du auch im Login Script einbauen, da ein Registry Eintrag erzeugt wird, der bei jedem Ausführen überprüft wird, ob schon einmal gelaufen. Das Script musst Du natürlich an Deine Bedürfnisse noch anpassen.

Gruß
Stefan

Option Explicit

Dim Text, i, PS1, PS2, PS3, PS4, PS5, PS6, nPS1, nPS2, nPS3, nPS4, nPS5, nPS6
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 = "DE-MANN-PRINT1"
PS2 = "DE-MANN-PRINT2"
PS3 = "DE-MANN-PRINT3"
PS4 = "DE-MANN-PRINT4"
PS5 = "DE-MANN-PRINT5"
PS6 = "DE-MANN-PRINT6"
' Neue Druckserver
nPS1 = "DE-MANN-PS1"
nPS2 = "DE-MANN-PS2"
nPS3 = "DE-MANN-PS3"
nPS4 = "DE-MANN-PS4"
nPS5 = "DE-MANN-PS5"
nPS6 = "DE-MANN-PS6"

intro = "Es werden jetzt ihre installierten Drucker auf andere Druckserver umgestellt." &vbCRLF &vbCRLF
intro = intro + "Die Drucker auf den Servern DE-MANN-PRINT(X) werden jetzt auf die Drucker, der Server DE-MANN-PS(X) umgestellt." &vbCRLF &vbCRLF
intro = intro + "Bereits umgestellte Drucker werden erkannt." &vbCRLF &vbCRLF

msgBox intro, vbInformation, "Druckerumstellung"

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 "C:\"
Set fso = CreateObject("Scripting.FileSystemObject")
Set fi2 = fso.OpenTextFile("C:\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
fi2.WriteLine "------------S T A R T ----D R U C K E R U M S T E L L U N G -----------" & vbCRLF

fi2.Writeline "Datum = " & Date & " Uhrzeit = " & time & vbCRLF
fi2.Writeline "Computername = " & WshNetwork.ComputerName & vbCRLF & "Benutzername = " & WshNetwork.UserName & vbCRLF
fi2.Writeline "Old Default Printer = " & old_def_printer(0) & vbCRLF
fi2.WriteLine "-----------------------------------------------------------------------" & 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
if Instr(1, ucase(server), PS2, 1) Then
' Druckerzuordnung zu neuem Server herstellen
WshNetwork.AddWindowsPrinterConnection "\\"&nPS2&"\"&drucker(2)
' Druckerzuordnung löschen
WshNetwork.RemovePrinterConnection "\\"&PS2&"\"&drucker(2)
end if
if Instr(1, ucase(server), PS3, 1) Then
' Druckerzuordnung zu neuem Server herstellen
WshNetwork.AddWindowsPrinterConnection "\\"&nPS3&"\"&drucker(2)
' Druckerzuordnung löschen
WshNetwork.RemovePrinterConnection "\\"&PS3&"\"&drucker(2)
end if
if Instr(1, ucase(server), PS4, 1) Then
' Druckerzuordnung zu neuem Server herstellen
WshNetwork.AddWindowsPrinterConnection "\\"&nPS4&"\"&drucker(2)
' Druckerzuordnung löschen
WshNetwork.RemovePrinterConnection "\\"&PS4&"\"&drucker(2)
end if
if Instr(1, ucase(server), PS5, 1) Then
' Druckerzuordnung zu neuem Server herstellen
WshNetwork.AddWindowsPrinterConnection "\\"&nPS5&"\"&drucker(2)
' Druckerzuordnung löschen
WshNetwork.RemovePrinterConnection "\\"&PS5&"\"&drucker(2)
end if
if Instr(1, ucase(server), PS6, 1) Then
' Druckerzuordnung zu neuem Server herstellen
WshNetwork.AddWindowsPrinterConnection "\\"&nPS6&"\"&drucker(2)
' Druckerzuordnung löschen
WshNetwork.RemovePrinterConnection "\\"&PS6&"\"&drucker(2)
end if
Select Case err.number
Case 0
message = " Info: Druckervorgang " & "\\"&server&"\"&drucker(2) & " erfolgreich durchgeführt." & vbCRLF
'fi2.WriteLine message
Case -2147023688
message = " Fehler: Drucker " & "\\"&server&"\"&drucker(2) & " existiert nicht." & vbCRLF
'fi2.WriteLine message
Case Else
message = "Unbekannter Fehler: Code " & Err.Number & " " & Err.Description & vbCRLF
fi2.WriteLine message
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", "100"

Set fi2 = Nothing

else
' msgBox "Fehlermeldung = : " & err.Number
' MsgBox "Ist schon gelaufen"
WScript.Quit
end if
WScript.Quit
Mitglied: 68154
68154 Aug 05, 2008 at 07:23:16 (UTC)
Goto Top
Hallo zusammen

Ich hab noch eine Frage.
Wie verhält es sich, wenn ich wohl die Serverbezeichnungen die ich ändern will kenne, allerdings die Drucker der einzelnen User nicht kenne. Ich möchte z.B. einfach nur den Eintrag bei HKEY_CURRENT_USER - Printers - Connections so ändern, dass es die Serverbezeichnung ändert den Drucker aber unverändert stehen lässt.

Vielen Dank für eure Anregungen face-smile
Member: stbewo
stbewo Aug 05, 2008 at 07:28:38 (UTC)
Goto Top
Mit dem Script wird nur der Servername geändert und die Druckernamen bleiben erhalten.