Hallo zusammen,
ich habe folgendes Problem:
Ich würde gerne auf Client Rechnern alte gegen neue Drucker austauschen, nachdem ich den neuen Printserver online habe.
Auf deutschen Systemen funktioniert es ohne Probleme, aber auf Multilanguage Systemen bringt es leider die Fehlermeldung "Code:80040E10 Error:Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben" und zeigt auf die Zeile mit "set objRS = objConn.Execute("SELECT * FROM " & strTabelle & " WHERE DruckerAlt = '" & strDruckerAlt & "'")". Seht einer an dem Script das Problem?
Script:
' Region Description
'
' Name: Druckerverbindung.vbs
' Author: Nils Kaczenski
' Version: 1.0
' Description: Ersetzt Windows-Netzwerkdruckerverbindungen im aktuellen Benutzerprofil
' durch andere Verbindungen. Die alten und neuen Verbindungsdaten sind in einer Textdatei
' angegeben. Nützlich bei Drucker-Migrationen.
' Für die Fachzeitschrift IT-Administrator, 2006
' Freie Weitergabe des Skriptcodes erlaubt. Keine Gewähr!
'
' EndRegion
' Pfad zur Druckerdatei
strDBPfad = "<Mein Druckerpfad>"
' Druckerdatei temporär kopieren, um Sperrkonflikte zu umgehen
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDBDatei = objFSO.GetFile(strDBPfad)
strDBDateilokal = objFSO.GetTempName
strTemppfad = objFSO.GetSpecialFolder(2)
strDBPfadlokal = objFSO.BuildPath(strTemppfad, strDBDateilokal)
objDBDatei.Copy strDBPfadlokal
' Tabelle hier: Name der Textdatei
strTabelle = strDBDateilokal
' ADO-Objekte
Set objConn = CreateObject("ADODB.Connection")
' weitere Objekte
Set objNetwork = CreateObject("WScript.Network")
Set objShell = CreateObject("Wscript.Shell")
Set objWMI = GetObject("winmgmts:\\.\root\CIMV2")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strTemppfad & ";" & _
"Extended Properties=""text;HDR=YES;FMT=Delimited"""
strText = ""
' Druckerverbindungen des Benutzers durchlaufen
Set colDrucker = objNetwork.EnumPrinterConnections
' Im jeweils zweiten Wert steht der Druckername
For i=0 To colDrucker.Count-1 Step 2
strDruckerAlt = colDrucker(i + 1)
' In Datenbank nach der aktuellen Verbindung suchen
set objRS = objConn.Execute("SELECT * FROM " & strTabelle & " WHERE DruckerAlt = '" & strDruckerAlt & "'")
' Falls Drucker gefunden (objRS nicht leer) ...
If Not objRS.EOF Then
' ... neuen Drucker herausfinden
strDruckerNeu = objRS("DruckerNeu")
' ... und verbinden
DruckerSetzen strDruckerAlt, strDruckerNeu
End If
Next
' Erfolg melden
If strText <> "" Then
objShell.Popup strText, 10, "Drucker wurden erfolgreich umbenannt."
End If
' Lokale Textdatei schließen und löschen
objRS.Close
Set objDBDateilokal = objFSO.GetFile(strDBPfadlokal)
objDBDateilokal.Delete
Sub DruckerSetzen(strDruckerAlt, strDruckerNeu)
' ist der alte Drucker der Standarddrucker?
strDruckerWQL = Replace(strDruckerAlt, "\", "\\")
strWQL = "SELECT Default FROM Win32_Printer " _
& "WHERE Name = '" & strDruckerWQL & "'"
Set colPrinters = objWMI.ExecQuery(strWQL)
If colPrinters.Count > 0 Then
For Each objPrinter In colPrinters
If objPrinter.Default = vbTrue Then
flgDefault = True
Else
flgDefault = False
End If
Next
End If
' alte Verbindung entfernen
objNetwork.RemovePrinterConnection strDruckerAlt, True, True
strText = strText & strDruckerAlt & " entfernt." & VbCrLf
' neue Verbindung hinzufügen
objNetwork.AddWindowsPrinterConnection strDruckerNeu
strText = strText & strDruckerNeu & " hinzugefügt." & VbCrLf
If flgDefault Then
objNetwork.SetDefaultPrinter(strDruckerNeu)
strText = strText & strDruckerNeu & " ist Standarddrucker." & VbCrLf
End If
End Sub
Vergleichsdatei:
DruckerAlt;DruckerNeu
"\\AlterDruckserver\AlterName";"\\NeuerDruckserver\NeuerName"