d.pabst 10 Geschrieben 14. Februar 2006 Melden Teilen Geschrieben 14. Februar 2006 Hallo alle zusammen, ich bin aktuell damit beschäftigt per Skript die Standarddrucker am Client automatisch zu setzen. Hierzu habe ich eine Liste von Druckern, die nicht als standard gesetzt werden dürfen (z. Bsp. Microsoft Office Document Image Writer). Nachdem ich alle nicht erwünschten Drucker von den installierten herausgefiltert habe, sind nur noch erwünschte Drucker vorhanden. Wie kann ich nun den Standarddrucker erfassen? Mir reicht es dabei aus, für jeden Drucker abzufragen, ob dieser der Standarddrucker ist. Ist keiner Standard, so soll einer als Standard gesetzt werden (soll über ein Liste mit fester Reihenfolge erfolgen: Drucker, Drucker mit Standort, ...). Über den Befehl: rundll32 printui.dll,PrintUIEntry /f "drucker.txt" /Xg /n "drucker" konnte ich nicht die gewünschte Information ermitteln. Ergebnis in der Datei drucker.txt: PrinterName: Drucker ShareName: PortName: IP_128.1.9.83 DriverName: Xerox Document Centre CS50 PS Comment: Location: SepFile: PrintProcessor: WinPrint Datatype: RAW Parameters: Attributes: <Local|DoCompleteFirst|> Priority: 1 DefaultPriority: 0 StartTime: 0 UntilTime: 0 Status: <> Ebenso habe ich bis jetzt kein Wert in der Registry dafür ausfindig gemacht. Hat jemand eine Idee? Schöne Grüße d.pabst PS: Das ganze ist deshalb notwendig: Wenn ein Benutzer sich neu am Rechner anmeldet, wird automatisch der Drucker gesetzt der im Alphabet den höheren Buchstaben hat. Sprich: "Microsoft Office Document Image Writer" wird immer gesetzt, anstatt "HP" oder "Drucker" PPS: Vielleicht sehe ich den Wald vor lauter Bäume nicht! Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 14. Februar 2006 Melden Teilen Geschrieben 14. Februar 2006 Hallo, es ist zwar ein wenig primitiv, es hatte keine Routine zum Abfangen von Fehlern. 'VBScript source code ' Dim net Set net = CreateObject("WScript.Network") net.SetDefaultPrinter "HP LaserJet 5Si" Möglicherweise hilft es dir erstmal weiter. Das Skript muss im Kontext des Users ausgeführt werden, nicht in dem des Systems. Viel Erfolg Edgar Zitieren Link zu diesem Kommentar
d.pabst 10 Geschrieben 14. Februar 2006 Autor Melden Teilen Geschrieben 14. Februar 2006 Hallo lefg, danke für die schnelle Antwort. Jedoch versuche ich primär den aktuellen Standarddrucker zu ermitteln. Das setzen des Druckers will ich nur durchführen, wenn der Standarddrucker auf der Blacklist steht, bzw. aktuell noch keiner gesetzt ist. Wenn zum Beispiel zwei Drucker zur Verfügung stehen und keiner davon auf der Blacklist steht, so möchte ich den Standarddrucker nicht verändern (die Wahl des Users hat vorrang). Aber trotzdem danke! d.pabst Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 14. Februar 2006 Melden Teilen Geschrieben 14. Februar 2006 Aber trotzdem danke! Gern geschehen. :) Zitieren Link zu diesem Kommentar
BuzzeR 10 Geschrieben 14. Februar 2006 Melden Teilen Geschrieben 14. Februar 2006 Hallo d.pabst. Ich arbeite eigentlich meist mit wmic, aber ich muß zugeben, dass ich mit WMI in Verbindung mit Druckern noch nicht so viel experimentiert habe - muß ich nachher mal nachholen. Kannst ja mal folgendes prüfen. Ein ... C:\> wmic printer list brief ... gibt Dir alle lokal installierten Drucker aus. Folgende Anweisung sollte Dir nur den Namen des zur Zeit eingestellten DefaultPrinters ausgeben. C:\> wmic printer where "Default = 'True'" get Name Ich schaue gleich auch noch mal genauer nach, vielleicht kann ich ja die Tips noch weiter konkretisieren. LG Marco Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 14. Februar 2006 Melden Teilen Geschrieben 14. Februar 2006 Off-Topic: C:\> wmic printer list brief Hallo Marco,gibt es wmic eventuell nicht aud 2k?GrußEdgar Zitieren Link zu diesem Kommentar
BuzzeR 10 Geschrieben 14. Februar 2006 Melden Teilen Geschrieben 14. Februar 2006 Off-Topic:Hallo Edgar.Nein, wmic ist Teil von XP und W2k3, schaue aber mal, ob das bei MS zumdownload für W2k bereit steht.EDIT:Man kann aber auch über VBS auf WMI zugreifen, suche dazu ebenfallsmal ein bischen was raus.LGMarco Zitieren Link zu diesem Kommentar
d.pabst 10 Geschrieben 14. Februar 2006 Autor Melden Teilen Geschrieben 14. Februar 2006 Hallo BuzzeR, dein Beispiel mit wmic printer where "Default = 'True'" get Name funktioniert wunderbar. Gibt es hierfür eine Dokumentation, die die weiteren möglichen Parameter aufzeigt (hat aber mit diesem Problem nicht mehr viel zu tun)? Hast du das auch in JavaScript? Dann muss ich es nicht über das auslesen einer temp. Datei erfassen! Danke! :p d.pabst Zitieren Link zu diesem Kommentar
BuzzeR 10 Geschrieben 14. Februar 2006 Melden Teilen Geschrieben 14. Februar 2006 So werden die Instanzen von Win32_Printer mittels VBS abgefragt. strComputer = "localhost" Set wbemServices = GetObject("winmgmts:\\" & strComputer) Set wbemObjectSet = wbemServices.InstancesOf("Win32_Printer") For Each wbemObject In wbemObjectSet WScript.Echo "Name: " & wbemObject.Name Next Unter [1] kann man sich die WMITools runterladen, um mal in WMI zu stöbern (allerdings ohne WMIC, habe ich nicht gesondert gefunden) Unter [2] kann man sich das Scripting-Primer mal ansehen. Unter [3] gibt es das WMI-Core-Paket um Win 9x für WMI flott zu machen. Ansonsten Suche bei MS. ;) Related Links: 1. http://www.microsoft.com/downloads/details.aspx?FamilyId=6430F853-1120-48DB-8CC5-F2ABDC3ED314&displaylang=en 2. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnclinic/html/scripting06112002.asp 3. http://www.microsoft.com/downloads/details.aspx?FamilyId=98A4C5BA-337B-4E92-8C18-A63847760EA5&displaylang=en Hoffe das reicht ... schön wenn ich helfen konnte. LG Marco Zitieren Link zu diesem Kommentar
BuzzeR 10 Geschrieben 14. Februar 2006 Melden Teilen Geschrieben 14. Februar 2006 wmic ist schon ein sehr mächtiges Tool und damit kann man schon eine Menge anstellen. Gib mal folgendes ein: C:\> wmic os list /format:htable > os.htm Siehe und staune. ;) Prinzipiell stehen Dir die Funktionen, oder korrekter augedrückt Methoden ... ASSOC CREATE GET SET LIST ... zu den diversen Klassen zur Verfügung. Schau Dir aber mal wmic einfach genauer an und spiel damit rum. Laß die SET - Methode allerdings noch außen vor. :D LG Marco Zitieren Link zu diesem Kommentar
d.pabst 10 Geschrieben 15. Februar 2006 Autor Melden Teilen Geschrieben 15. Februar 2006 Hallo BuzzeR, DANKE für Deine Tipps. Werde sie mir in den nächsten Tagen mal näher anschauen. Dein Skript habe ich nun auch als JavaScript. Anbei mein Code: function FindDefaultPrinter () { var prc = GetObject("winmgmts:") .ExecQuery("SELECT * FROM Win32_Printer where default = 'true'"); for ( var e = new Enumerator(prc); !e.atEnd(); e.moveNext() ) { var pf = e.item(); return (pf.Caption); } } DefaultPrinter = FindDefaultPrinter(); WScript.Echo (DefaultPrinter); Das ganze muss in eine Datei.js gespeichert werden, bevor Du diese ausführen kannst. Natürlich können auch alle anderen Drucker hierüber abgefragt werden! :D Hätte ich das vorher gewusst? :D Schönen Tag noch d.pabst Zitieren Link zu diesem Kommentar
BuzzeR 10 Geschrieben 15. Februar 2006 Melden Teilen Geschrieben 15. Februar 2006 Shalömchen @ d.pabst. Nix zu danken, beschäftige mich zur Zeit sehr intensiv mit WMI und daher lag es nahe darauf aufmerksam zu machen. Schön das Du das JavaScript hier gepostet hast, wird sicher für einige auch von Interesse sein. Hatte ich ganz überlesen, dass Du das als JS haben wolltest - ich wollte mit dem VBS nur meine Anmerkung Edgar gegenüber noch untermauern, dass man auch ohne wmic die Informationsgewinnung über VB-Script realisieren kann. In Deinem JS sieht man aber schön die Nutzung der WQL und somit macht es diesen Thread schon rund. LG Marco Zitieren Link zu diesem Kommentar
Dr Kiffer 10 Geschrieben 15. Februar 2006 Melden Teilen Geschrieben 15. Februar 2006 Hey Leute! Coole Sache soweit! Ist das ganze auch via Batch bzw unter WInNT möglich. Wenn ich bei mir auf der arbeit einen NT-PC gegen einen XP PC austausche habe ich mir ein Programm geschrieben, welches die shares und drucker speichert und auf dem neuen PC wiederverbindet! Allerdings habe ich es bis jetzt noch nicht geschafft den standart Drucker zu ermitterln und musste den dann doch immer noch per Hand setzen! Jemand dafür auch noch ne Lösung? :) :) Gruß Dr.Kiffer Zitieren Link zu diesem Kommentar
BuzzeR 10 Geschrieben 15. Februar 2006 Melden Teilen Geschrieben 15. Februar 2006 Hallo Dr.Kiffer, unter [1] findest Du den WMI-Muntermacher für NT-Systeme zum Download. Wie auch unter Win2k, steht das Kommandozeilen-Tool wmic unter NT nicht zur Verfügung. Hier müßte also auch ein Weg über Scripting beschritten werden. Related Links: 1. http://www.microsoft.com/downloads/details.aspx?familyid=C174CFB1-EF67-471D-9277-4C2B1014A31E&displaylang=en LG Marco Zitieren Link zu diesem Kommentar
d.pabst 10 Geschrieben 16. Februar 2006 Autor Melden Teilen Geschrieben 16. Februar 2006 Hallo Dr. Kiffer, ich habe leider kein NT-System mehr im Einsatz, aber mit dem WMI-Muntermacher von BuzzeR und folgendem Code: wmic printer where "Default = True" get Name | find /V "Name" solltest Du Deinem Ziel schon etwas näher sein, denn es kann nur eine Ausgabe geben. Ich hoffe ich konnte weiterhelfen. d.pabst 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.