seaquest30
Goto Top

Netzwerkdrucker finden und feststellen ob sie angeschaltet sind

Hallo

mein Titel ist vielleicht nicht so aussagekräftig, aber mir ist nichts besseres eingefallen.

Ich habe im Netzwerk (Windows XP Rechner) mehrere Drucker die an einem PC angeschlossen sind und dort per Drucker Freigabe im Netz zu erreichen sind.
(die Drucker sind keine eigenständigen Netzwerkdrucker).
Nun passiert es das jemand einen Drucker ausschaltet und dann beschweren sich die Leute das sie nicht drucken können.

Meine ist nun ob man per script, wmi oder batch feststellen kann ob die entfernten Drucker noch laufen? Dann könnte man ein kleines Symbol im Systemtray einblenden lassen wie eine Ampel grün Drucker laufen, gelb, Rechner läuft aber Drucker sind aus, Rot Rechner selbst ist nicht erreichbar.

Ich denke die Drucker von der entfernung einzuschalten wird bei den wenigsten Druckern funktionieren, aber dann wäre schon mal eine Info da.

Gib es für sowas einen Ansatzpunkt?
Leider kenne ich mich mit WMI oder solchen Sachen gar nicht aus.

Es wäre super wenn mir da jemand helfen könnte.

Vielen Dank schon mal im voraus

Seaquest30

Content-ID: 58894

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

Ausgedruckt am: 22.11.2024 um 06:11 Uhr

Dynadrate
Dynadrate 13.05.2007 um 13:26:43 Uhr
Goto Top
Man könnte ein VB Programm schreiben, dass die Drucker anpingt.
Meine Erfahrung: Wenn die User allerdings nicht einmal nachschauen, ob der Drucker angeschaltet ist, werden Sie auch keine Ampel im Tray beachten und weiter anrufen ;)
Ultraschnecke
Ultraschnecke 13.05.2007 um 13:44:20 Uhr
Goto Top
Der Ping wird Dir nicht viel bringen, da der Ping nur den Rechner erreicht an dem die Drucker angeschlossen sind. Der Ping kann dir nur Aussage darüber geben, ob der Rechner erreichbar ist.

Kann man evtl. bestimmte Eigenschaften des Druckers abfragen? Wie z.B. Restpapiermenge oder Tonerstatus?

Gruß
seaquest30
seaquest30 13.05.2007 um 13:57:20 Uhr
Goto Top
Das mit dem Ping ist wirklich nur für den Rechner. Deshalb schrieb ich das es keine echten Netzwerkdrucker sind die eine eigene IP besitzen. Wäre dem so wäre es einfach.
Und das mit dem angeschaltet. Die Drucker sind räumlich getrennt deshalb ist das mit demnachsehen nicht ganz einfach.


Mhh ob ich so was wie den Tonerstatus abfragen kann weiß ich nicht auswendig, aber ich denke lokal habe ich ja schon zugriff auf die Eigenschaften des jeweiligen Druckers nur wie bekomme ich das hin das das auch von einer entfernten Workstation aus funktioniert?


Danke schon mal für die Antworten

Seaquest30
Dynadrate
Dynadrate 13.05.2007 um 14:09:21 Uhr
Goto Top
-Sorry, habs überlesen-

mfg
Ultraschnecke
Ultraschnecke 13.05.2007 um 14:27:13 Uhr
Goto Top
Vielleicht gehts mit dem SNMP-Protokoll? Hab damit zwar noch nie gearbeitet, aber genau für sowas wurd das ja eingeführt...
problemsolver
problemsolver 13.05.2007 um 17:03:12 Uhr
Goto Top
Hi!

folgender Code funktioniert nur bei XP-Rechnern. (wg. WorkOffline)
Wenn jemand eine andere Idee hat, nur raus damit. (z.B. Anzahl der Druckaufträge im Spooler >0 dann ist der Drucker offline?!?)

Anstatt dem "." müsste man nur noch den Rechnernamen einsetzen, da ansonsten nur der lokale Rechner abgefragt wird...

set strComputer="."  

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")  
Set colInstalledPrinters = objWMIService.ExecQuery("Select * from Win32_Printer")  

For Each objPrinter in colInstalledPrinters
    WScript.Echo objPrinter.ServerName & ": " & objPrinter.WorkOffline  
Next

Hoffe es funktioniert, da ichs nur fix eben "hingezaubert" hab face-wink

Gruß

Markus
seaquest30
seaquest30 13.05.2007 um 23:10:55 Uhr
Goto Top
Hi schon mal vielen Dank für die Codezeilen

Lokal funktioniert das schon. Die Namen zu den Druckern werden zwar nicht angezeigt, aber das müßte mir folgendem code gehen.

	Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Printer")  

	For Each objItem In colItems
        wscript.echo Message & objItem.Caption & vbcrlf
    Next


