首页 > 解决方案 > Powershell 将 $source memberof 复制到目的地,而不复制 $destination 的现有成员资格和附加过滤器

问题描述

我正在尝试复制用户的组成员身份,但有一些例外。我想将源的组复制到目标,除非目标用户已经是成员。有一些组我不想在这方面复制。

$copyfrom = Read-Host "Enter Username of User Origin" 
$copyto = Read-Host "Enter Username of User Destination"
$badstring = 'bad'
Get-ADUser $copyfrom -Properties MemberOf | Select-Object -ExpandProperty MemberOf | Where-Object { -not $_.Substring(3).StartsWith($badstring)} | Add-ADGroupMember -Members $copyto

我错过了脚本跳过用户已经是其成员的组的部分。

帮助。

标签: powershellactive-directory

解决方案


像下面这样的事情应该做ti:

$copyfrom  = Read-Host "Enter Username of User Origin" 
$copyto    = Read-Host "Enter Username of User Destination"
$badstring = 'bad'

# get the ADUser object for the source user
$srcUser  = Get-ADUser -Filter "SamAccountName -eq '$copyfrom'" -Properties MemberOf -ErrorAction SilentlyContinue 
if (!$srcUser) {
    Write-Warning "User $copyfrom not found"
    exit
}

# get the ADUser object for the destination user
$destUser = Get-ADUser -Filter "SamAccountName -eq '$copyto'" -ErrorAction SilentlyContinue
if (!$destUser) {
    Write-Warning "User $copyto not found"
    exit
}

$srcUser | Select-Object -ExpandProperty MemberOf | 
    Where-Object { -not $_.Substring(3).StartsWith($badstring)} |
    # loop through the groups and add the user if not already a member
    ForEach-Object {
        $members = Get-ADGroupMember -Identity $_ | Select-Object -ExpandProperty SamAccountName
        if ($members -notcontains $destUser.SamAccountName) {
            $_ | Add-ADGroupMember -Members $destUser.DistinguishedName
        }
    }

推荐阅读