quba
Goto Top

installierte Drucker auslesen

Hallo zusammen,

ich möchte gerne in bezug auf Inventarisierung
per Netlogon Script alle installierten Drucker auf unseren
PCs Dokumentieren.
Also am besten ein Batch Skript, das die installierten Drucker
in eine Textdatei schreibt. (%COMPUTERNAME%.txt)

Wie ist das am besten zu bewerkstelligen?

Danke und Gruß
quba

Content-ID: 40726

Url: https://administrator.de/contentid/40726

Ausgedruckt am: 08.11.2024 um 11:11 Uhr

AndreasHoster
AndreasHoster 22.09.2006 um 17:03:34 Uhr
Goto Top
Mit dem Universalwerkzeug für alle Windows Verwaltungsaufgaben: WMI
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnanch ...
und zum sehen, was man noch alles auslesen kann die Scriptomatic V2 (extrem empfehlenswert):
http://www.microsoft.com/downloads/details.aspx?familyid=09DFC342-648B- ...

Jetzt bleibt noch die Frage, wieviele Infos Du haben willst.
Wenn nur der Name, folgendes als .vbs speichern:
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Printer",,48)
For Each objItem in colItems
Wscript.Echo "Name: " & objItem.Name
Next

und mit cscript.exe ...vbs > Ausgabedatei starten.

