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