Get-AdUser: PowerShell로 Active Directory 사용자 감사하는 방법

PowerShell은 IT 관리자에게 필수적인 도구이며, Get-AdUser 명령을 사용하여 Active Directory 사용자 계정을 감사하기 쉽게 만듭니다. 이 안내서에서는 인기 있는 Active Directory cmdlet을 사용하는 방법에 대해 자세히 설명하겠습니다.

Get-AdUser PowerShell cmdlet 소개

Get-AdUser cmdlet은 가장 인기 있는 Active Directory PowerShell cmdlet 중 하나입니다. 지정된 사용자 객체를 가져오거나 여러 사용자 객체를 검색하기 위한 사용자 정의 검색을 수행할 수 있습니다.

광고

Identity 매개변수는 가져올 Active Directory 사용자를 지정하는 데 사용됩니다. 사용자를 식별하는 방법에 대해 여러 옵션이 있습니다:

  • 그들의 식별 이름(DN), GUID, 보안 식별자(SID) 또는 보안 계정 관리자(SAM) 계정 이름을 사용할 수 있습니다.
  • 또는 사용자 객체 변수를 설정하거나 $UserA와 같은 사용자 객체를 Identity 매개변수를 통해 전달할 수도 있습니다.

Filter 또는 LDAPFilter 매개변수를 사용하여 하나 이상의 사용자를 검색하고 가져올 수 있습니다. Filter 매개변수는 PowerShell 표현 언어(PSL)를 사용하여 Active Directory를 쿼리하는 데 사용됩니다.

PowerShell 표현 언어 구문은 관리자들에게 Filter 매개변수가 수락하는 값 유형에 대한 풍부한 형 변환 지원을 제공합니다. Lightweight Directory Access Protocol (LDAP) 쿼리 문자열이 이미 있는 경우 LDAPFilter 매개변수를 대신 사용하십시오.

명시적으로 설정된 매개변수가 없는 경우 Get-AdUser는 기본 사용자 객체 속성 집합을 표시합니다. 추가 속성을 검색하려면 Properties 매개변수를 사용하십시오. 나중에 사용할 수 있는 일부 매개변수에 대해 이후에 설명하겠습니다.

광고

Get-AdUser 및 전제 조건 사용 방법

Get-AdUser 및 기타 관련된 Active Directory PowerShell 명령을 사용하기 전에 워크스테이션에 Active Directory 모듈이 설치되어 있고 로드되어 있는지 확인해야 합니다. 실행 중인 Windows 버전에 따라 cmdlet을 설치하는 다양한 방법을 따를 수 있습니다.

간결함을 위해, 귀하가 온프레미스 Active Directory를 관리하는 관리자 또는 IT 전문가로서 거쳐 갈 수 있는 두 가장 일반적인 방법을 안내하겠습니다.

먼저, 다음 PowerShell 명령을 사용하여 원격 서버 관리 도구 (RSAT) 도구를 Windows Update에서 직접 설치할 수 있습니다.

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

두 번째 방법은 설정 애플리케이션을 사용하여 RSAT 도구를 직접 설치하는 것입니다. 시작-> 설정 ->  -> 옵션 기능 -> 기능 추가 -> 그리고 RSAT: Active Directory 도메인 서비스 및 경량 디렉터리 서비스 도구 옵션에 체크 표시를 넣으십시오.

광고

 설치 버튼을 클릭하십시오.

-Identity 매개변수를 사용하여 AD 사용자 계정을 찾는 방법

좋아요, cmdlet을 사용하여 시작하고 필요한 정보를 더 효율적으로 (그리고 빠르게!) 얻을 수 있도록 도와드릴 수 있는 방법을 보여드리겠습니다. (Windows Server 2022 Active Directory) Hyper-V 랩 환경에서 작업 중이며 Windows 10 21H1 클라이언트 가상 머신(VM)에 로그인했습니다. ‘Active Directory Module for Windows PowerShell’을 시작 메뉴에서 검색하여 ‘관리자 권한으로 실행’을 통해 열었습니다.

Active Directory Module for Windows PowerShell

먼저, sAMAccountName 속성을 기반으로 도메인 사용자를 찾아보겠습니다.

Get-ADUser breinders
Finding a user account via their sAMAccountName

여기 있습니다. 이제 objectGUID (또는 GUID) 속성을 사용하여 사용자를 찾을 수 있습니다. 시도해 보겠습니다:

Get-ADUser bdcaaf45-e993-4be7-83d2-c1d280edc250
Finding an account via their objectGUID (GUID)

