pixel0815
Goto Top

Standarddrucker per PC vorgeben

Servus zusammen,

ich bin auf der Suche nach einem Programm das den Standarddrucker per PC vergibt.
Der Administrator soll in der Lage sein auf speziellen Arbeitsplätzen den Netzwerkdrucker per Machine zu mappen ( dies wird durch das Programm pmpmgr erledigt und funktioniert wunderbar ).
Danach soll er ggfs. in der Lage sein das jeder Benutzer ( Egal ob er schon abgemeldet war vorher oder nicht ) den Standarddrucker zu setzen und ggfs. andere Einstellungen zu überschreiben auf das was der Admin vorgibt.

2d84d523adae785e8ea5f63b597b4184

So ein Programm als .net Anwendung existiert bereits.
Das Tool liest die Drucker aus und der Admin kann dann den Drucker definieren.

Das Programm wird in den RUN Schlüssel gesetzt und jeder der sich anmeldet bekommt das Tool in das Systray. Die Einstellungen sollen in der Registry oder eine Konfigurationsdatei abgelegt werden.
Sobald ein Anwender einen anderen Drucker drin hat wie der den der Admin vorgibt, wird die Einstellung auf den Defaultwert zurückgesetzt.

Kann man das auch mittels der Powershell so elegant lösen?

Beste Grüße
Heiko

Content-Key: 257917

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

Printed on: April 18, 2024 at 05:04 o'clock

Member: killtec
killtec Dec 17, 2014 at 14:34:21 (UTC)
Goto Top
Hi,
sind die PC's in einer Domäne? Dann läst sich das ggf. per GPO regeln.

Gruß
Member: pixel0815
pixel0815 Dec 17, 2014 at 14:36:19 (UTC)
Goto Top
Ich weiß, aber aufgrund der Komplexität unserer Umgebung wäre mir das viel zu viel Aufwand das zu pflegen.
Eine GPO Lösung kommt daher nicht in Frage.
Member: colinardo
colinardo Dec 17, 2014 updated at 14:55:52 (UTC)
Goto Top
Hallo Heiko,
Danach soll er ggfs. in der Lage sein das jeder Benutzer ( Egal ob er schon abgemeldet war vorher oder nicht )
deine Frage ist etwas wirr gestellt soll jetzt ein Admin oder der Benutzer den Standarddrucker verstellen können ??
Sobald ein Anwender einen anderen Drucker drin hat wie der den der Admin vorgibt, wird die Einstellung auf den Defaultwert zurückgesetzt.
und hier schreibst du wieder das der User den Drucker doch nicht verstellen darf ? Was ist den jetzt konkret gemeint ?

Kann man das auch mittels der Powershell so elegant lösen?
Sicher, was zahlste bzw was ist euer Budget ?

Grüße Uwe
Member: pixel0815
pixel0815 Dec 17, 2014 at 14:57:48 (UTC)
Goto Top
:o) Bin ja auch wirr im Kopf.
Der Admin gibt die Default Einstellungen vor - der Benutzer kann zwar ändern - erhält aber bisher eine Messagebox mit dem Hinweis das die Änderung blockiert wurde.

Was würde das denn pi mal Daumen kosten?
Member: colinardo
colinardo Dec 17, 2014 at 15:02:39 (UTC)
Goto Top
Zitat von @pixel0815:

:o) Bin ja auch wirr im Kopf.
Der Admin gibt die Default Einstellungen vor - der Benutzer kann zwar ändern - erhält aber bisher eine Messagebox mit dem Hinweis das die Änderung blockiert wurde.
was ist dann der Zweck der Box, wenn Ihn der User sowieso nicht ändern kann ??

Was würde das denn pi mal Daumen kosten?
je nach Anforderung/Lastenheft
Member: pixel0815
pixel0815 Dec 17, 2014 at 15:10:03 (UTC)
Goto Top
Auf den PCs gibts mehrere Drucker lokal sowie per Netzwerk gemappte vom Printserver.
Es wird ja auf Citrix gearbeitet und da sind im KIS System einige spezielle Einstellungen in Formularen die auf dem Standarddrucker basieren.
Es ist ja leider nicht immer gewährleistet das der "richtige" Drucker bei der Anmeldung des Benutzers ausgewählt ist.
Member: colinardo
colinardo Dec 18, 2014, updated at Dec 19, 2014 at 14:51:28 (UTC)
Goto Top
Hallo Heiko,
vielleicht bringt dich schon folgendes Script deinem Ziel näher. Es überwacht den Registryeintrag in dem der Default-Drucker für den User abgelegt wird. Ändert sich dieser wird geprüft ob dieser den Vorgaben entspricht und wenn nicht wird sofort der Standarddrucker auf Vorgaben zurückgesetzt.
Das Script nutzt dazu einen Registry-Event-Subscriber der immer nur dann feuert, wenn sich ein Registry-Key in einem bestimmten Pfad ändert.

Die Standardvorgaben für den Standard-Drucker kannst du ja dann nach deinen Belieben aus einer Datei/Registry/DB/XML/CSV/etc. auslesen.

