Hallo zusammen,
ich versuche jetzt seit 8 Stunden das Script auf einem 2008 Server zum laufen zu bekommen.
Unter 2003 kein ding, da läuft es sauber!
Unter 2008 stoße ich auf mehrere Fehler.
Das Script habe ich im ersten Lehrjahr vor 4 Jahren geschrieben und jetzt möchte ich es erneut anwenden ...
Ich habe es jetzt soweit das er mir unter XP 32bit normal läuft, wenn ich diese Datei auf den Server koppiere und ausführe kommt der Hinweis:
ADODB.Fields: Item cannot be found in the collection corresponding to the requested name or odinal.
Ich führe das Script über die shell mittels 32bit cscript.exe aus. Um sicherzustellen das es auch auf dem 64bit Server 2008 r2 in der Version 32bit ausgeführt wird.
Der Fehler erscheint mir bei: Leistungsklasse = objRecordset.Fields.Item("Klasse")
Die bisher versuchten dinge, ich habe die JetODB.DLL überprüft das sie auf dem Aktuellsten Stand ist, ist sie.
Ich habe es in 64bit sowie in 32bit ausgeführt.
Ich habe begonnen es auf dieses ACE ding umzuschreiben, es aber aufgegeben weil ich den selben Fehler bekam. (Treiber selbstver. installiert.)
Da ich mit dem googeln nicht mehr weiter komme und gerade anfange graue Haare zu entwickeln bitte ich euch um Hilfe,
evtl. hatte einer von euch so ein Problem, oder kann mir den lösenden Tipp geben.
PS: Ja ich weiß das Script ist nicht gerade elegant geschrieben, heute würde ich es auch anders Schreiben Azubi arbeit in der ersten Woche
ich versuche jetzt seit 8 Stunden das Script auf einem 2008 Server zum laufen zu bekommen.
Unter 2003 kein ding, da läuft es sauber!
Unter 2008 stoße ich auf mehrere Fehler.
Das Script habe ich im ersten Lehrjahr vor 4 Jahren geschrieben und jetzt möchte ich es erneut anwenden ...
Ich habe es jetzt soweit das er mir unter XP 32bit normal läuft, wenn ich diese Datei auf den Server koppiere und ausführe kommt der Hinweis:
ADODB.Fields: Item cannot be found in the collection corresponding to the requested name or odinal.
Ich führe das Script über die shell mittels 32bit cscript.exe aus. Um sicherzustellen das es auch auf dem 64bit Server 2008 r2 in der Version 32bit ausgeführt wird.
Der Fehler erscheint mir bei: Leistungsklasse = objRecordset.Fields.Item("Klasse")
Die bisher versuchten dinge, ich habe die JetODB.DLL überprüft das sie auf dem Aktuellsten Stand ist, ist sie.
Ich habe es in 64bit sowie in 32bit ausgeführt.
Ich habe begonnen es auf dieses ACE ding umzuschreiben, es aber aufgegeben weil ich den selben Fehler bekam. (Treiber selbstver. installiert.)
Da ich mit dem googeln nicht mehr weiter komme und gerade anfange graue Haare zu entwickeln bitte ich euch um Hilfe,
evtl. hatte einer von euch so ein Problem, oder kann mir den lösenden Tipp geben.
PS: Ja ich weiß das Script ist nicht gerade elegant geschrieben, heute würde ich es auch anders Schreiben Azubi arbeit in der ersten Woche
Visual Basic-Quellcode
- Version:0.9
- StartHTML:00000107
- EndHTML:00038107
- EndFragment:00038067
- EndFragment:00000000
- Option Explicit
- Dim i, k, kontrolle, check, checker
- Dim strPathToTextfile, strFile, strComputer, Leistungsklasse, Namen, LK, Location
- Dim objConnection, objRecordSet, objWMIService, objNewPort, objPrinter, objPort
- Dim colInstalledPrinters, colInstalledPorts
- Dim fso, tFile, WshShell
- Dim port
- msgbox "Stellen Sie sicher das die CSV datei geschlossen ist!"
- port = inputbox("Geben sie den Drucker port ein!Standart 9100",vbok)
- Const adOpenStatic = 3
- Const adLockOptimistic = 3
- Const adCmdText = &H0001
- i =0
- k =0
- strPathtoTextFile = "."
- strFile = "liste.csv"
- strComputer = "."
- Set objConnection = CreateObject("ADODB.Connection")
- Set objRecordSet = CreateObject("ADODB.Recordset")
- Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
- Set colInstalledPrinters = objWMIService.ExecQuery("Select * from Win32_PrinterDriver")
- Set colInstalledPorts = objWMIService.ExecQuery("Select * from Win32_TCPIPPrinterPort")
- objWMIService.Security_.Privileges.AddAsString "SeLoadDriverPrivilege", True
- objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & strPathtoTextFile & ";" & "Extended Properties=""text;HDR=YES;FMT=Delimited"""
- objRecordset.Open "SELECT * FROM " & strFile , objConnection, adOpenStatic, adLockOptimistic, adCmdText
- Do Until objRecordset.EOF
- check = 0
- checker = 0
- kontrolle = 0
- Leistungsklasse = objRecordset.Fields.Item("Klasse")
- Namen = objRecordset.Fields.Item("Name")
- Location = objRecordset.Fields.Item("Location")
- If Leistungsklasse = "LK1" then
- LK = "RICOH Aficio SP 4210N PCL 6"
- ElseIf Leistungsklasse = "LK1a" then
- LK = "RICOH Aficio SP C420DN PCL 6"
- ElseIf Leistungsklasse = "LK2" then
- LK = "RICOH Aficio MP 161 PCL 6"
- ElseIf Leistungsklasse = "LK2a" then
- LK = "RICOH Aficio MP C2050 PCL 6"
- ElseIf Leistungsklasse = "LK3" then
- LK = "RICOH Aficio MP 4000 PCL 6"
- ElseIf Leistungsklasse = "LK4" then
- LK = "RICOH Aficio MP C3300 PCL 6"
- ElseIf Leistungsklasse = "LK5" then
- LK = "RICOH Aficio MP 4000 PCL 6"
- ElseIf Leistungsklasse = "LK6" then
- LK = "RICOH Aficio MP 5001 PCL 6"
- ElseIf Leistungsklasse = "LK7" then
- LK = "RICHO Aficio MP C3500 PCL 6"
- Else
- LK = Leistungsklasse
- End If
- For each objPrinter in colInstalledPrinters
- If InStr(objPrinter.Name, LK) = 1 Then
- check = 1
- kontrolle = 1
- Else
- End If
- Next
- For Each objPort in colInstalledPorts
- If objPort.Name = Namen Then
- checker = 1
- kontrolle = 0
- Else
- End If
- Next
- If kontrolle = 1 then
- If Leistungsklasse = "LK5" or Leistungsklasse ="LK6" or Leistungsklasse = "LK7" then
- Set objNewPort = objWMIService.Get("Win32_TCPIPPrinterPort").SpawnInstance_
- objNewPort.Name = Namen
- objNewPort.Protocol = 2
- objNewPort.Queue = "lp"
- objNewPort.HostAddress = Namen
- objNewPort.SNMPEnabled = False
- objNewPort.ByteCount = True
- objNewPort.Put_
- Else
- Set objNewPort = objWMIService.Get("Win32_TCPIPPrinterPort").SpawnInstance_
- objNewPort.Name = Namen
- objNewPort.Protocol = 1
- objNewPort.HostAddress = Namen
- objNewPort.PortNumber = port
- objNewPort.SNMPEnabled = False
- objNewPort.Put_
- End If
- Set objPrinter = objWMIService.Get("Win32_Printer").SpawnInstance_
- objPrinter.DriverName = LK
- objPrinter.PortName = Namen
- objPrinter.DeviceID = Namen
- objPrinter.Location = Location
- objPrinter.Network = FALSE
- objPrinter.Shared = True
- objPrinter.ShareName = Namen
- objPrinter.Comment = Namen & " / DHCP"
- objPrinter.EnableBIDI = True
- objPrinter.Put_
- check = 3
- checker = 3
- i = i+1
- End If
- If check = 0 and checker = 0 Then
- Set fso = CreateObject("Scripting.FileSystemObject")
- Set tFile = fso.OpenTextFile("Fehler.txt",8,true)
- tFile.WriteLine "Treiber _________ Drucker: -" & Namen & "- konnte nicht Installiert werden, weil der Treiber nicht vorhanden ist!"
- tFile.close
- k = k +1
- ElseIf checker = 1 and check = 1 Then
- Set fso = CreateObject("Scripting.FileSystemObject")
- Set tFile = fso.OpenTextFile("Fehler.txt",8,true)
- tFile.WriteLine "Port ____________ Drucker: -" & Namen & "- konnte nicht Installiert werden, weil der Port bereits vergeben war!"
- tFile.close
- k = k +1
- ElseIf checker = 1 and check = 0 Then
- Set fso = CreateObject("Scripting.FileSystemObject")
- Set tFile = fso.OpenTextFile("Fehler.txt",8,true)
- tFile.WriteLine "PORT & Treiber __ Drucker: -" & Namen & "- konnte nicht Installiert werden."
- tFile.close
- k = k +1
- End If
- check = 0
- checker = 0
- err.Clear
- kontrolle = 0
- objRecordset.MoveNext
- Set WshShell = WScript.CreateObject("WScript.Shell")
- Set fso = CreateObject("Scripting.FileSystemObject")
- WshShell.Popup "In Bearbeitung", 1, "Working....."
- Loop
- msgbox "DONE - es wurden " & i & " Drucker inklusiv Portsangelegt."
- msgbox "Es wurden " & k & " Drucker nicht angelegt. Eine genaue Auflistung finden Sie in der Fehler.txt!"