The estimated reading time 2 minutes
Immer wieder kommt in der täglichen Arbeit die Anforderung, AD-Gruppen Mitgliedschaften zu kopieren. Aber auch andere Funktionen, wie zu prüfen ob jemand Mitglied einer Gruppe ist.
Hierzu habe ich immer wieder kleine Funktionen oder Hilfescripts geschrieben. Diese möchte ich an dieser Stelle veröffentlichen.
Beginnen wir mit einer Funktion zur Prüfung ob ein Benutzer Mitglied einer Gruppe ist.
function Check-UserInGroup { [CmdletBinding()] param ( [Parameter( Mandatory=$true, Position=0)] [string] $samaccount, [Parameter(Mandatory=$true)] [string] $groupsamaccount ) $user = $samaccount $group = "$groupsamaccount" [string]$memberofs = Get-ADuser -Identity "$user" -Properties MemberOf | Select-Object MemberOf -ExpandProperty MemberOf If ($memberofs -match $group) { return $true } Else { return $false } }
Wie wird diese Funktion nun verwendet? Siehe hierzu ein einfaches Beispiel:
$membergroupb = Check-UserInGroup -samaccount "user-a" -groupsamaccount "group-b" if($membergroupb -eq $false){ Add-ADGroupMember -identity "group-b" -members "user-a" }
in der ersten Linie wird geprüft ob der angegebene Benutzer Mitglied einer Gruppe ist, mit der IF Abfrage kann aus dem Resultat dann eine Aktion gestartet werden (zum Beispiel hinzufügen zur Gruppe).
Auslesen aller Gruppen eines definierten Benutzers
Wer alle Gruppenmitgliedschaften eines Benutzers benötigt kann diesen Oneliner verwenden.
Get-ADPrincipalGroupMembership -Identity USERSAMACCOUNTNAME | select SamAccountName,name
Wenn eine spezielle Gruppe ausgeschlossen werden soll bei der Ausgabe, kann dies mit einer kleinen Erweiterung erledigt werden.
Get-ADPrincipalGroupMembership -Identity USERSAMACCOUNTNAME | select SamAccountName,name |where{$_.name -ne "SAMACCOUNTGROUPNOTWANTED"} | sort name #multiple groups not wanted Get-ADPrincipalGroupMembership -Identity USERSAMACCOUNTNAME | select SamAccountName,name |where{$_.name -ne "SAMACCOUNTGROUPNOTWANTED" -and $_.name -ne "SAMACCOUNTANOTHERGROUP" } | sort name
Funktion zur Prüfung ob eine AD Gruppe existiert
Hier eine einfache Funktion innerhalb von PowerShell, mit der die Existenz einer AD Gruppe bestimmt werden kann.
function Check-Groupexists { [CmdletBinding()] param ( [Parameter( Mandatory=$true, Position=0)] [string] $groupname, [Parameter(Mandatory=$true)] [string] $dc ) $gn = $groupname $domaincontroller = $dc $groupexists = $(try {Get-ADGroup -Filter "SamAccountName -eq '$gn'"} catch {$null}) If ($groupexists) { return $true } Else { return $false } }
Wie kann diese nun sinnvoll eingesetzt werden? Schaut euch das folgende Beispiel an:
$grpname = "NEWADGROUPNAME" $DC = "DOMAINCONTROLLER" if(Check-Groupexists -groupname $grpname -dc $DC) { Write-Host "$grpname already exists!" -ForegroundColor Yellow } else{ Write-Host "$grpname available..." -ForegroundColor Green New-ADGroup -SamAccountName "$grpname" -DisplayName "$grpname" -Server "$DC" -GroupScope Global -Name "$grpname" -Description "DESCRIPTION" -Path "distinguished name to OU" }
Das kurze Skript prüft ab, ob es eine Gruppe mit dem Namen gibt, falls nicht wird diese im AD angelegt.
Viel Spaß mit den Funktionen und den Beispielen. Wenn euch der Artikel gefallen hat, dann klickt bitte auf „Helpful“.