기술자료 (KB)/Active Directory (AD)

Powershell - Active Directory 그룹 멤버 관리

이완주 2024. 7. 16. 13:57

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
            }
        }
    }
}