Möchte man Drucker automatisch anhand der Gruppenmitgliedschaft des PCs zuweisen, kann man mein Skript hierfür verwenden. Einzige Voraussetzung. Die Druckergruppen müssen den gleichen Namen Tragen wie der Drucker Ferigabenamen + die Druckergruppen sollten sich in einer OU befinden in der sich keine anderen Gruppen befinden + Sollten vom gleichen Druckserver kommen. Ansonsten müsste man sich einen eigenen Filter überlegen (Eventuell gibt es in eurer Umgebung ja eine Einheitliche Druckerbennenung nach der ihr filtern könnt)
Ablauf des Skripts:
1. Suche nach dem eigenen PC in der AD
2. Lese die Gruppenmitgliedschaften des PCs aus
2.1 Suche nur die Druckergroupen anhand ihrer Organisationseinheit (OU) in der AD
3. Lese alle bereits vorhandenen Drucker aus
3.1 Suche nur nach den Druckern die vom gewünschten Druckserver kommen
4. Prüfe die Differenz und füge die fehlenden Drucker hinzu
5. Prüfe die Differenz und entferne die nicht mehr zugewiesenen Drucker
Der Ablauf hat den Vorteil, dass nur die Differenzen verändert werden und nicht bei jedem Start Drucker entfernt oder gelöscht werden. Somit bleib auch der Standarddrucker erhalten.
#OU in der der Druckergruppen in der AD vorkommt $printerOu = "OU=Drucker" #Druckserver hostname $printserver = "servername" #Suche den eigenen PC in der AD write-host "Suche nach Gerät $env:computername in AD..." $myComputer = Get-ADComputer -Filter "Name -like '$env:computername'" #Lade die Gruppenmitgliedschaft des eigenen PCs write-host "Suche nach Geräte Gruppenmitgliedschaft..." $myGroups = $myComputer | Get-ADPrincipalGroupMembership #Erstelle eine leere Liste mit allen Drucker Gruppenmitgliedschaften $myPrinterGroups = @() #Sortiere die Druckergruppen aus foreach($group in $myGroups) { if($group.distinguishedName.Contains("$printerOu") { $myPrinterGroups += $group } } #Lade eine Liste meiner eigenen Drucker write-host "Lese die eigenen Drucker aus..." $myPrinters = Get-Printer * #Erstelle eine leere Liste für Drucker die vom eigentlichen Druckserver stammen $myOwnPrinters = @() #Sortiere die Drucker vom gewählten Printserver aus foreach($printer in $myPrinters) { if($printer.Shared -and $printer.ComputerName -eq $printserver) { $myOwnPrinters += $printer } } #Ermittle die Differenz und checke welche Drucker noch hinzugefügt werden müssen. write-host "`nFolgende Drucker müssen hinzugefügt werden:" foreach($group in $myPrinterGroups) { $found = $false foreach($printer in $myOwnPrinters) { if ($printer.ShareName -eq $group.SamAccountName) {$found = $true} } if (!$found) { write-host -NoNewline $group.SamAccountName try { Add-Printer -ConnectionName "\\$printserver\$($group.SamAccountName)" write-host " [OK]" } catch { write-host " [FAIL]" } } } #Ermittle die Differenz und checke welche Drucker noch entfernt werden müssen write-host "`nFolgende Drucker müssen entfernt werden:" foreach($printer in $myOwnPrinters) { $found = $false foreach($group in $myPrinterGroups) { if ($printer.ShareName -eq $group.SamAccountName) {$found = $true} } if (!$found) { $removePrinters += $printer write-host -NoNewline $printer.ShareName try { Remove-Printer -InputObject $printer write-host " [OK]" } catch { write-host " [FAIL]" } } }