Powershell – Automatische Druckerzuweisung nach Gruppenmitgliedschaft

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]"
		}
	}
}

Schreibe einen Kommentar