dan0707 10 Posted February 1, 2011 Report Share Posted February 1, 2011 Hallo zusammen Ich dachte mir, wenn man nicht weiter kommt, sollte man Leute fragen, die Ahnung haben. Deshalb bin ich in diesem Forum gelandet. Ich ackere mich seit Tagen durch dieses Scrip doch leider will es nicht wie ich. Eigentlich sollte es aus einer Excel-Datei (aus der ersten Spalte) die Druckernamen auslesen und diese mit den bereits installierten Druckern vergleichen. Bis jetzt soll das Script mir nur den Namen ausgeben falls er installiert ist oder nicht. Danach werde ich das Script noch etwas erweitern. Leider reagiert er kein bischen auf meinen if-Vergleich und gibt somit immer aus, dass es ein neuer Drucker ist, obwohl die Drucker installiert sind (Teilweise 1-3) :confused: Vieleicht kann mir ja von euch jemand weiterhelfen. Danke schon mal. Hier mein script: strComputer = "." Const wbemFlagReturnImmediately = &h10 Const wbemFlagForwardOnly = &h20 Set objExcel = CreateObject("Excel.Application") Set objWorkbook = objExcel.Workbooks.Open ("c:\Printer.xls") intRow = 2 Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") Set colPrinter = objWMIService.ExecQuery("SELECT * FROM Win32_Printer", "WQL", _ wbemFlagReturnImmediately + wbemFlagForwardOnly) Dim strPrinterName, strPrinterType Do Until objExcel.Cells(intRow, 1).Value = "" For Each objItem In colPrinter If Len(objExcel.Cells(intRow, 1)) >= 6 Then WScript.Echo "-----------------------------------" strPrinterName = objExcel.Cells(intRow, 1).Value strPrinterPort = objExcel.Cells(intRow, 2).Value strPrinterType = objExcel.Cells(intRow, 3).Value Select Case strPrinterType Case "HP" strPrintDriver = "HP Universal Printing PCL 5 (v5.1)" Case "Xerox" strPrintDriver = "Xerox Global Print Driver PS" End Select WScript.Echo strPrintDriver If LCase(objItem.Name) = LCase(Trim(strPrinterName)) Then WScript.Echo "Drucker installiert: " & strPrinterName intRow = intRow + 1 Else WScript.Echo "Neuer Drucker: " & strPrinterName intRow = intRow + 1 End If End If Next Loop objWorkbook.Close objExcel.Quit Printer.zip Quote Link to comment
carlito 10 Posted February 1, 2011 Report Share Posted February 1, 2011 Eigentlich sollte es aus einer Excel-Datei (aus der ersten Spalte) die Druckernamen auslesen und diese mit den bereits installierten Druckern vergleichen.Bis jetzt soll das Script mir nur den Namen ausgeben falls er installiert ist oder nicht. Danach werde ich das Script noch etwas erweitern. Was ist Sinn und Zweck deines Vorhabens? Wozu dient der Vergleich? Reicht es nicht, eine Liste der installierten Drucker zu erzeugen? Quote Link to comment
dan0707 10 Posted February 2, 2011 Author Report Share Posted February 2, 2011 Ich möchte dies so steuern, dass falls ein Drucker aus der Excel-Tabelle bereits installiert ist, diesen mit gewissen Attributen erweitert wird und falls nicht, diesen neu installieren. Quote Link to comment
carlito 10 Posted February 2, 2011 Report Share Posted February 2, 2011 Ich möchte dies so steuern, dass falls ein Drucker aus der Excel-Tabelle bereits installiert ist, diesen mit gewissen Attributen erweitert wird und falls nicht, diesen neu installieren. Welche Attribute wären das z.B.? Die Excel Tabelle ist also deine "Drucker-Installations-Referenz-Liste", ja? Quote Link to comment
blub 115 Posted February 2, 2011 Report Share Posted February 2, 2011 Hallo, Wenn du "LCase(objItem.Name)" und "LCase(Trim(strPrinterName))" in ein Logfile schreibst, sehen die Strings dann exakt gleich aus? blub Quote Link to comment
dan0707 10 Posted February 3, 2011 Author Report Share Posted February 3, 2011 Danke für eure Tips. Mein genialer Mitarbeiter konnte mir weiterhelfen. Für diejenigen die es interessiert: strComputer = "." strStandort = "XXX" On Error Resume Next Const wbemFlagReturnImmediately = &h10 Const wbemFlagForwardOnly = &h20 Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") Set objExcel = CreateObject("Excel.Application") Set objWorkbook = objExcel.Workbooks.Open ("C:\Printer.xls") intRow = 2 Set objNewPort = objWMIService.get _ ("Win32_TCPIPPrinterPort").SpawnInstance_ Set objPrinter = objWMIService.Get _ ("Win32_Printer").SpawnInstance_ Set colPrinter = objWMIService.ExecQuery("SELECT * FROM Win32_Printer", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly) For Each objItem In colPrinter strExistPrinter = strExistPrinter & ";"& objItem.Name Next strExistPrinter = UCase(Trim(strExistPrinter)) Do Until objExcel.Cells(intRow, 1).Value = "" strPrinterName = objExcel.Cells(intRow, 1).Value strPrinterPort = objExcel.Cells(intRow, 2).Value strPrinterType = objExcel.Cells(intRow, 3).Value bolNewprinter = False Select Case strPrinterType Case "HP" strPrintDriver = "#NAME DES TREIBERS#" Case "Xerox" strPrintDriver = "#NAME DES TREIBERS#" End Select If InStr(1, strExistPrinter, UCase(Trim(strPrinterName ))) <= 1 Then On Error Goto 0 bolNewprinter = True objNewPort.HostAddress = strPrinterPort objNewPort.Name = "IP_" & strPrinterPort objNewPort.Protocol = 1 objNewPort.PortNumber = "9100" objNewPort.SNMPEnabled = False objNewPort.Put_ objPrinter.DriverName = strPrintDriver objPrinter.PortName = "IP_" & strPrinterPort objPrinter.Name = strPrinterName objPrinter.DeviceID = strPrinterName objPrinter.Location = strStandort objPrinter.Local = True objPrinter.Shared = True objPrinter.ShareName = strPrinterName objPrinter.Published = True objPrinter.Put_ On Error Resume Next Else If bolNewprinter = False Then fnChangePrinterSettings strPrinterName, strPrintDriver End If End If intRow = intRow + 1 Loop objWorkbook.Close objExcel.Quit Function fnChangePrinterSettings(strPrinterObjectName,strDriverName) Set colInstalledPrinters = objWMIService.ExecQuery ("Select * from Win32_Printer Where Name = '" & strPrinterObjectName & "'") For Each objInstPrinter In colInstalledPrinters objInstPrinter.DriverName = strDriverName objInstPrinter.Location = strStandort objInstPrinter.Local = True objInstPrinter.Shared = True objInstPrinter.ShareName = strPrinterObjectName objInstPrinter.Published = True objInstPrinter.Put_ Next End Function Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.