Computer >> 컴퓨터 >  >> 시스템 >> Windows Server

Get-ADUser 완벽 가이드: PowerShell로 Active Directory 사용자 정보 조회하기

Get-ADUser PowerShell cmdlet은 Active Directory(AD) 사용자에 대한 정보와 해당 사용자의 다양한 속성 값을 조회하고, 도메인 사용자를 검색할 수 있게 해주는 도구입니다. AD에서 정보를 가져올 때 가장 널리 사용되는 PowerShell cmdlet 중 하나로, 이를 활용하면 AD 사용자 계정의 모든 속성 값을 확인하거나, 속성과 함께 도메인 사용자 목록을 추출하고, 사용자 보고서를 CSV 파일로 내보내며, 다양한 조건으로 도메인 사용자를 선택하고 필터링할 수 있습니다.

Active Directory PowerShell 모듈의 Get-ADUser Cmdlet

Get-ADUser cmdlet은 Active Directory와 상호 작용하기 위한 전용 모듈인 Windows PowerShell용 Active Directory 모듈(RSAT-AD-PowerShell)에 포함되어 있습니다. RSAT-AD-PowerShell 모듈의 cmdlet들을 사용하면 AD 개체에 대해 다양한 작업을 수행할 수 있습니다.

참고: 과거에는 AD 사용자 계정의 속성 정보를 얻기 위해 ADUC 콘솔(저장된 AD 쿼리 포함), VBS 스크립트, dsquery 등 여러 도구를 사용해야 했습니다. 하지만 이제는 Get-ADUser cmdlet 하나로 이러한 도구들을 모두 대체할 수 있습니다.

이 글에서는 Get-ADUser cmdlet을 사용하여 사용자의 암호 변경 시간, 암호 만료일 등 기타 사용자 속성을 조회하는 방법을 살펴보겠습니다.

RSAT-AD-PowerShell 모듈을 사용하려면 관리자 권한으로 PowerShell 콘솔을 실행한 후 아래 명령으로 모듈을 임포트해야 합니다:

Import-Module ActiveDirectory

RSAT-AD-PowerShell 모듈은 Windows Server 2012 이상에서 AD DS(Active Directory Domain Services) 역할을 배포하면 기본적으로 설치됩니다. 도메인 멤버 Windows Server 호스트에 모듈을 설치하려면 다음 명령을 실행합니다:

Install-WindowsFeature -Name "RSAT-AD-PowerShell" –IncludeAllSubFeature

데스크톱 Windows 10/11에서 Get-ADUser cmdlet을 사용하려면 해당 버전에 맞는 RSAT를 설치해야 합니다. 설정선택적 기능기능 추가RSAT: Active Directory Domain Services 및 Lightweight Directory Services 도구를 통해 RSAT를 활성화할 수 있습니다.

또는 Windows 10/11에서 PowerShell로 RSAT AD 모듈을 설치할 수도 있습니다:

Add-WindowsCapability –online –Name "Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0"

컴퓨터에 RSAT-AD-PowerShell 모듈이 설치되어 있지 않으면 Get-ADUser 명령 실행 시 다음과 같은 오류가 발생합니다:

Get-ADUser: The term 'get-aduser' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

모듈이 설치되어 있는지 확인하고, 필요한 경우 PowerShell 세션에 임포트합니다:

Import-Module ActiveDirectory

RSAT를 설치하지 않고도 AD-PowerShell 모듈을 사용하는 방법도 있습니다. 핵심 모듈 파일만 복사한 후 PowerShell 세션에 임포트하면 됩니다:

Import-Module "C:\PS\AD\Microsoft.ActiveDirectory.Management.dll"
Import-Module "C:\PS\AD\Microsoft.ActiveDirectory.Management.resources.dll"

Get-ADUser cmdlet의 모든 인수 목록은 다음 명령으로 확인할 수 있습니다:

help Get-ADUser

Get-ADUser로 AD 사용자 찾기 및 속성 나열하기

Get-ADUser cmdlet을 사용하는 데 도메인 관리자 또는 위임 권한이 있는 계정이 반드시 필요한 것은 아닙니다. 인증된 일반 AD 도메인 사용자라면 누구나 PowerShell 명령을 통해 대부분의 AD 개체 속성 값(기밀 속성 제외)을 조회할 수 있습니다. 다른 계정으로 Get-ADUser 명령을 실행해야 하는 경우 –Credential 매개변수를 사용하면 됩니다.

모든 도메인 사용자 계정 목록을 표시하려면 다음 명령을 실행합니다:

Get-ADUser -filter *