Für das Beispiel werden sie aus einer CSV-Datei ausgelesen die so definiert ist:
"Computername";"DefaultPrinter"
"PC01";"HP Laserjet 1320"
"PC02";"HP-Color-Laserjet"
"DEFAULT","[Druckername der gesetzt wird wenn für einen Rechner keiner definiert ist]"
back-to-topPowershell-Script setzt den Standard-Drucker, wenn dieser geändert wird, auf einen Drucker nach Vorgabe für den jeweiligen Rechner zurück
# Vorgaben aus CSV-Datei importieren
$dataImport = Import-CSV "\\Server\Share\settings.csv" -Delimiter ";"  

# Standarddrucker anhand des Computernamens aus der CSV ermitteln
$defaultPrinter = $dataImport | ?{$_.Computername -eq $env:COMPUTERNAME} | select -Expand DefaultPrinter

If (!$defaultPrinter){
  # hier einen Alternativ-Standard-Drucker definieren für den Fall das für den Rechner kein Drucker hinterlegt ist
  $defaultPrinter =  $dataImport | ?{$_.Computername -eq "DEFAULT"} | select -Expand DefaultPrinter  
}

# ============================
$usersid = (New-Object System.Security.Principal.NTAccount($env:USERNAME)).Translate([System.Security.Principal.SecurityIdentifier]).Value
$key = "$usersid\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows"  
$deviceKey = "HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Windows"  

# Action wird ausgeführt sobald sich der Registrykey ändert
$action = {
    $obj = $Event.SourceEventArgs.NewEvent
    $currentDevice = (Get-ItemProperty $deviceKey -Name "Device").Device.Split(",")  
    if ($defaultPrinter -ne $currentDevice){
        Try{
            $printer = gwmi Win32_Printer | ?{$_.Name -eq $defaultPrinter}
            if ($printer){
                $printer.SetDefaultPrinter()
                write-host "Der Default-Drucker wurde auf den definierten Standard zurückgesetzt!" -ForegroundColor Yellow  
            }else{
                write-host "Der Drucker '$defaultPrinter' existiert nicht" -ForegroundColor Red  
            }
            
        }catch{
            write-host "Beim setzen des Standarddruckers ist ein Fehler aufgetreten: $($_.Exception.Message)" -ForegroundColor Red  
        }
    }
}
Register-WmiEvent -Query "Select * From RegistryKeyChangeEvent WHERE Hive='HKEY_USERS' AND KeyPath='$key'" -SourceIdentifier "DefaultPrinterWatcher" -Action $action | out-null  

While($true){
    sleep(1)
}

# ACHTUNG Zum Beenden der Event-Subscription in der aktuellen Session folgenden Befehl ausführen
# Get-EventSubscriber | Unregister-Event
Zu beachten ist, das wenn man den Loop beim Testen mit STRG + C abbricht, man auch den Event-Subscriber beenden sollte (siehe Hinweis am Ende des Scripts).

Grüße Uwe

Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
Member: pixel0815
pixel0815 Dec 19, 2014 at 13:53:13 (UTC)
Goto Top
Wahnsinn :o) Das ist ja richtig nett von dir.
Ich habe allerdings ein Problem festgestellt.
Der Drucker wird nicht gesetzt. Ich bekomme immer die Meldung "Der Drucker xyz existiert nicht".
Der Drucker existiert aber definitiv. Wenn ich mir einfach über WMI die win32_printer anzeigen lasse, finde ich den Namen dort unter "Name". face-sad
Hast du da ne Idee?
Member: colinardo
colinardo Dec 19, 2014, updated at Dec 20, 2014 at 14:40:13 (UTC)
Goto Top
Zitat von @pixel0815:

Wahnsinn :o) Das ist ja richtig nett von dir.
Ich habe allerdings ein Problem festgestellt.
Der Drucker wird nicht gesetzt. Ich bekomme immer die Meldung "Der Drucker xyz existiert nicht".
Der Drucker existiert aber definitiv. Wenn ich mir einfach über WMI die win32_printer anzeigen lasse, finde ich den Namen
dort unter "Name". face-sad Hast du da ne Idee?
dann hast du ihn vermutlich nicht exakt richtig geschrieben ...
Member: pixel0815
pixel0815 Dec 19, 2014 at 14:48:26 (UTC)
Goto Top
Ich schwöre :o) Hab sogar kopiert.

Die Anfrage ist ungültig. "select * from Win32_Printer where Name = '\\prrz001\WE_EDV_1OG_DC2930'"  
An C:\Powershell AD\Standardducker.ps1:Zeile:23 Zeichen:24
+             $printer = g <<<< wmi Win32_Printer -Filter "Name = '$defaultPrinter'"  


Der Drucker '\\prrz001\WE_EDV_1OG_DC2930' existiert nicht  

Das kommt immer wieder face-sad
Member: colinardo
colinardo Dec 19, 2014 updated at 14:55:35 (UTC)
Goto Top
Stichwort WMI-Filter: Dort sind Backslashes immer zu verdoppeln face-wink ich ändere das noch ab, hatte ich nicht dran gedacht sorry ..

-edit- ist schon abgeändert ...jetzt musst du die Slashes nicht mehr verdoppeln.