Active Directory 사용자 및 컴퓨터(ADUC) 그래픽 스냅인이 보안 그룹을 관리하는 유일한 도구는 아닙니다. 간단한 PowerShell 명령어만으로도 Active Directory 도메인의 사용자 그룹을 일상적으로 관리할 수 있습니다. 이 글에서는 PowerShell을 사용해 AD에서 새 그룹을 만들고, 사용자를 추가·삭제하며, 그룹 구성원 목록을 조회·내보내는 방법과 AD 그룹 관리 시 자주 사용되는 유용한 명령어들을 살펴보겠습니다.
Active Directory PowerShell 모듈 준비하기
AD 그룹을 관리하려면 Windows PowerShell용 Active Directory 모듈을 사용해야 합니다. RSAT-AD-PowerShell 모듈은 모든 버전의 Windows Server(Windows Server 2008 R2부터)에서 기본 제공되며, Windows 10 및 Windows 11 데스크톱에서는 RSAT 기능으로 설치할 수 있습니다.
현재 PowerShell 세션에 AD 모듈이 로드되어 있는지 확인하려면 다음 명령어를 실행합니다.
Get-Module -Listavailable
목록에 ActiveDirectory 모듈이 표시되면 정상적으로 로드된 것입니다. 로드되어 있지 않다면 다음 명령어로 가져옵니다.
Import-Module ActiveDirectory
AD 그룹 관리에 사용할 수 있는 PowerShell cmdlet 목록을 확인해 보겠습니다.
Get-Command -Module ActiveDirectory -Name "*Group*"
사용 가능한 cmdlet은 총 11개입니다.
- Add-ADGroupMember
- Add-ADPrincipalGroupMembership
- Get-ADAccountAuthorizationGroup
- Get-ADGroup
- Get-ADGroupMember
- Get-ADPrincipalGroupMembership
- New-ADGroup
- Remove-ADGroup
- Remove-ADGroupMember
- Remove-ADPrincipalGroupMembership
- Set-ADGroup
New-ADGroup: PowerShell로 새 AD 그룹 만들기
New-ADGroup 명령어를 사용하면 지정된 Active Directory 컨테이너(OU)에 새 보안 그룹을 만들 수 있습니다.
New-ADGroup "TestADGroup" -path 'OU=Groups,OU=NY,OU=US,DC=corp,dc=woshub,DC=com' -GroupScope Global -PassThru –Verbose
Description 및 DisplayName 특성을 사용해 그룹 설명과 표시 이름을 지정할 수도 있습니다.
GroupScope 매개변수로 다음 그룹 유형 중 하나를 설정할 수 있습니다.
- 0 = DomainLocal(도메인 로컬)
- 1 = Global(전역)
- 2 = Universal(유니버설)
메일 그룹(distribution group)은 다음과 같이 만들 수 있습니다.
New-ADGroup "TestADGroup-Distr" -path 'OU=Groups,OU=NY,OU=US,DC=corp,dc=woshub,DC=com' -GroupCategory Distribution -GroupScope Global -PassThru –Verbose
메일 그룹은 이메일 발송 및 AD 권한 부여에 활용할 수 있습니다.
AD 그룹을 만들 때 원하는 특성을 함께 설정할 수 있습니다. 여러 그룹 특성의 값을 지정하는 가장 쉬운 방법은 해시테이블을 사용하는 것입니다.
$attrs = @{"mail"="mundmins@woshub.com";"displayname"="ALL Munich Admins"}
New-ADGroup -Name MUNAdmins -GroupScope Global -OtherAttributes $attrs
Add-AdGroupMember: AD 그룹에 사용자 추가하기
Add-AdGroupMember cmdlet을 사용하면 Active Directory 그룹에 사용자를 추가할 수 있습니다. 새로 만든 그룹에 두 명의 사용자를 추가해 보겠습니다.
Add-AdGroupMember -Identity TestADGroup -Members user1, user2
한 번에 많은 수의 사용자를 그룹에 추가해야 한다면, 사용자 이름 목록을 CSV 파일로 저장한 뒤 PowerShell로 가져와 간단한 스크립트로 각 사용자를 그룹에 추가할 수 있습니다.
CSV 파일 형식은 다음과 같아야 합니다(사용자를 한 줄에 하나씩 나열하고 열 머리글은 users로 지정).
Import-CSV .\users.csv -Header users | ForEach-Object {Add-AdGroupMember -Identity 'TestADGroup' -members $_.users}
한 그룹(GroupX)의 모든 구성원을 다른 그룹(GroupY)에 추가하려면 다음 명령어를 사용합니다.
Get-ADGroupMember "GroupX" | Get-ADUser | ForEach-Object {Add-ADGroupMember -Identity "Group-Y" -Members $_}
중첩된 모든 그룹의 구성원까지 새 그룹으로 복사(재귀 처리)해야 한다면 다음 명령어를 실행합니다.
Get-ADGroupMember -Identity "GroupX" -Recursive | Get-ADUser | ForEach-Object {Add-ADGroupMember -Identity "GroupY" -Members $_}
Windows2016Forest 스키마 이상 환경에서는 Active Directory의 임시(시간 기반) 그룹 멤버십 기능을 사용할 수 있습니다. 사용자를 AD 그룹에 임시로 추가하려면(예: 1시간) 다음 명령어를 실행합니다.
$ttl = New-TimeSpan -Minutes 60
Add-ADGroupMember -Identity "Domain Admins" -Members j.lennon -MemberTimeToLive $ttl
1시간이 지나면 해당 사용자는 이 보안 그룹에서 자동으로 제거됩니다.
Remove-ADGroupMember: PowerShell로 AD 그룹에서 사용자 제거하기
AD 그룹에서 사용자를 제거하려면 Remove-ADGroupMember cmdlet을 사용합니다. 그룹에서 두 사용자를 제거해 보겠습니다.
Remove-ADGroupMember -Identity TestADGroup -Members user1, user2
명령을 실행하면 사용자 제거 여부를 확인하는 메시지가 표시됩니다.
CSV 파일의 사용자 목록을 기반으로 그룹에서 사용자를 제거해야 한다면 다음 명령어를 사용합니다.
Import-CSV .\users.csv -Header users | ForEach-Object {Remove-ADGroupMember -Identity 'TestADGroup' -members $_.users}
온프레미스 Active Directory에서는 (Azure AD와 달리) 동적 사용자 그룹을 사용할 수 없습니다. 대신 예약된 PowerShell 스크립트를 만들어 Add-ADGroupMember 및 Remove-ADGroupMember cmdlet으로 사용자를 자동으로 추가·제거하도록 구성할 수 있습니다.
Get-ADGroup: Active Directory 그룹 검색하기
Get-ADGroup cmdlet을 사용하면 AD 도메인 그룹에 대한 정보를 조회할 수 있습니다.
Get-ADGroup 'TestADGroup'
이 명령은 그룹의 기본 특성(DN, 그룹 유형, 이름, SID) 정보를 표시합니다. 모든 그룹 특성의 값을 확인하려면 다음 명령어를 실행합니다.
Get-ADGroup 'TestADGroup' -properties *
그룹 생성·수정 시간, 설명 등의 추가 특성이 함께 표시되는 것을 확인할 수 있습니다.
Get-ADGroup cmdlet을 사용하면 패턴 기반으로 AD에서 그룹을 검색할 수 있습니다. 예를 들어 이름에 admins라는 문구가 포함된 모든 AD 그룹을 찾으려면 다음 명령어를 사용합니다.
Get-ADGroup -LDAPFilter "(name=*admins*)" | Format-Table
또는 다음과 같이 실행할 수도 있습니다.
Get-ADGroup -Filter {name -like "*admins*"} -Properties Description,info | Select Name,samaccountname,Description,info
Get-ADGroup으로 그룹 구성원 목록(members 특성에 저장됨)을 가져올 수도 있습니다.
Get-ADGroup -Identity "Domain Admins" -Properties members | Select-Object -ExpandProperty members
다만 그룹 멤버십을 조회할 때는 Get-ADGroupMember cmdlet을 사용하는 것이 훨씬 편리합니다.
Get-ADGroupMember: AD 그룹 구성원 조회 및 내보내기
Get-ADGroupMember cmdlet을 사용하면 AD 그룹의 구성원을 조회할 수 있습니다. 구성원은 사용자, 컴퓨터, 다른 그룹 또는 관리 서비스 계정(MSA/gMSA)일 수 있습니다.
Get-ADGroupMember 'TestADGroup'
결과에 사용자 이름만 표시하려면 다음을 실행합니다.
Get-ADGroupMember 'TestADGroup'| ft name
그룹에 다른 도메인 그룹이 포함되어 있다면 Recursive 매개변수를 사용해 중첩된 모든 그룹을 포함한 전체 구성원 목록을 표시할 수 있습니다.
Get-ADGroupMember ADadmins -recursive| ft name
특정 그룹의 구성원 계정 목록을 CSV 파일로 내보내려면(Excel에서 활용하기 좋습니다) 다음 명령어를 실행합니다.
Get-ADGroupMember 'ADadmins' -recursive| ft samaccountname| Out-File c:\PS\ADadminsList.csv
그룹 사용자 정보를 텍스트 파일로 내보낼 수도 있습니다. Get-ADUser cmdlet을 사용하면 사용자의 확장 특성을 가져올 수 있습니다. 예를 들어 계정 이름 외에 그룹 사용자의 UserPrincipalName, 직위, 전화번호를 함께 표시할 수 있습니다.
Get-ADGroupMember -Identity ADadmins -recursive| foreach { Get-ADUser $_ -properties title, OfficePhone|Select-Object title, OfficePhone }
그룹의 사용자 수는 다음과 같이 계산할 수 있습니다.
(Get-ADGroupMember -Identity 'domain admins').Count
특정 OU에서 빈 그룹(구성원이 없는 그룹) 목록을 가져오려면 다음 명령어를 사용합니다.
Get-ADGroup -Filter * -Properties Members -searchbase "OU=NY,OU-US,DC=corp,dc=woshub,DC=com" | where {-not $_.members} | select Name
Get-ADGroupMember cmdlet을 활용하면 특정 AD 그룹에 새 사용자가 추가되었을 때 관리자에게 알려주는 간단한 PowerShell 스크립트도 만들 수 있습니다.
Set-ADGroup: AD 그룹 특성 수정하기
Set-ADGroup cmdlet을 사용하면 Active Directory 그룹의 속성(특성)을 변경할 수 있습니다. 예를 들어 그룹의 설명을 변경할 수 있습니다.
Set-ADGroup -Identity MunAdmins -Description "Munich Admins Group"
또는 파이프라인을 활용해 다음과 같이 실행할 수도 있습니다.
Get-ADGroup -Identity MunAdmins | Set-ADGroup -Description "Munich Admins Group"
특정 그룹을 Exchange GAL(전체 주소 목록)에서 숨기려면 다음 명령어를 사용합니다.
Set-ADGroup –id MunAdmins -replace @{hideDLMembership=$true}
여러 그룹 특성을 한 번에 변경할 수도 있습니다. 해시테이블을 사용하면 변경할 값 목록을 편리하게 지정할 수 있습니다.
$attrs = @{"mail"="munadmins@woshub.com";"displayname"="ALL MUN Admins"}
Set-ADGroup -Identity MunAdmins –Add $attrs
AD 그룹 특성 목록은 get-adgroup munadmins -Properties * 명령으로 확인하거나 ADUC 콘솔의 특성 편집기(Attributes Editor) 탭에서 확인할 수 있습니다.
Remove-ADGroup: PowerShell로 AD 그룹 삭제하기
Active Directory에서 그룹을 삭제하려면 Remove-ADGroup cmdlet을 사용합니다.
Remove-ADGroup -Identity MunSales
그룹을 삭제할 때는 삭제 확인 메시지가 표시됩니다. 확인 절차를 건너뛰려면 Confirm 스위치를 추가합니다.
Remove-ADGroup -Identity MunSales –Confirm:$false
참고로 삭제된 그룹(및 기타 AD 개체)은 Active Directory 휴지통에서 복원할 수 있습니다.
Get-ADObject -Filter {Deleted -eq $True -and ObjectClass -eq 'group' -and Name -like '*MunSales*'} –IncludeDeletedObjects| Restore-ADObject –verbose