주의: 사용자 계정 수가 많은 Active Directory 도메인에서는 이 명령을 실행하지 않는 것이 좋습니다. AD 정보를 제공하는 도메인 컨트롤러에 과부하가 걸릴 수 있습니다.

Active Directory 사용자 속성을 변경하려면 Set-ADUser cmdlet을 사용하십시오.

특정 사용자의 속성을 표시하려면 –Identity 매개변수를 사용합니다. Identity는 사용자 이름, 로그인 이름(SAMAccountName), DN(Distinguished Name), SID 또는 GUID가 될 수 있습니다.

다음 PowerShell 명령들은 동일한 AD 사용자 계정에 대해 동일한 결과를 반환합니다:

Get-ADUser –Identity b.smith
Get-ADUser –Identity "CN=Brian Smith,OU=Users,OU=Berlin,DC=woshub,DC=loc"
Get-ADUser –Identity "Brian Smith"

기본적으로 Get-ADUser cmdlet은 120개 이상의 사용자 계정 속성 중 10개의 기본 속성(DistinguishedName, SamAccountName, Name, SID, UserPrincipalName, ObjectClass, UserAccountControl AD 속성에 따른 계정 상태 Enabled: True/False 등)만 반환합니다. 이 경우 출력 결과에는 마지막 암호 변경 시간에 대한 정보가 포함되지 않습니다.

특정 도메인 컨트롤러에서 AD 쿼리를 실행하려면 -Server 옵션을 사용합니다:

Get-ADUser –Server DC01.woshub.com –Identity tstuser

다른 AD 도메인에서 사용자 데이터를 가져와야 하는 경우, 해당 도메인 컨트롤러 이름과 접근 자격 증명을 지정해야 합니다:

$ADcred = Get-Credential
Get-ADUSer tstuser -Server DC01.contoso.com -Credential $ADcred

사용 가능한 모든 사용자 속성에 대한 상세 정보를 표시하려면 다음 명령을 실행합니다:

Get-ADUser -identity tuser -properties *

Properties * 스위치와 함께 사용된 Get-ADUser cmdlet은 AD 사용자의 모든 속성과 그 값(빈 값 포함)을 나열합니다. 유사한 사용자 속성 목록은 Active Directory 사용자 및 컴퓨터 그래픽 스냅인(dsa.msc)의 특성 편집기 탭에서도 확인할 수 있습니다.

이제 필요한 사용자 속성이 표시되도록 Get-ADUser 출력 형식을 지정해 보겠습니다. 예를 들어 다음 사용자 속성 값을 표시하고 싶다고 가정해 봅시다:

  • PasswordExpired (암호 만료 여부)
  • PasswordLastSet (마지막 암호 변경 시간)
  • PasswordNeverExpires (암호 만료 없음 설정)
  • LastLogonTimestamp (마지막 로그온 시간)

다음 명령을 실행합니다:

Get-ADUser tuser -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires, lastlogontimestamp

이제 사용자 데이터에 계정 암호 상태(Expired: True/False), 마지막 암호 변경 날짜, 마지막 도메인 로그온 시간(lastlogontimestamp 속성) 정보가 포함됩니다. 불필요한 속성을 제거하고 더 편리한 표 형태로 정보를 표시하려면 Select-Object –PropertyFormat-Table을 사용합니다:

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires

Get-ADUser -SearchBase: 특정 OU의 사용자 가져오기

특정 도메인 컨테이너(조직 구성 단위, OU)의 사용자만 표시하려면 –SearchBase 매개변수를 사용합니다:

Get-ADUser -SearchBase 'OU=London,DC=woshub,DC=loc' -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires

여러 OU에서 한 번에 사용자를 선택해야 하는 경우 다음 PowerShell 스크립트를 사용합니다:

$OUs = "OU=NY,DC=woshub,DC=com","OU=LA,DC=woshub,DC=com","OU=MA,DC=woshub,DC=com"
$OUs | foreach {Get-ADUser -SearchBase $_ -Filter * |select Name, Enabled}

PowerShell로 AD에서 사용자 이메일 주소 가져오기

사용자 이메일 주소는 Active Directory에서 사용자 개체의 속성 중 하나입니다. 사용자의 이메일 주소 목록을 가져오려면 Get-ADUser cmdlet의 속성에 EmailAddress 필드를 추가해야 합니다.

Get-ADUser -filter * -properties EmailAddress -SearchBase 'OU=Paris,OU-Fr,DC=woshub,DC=com'| select-object Name, EmailAddress

이메일 주소가 있는 활성화된 사용자 계정 목록입니다:

