igetyaall
Goto Top

Powershellskript um AD-Gruppenmitgliedschaften eines Benutzers auf einen anderen anzupassen

Hallo Administratoren,

folgender Wunsch:

Ich möchte ein Skript schreiben, welches die AD-Gruppen eines Users ausliest, diese Ausgabe als Grundlage nimmt und damit die Gruppenmitgliedschaften eines anderen Benutzers anpasst.

Folgende Code Zeilen habe ich mir schon zusammen geschustert:

$identity_a="max.mustermann"  
$identity_b="tom.test"  
$file=".\grouplist.txt"  

Get-ADUser $identity_a -Properties MemberOf | Select -ExpandProperty MemberOf | fl > $file

$GroupList=Import-Csv $file

ForEach($item in $GroupList) {
#if ($item -like "CN=GG_*") { 
        $item | Format-List > .\test1.txt
   # }
  #else {continue}
 }

Der auskommentierte IF-Block soll im weiteren Skriptbau dafür sorgen, dass nur Gruppen Anwendung finden, die mit GG_ anfangen. Im Kern geht es nur um die Gruppen, welche für NTFS-Berechtigungen verwendet werden und die fangen mit "GG_" an.

Selbstverständlich muss die Zeile 11 noch durch den eigentlich Befehl, der Gruppenmitgliedschaft einträgt ersetzt werden. Zu Überprüfungszwecken, lass ich mir die Ausgabe erst noch in eine Textdatei schreiben.

Schau ich mir die Datei grouplist.txt an, sehe ich alle Gruppen, in denen max.mustermann Mitglied ist.
Von der Datei test1.txt erwarte ich, dass dort alle Gruppen (Zeilen) drin stehen, die mit CN=GG_ anfangen respektive, da Zeile 10 auskommentiert ist, sollten alle Gruppen in denen max.mustermann Mitglied ist, drin stehen.
Allerdings steht in der test1.txt nur die erste und die letzte Gruppe drin.
Irgendwie steh ich mit foreach gerade auf dem Schlauch.

Das Skript läuft durch, also verlange ich von Powershell nichts, was nicht geht.

Für Hilfe wäre ich dankbar.

Gruß
igetyaall

Content-ID: 341756

Url: https://administrator.de/contentid/341756

Ausgedruckt am: 04.11.2024 um 18:11 Uhr

colinardo
Lösung colinardo 27.06.2017 aktualisiert um 18:25:06 Uhr
Goto Top
Servus.
kein Problem face-smile.
<#
    Gruppenmitgliedschaften von einem Benutzer auf einen anderen übertragen: UserA = Referenz -> UserB = Wird angepasst.
#>
Import-Module ActiveDirectory

# Referenz-Benutzer A
$user_a = 'userA'  
# Benutzer B wird angepasst
$user_b = 'userB'  

# Compare group membership (equal groups are excluded in result, only groups starting with 'GG_' are synced)  
$result = compare (Get-ADPrincipalGroupMembership $user_a) (Get-ADPrincipalGroupMembership $user_b) -Property Name -PassThru | ?{$_.Name -like 'GG_*'}  

# Remove user_b from groups where user_a is no member
$result | ?{$_.SideIndicator -eq '=>'} | %{write-host "Removing User $user_b from group '$($_.Name)'." -F Green ; Remove-ADGroupMember $_.Name -Members $user_b -Confirm:$false}  

# Add user_b to groups which user_b is member
$result | ?{$_.SideIndicator -eq '<='} | %{write-host "Adding User $user_b to group '$($_.Name)'." -F Green; Add-ADGroupMember $_.Name -Members $user_b -Confirm:$false}  
also verlange ich von Powershell nichts, was nicht geht.
Nicht mal ansatzweise face-wink.

Grüße Uwe