Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Druckerport auslesen

Frage Entwicklung VB for Applications

Mitglied: superwasi

superwasi (Level 1) - Jetzt verbinden

09.10.2008, aktualisiert 10.10.2008, 9996 Aufrufe, 4 Kommentare

Druckerport LPT, USB oder TCP?

Hallo zusammen. Ich habe ein kleines Problem und hoffe das mir ein schlauer Kopf weiter helfen kann!

Gibt es die Möglichkeit mit einem VB Script herauszufinden, ob der Druckerport für einen LPT USB oder Netzwerkdrucker bestimmt ist?

Oder gibt es über den Druckernamen die Möglichkeit, beispielsweise mit einem Regestryeintrag herauszufinden, mit was für einer Schnittstelle der Drucker angeschlossen ist?

Danke im voraus.
Mitglied: superwasi
09.10.2008 um 10:53 Uhr
Oder anderst gefragt, gibt es denn keine Möglichkeit per VBS die Anschlussart eines Druckers (LPT, USB, TCP also Netzwerkseitig) heraus zu finden?

Danke im voraus.
Bitte warten ..
Mitglied: Jochem
09.10.2008 um 13:07 Uhr
Moin,
in der Registry von W2K:

HKLM - System - CurrentControlSet - Control - Print - Printers

gibt es für jeden im System konfigurierten Drucker einen Eintrag. Einer der zugehörigen Schlüssel dazu lautet "Port".

Bei einem Netzwerkdrucker steht dort die jeweilige IP-Adresse drin, bei einem parallel angeschlossenen Drucker entsprechend "LPT1:", bei USB eben dann "USB001".

Wie Du die Werte nun ausgelesen bekommst, dazu können Dir sicher die VBS-Spezis Hilfestellung geben.
Bitte warten ..
Mitglied: superwasi
10.10.2008 um 11:23 Uhr
Danke Jochem!

Das war genau das, was ich benötigt habe.

Super!!!
Bitte warten ..
Mitglied: superwasi
10.10.2008 um 11:43 Uhr
Ich poste mal hier das ganze Script, fals jemand davon was brauchen sollte.
Ihr müsst nur darauf achten, dass manche Zeilenumbrüche durch das einfügen auf diese Seite entsatnden sind, die nicht zum Programm gehören.



'Variablen und Konstaten deklarieren
Dim SQLStr, strRecordSet, strComputer,druckerString,druckerString2,erstesZeichen,printServerName,druckerNummer,printserver1Oder2,printserver,printerName,nichtslash,zwischenspeicher, oldPrintServerName
Dim ipZaehler,strCommand,abgeschnitteneZahl,Value

'Hier wird der aktuell angemeldete User und der WS- Name ausgelesen.
Set Testobjekt= CreateObject("WScript.Network")
benutzername = Testobjekt.UserName
wsname = Testobjekt.ComputerName

'Hier wird das aktuelle Datum ausgelesen.
datum = date()

'Verbindung mit Datenbank herstellen.
StrConnect = "Driver={SQL Server};Server=sqlc8;Database=Printserver;"
Set conn = CreateObject("ADODB.Connection")
conn.Open StrConnect

On Error Resume Next

'Als Computeradresse wird ein . angegeben. Somit wird der Lokalhost angesprochen.
strComputer= "."

'Unterhalb werden die Drucker ausgelesen die auf dem lokalen Rechner installiert sind.
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Printer",,48)
For Each objItem In colItems

'Der Name des Druckers wird der Variable druckerString übergenem.
druckerString = objItem.Name

