Jump to content

Druckerscript mit Fehler


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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"

Link zu diesem Kommentar

Moin,

 

dann bau mal eine Fehlerausgabe ein. Füge vor der Zeile mit dem Fehler diese Zeile ein:

WScript.Echo "SELECT * FROM " & strTabelle & " WHERE DruckerAlt = '" & strDruckerAlt & "'"

 

Dann starte das Skript auf einem Multi-PC im CMD-Fenster mit

cscript Druckerverbindung.vbs

 

Direkt vor dem Fehler sollte das Skript nun die SELECT-Anweisung ausgeben. Poste die mal bitte hier.

 

Gruß, Nils

Link zu diesem Kommentar

Nicht wundern, ich habe es gerade unter einer Englischer Installation getestet.

Die aber genau die gleiche Fehlermeldung erzeugt.

 

Die Select-Ausgabe ist folgende:

 

SELECT * FROM radE6201.tmp WHERE DruckerAlt = 'Microsoft XPS Document Writer'

C:\Documents and Settings\testuser\Desktop\Druckerverbindung.vbs(47, 2) Microsoft JET Database Engine: No value given for one or more required parameters.

Link zu diesem Kommentar

Moin,

 

prüf nochmal, ob auch der Tempfad gefunden wird. Gib mal vor folgender Zeile:

' Tabelle hier: Name der Textdatei

 

folgenden Code ein:

WSCript.Echo "Temppfad ist: " & strTemppfad

 

Dann wie oben ausführen und das Ergebnis hier posten. Dasselbe bitte mal auf einem der funktionierenden Clients ausführen und auch hier posten.

 

Gruß, Nils

Link zu diesem Kommentar

Moin,

 

wie folgt sind die Ergebnisse:

 

Hier funktioniert es:

Temppfad ist: C:\DOCUME~1\testuser\LOCALS~1\Temp
C:\Documents and Settings\testuser\Desktop\Druckerverbindung.vbs(46, 2) Microsof
t JET Database Engine: No value given for one or more required parameters.

 

Hier funktioniert es nicht:

Temppfad ist: C:\DOKUME~1\testuser\LOKALE~1\Temp

Link zu diesem Kommentar

Ich habe das Gefüll es liegt in der Connecation, dass er damit nicht umgehen kann, ist das möglich?

 

  
' 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"""

 

und...

set objRS = objConn.Execute()

Link zu diesem Kommentar

Moin,

 

nein, eher nicht. Dann würde er den Fehler früher melden, nicht erst beim Versuch, die Abfrage auszuführen.

(das bezog sich auf Post 11)

 

Neu zu Post 12: Hast du die Datei evtl. als Unicode gespeichert? Damit gibt es bei ADO-Zugriffen gern mal Probleme.

 

Leider habe ich ansonsten keine Möglichkeit, das weiter zu troubleshooten.

 

Gruß, Nils

Link zu diesem Kommentar

Nein das ist immer noch ANSI.

Habe wie gesagt die Textdatei jetzt direkt in dem Query um etwas zu testen (Also SELECT * FROM text.txt WHERE ....). Damit nimmt sich das Script die Datei aus dem Temp Ordner.

 

Wenn ich jetzt z.B. mal komplett leer mache, sagt er mir nur "Query must have at least one destination field", aber er macht in dem Sinne den Fehler nicht mehr, daher denke ich dass der Fehler hier liegt, oder?

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...