Falls Du mehr Infos über die Drucker brauchst, die Klasse Win32_Printer hat noch mehr:
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Printer",,48)
For Each objItem in colItems
Wscript.Echo "Attributes: " & objItem.Attributes
Wscript.Echo "Availability: " & objItem.Availability
Wscript.Echo "AvailableJobSheets: " & objItem.AvailableJobSheets
Wscript.Echo "AveragePagesPerMinute: " & objItem.AveragePagesPerMinute
Wscript.Echo "Capabilities: " & objItem.Capabilities
Wscript.Echo "CapabilityDescriptions: " & objItem.CapabilityDescriptions
Wscript.Echo "Caption: " & objItem.Caption
Wscript.Echo "CharSetsSupported: " & objItem.CharSetsSupported
Wscript.Echo "Comment: " & objItem.Comment
Wscript.Echo "ConfigManagerErrorCode: " & objItem.ConfigManagerErrorCode
Wscript.Echo "ConfigManagerUserConfig: " & objItem.ConfigManagerUserConfig
Wscript.Echo "CreationClassName: " & objItem.CreationClassName
Wscript.Echo "CurrentCapabilities: " & objItem.CurrentCapabilities
Wscript.Echo "CurrentCharSet: " & objItem.CurrentCharSet
Wscript.Echo "CurrentLanguage: " & objItem.CurrentLanguage
Wscript.Echo "CurrentMimeType: " & objItem.CurrentMimeType
Wscript.Echo "CurrentNaturalLanguage: " & objItem.CurrentNaturalLanguage
Wscript.Echo "CurrentPaperType: " & objItem.CurrentPaperType
Wscript.Echo "Default: " & objItem.Default
Wscript.Echo "DefaultCapabilities: " & objItem.DefaultCapabilities
Wscript.Echo "DefaultCopies: " & objItem.DefaultCopies
Wscript.Echo "DefaultLanguage: " & objItem.DefaultLanguage
Wscript.Echo "DefaultMimeType: " & objItem.DefaultMimeType
Wscript.Echo "DefaultNumberUp: " & objItem.DefaultNumberUp
Wscript.Echo "DefaultPaperType: " & objItem.DefaultPaperType
Wscript.Echo "DefaultPriority: " & objItem.DefaultPriority
Wscript.Echo "Description: " & objItem.Description
Wscript.Echo "DetectedErrorState: " & objItem.DetectedErrorState
Wscript.Echo "DeviceID: " & objItem.DeviceID
Wscript.Echo "Direct: " & objItem.Direct
Wscript.Echo "DoCompleteFirst: " & objItem.DoCompleteFirst
Wscript.Echo "DriverName: " & objItem.DriverName
Wscript.Echo "EnableBIDI: " & objItem.EnableBIDI
Wscript.Echo "EnableDevQueryPrint: " & objItem.EnableDevQueryPrint
Wscript.Echo "ErrorCleared: " & objItem.ErrorCleared
Wscript.Echo "ErrorDescription: " & objItem.ErrorDescription
Wscript.Echo "ErrorInformation: " & objItem.ErrorInformation
Wscript.Echo "ExtendedDetectedErrorState: " & objItem.ExtendedDetectedErrorState
Wscript.Echo "ExtendedPrinterStatus: " & objItem.ExtendedPrinterStatus
Wscript.Echo "Hidden: " & objItem.Hidden
Wscript.Echo "HorizontalResolution: " & objItem.HorizontalResolution
Wscript.Echo "InstallDate: " & objItem.InstallDate
Wscript.Echo "JobCountSinceLastReset: " & objItem.JobCountSinceLastReset
Wscript.Echo "KeepPrintedJobs: " & objItem.KeepPrintedJobs
Wscript.Echo "LanguagesSupported: " & objItem.LanguagesSupported
Wscript.Echo "LastErrorCode: " & objItem.LastErrorCode
Wscript.Echo "Local: " & objItem.Local
Wscript.Echo "Location: " & objItem.Location
Wscript.Echo "MarkingTechnology: " & objItem.MarkingTechnology
Wscript.Echo "MaxCopies: " & objItem.MaxCopies
Wscript.Echo "MaxNumberUp: " & objItem.MaxNumberUp
Wscript.Echo "MaxSizeSupported: " & objItem.MaxSizeSupported
Wscript.Echo "MimeTypesSupported: " & objItem.MimeTypesSupported
Wscript.Echo "Name: " & objItem.Name
Wscript.Echo "NaturalLanguagesSupported: " & objItem.NaturalLanguagesSupported
Wscript.Echo "Network: " & objItem.Network
Wscript.Echo "PaperSizesSupported: " & objItem.PaperSizesSupported
Wscript.Echo "PaperTypesAvailable: " & objItem.PaperTypesAvailable
Wscript.Echo "Parameters: " & objItem.Parameters
Wscript.Echo "PNPDeviceID: " & objItem.PNPDeviceID
Wscript.Echo "PortName: " & objItem.PortName
Wscript.Echo "PowerManagementCapabilities: " & objItem.PowerManagementCapabilities
Wscript.Echo "PowerManagementSupported: " & objItem.PowerManagementSupported
Wscript.Echo "PrinterPaperNames: " & objItem.PrinterPaperNames
Wscript.Echo "PrinterState: " & objItem.PrinterState
Wscript.Echo "PrinterStatus: " & objItem.PrinterStatus
Wscript.Echo "PrintJobDataType: " & objItem.PrintJobDataType
Wscript.Echo "PrintProcessor: " & objItem.PrintProcessor
Wscript.Echo "Priority: " & objItem.Priority
Wscript.Echo "Published: " & objItem.Published
Wscript.Echo "Queued: " & objItem.Queued
Wscript.Echo "RawOnly: " & objItem.RawOnly
Wscript.Echo "SeparatorFile: " & objItem.SeparatorFile
Wscript.Echo "ServerName: " & objItem.ServerName
Wscript.Echo "Shared: " & objItem.Shared
Wscript.Echo "ShareName: " & objItem.ShareName
Wscript.Echo "SpoolEnabled: " & objItem.SpoolEnabled
Wscript.Echo "StartTime: " & objItem.StartTime
Wscript.Echo "Status: " & objItem.Status
Wscript.Echo "StatusInfo: " & objItem.StatusInfo
Wscript.Echo "SystemCreationClassName: " & objItem.SystemCreationClassName
Wscript.Echo "SystemName: " & objItem.SystemName
Wscript.Echo "TimeOfLastReset: " & objItem.TimeOfLastReset
Wscript.Echo "UntilTime: " & objItem.UntilTime
Wscript.Echo "VerticalResolution: " & objItem.VerticalResolution
Wscript.Echo "WorkOffline: " & objItem.WorkOffline
Next
Biber
Biber 22.09.2006 um 17:30:34 Uhr
Goto Top
... wobei die flexibelste Variante für einen Batchaufruf die Verwendung des von AndreasHoster geposteten Monster-Skripts in Verbindung mit findstr wäre [Beispiel]:
cscript //nologo GetPrnInfosSatt.vbs|findstr "DriverName ServerName ShareName Caption">>\\target\Inventur\ClientPrinters.log 

