Jump to content

VBS - Installierte Drucker mit Excel-Tabelle vergleichen


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

Recommended Posts

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

Link to comment
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?

Link to comment

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

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...