아, 같은 사용자 계정이군요. 훌륭합니다. 우리는 사용자의 보안 식별자 또는 SID에 따라 사용자를 검색할 수도 있습니다.

Get-ADUser S-1-5-21-3437955921-3370966048-1812589592-1107
Finding an account via their Security IDentifier (SID)

네, 약간 반복적이지만, 요점은 알겠죠. 성, 이름, 사용자 주요 이름 등 사용자의 다양한 속성을 사용할 수도 있습니다.

Get-AdUser 필터를 사용하면

대규모 환경에서 권장하지 않는 Get-AdUser 단독 입력은 AD 도메인에 연결된 모든 사용자 개체를 검색하기 시작할 것입니다. 이 작업은 콘솔을 데이터로 채우기 시작할 뿐만 아니라 사용 중인 도메인 컨트롤러에도 뚜렷한 부담을 줄 수 있습니다.

전체 사용자 베이스를 필터링하고 속성을 기반으로 특정 사용자를 검색할 수만 있다면 좋을텐데요. 그런데 바로 ‘필터’ 매개변수가 그 역할을 합니다!

‘-filter’ 매개변수는 AD 개체를 검색하는 쿼리 문자열을 지정합니다. 이 문자열은 PowerShell 표현 언어(PEL) 구문을 사용합니다. PEL 구문은 값 형식을 위해 강력한 유형 변환 지원을 제공합니다. 이 구문은 순서대로 표현되며, 즉 연산자가 피연산자와 값을 사이에 놓습니다. 더 나은 이해를 위해 몇 가지 예제를 살펴보겠습니다.

먼저, ‘Enabled’ 상태인 모든 계정을 확인해 봅시다.

Get-ADUser -filter {Enabled -eq "true"} | ft
Locating all the enabled accounts

우리는 ‘Enabled’ 필드가 True인 모든 계정을 찾기 위해 그 사랑스러운 PEL 구문을 사용하고 있습니다. 또한 더 읽기 쉬운 표시 형식을 위해 출력을 Format-Table PowerShell cmdlet을 사용하여 파이핑하고 있습니다.

이제, 이메일 주소를 가진 모든 사용자를 표시해 봅시다.

Get-ADUser -Filter {mail -ne "null"} -Properties Name,GivenName,mail| ft Name,GivenName,mail
Finding all the user accounts with an email address

먼저, ‘null’ 이메일 주소를 가지지 않는 사용자 계정만 포함하도록 ‘ -filter’ 매개변수를 사용하고 있다는 점에 주목하세요. 다시 말해, 이메일 주소가 있는 모든 계정입니다. 컴퓨터처럼 생각하는 것이 가끔 어려울 수 있죠.

둘째, Name, GivenName 및 mail (이메일 주소)이라는 세 가지 속성에 집중하고 있습니다. 우리는 Format-Table을 사용하여 이러한 속성을 나열합니다. 식은 쉽죠!

보안 측면에서 계정을 감사하고 싶을 수도 있습니다. ‘passwordneverexpires’ 속성이 있는 모든 계정을 찾기 위해 ‘ -filter’ 매개변수를 사용할 수도 있습니다. 그것은 일반적으로 권장되지 않는 것입니다.

이름이라면 Get-AdUser where name like?

또 다른 멋진 기능은 -filter를 사용하여 AD 사용자 개체의 다양한 속성과 일치하는 특정 사용자 만 찾을 수 있는 다양한 매개변수를 사용하는 것입니다. 내 실험실 환경은 매우 작고 약 10개의 사용자 계정만 있는데, 여전히 원하는 계정을 매우 빨리 찾을 수 있는 능력의 힘과 유연성을 보여줄 수 있습니다. 여기서, 이름에 ‘Reinders’가 포함된 모든 사용자를 찾아봅시다.

Get-ADUser -Filter {name -like "*Reinders*"} -Properties * | ft Name,EmailAddress

우리는 ‘이름’ 매개변수를 사용하여 이름에 ‘Reinders’가 포함된 모든 계정을 찾고 있습니다. 그것은 그들의 성, 이름, 심지어 중간 이름일 수도 있습니다. Reinders를 성으로 가진 사용자만 찾고 싶다면, -like 필드를 “*Reinders”로 변경하십시오. (주의: 필드 끝에는 별표(*)가 없습니다).

조직 단위로 Get-AdUser 검색 범위 제한하기

상당히 큰 도메인/기업을 보유하고 있다면, 이러한 명령을 실행할 때 쿼리 시간이 길어지거나 도메인 컨트롤러에 불필요한 성능 영향을 줄 수 있습니다. 이러한 검색 범위를 특정 조직 단위 (OU)로 제한하는 방법에 대해 이야기해 봅시다.

