schneemann1010
Goto Top

PowerShell Script zum kopieren von AD-Gruppen USER 2 USER

Hallo zusammen,

ich soll ein Script erstellen, welches die AD Gruppen eines Users X auf User Y überträgt. Die vorhandenen Berechtigungen des Users Y sollen jedoch vor dem Kopiervorgang entfernt werden.
Zusätzlich soll er bestimmte vordefinierte Gruppen gar nicht erst übertragen.

Hat jemand von euch eine Ahnung wie ich das umsetzen kann oder evtl. schon ein vorhandenes Skript?

Vielen dank im vorhinein.

BG
Schneemann1010

Content-ID: 5278026740

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

Ausgedruckt am: 09.11.2024 um 01:11 Uhr

SlainteMhath
SlainteMhath 22.01.2024 um 09:20:30 Uhr
Goto Top
Moin,

zeig doch mal her, was du schon hast - das können wir dann hier ergänzen.

lg,
Slainte
NordicMike
NordicMike 22.01.2024 um 09:51:07 Uhr
Goto Top
3063370895
Lösung 3063370895 22.01.2024 aktualisiert um 10:32:18 Uhr
Goto Top
Moin

Import-Module ActiveDirectory

### Hier Daten ändern ###
$existingUserName = "UserX"   
$newUserName = "UserY"   
$groupsToExclude = @("AusnahmeGruppe1", "AusnahmeGruppe2")  
### Hier Daten ändern ###

# Gruppen abfragen
$existingUserGroups = Get-ADUser -Identity $existingUserName -Properties MemberOf | Select-Object -ExpandProperty MemberOf
$newUserGroups = Get-ADUser -Identity $newUserName -Properties MemberOf | Select-Object -ExpandProperty MemberOf

# Alle Mitgliedschaften des Zielusers löschen
$newUserGroups | ForEach-Object { Remove-ADGroupMember -Identity $_ -Members $newUserName -Confirm:$false }

# DistinguishedNames für die Ausnahmen abrufen
$groupsToExcludeDN = @()
foreach ($groupName in $groupsToExclude) {
    $groupsToExcludeDN += Get-ADGroup $groupName | Select-Object -ExpandProperty DistinguishedName
}

# Ausnahmen rausfiltern
$groupsToCopy = $existingUserGroups | Where-Object { $_ -notin $groupsToExcludeDN }

# Zieluser in Gruppen aufnehmen
foreach ($group in $groupsToCopy) {
    Write-Host "Adding user ""$newUserName"" to group ""$group"""  
    Add-ADGroupMember -Identity $group -Members $newUserName
}

-Thomas
Schneemann1010
Schneemann1010 22.01.2024 um 11:38:02 Uhr
Goto Top
Zitat von @3063370895:

Moin

Import-Module ActiveDirectory

### Hier Daten ändern ###
$existingUserName = "UserX"   
$newUserName = "UserY"   
$groupsToExclude = @("AusnahmeGruppe1", "AusnahmeGruppe2")  
### Hier Daten ändern ###

# Gruppen abfragen
$existingUserGroups = Get-ADUser -Identity $existingUserName -Properties MemberOf | Select-Object -ExpandProperty MemberOf
$newUserGroups = Get-ADUser -Identity $newUserName -Properties MemberOf | Select-Object -ExpandProperty MemberOf

# Alle Mitgliedschaften des Zielusers löschen
$newUserGroups | ForEach-Object { Remove-ADGroupMember -Identity $_ -Members $newUserName -Confirm:$false }

# DistinguishedNames für die Ausnahmen abrufen
$groupsToExcludeDN = @()
foreach ($groupName in $groupsToExclude) {
    $groupsToExcludeDN += Get-ADGroup $groupName | Select-Object -ExpandProperty DistinguishedName
}

# Ausnahmen rausfiltern
$groupsToCopy = $existingUserGroups | Where-Object { $_ -notin $groupsToExcludeDN }

# Zieluser in Gruppen aufnehmen
foreach ($group in $groupsToCopy) {
    Write-Host "Adding user ""$newUserName"" to group ""$group"""  
    Add-ADGroupMember -Identity $group -Members $newUserName
}

-Thomas

Servus Thomas,

vielen Dank für deine Hilfe! Hat super Funktioniert.
Alles liebe!

Schneemann
colinardo
colinardo 22.01.2024 aktualisiert um 13:43:41 Uhr
Goto Top
Servus.

Wenn ich hier noch etwas "reingrätschen" darf, bitte auch an den Vergleich des PrimaryGroup-Tokens des Ziel-Users mit dem Quell-User denken damit dessen Mitgliedschaft dann auch wirklich vollständig ist face-wink.

function Copy-ADGroupMembership {
    [cmdletbinding(SupportsShouldProcess=$true)]
    param(
        [parameter(mandatory=$true)][ValidateNotNullOrEmpty()][string]$from,
        [parameter(mandatory=$true)][ValidateNotNullOrEmpty()][string]$to,
        [parameter(mandatory=$false)][ValidateNotNullOrEmpty()][string[]]$ExcludeGroups
    )
    #Requires -Modules ActiveDirectory
    $ErrorActionPreference = 'Stop'  
    # Get ADUser objects from both users
    $aduser_from = Get-ADUser -Identity $from -Properties PrimaryGroup,PrimaryGroupID
    $aduser_to = Get-ADUser -Identity $to -Properties PrimaryGroup,PrimaryGroupID
    # set primary group if different from source user
    if ($aduser_from.PrimaryGroupID -ne $aduser_to.PrimaryGroupID){
        if($PSCmdlet.ShouldProcess($to,"Change primary group to '$($aduser_from.PrimaryGroup)'")){  
            Add-ADGroupMember $aduser_from.PrimaryGroup -Members $aduser_to.SamAccountName
            Set-AdUser $aduser_to.SamAccountName -Replace @{PrimaryGroupID=$aduser_from.PrimaryGroupID}
        }
    }
    # get groups from source user and remove excluded groups from result
    $groups_from = Get-ADPrincipalGroupMembership $aduser_from.SamAccountName | ? Name -notin $ExcludeGroups
    # get groups from target user
    $groups_to = Get-ADPrincipalGroupMembership $aduser_to.SamAccountName
    # compare both groupsets
    $difference = Compare-Object @($groups_from) @($groups_to) -Property DistinguishedName -Passthru
    # remove target user from groups which the source user is not a member of
    foreach($group in $difference | ? Sideindicator -eq '=>'){  
        if($PSCmdlet.ShouldProcess($group.SamAccountName,'Remove user from group')){  
            Remove-ADGroupMember $group.SamAccountName -Members $aduser_to.SamAccountName
        }
    }
    # add target user to new groups from source user
    foreach($group in $difference | ? Sideindicator -eq '<='){  
        if($PSCmdlet.ShouldProcess($group.SamAccountName,'Add user to group')){  
            Add-ADGroupMember $group.SamAccountName -Members $aduser_to.SamAccountName
        }
    }
}

# apply function
Copy-ADGroupMembership -from user1 -to user2 -ExcludeGroups "ExcludedGroup1","ExcludedGroup2" -Confirm:$false  

Grüße Uwe