Gruß
Biber
Manolax
Manolax 21.11.2007 um 10:48:19 Uhr
Goto Top
Kann mir jemand von euch das Skript vielleicht noch ein bisschen erweitern?
Und zwar bräuchte ich es so, das alle Drucke bei einem User ausgelesen werden.
Dann soll überprüft werden ob Drucker "Bla" auf Server "Blubb" vorhanden ist, wenn ja, dann soll Drucker "Bla" gelöscht werden und mit einem anderen Freigabenamen auf einem anderen Server wieder verbunden werden.
Wäre euch sehr dankbar wenn jemand das hinbekommt.

Grüße
Thomas
Manolax
Manolax 21.11.2007 um 12:07:43 Uhr
Goto Top
Habe jetzt selber schon eine Lösung gefunden.
Sogar nur mit Windows Batch.
Will euch nicht vorenthalten, vielleicht kann es ja jemand brauchen:

@echo off
reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices" >> C:\Temp\drucker.txt  

find /I "\\server\drucker" C:\Temp\drucker.txt  
IF %ERRORLEVEL% == 0 rundll32 printui.dll,PrintUIEntry /q /dn /n \\server\drucker
IF %ERRORLEVEL% == 0 rundll32 printui.dll,PrintUIEntry /q /in /n \\NEUserver\NEUdrucker
del C:\Temp\drucker.txt
Biber
Biber 21.11.2007 um 13:12:07 Uhr
Goto Top
Moin Manolax,

danke für die Erweiterung/Ergänzung der Fragestellung und das Posten der Lösung.

Kann bestimmt jemand brauchen.

Danke und Gruß
Biber
Manolax
Manolax 22.11.2007 um 10:18:01 Uhr
Goto Top
Jetzt bräuchte ich doch nochmal ne Erweiterung von dem Script.

Und zwar soll das ganze jetzt mit mehr Druckern passieren.
Klar jetzt könnt ich einfach für jeden Drucker paar Zeilen nehmen, aber schöner wärs das ganze in ne Schleife zu packen.
Dann könnte man irgendwo oben die auszutauschenden Drucker definieren.

Soweit ich weiß kann man in Batch keien Arrays definieren, was das ganze doch schon etwas kniffliger macht.
Weiß jemand von euch, wie man das in etwa realisieren könnte?
Biber
Biber 22.11.2007 um 10:46:37 Uhr
Goto Top
Moin Manolax,

Jetzt bräuchte ich doch nochmal ne Erweiterung von dem Script.
Von dem Script wirst Du keine Erweiterung bekommen, dieses Feature ist nachweislich nicht implementiert.

Wenn Du eine Erweiterung des Scriptes wünscht, dann können wir das gerne hier entwickeln (auch durchaus in diesem Thread, passt ja hierher).

Aber dann versuche bitte etwas genauer die Anforderungen im Einzelnen zu beschreiben.

Danke
Biber
Manolax
Manolax 22.11.2007 um 11:30:46 Uhr
Goto Top
Na dann versuch ich doch mal die Anforderungen genau zu beschreiben.

Momentan sind bei den Benutzern verschiedene Drucker über einen Printserver verbunden.
Dieser Printserver wird "entsorgt".
Deshalb sollen alle Drucker auf einem neuen Printserver, welcher auch einen neuen Hostnamen hat, verbunden werden.
In dem Zuge werden auch die Freigabenamen aller Drucker geändert.
Das heißt alte Verbindungen löschen und neue erstellen.
Das Script von mir macht das auch erst mal, allerdings nur mit einem Drucker.
Wie schon gesagt könnte ich den Code jetzt für jeden einzelnen Drucker kopieren und nur die Druckernamen ersetzen, dann wär das Script aber ziemlich lang.
Deshalb hab ich mir gedacht, das es da doch eine schönere Lösung geben muss. Evtl. mit einer Schleife.


Im nächsten Schritt soll es dann nöch einen zweiten Printserver geben, welcher genau die gleichen Freigaben anbietet, wie der erste.
Vor dem verbinden soll dann erst mal abgefragt werden ob Printserver1 verfügbar ist.
Evtl. über nen Ping oder besser noch ob der Druckerdienst läuft.
Falls nicht, dann soll die Verbindung mit Printserver2 hergestellt werden.

Ich hoffe ich habe das erst mal so weit verständlich erklärt.

Gruß
Manolax