j0k3r1986
Goto Top

Mit Powershell Netzwerkdrucker verbinden und prüfen ob alle verbunden sind

Hallo liebe Forenbenutzer,

ich habe folgendes Problem. Wir verbinden seit neuestem Drucker per ps1-Script. Dieses sieht folgendermaßen aus:

#Netzwerkdruckerverbindungen löschen
Get-WMIObject Win32_Printer | where{$_.Network -eq 'true'} | foreach{$_.delete()}

#Printer hinzufügen
([wmiclass]"Win32_Printer").AddPrinterConnection("\\Printserver\Drucker1")
([wmiclass]"Win32_Printer").AddPrinterConnection("\\Printserver\Drucker2")
([wmiclass]"Win32_Printer").AddPrinterConnection("\\Printserver\Drucker3")

#Standarddrucker setzen
(gwmi -class win32_printer -Filter "ShareName='Drucker2'").setdefaultprinter()


Leider kommt es häufiger vor das beim Logon, also über Scriptlogic, ( Bedingung das die Explorer.exe gestartet wurde) , nicht alle oder kein Drucker verbunden sind.

Jetzt meine Frage:
Wie kann ich eine Kontrolle einbauen, das ich sicherstellen kann das über den State oder Errorstate der Drucker verbunden wurde, und wenn nicht das im Prinzip das Script nochmal durchläuft und ich sicherstellen kann, das auf jeden Fall die Drucker nach der Anmeldung vorhanden sind.

Vielen Dank.

Content-Key: 240472

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

Printed on: April 23, 2024 at 12:04 o'clock

Member: colinardo
colinardo Jun 10, 2014, updated at Jun 11, 2014 at 15:06:36 (UTC)
Goto Top
Hallo J0K3R1986, willkommen auf Administrator.de!
Du könntest den Rückgabewert der Funktion AddPrinterConnection dazu benutzen. Ungetestet etwa so:
$printers = @("\\Printserver\Drucker1","\\Printserver\Drucker2","\\Printserver\Drucker3")  
foreach($printer in $printers){
    while ((([wmiclass]"Win32_Printer").AddPrinterConnection($printer)).ReturnValue -ne 0){  
        sleep(1)
    }
}
Ansonsten würde ich die GPO "Auf Netzwerk warten" setzen, das sollte normalerweise helfen.

Grüße Uwe
Member: J0K3R1986
J0K3R1986 Jun 11, 2014 updated at 14:38:42 (UTC)
Goto Top
Hallo Uwe,

vielen Dank für die schnelle Antwort.
Leider beendet sich das Script nicht wenn ich es ausführe, zudem werden hauptsächlich die Sitzungen auf einem Terminalserver gestartet.
Daher brauche ich mir um "Auf Netzwerk warten" keine Sorgen machen. ( Hätte ich vielleicht auch eingangs erwähnen können).
Gibt es vielleicht die Möglichkeit das der die "AddPrinterConnection" als Array nimmt und dann je nach Anzahl prüft, ob alle Drucker verbunden sind?

Grüße Felix
Member: colinardo
Solution colinardo Jun 11, 2014 updated at 15:20:33 (UTC)
Goto Top
Dann mach es mal so (war ein kleiner Fehler drin, ist oben korrigiert):
$printers = @("\\Printserver\Drucker1","\\Printserver\Drucker2","\\Printserver\Drucker3")   
foreach($printer in $printers){
    $server = $printer.Split("\")[2]  
    while((test-connection $server -Count 1 -Quiet) -eq $false){
        write-host "Warte auf Verbindung zu Printserver: $server ..." -ForegroundColor Yellow  
    }
    $result = ""  
    while ($result.ReturnValue -ne 0){
	 $result = ([wmiclass]"Win32_Printer").AddPrinterConnection($printer)  
    }
    write-host "Drucker: $printer wurde verbunden." -ForegroundColor Green  
}
Hier erfolgreich getestet.
Grüße Uwe
Member: J0K3R1986
J0K3R1986 Jun 11, 2014 at 15:01:01 (UTC)
Goto Top
Danke.
Das ist die Lösung!
Und danke für die ausserordentlich schnelle Antwort!!
Werde das Forum wärmstens weiterempfehlen!