Jump to content
Sign in to follow this  
d.pabst

Ermitteln des Standarddruckers per Skript

Recommended Posts

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!

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Off-Topic:

Hallo Edgar.

Nein, wmic ist Teil von XP und W2k3, schaue aber mal, ob das bei MS zum
download für W2k bereit steht.

EDIT:
Man kann aber auch über VBS auf WMI zugreifen, suche dazu ebenfalls
mal ein bischen was raus.

LG
Marco

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

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.   Restore formatting

  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.

Sign in to follow this  

Werbepartner:



×
×
  • Create New...