Jump to content

Ermitteln des Standarddruckers per Skript


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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!

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...