Get-ADUser -Filter {(mail -ne "null") -and (Enabled -eq "true")} -Properties Surname,GivenName,mail | Select-Object Name,Surname,GivenName,mail | Format-Table

이메일 주소가 없는 Active Directory 사용자 목록을 가져오려면:

Get-ADUser -Filter * -Properties EmailAddress | where -Property EmailAddress -eq $null

다음 예제는 회사 이메일 목록을 AD에서 CSV 파일로 내보냅니다. 이후 이 CSV 주소록을 Outlook이나 Mozilla Thunderbird 같은 데스크톱 메일 클라이언트로 가져올 수 있습니다:

Get-ADUser -Filter {(mail -ne "null") -and (Enabled -eq "true")} -Properties Surname,GivenName,mail | Select-Object Name,Surname,GivenName,mail | Export-Csv -NoTypeInformation -Encoding utf8 -delimiter "," $env:temp\adress_list.csv

Get-ADUser: PowerShell로 Active Directory 사용자 CSV 내보내기

속성과 함께 조회한 도메인 사용자 목록은 텍스트 파일로 내보낼 수 있습니다:

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires > C:\temp\users.txt

또는 AD 사용자 목록을 CSV 파일로 내보낼 수도 있습니다:

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | where {$_.name –like "*Dmitry*"} | sort-object PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -path c:\tmp\user-passwords-expires.csv -Append -Encoding UTF8

PowerShell을 사용하면 AD 사용자 목록을 Excel 파일로 직접 내보낼 수도 있습니다.

Get-ADUser 필터(Filter) 예제

–Filter 스위치를 사용하면 하나 이상의 속성을 기준으로 사용자 계정 목록을 필터링할 수 있습니다. 이는 지정된 조건과 일치하는 속성을 가진 AD 사용자를 검색할 때 유용합니다. Active Directory 사용자의 특정 속성 값은 이 매개변수의 인수로 지정할 수 있으며, –Filter 매개변수를 사용하면 Get-ADUser cmdlet은 필터 조건과 일치하는 사용자만 표시합니다.

예를 들어, 이름에 "Dmitry"가 포함된 활성(Enabled) 사용자 계정을 나열하고 싶다고 가정해 봅시다. 아래 예제에서는 여러 필터를 사용하며, 논리적 PowerShell 비교 연산자로 조건을 결합할 수 있습니다. 이 예제에서는 사용자 속성이 두 필터 조건(-and)을 모두 만족해야 합니다:

Get-AdUser -Filter "(Name -like '*Dmitry*') -and (Enabled -eq 'True')" -Properties * |select name,enabled

사용자 속성 값을 선택할 때 모든 PowerShell 논리 연산자(-eq, -ne, -gt, -ge, -lt, -le, -like, -notlike, -and, -or 등)를 사용할 수 있습니다.

또한 Sort-Object cmdlet으로 결과 사용자 목록을 특정 속성 기준으로 정렬할 수 있으며, Where-Object cmdlet을 사용하면 여러 필터링 조건을 한 번에 지정할 수도 있습니다.

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires -SearchBase 'OU=NY,DC=woshub,DC=com'| where {$_.name –like "*Dmitry*" -and $_.Enabled -eq $true} | sort-object PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires

이런 식으로 필요한 모든 Active Directory 속성을 포함한 사용자 목록을 얻을 수 있습니다.

여러 속성을 한 번에 검색하려면(legacyExchangeDN, proxyAddresses, SAMAccountName, Surname, DisplayName, physicalDeliveryOfficeName, RDN, msExchMailNickname 등) ANR(Ambiguous Name Resolution) 기능을 활용할 수 있습니다:

Get-ADUser -Filter {anr -eq 'John'} | select Name

팁: 성능 측면에서 볼 때, Get-ADUser로 Active Directory 사용자를 검색할 때는 Where-Object cmdlet에 파이프라인으로 전달하는 것보다 Filter 속성으로 조건을 지정하는 것이 좋습니다. Filter를 사용하면 필터링이 도메인 컨트롤러 측에서 수행되어 네트워크를 통해 컴퓨터로 전송되는 데이터량이 줄어들기 때문입니다.

Get-ADUser 쿼리에서 LDAP 필터를 사용할 수도 있습니다. LDAP 필터는 –LdapFilter 속성으로 지정합니다.

Get-ADUser -LDAPFilter '(&(department=it)(title=sysops))'

유용한 PowerShell Get-ADUser 예제 모음

다양한 필터로 Active Directory 사용자를 조회할 수 있는 더 많은 유용한 PowerShell 명령 예제를 소개합니다. 이들을 조합하여 원하는 AD 사용자 개체 목록을 얻을 수 있습니다:

