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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 5278026740
Url: https://administrator.de/contentid/5278026740
Ausgedruckt am: 22.11.2024 um 07:11 Uhr
5 Kommentare
Neuester Kommentar
Fang erst einmal mit dem auslesen an.
https://www.windowspro.de/wolfgang-sommergut/active-directory-gruppen-ih ...
https://www.windowspro.de/wolfgang-sommergut/active-directory-gruppen-ih ...
Moin
-Thomas
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.
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 .
Grüße Uwe
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 .
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