'Die Variable druckerString wird zerlegt um zu überprüfen, ob es sich um einen
'lokal oder netzwerkseitig installierten Drucker handelt.
erstesZeichen = Left (druckerString,1)
'MsgBox druckerString
'Wenn der Drucker über einen Printserver installiert ist, durchläuft der
'Drucker den ersten Teil der Schleife.
If (erstesZeichen="\")then

'Es werden die ersten zwei Zeichen nach den voranführenden "\\" an die
'Variabel "printServerName" übergeben
printServerName = Mid (druckerString,3,2)

'Hier wird der druckerName vom Rest des Strings getrennt.
'Ausgangsstring sieht in etwa so aus \\ps-bsgpsa11\prn1865.
druckerString2 = druckerString

'In der folgenden Schleife wird jedes Zeichen von hinten her
'kontrolliert, ob es ein "\" ist, sobald das Zeichen ein "\" ist wird
'die Schleife unterbrochen. Zusätzlich werden alle Zeichen gezählt.
While (nichtslash = 0)
zwischenspeicher = Right(druckerString2, 1)

If (zwischenspeicher <> "\") Then
druckerString2 = Left(druckerString2, Len(druckerString2) -1)
buchstabenzaehler = buchstabenzaehler + 1
End If
If (zwischenspeicher = "\") Then
nichtslash = 1
End If
Wend

'Der Druckername wir aus dem String "druckerString" mit der ermittelten
'Anzhal an Zeichen an die Variable "druckerName" übergeben
printerName = Right(druckerString, buchstabenzaehler)


'Wenn der Printservername mit "PS" oder "ps" anfängt führe den ersten
'Teil der Wenn- Bedingung aus, ansonsten den zweiten oder dritten.
If (printServerName = "PS" Or printServerName = "ps" )then

'Der Name des alten Printserver wird an die Variabel
'"oldPrintServerName" übergeben
oldPrintServerName = Mid (druckerString,3,11)

'Kontrolle, ob der ermittelte Benutzer mit dem ermittelten
'Computer bereits in der DB erfasst wurde
Set recordSet = CreateObject("ADODB.Recordset")
SQLStr = "SELECT COUNT(*) AS AnzRows FROM dbo.tPrinterCheck WHERE (wsname = '" & wsname & "') AND (printerName = '" & printerName & "') AND (username = '" & benutzername & "')"
recordSet.Open SQLStr, conn, 1, 1
recordSet.MoveFirst

Do Until recordSet.EOF

strRecordSet = recordSet(0)

'Wenn noch kein Eintrag in der DB vorhanden ist, führe
'die Wenn- Bedingung aus.
If strRecordSet = "0" Then
'Informationen werden in Datenbank geschrieben.
'Installationsart alter Printserver.
Set cmd = CreateObject("ADODB.Command")
cmd = "INSERT INTO tPrinterCheck(datum, username, wsname, printerName,OldPrintServer) VALUES ('" & datum & "', '" & benutzername & "', '" & wsname & "', '" & printerName & "', '" & oldPrintServerName & "')"
conn.Execute cmd
End If

recordSet.MoveNext
Loop

'Wenn der Printservername(Workstation die einen Pr freigibt) mit "WS"
'oder "ws" anfängt führe den ersten Teil der Wenn- Bedingung aus,
'ansonsten den dritten Teil.
ElseIf(printServerName = "WS"Or printServerName = "ws" )then

'Der Name Workstation wird an die Variabel "wsDiePrShared"
'(Workstation die printer shared) übergeben
wsDiePrShared = Mid (druckerString,3,6)


'Kontrolle, ob der ermittelte Benutzer mit dem ermittelten
'Computer bereits in der DB erfasst wurde.
Set recordSet = CreateObject("ADODB.Recordset")
SQLStr = "SELECT COUNT(*) AS AnzRows FROM dbo.tPrinterCheck WHERE (wsname = '" & wsname & "') AND (printerName = '" & printerName & "') AND (username = '" & benutzername & "')"
recordSet.Open SQLStr, conn, 1, 1
recordSet.MoveFirst

Do Until recordSet.EOF

strRecordSet = recordSet(0)

'Wenn noch kein Eintrag in der DB vorhanden ist, führe
'die Wenn- Bedingung aus
If strRecordSet = "0" Then
'Informationen werden in Datenbank geschrieben.
'Installationsart neuer Printserver.
Set cmd = CreateObject("ADODB.Command")
cmd = "INSERT INTO tPrinterCheck(datum, username, wsname, printerName, sharePrintserver) VALUES ('" & datum & "', '" & benutzername & "', '" & wsname & "', '" & printerName & "','" & wsDiePrShared & "')"
conn.Execute cmd
End If

recordSet.MoveNext
Loop

Else
'Unterhalb wird selektiert ob der Drucker auf den Printserver
'vm-ps01 oder vm-ps02 installiert wird.
druckerNummer = Right (druckerString,4) 'Hier wird die
'vierstellige Zahl des druckerStrings abgeschnitten.
printserver1Oder2 = druckerNummer Mod 2
If (printserver1Oder2 = "0")then 'Wenn das Ergebnis 0 ist wird
'der Printservername vm-ps02 in die DB geschrieben.
printserver = "vm-ps02"
Else 'Wenn das Ergebnis 0 ist wird der Printservername vm-ps01
'in die DB geschrieben.
printserver = "vm-ps01"
End If

'Kontrolle, ob der ermittelte Benutzer mit dem ermittelten
'Computer bereits in der DB erfasst wurde.
Set recordSet = CreateObject("ADODB.Recordset")
SQLStr = "SELECT COUNT(*) AS AnzRows FROM dbo.tPrinterCheck WHERE (wsname = '" & wsname & "') AND (printerName = '" & printerName & "') AND (username = '" & benutzername & "') AND (newPrintserver = '1')"
recordSet.Open SQLStr, conn, 1, 1
recordSet.MoveFirst

Do Until recordSet.EOF

strRecordSet = recordSet(0)

'Wenn noch kein Eintrag in der DB vorhanden ist, führe
'die Wenn- Bedingung aus
If strRecordSet = "0" Then
'Informationen werden in Datenbank geschrieben.
'Installationsart neuer Printserver.
Set cmd = CreateObject("ADODB.Command")
cmd = "INSERT INTO tPrinterCheck(datum, username, wsname, printerName, newPrintserver) VALUES ('" & datum & "', '" & benutzername & "', '" & wsname & "', '" & printerName & "','" & printserver & "')"
conn.Execute cmd
End If

recordSet.MoveNext
Loop

End If

'Leere den Inhalt der Variable "druckerName"
printerName = 0

'Wenn der Drucker lokal installiert ist, durchläuft er den zweiten Teil der
'Schleife.
Else
'Kontrolle, ob der lokal installierte Drucker ein Anwendungsdrucker
'ist, wie z.B. ein "Adobe PDF"- Drucker.
'Ist dies der Fall, dann führe die erste Bedingung aus, ansonsten die
'zweite.
If (druckerString="Adobe PDF") Or (druckerString="Microsoft XPS Document Writer") Or (druckerString="CSB-PDF-PRINTER") Or (druckerString="Smart Label Printer 240") then
'Wenn ein "Adobe PDF" Drucker oder "Microsoft XPS Document
'Writer" intsalliert ist, wird dieser nicht in die Datenbank
'geschrieben.

Else

'Hier wird der Anschlusstyp aus der Regestry ausgelesen (USB, LPT, TCP).
Const HKEY_LOCAL_MACHINE = &H80000002
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")
'Hier wird aus der Regestrie der Hostname ausgelesen, der zum
'Port gehört.
Set WshShell = CreateObject("WScript.Shell")
Path = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers\"& druckerString & "\Port"
Value = WshShell.RegRead(Path)

'Da die Bezeichnung USB,LPD am Anfang oder Schluss der
'Portbezeichnung vorkommt werden die ersten 3 und letzten 3
'Zeichen überprüft.
anschlussart = Left (Value,3)
anschlussart2 = Right (Value,3)

'Wenn die folgende Zeichenkombinationen zutreffen, wird
'folgender Teil der Schleife durchlaufen.
If (anschlussart = "USB") Or (anschlussart = "usb") Or (anschlussart2 = "USB") Or (anschlussart2 = "usb")then
'Wertübergabe des ermittelten Druckernamens an die
'Variabel "druckerName"
printerName = druckerString

Set recordSet = CreateObject("ADODB.Recordset")
SQLStr = "SELECT COUNT(*) AS AnzRows FROM dbo.tPrinterCheck WHERE (wsname = '" & wsname & "') AND (printerName = '" & printerName & "') AND (username = '" & benutzername & "')"
recordSet.Open SQLStr, conn, 1, 1
recordSet.MoveFirst

Do Until recordSet.EOF

strRecordSet = recordSet(0)

If strRecordSet = "0" Then
'Informationen werden in Datenbank
'geschrieben. Installationsart lokal.
Set cmd = CreateObject("ADODB.Command")

cmd = "INSERT INTO tPrinterCheck(datum, username, wsname, printerName, lokal, USB_LPT_TCP) VALUES ('" & datum & "', '" & benutzername & "', '" & wsname & "', '" & printerName & "','1','USB')"
conn.Execute cmd
End If

recordSet.MoveNext
Loop

'Wenn die folgende Zeichenkombinationen zutreffen, wird
'folgender Teil der Schleife durchlaufen.
ElseIf (anschlussart = "LPT") Or (anschlussart = "lpt") Or (anschlussart2 = "LPT") Or (anschlussart2 = "lpt")then
'Wertübergabe des ermittelten Druckernamens an die Variabel
'"druckerName"
printerName = druckerString

Set recordSet = CreateObject("ADODB.Recordset")
SQLStr = "SELECT COUNT(*) AS AnzRows FROM dbo.tPrinterCheck WHERE (wsname = '" & wsname & "') AND (printerName = '" & printerName & "') AND (username = '" & benutzername & "')"
recordSet.Open SQLStr, conn, 1, 1
recordSet.MoveFirst

Do Until recordSet.EOF

strRecordSet = recordSet(0)

If strRecordSet = "0" Then
'Informationen werden in Datenbank geschrieben.
'Installationsart lokal.
Set cmd = CreateObject("ADODB.Command")
cmd = "INSERT INTO tPrinterCheck(datum, username, wsname, printerName, lokal, USB_LPT_TCP) VALUES ('" & datum & "', '" & benutzername & "', '" & wsname & "', '" & printerName & "','1','LPT')"
conn.Execute cmd
End If

recordSet.MoveNext
Loop



Else

'Wertübergabe des ermittelten Druckernamens an die
'Variabel "druckerName"
printerName = druckerString

Set recordSet = CreateObject("ADODB.Recordset")
SQLStr = "SELECT COUNT(*) AS AnzRows FROM dbo.tPrinterCheck WHERE (wsname = '" & wsname & "') AND (printerName = '" & printerName & "') AND (username = '" & benutzername & "') AND (lokal = '1')"
recordSet.Open SQLStr, conn, 1, 1
recordSet.MoveFirst

Do Until recordSet.EOF

strRecordSet = recordSet(0)

If strRecordSet = "0" Then
'Informationen werden in Datenbank
'geschrieben. Installationsart lokal.
Set cmd = CreateObject("ADODB.Command")
cmd = "INSERT INTO tPrinterCheck(datum, username, wsname, printerName, lokal, USB_LPT_TCP) VALUES ('" & datum & "', '" & benutzername & "', '" & wsname & "', '" & printerName & "','1','TCP')"
conn.Execute cmd
End If

recordSet.MoveNext
Loop
End If
End If

End If
Next
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Batch & Shell
gelöst Appx aus Image auslesen und entfernen (9)

Frage von Markus2016 zum Thema Batch & Shell ...

JavaScript
gelöst Dropdownfeld auslesen und mit AJAX und JS an PHP senden (7)

Frage von ITFlori zum Thema JavaScript ...

Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...