이름이 Joe로 시작하는 AD 사용자 표시:

Get-ADUser -filter {name -like "Joe*"}

PowerShell로 Active Directory의 총 사용자 계정 수 계산:

Get-ADUser -Filter {SamAccountName -like "*"} | Measure-Object

비활성화된 Active Directory 사용자 계정 찾기:

Get-ADUser -Filter {Enabled -eq "False"} | Select-Object SamAccountName,Name,Surname,GivenName | Format-Table

Active Directory 사용자 계정 생성 날짜 확인:

get-aduser -Filter * -Properties Name, WhenCreated | Select name, whenCreated

최근 24시간 이내에 생성된 신규 Active Directory 사용자 목록 가져오기:

$lastday = ((Get-Date).AddDays(-1))
Get-ADUser -filter {(whencreated -ge $lastday)}

암호가 만료된 계정 나열(암호 만료 옵션은 도메인 암호 정책에서 구성할 수 있습니다):

Get-ADUser -filter {Enabled -eq $True} -properties name,passwordExpired| where {$_.PasswordExpired}|select name,passwordexpired

Get-ADUser와 Add-ADGroupMember cmdlet을 함께 사용하면 도시, 직책, 부서 등에 따라 동적 AD 사용자 그룹을 만들 수 있습니다.

작업: 텍스트 파일에 저장된 사용자 계정 목록(계정당 한 줄)에서 각 사용자의 회사명을 AD에서 가져와 CSV 파일로 저장해야 합니다(이 파일은 Excel로 쉽게 가져올 수 있습니다).

Import-Csv c:\ps\users_list.csv | ForEach {
Get-ADUser -identity $_.user -Properties Name, Company |
Select Name, Company |
Export-CSV c:\ps\users_ad_list.csv -Append -Encoding UTF8
}

최근 90일 동안 도메인 암호를 변경하지 않은 사용자:

$90_Days = (Get-Date).adddays(-90)
Get-ADUser -filter {(passwordlastset -le $90_days)}

비활성 사용자 계정 찾기(180일 이상 도메인에 로그온하지 않은 계정). 사용자의 도메인 로그온 기록을 가져오려면 lastLogonTimestamp 속성을 사용합니다:

$LastLogonDate= (Get-Date).AddDays(-180)
Get-ADUser -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate } | ?{$_.Enabled –eq $True} | Sort LastLogonTimeStamp| FT Name, @{N='lastlogontimestamp'; E={[DateTime]::FromFileTime($_.lastlogontimestamp)}} -AutoSize

Active Directory에서 사용자 사진을 가져와 jpg 파일로 저장하려면 다음 명령을 실행합니다:

$usr = Get-ADUser sjoe -Properties thumbnailPhoto
$usr.thumbnailPhoto | Set-Content sjoe.jpg -Encoding byte

사용자 계정이 속한 AD 그룹 목록 가져오기:

Get-AdUser sjoe -Properties memberof | Select memberof -expandproperty memberof

특정 도메인 보안 그룹의 멤버인 OU 내 사용자 나열:

Get-ADUser -SearchBase 'OU=Rome,OU=Italy,DC=woshub,DC=com' -Filter * -properties memberof | Where-Object {($_.memberof -like "*CEO*")}

특정 그룹의 멤버를 제외한 OU의 모든 사용자 나열:

$Users = Get-ADUser -filter * -SearchBase 'OU=Berlin,DC=woshub,DC=com' -properties memberOf
ForEach ($User In $Users)
{
$Groups = -join @($User.memberOf)
If ($Groups -notlike '*Domain Admins*')
{
$User.Name
}
}

조직 구성 단위(OU) 이름과 함께 AD 사용자 목록을 Out-GridView 표로 내보내기:

get-aduser -filter * -Properties cn,canonicalname | select name,userprincipalname,@{Name="OU";expression={$_.Canonicalname.substring(0,$_.canonicalname.length-$_.cn.length)}}| Out-GridView

AD 사용자 계정의 존재 여부 확인:

$SamAccountName='jbrown'
if (@(Get-ADUser -Filter { SamAccountName -eq $SamAccountName }).Count -eq 0)
{ Write-Host "User $SamAccountName doesn't exist"}

사용자가 로그인할 수 있는 도메인 컴퓨터 목록 나열(LogonWorkstations AD 속성을 통한 로그온 제한 확인):

Get-ADUser jbrown -Properties LogonWorkstations | Format-List Name, LogonWorkstations

팁: Active Directory에서 컴퓨터 속성을 가져오거나 여러 컴퓨터를 검색하려면 Get-ADComputer cmdlet을 사용하십시오.