dan0707 10 Geschrieben 1. Februar 2011 Melden Teilen Geschrieben 1. Februar 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 Zitieren Link zu diesem Kommentar
carlito 10 Geschrieben 1. Februar 2011 Melden Teilen Geschrieben 1. Februar 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? Zitieren Link zu diesem Kommentar
dan0707 10 Geschrieben 2. Februar 2011 Autor Melden Teilen Geschrieben 2. Februar 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. Zitieren Link zu diesem Kommentar
carlito 10 Geschrieben 2. Februar 2011 Melden Teilen Geschrieben 2. Februar 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? Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 2. Februar 2011 Melden Teilen Geschrieben 2. Februar 2011 Hallo, Wenn du "LCase(objItem.Name)" und "LCase(Trim(strPrinterName))" in ein Logfile schreibst, sehen die Strings dann exakt gleich aus? blub Zitieren Link zu diesem Kommentar
dan0707 10 Geschrieben 3. Februar 2011 Autor Melden Teilen Geschrieben 3. Februar 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 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.