PowerShell und AD Gruppen eine nette Kombination

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“.

Print Friendly, PDF & Email
Was this article helpful?
YesNo
0 0 votes
Article Rating
Abonnieren
Benachrichtige mich bei
guest
0 Comments
Inline Feedbacks
View all comments