(keine Ahnung ob das umständlich ist habe mir das aus einem anderem Script herausgelesen.)
Nun noch die beiden Schleifen zusammen bringen.


Leider bekomme ich noch keine Remotezugriff auf einen Netzwerkcomputer.
Muss ich da einen UNC Pfad angeben? (\\arbeitsgruppe\rechner?)
bzw einen Login mitschicken für einen dortigen Benutzer?

Vielleicht weis da jemand noch einen Tip.

Danke für eure mithilfe.
Das ist echt klasse


Bye
Seaquest30
seaquest30
seaquest30 14.05.2007 um 14:18:11 Uhr
Goto Top
so nachdem ich die Namen nun mitangezeigt bekomme.

dim printer_name(20)
Set objNetwork = WScript.CreateObject("WScript.Network")  
strComputer = objNetwork.ComputerName

       wscript.echo strcomputer



Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")  
Set colInstalledPrinters = objWMIService.ExecQuery("Select * from Win32_Printer")  

Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Printer")  

	For Each objItem In colItems
	printer_name(i) = objitem.caption & vbcrlf
	i = i +1
   
    Next

       I=0

For Each objPrinter in colInstalledPrinters

       WScript.Echo objPrinter.ServerName & printer_name(i) &": " & objPrinter.WorkOffline  
       i=i+1
Next

muss ich feststellen das die Anzeige nicht korrekt ist.
Ok ein Drucker wird im Zustand eingschaltet als "Falsch" gemeldet aber es ändert sich auf "Wahr" wenn man ihn ausschaltet. Damit kann ich was anfangen.

Aber bei einem Laserdrucker und einem Tintenstrahler wird das ein und ausschalten nicht bemerkt. Die Antwort ist immer "Falsch".
Das liegt wohl daran das diese Drucker obwohl sie ausgeschaltet sind als "Bereit" gemeldet sind.

Als so komme ich da wohl nicht an eine zuverlässige Aussage.
Schade.

Danke schon mal für die Tips.
Vielleicht hat ja jemand noch einen anderen Lösungsansatz.

Bye

Seaquest30
seaquest30
seaquest30 18.05.2007 um 00:04:27 Uhr
Goto Top
mmhh
ich bin leider nicht mehr weitergekommen mit dem Problem. Sollte noch jemand eine Idee hat immer her damit. Ich werde sie gerne ausprobieren.
Danke schon mal


Seaquest 30
problemsolver
problemsolver 18.05.2007 um 15:00:24 Uhr
Goto Top
Hi nochmal,

also ich denke, dass dein eigentliches Ziel an der ganzen Sache ist, dass Du siehst, ob ein Drucker auf einem Rechner online ist oder nicht. Dementsprechend kannst du auch herausfinden, ob evtl. Druckaufträge auf dem Rechner vorhanden sind. Kommt der Sache eigentlich recht nah face-wink

Also hier die Möglichkeit, um die Anzahl aller Druckaufträge in der Printqueue eines Rechners zu ermitteln.

Set objNetwork = WScript.CreateObject("WScript.Network")  
strComputer = objNetwork.ComputerName

       wscript.echo strcomputer

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")  
Set colInstalledPrinters = objWMIService.ExecQuery("SELECT * FROM Win32_PrintJob", "WQL", _  
                                          wbemFlagReturnImmediately + wbemFlagForwardOnly)
i=0
for each colItem in colInstalledPrinters
i=i+1
next
wscript.echo "Anzahl aller Printjobs auf dem Rechner " & strComputer & ": " & i  
seaquest30
seaquest30 21.05.2007 um 16:26:42 Uhr
Goto Top
Hi

Hi nochmal,

also ich denke, dass dein eigentliches Ziel
an der ganzen Sache ist, dass Du siehst, ob
ein Drucker auf einem Rechner online ist oder
nicht.

Genau, die Leute sollen sehen ob die Drucker an oder aus sind.


Dementsprechend kannst du auch
herausfinden, ob evtl. Druckaufträge auf
dem Rechner vorhanden sind. Kommt der Sache
eigentlich recht nah face-wink

MMh also ich glaube das hilft mir nicht weiter. Denn wenn 0 Printjobs vorhanden sind werden auch 0 angezeigt, egal ob Drucker angeschaltet oder aus sind. Das würde mir nur helfen wenn ständig gedruckt wird. Was mir gerade bei ausprobieren kommt ist das mir ja auch Printjobs gemeldet werden obwohl der jeweilige Drucker gar nicht an ist. (Bis zur Fehlermeldung konnte nicht gedruckt werden).
Das ist auch kein Ansatz um dem Problem Herr zu werden. Oder habe ich da was falsch verstanden.

Also hier die Möglichkeit, um die
Anzahl aller Druckaufträge in der
Printqueue eines Rechners zu ermitteln.

danke für die Tips

Bye
Seaquest30