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