본문 바로가기
기술자료 (KB)/Active Directory (AD)

Powershell - Active Directory 그룹 멤버 관리

by 이완주 2024. 7. 16.

Active Directory 그룹 멤버 관리 방법을 Powershell로 정리해 봤습니다.

 

여러 회사가 하나의 AD에서 관리하게 되면 OU가 다르게 구성됨으로 이름을 같은게 만들어 지지만

SamAccountName은 다르게 만들어야 하기 때문에 '회사명_부서명' 형식으로 SamAccountName을 만들었다는 전제로

구성했습니다.

 

 

1. 그룹 멤버 모두 제거 

테스트를 위해 아래 그룹의 모든 멤버 제거

#그룹 멤버 모두 초기화
Set-ADGroup 글로벌_영업1팀 -Clear member

 

2. 멤버 추가

그룹에 소속되지 않은 멤버를 추가하여 그룹의 멤버가 아닐때 제거 테스트 목적으로 만듬

#테스트를 위해 사용자 그룹에 추가
#test111111 계정 추가
Add-ADGroupMember 글로벌_영업1팀 -Members test111111

 

3. 그룹 멤버 확인

현재 그룹의 소속 멤버를 확인

#그룹 멤버 확인
Get-ADGroupMember 글로벌_영업1팀 | FT Name

 

4. 그룹 멤버 자동 추가

사용자의 정보를 확인하여 자동으로 그룹에 멤버로 추가

#그룹 멤버 자동 추가

# $user 변수에 사용자의 부서와 회사 값을 포함하여 저장
$user = Get-ADUser gdhong -Properties Department, Company

# $department 변수에 사용자의 Department의 값을 / 로 분류하여 저장거
$department = $user.Department -split '/'

# $departmentName 변수에 사용자의 회사_부서명 형식으로 데이터 저장
$deaprtmentName = $user.Company + "_" +  $department[$department.Count -1]

#그룹 멤버 추가
Add-ADGroupMember $deaprtmentName $user.SamAccountName

 

5. 그룹 멤버 제거

사용자 정보의 부서 정보와 일치 하지 않으면 그룹멤버에서 제거

#그룹 멤버 자동 제거

#해당 위치를 지정하여 Group 이름을 확인하여 $groupName 변수에 넣기
$groupName = Get-ADGroup -SearchBase "OU=GROUPS,OU=MSA,OU=MST,DC=gsoft,DC=local" -Filter -Filter 'GroupScope -ne "DomainLocal"'

#화면에 작업 내역 표시
Write-Host "부서 그룹에 맞지 않는 멤버 제거"

# $groupName에서 가져온 그룹의 SamAccountName을 $group 변수에 넣고 그룹 수 만큼 foreach 문으로 실행
foreach ($group in $groupName.samaccountname)
{
    #화면에 작업할 그룹 이름 표시
    Write-Host "Group : " $group

    #그룹의 멤버를 확인하여 $members 변수에 넣기
    $members = Get-ADGroupMember -Identity $group

    # $user 변수에 멤버의 SamAccountName을 넣고 그룹의 멤버 수 만큼 foreach 문을 수행
    foreach ($user in $members.samaccountname)
    {

        if ($user -ne $null)` #user 변수가 null이 아니면 아래 문장 수행
        {
            # $userDetail 변수에 사용자의 부서와 회사 값을 포함하여 저장
            $userDetail = Get-ADUser $user -Properties Department, Company

            # $department 변수에 사용자의 Department의 값을 / 로 분류하여 저장거
            $department = $userDetail.Department -split '/'

            # $departmentName 변수에 사용자의 회사_부서명 형식으로 데이터 저장
            $deaprtmentName = $userDetail.Company + "_" +  $department[$department.Count -1]

            #그룹의 이름과 사용자 소속 부서가 같지 않으면 아래 문장 수행
            if($group -ne $deaprtmentName) {
                
                #화면에 제거할 사용자 확인
                Write-Host "Remove User : $user"

                # 그룹 멤버 제
                # -Confirm:$false 멤버 제거할 경우 확인 메시지를 나타나지 않게 구성
                Remove-ADGroupMember $group -Members $user -Confirm:$false
            }
        }
    }
}

댓글