‘-SearchBase’ 매개변수를 사용하여 OU(또는 여러 OU)를 다음 구문을 사용하여 지정할 수 있습니다.

Get-ADUser -SearchBase 'OU="Test Users",DC=reinders,DC=local' -filter * -Properties Name,EmailAddress | ft Name,EmailAddress
Here, we’re limiting the search scope to the ‘Test Users’ Organization Unit (OU)

여기서 “테스트 사용자” OU의 모든 사용자 범위를 제한하고, 그들의 이름과 이메일 주소를 테이블 형식으로 출력합니다.

대체 자격 증명으로 Get-AdUser 사용하기

기본적으로 Get-AdUser cmdlet은 현재 로그인한 사용자의 컨텍스트에서 실행됩니다. 대체 자격 증명으로 명령을 실행하려면 변수를 사용하여 대체 자격 증명을 저장한 다음 ‘Credential’ 스위치를 사용하여 명령을 실행할 수 있습니다.

$cred = Get-Credential Get-ADUser -Credential $cred -Filter {name -like "*Reinders*"} -Properties * | ft Name,EmailAddress

다시 말해서, 간단하고 명료합니다!

Get-AdUser 속성 매개변수 작업

I’ve shown a few examples of the ‘-Properties’ parameter, but let’s take a step back and explain it a bit.

‘-Properties’ 매개변수는 서버에서 검색할 출력 개체의 속성을 지정합니다. 기본적으로 사용하지 않으면 반환되고 표시되는 속성이 열 가지 있습니다. DistinguishedName, 계정이 ‘Enabled’ 또는 ‘Disabled’인지, 사용자의 GivenName, Name, GUID 및 기타 시스템과 유사한 속성 등이 있습니다. 그러나 사용 가능한 속성이 상당히 많습니다. 기본 설정에 포함되지 않은 속성을 검색하려면 이 매개변수를 사용하십시오.

이 매개변수에 대해 속성을 이름의 쉼표로 구분된 목록으로 지정하십시오. 개체에 설정된 모든 속성을 표시하려면 * (별표)를 지정하십시오.

다른 속성에 액세스하려면 해당 속성을 지정하면 됩니다. 기본 또는 확장된 속성이 아닌 속성의 경우 속성의 Lightweight Directory Access Protocol (LDAP) 표시 이름을 지정해야 합니다.

몇 가지 예를 살펴보겠습니다.

Get-ADUser -filter * -Properties Name,PasswordLastSet | ft Name,PasswordLastSet
Displaying all users with the date and time their password was last set/reset

위 예제는 도메인의 모든 사용자를 표시하며 사용자의 Name과 마지막으로 설정/재설정된 암호의 날짜/시간을 보여줍니다.

Get-ADUser -filter * -Properties Name,whencreated | ft Name,WhenCreated
Another nice feature is listing every user’s Creation Date in Active Directory

이는 Active Directory에 계정이 생성된 날짜를 보여줍니다. 각 계정에 대해 Name, Department 및 Manager를 가져오는 쿼리로 마무리하겠습니다.

Get-ADUser -filter * -Properties Name,Department,Manager | ft Name,Department,Manager
Listing the Department and the Manager of each user, if they’re populated in Active Directory

한 가지 최종 예제와 Export-Csv 명령의 훌륭한 활용 사례입니다. 도메인의 모든 사용자 목록과 모든 속성을 포함하려는 경우 이 명령을 실행하여 모두 편리한 CSV 파일로 내보내세요.

Get-ADUser -filter * -properties * | Export-CSV c:\temp\Users.csv

요약

I hope you gained some knowledge about how to use the Get-AdUser PowerShell command. This really scratches the surface, however, this is one aspect I like about the power of PowerShell: Learning about the core properties of a cmdlet and extrapolating it out to your organization.

대부분의 경우 이 명령을 사용하여 문제를 해결하거나 다른 엔지니어들을 위해 문서를 작성하고 전반적인 문제 해결 프로세스를 지원할 수 있는 다양한 사용 사례를 쉽게 떠올릴 수 있습니다. 이것은 매우 유용할 수 있습니다. 물론, 이러한 명령 중 일부를 사용하여 PowerShell 스크립트를 생성하는 것도 효율성을 높여줍니다!

질문이나 의견을 자유롭게 남겨주세요.

관련 기사:

Source:
https://petri.com/get-aduser-how-to-audit-active-directory-users-with-powershell/