PowerShell에서 Get-AdGroupMember로 보고서 생성

A popular use of PowerShell is working with Active Directory Directory Services (AD). There are so many time-saving things PowerShell can do with AD objects. Using the PowerShell Get-ADGroupMember cmdlet and other cmdlets can save you a ton of time.

액티브 디렉터리 그룹은 사용자 계정을 분할하는 훌륭한 방법입니다. 그룹을 사용하면 관리자가 여러 시스템에서 리소스 액세스를 정의할 수 있습니다.

이 문서에서는 PowerShell을 사용하여 AD 그룹 구성원을 가져오고 AD 그룹 구성원을 내보내는 방법을 살펴보겠습니다. 이 정보를 사용하여 다양한 흥미로운 보고서를 생성할 수 있습니다.

Active Directory group

ManageEngine ADManager Plus로 Active Directory, Exchange 및 Microsoft 365 관리 및 보고서 작성. 무료 평가판 다운로드!

전제 조건

이 문서를 따라하기 위해 다음 요구 사항을 준비하십시오:

  • Windows 10 도메인에 가입한 컴퓨터에서 작업
  • AD 그룹 및 사용자 계정을 읽을 수 있는 사용자로 로그인
  • PowerShell Active Directory 모듈이 설치되어 있어야 함

기본 사항 배우기

AD 그룹 및 그룹 구성원을 조회하기 위해 사용할 수 있는 두 가지 PowerShell cmdlet이 있습니다-Get-AdGroupGet-AdGroupMember.

Get-ADGroup는 도메인 컨트롤러를 쿼리하고 AD 그룹 개체를 반환합니다. Get-AdGroupMember는 각 그룹 내부를 확인하고 해당 그룹에 존재하는 모든 사용자 계정, 그룹, 연락처 및 기타 개체를 반환합니다.

AD 그룹 가져오기

PowerShell을 사용하여 AD 그룹을 찾으려면 Get-ADGroup cmdlet을 사용할 수 있습니다. 매개 변수 없이 Get-ADGroupFilter 매개 변수를 사용하여 도메인에서 모든 그룹을 쿼리하고 반환합니다. Filter 매개 변수는 필수입니다. 다양한 기준에 따라 반환되는 그룹을 제한하기 위해 존재합니다.

예를 들어, 어떤 기준에도 관계없이 모든 그룹을 찾으려면 Get-ADGroup을 사용하고 Filter 매개 변수에 와일드카드(별표)를 지정하면 됩니다. 아래 예제를 참조하세요. 도메인에 수백 개 또는 수천 개의 그룹이 있는 경우 이러한 그룹을 모두 스크롤하는 데는 시간이 걸릴 수 있습니다.

Get-ADGroup -Filter *

하나의 그룹을 찾아야 하는 경우 Identity 매개 변수를 사용할 수 있습니다.

Identity 매개 변수는 모든 Active Directory PowerShell cmdlet에서 공통 매개 변수입니다. 이를 사용하여 쿼리를 하나의 AD 개체로 제한할 수 있습니다. 예를 들어, HR이라는 그룹이 있는지 확인해야 하는 경우 아래 명령을 실행하여 확인할 수 있습니다.

Get-ADGroup -Identity 'HR'

Get-AdGroupMember로 AD 그룹 멤버 가져오기

AD 그룹의 구성원을 나열하려면 Get-ADGroupMember cmdlet을 사용해야 합니다. 이 cmdlet은 특정 그룹의 사용자, 그룹 및 컴퓨터 개체를 가져옵니다. 아마도 Administrators 그룹의 모든 구성원을 찾아야 할 수도 있습니다. 가장 간단한 형태로는 아래와 같이 그룹의 이름을 지정하여 Identity 매개변수를 사용하면 됩니다.

Get-ADGroupMember -Identity 'Administrators'

Get-AdGroupMember는 사용자, 그룹 및 컴퓨터와 같은 AD 개체의 그룹 멤버십만 반환합니다. 연락처와 같은 다른 AD 개체는 반환하지 않습니다.

그룹 멤버 내의 그룹 멤버 열거하기

AD 그룹은 사용자 계정뿐만 아니라 다른 그룹(중첩 그룹)도 포함할 수 있습니다. 그룹이 다른 그룹 내에 중첩될 경우 해당 그룹의 구성원은 부모 그룹에 할당된 동일한 권한을 상속합니다.

기본적으로 PowerShell의 Get-AdGroupMember cmdlet은 중첩된 그룹 멤버를 반환하지 않습니다. 이를 해결하기 위해 Recursive 매개변수를 사용할 수 있습니다. 예를 들어, 아래와 같이 Recursive 매개변수를 사용하여 HR 그룹 내에 중첩된 그룹의 구성원을 찾을 수 있습니다.

Get-ADGroupMember -Identity 'HR' -Recursive

한 번에 여러 그룹/구성원 가져오기

한 번에 많은 다른 그룹 또는 그룹 구성원에 대해 AD를 쿼리해야하는 경우 PowerShell foreach 루프를 사용하여 수행할 수도 있습니다. foreach 루프는 컬렉션의 각 항목에 대해 명령 또는 코드를 실행합니다. 이 경우, 해당 컬렉션은 그룹 이름의 목록이 될 것입니다.

아마도 HR, 회계 및 IT 그룹의 모든 구성원을 찾아야 할 수도 있습니다. 이를 위해 먼저 이러한 그룹 이름의 컬렉션 또는 배열을 만들어야합니다. 아래의 예제에서는이 컬렉션을 $groupNames로 정의합니다. 그런 다음 해당 컬렉션의 각 이름에 대해 Identity 매개 변수에 각 그룹의 이름을 제공하여 Get-ADGroupMember를 실행합니다.

$groupNames = 'HR','Accounting','IT'
foreach ($group in $groupNames) {
    Get-ADGroupMember -Identity $group
}

대신 ForEach-Object cmdlet을 사용하여 그룹을 순환할 수도 있습니다.

대체 자격 증명 사용

많은 다른 PowerShell cmdlet과 마찬가지로 AD 그룹 cmdlet에는 Credential 매개 변수가 있습니다. 기본적으로 AD 그룹 cmdlet을 실행할 때마다 로그인 한 자격 증명을 사용하여 Active Directory를 쿼리합니다. 이 동작은 도메인에 가입한 컴퓨터에서 Active Directory 사용자로 로그인해야하는 권한이 있는 Active Directory 사용자로 로그인해야한다는 것을 의미합니다.

하지만 작업 그룹 컴퓨터에 있는 경우 또는 다른 사용자로 AD에 인증해야 하는 경우 Credential 매개변수를 사용할 수 있습니다. 이 매개변수를 사용하면 인증에 사용할 사용자 이름과 암호를 지정할 수 있습니다.

예를 들어 사용자 계정이 AD 작업을 수행할 권한이 없는 경우 추가 권한을 가진 서비스 계정이 있을 수 있습니다. 표준 사용자로 로그인한 상태에서 아래에 표시된대로 서비스 계정으로 인증할 수 있습니다.

Get-Credential cmdlet은 사용자 이름/암호를 입력하도록 요청하여 자격 증명을 생성합니다. 그런 다음이 자격 증명은 인증을 위해 Get-AdGroup cmdlet에 전달됩니다.

Get-ADGroup -Identity 'HR' -Credential (Get-Credential)

Credential 매개변수는 인증 자격 증명을 제공하기 위해 PowerShell에서 널리 사용됩니다. 자세한 정보는 PowerShell Get-Credential cmdlet 및 자격 증명에 관한 모든 것 사용하기을 읽어보십시오.

Get-ADGroup으로 그룹 멤버 가져오기?

Get-ADGroup cmdlet을 사용하여 그룹 멤버도 가져올 수 있습니다. 이는 반직관적으로 들릴 수 있지만 말입니다.

Get-ADGroup은 그룹마다 members라는 속성을 반환합니다. 이는 그룹의 멤버인 AD 개체의 컬렉션입니다.

예를 들어 HR 그룹에서 Get-ADGroupMember를 사용하지 않고 그룹 멤버를 찾으려면 다음과 같이 수행할 수 있습니다:

Get-ADGroup -Identity 'HR' -Properties members

왜 다른 방법 대신 이 방법을 사용합니까? 주요 차이점은 members 속성에는 사용자, 컴퓨터 및 다른 그룹뿐만 아니라 모든 유형의 AD 개체가 포함되어 있다는 것입니다.

여러 그룹에 연락처가 있다면 Get-ADGroupMember를 실행하면 해당 연락처가 표시되지 않을 것입니다. 그러나 Get-ADGroup에게 해당 그룹의 모든 구성원을 반환하고 아래에 표시된 대로 해당 컬렉션을 확장하도록 지시하면 연락처가 표시됩니다.

Get-ADGroup -Identity 'HR' -Properties members | Select-Object -ExpandProperty members

특정 AD 속성 찾기

위의 기본 섹션에서는 그룹과 그룹 구성원을 모두 반환했습니다. 각 그룹 및 그룹 구성원에 대해 반환되는 정보는 각 유형의 개체와 관련된 AD 속성의 하위 집합에 불과합니다.

사용자 계정의 이메일 주소, 마지막 로그온 날짜 또는 기타 관련 AD 속성을 보고 싶을 수 있습니다. 이를 위해서는 창의적으로 해결해야 합니다.

아마도 HR 그룹에서 모든 그룹 구성원을 찾을 수 있었지만 각 사용자 계정의 이메일 주소도 보고 싶을 것입니다.

$groupMembers = (Get-ADGroup -Identity 'HR' -Properties members).members
$groupMembers | Select-Object -Property Name, @{Name='Member';exp={Get-AdUser -Identity $_.Name -Properties emailAddress,lastlogonDate}}

결과 필터링

지금까지 모든 그룹과 그룹 구성원을 찾았지만 일상 업무 환경에서는 이를 필요로 할 일이 거의 없습니다. 아마도 각 항목의 제한된 수만 찾아야 할 것입니다. AD 그룹 cmdlet에는 이를 처리하는 몇 가지 방법이 있습니다.

Filter 매개변수

이전에 언급한 바와 같이 두 cmdlet에는 Filter 매개변수가 있습니다. 이 매개변수를 사용하면 이 기사의 범위를 벗어나는 다양한 방식으로 반환되는 내용을 제한할 수 있습니다.

Filter 매개변수를 사용하여 이름, 그룹 유형, 이메일 주소, 사용자의 마지막 로그온과 같은 모든 AD 속성으로 결과를 제한할 수 있습니다.

예를 들어, 보안 그룹만 찾고 싶다면 GroupCategory 속성을 지정하고 조건을 설정하여 보안 그룹만 반환되도록 해야 합니다.

Get-ADGroup -Filter 'GroupCategory -eq "Security"'

모든 보안 그룹을 찾고 싶지만 도메인 로컬 그룹은 제외하고 싶다면 또 다른 조건을 추가해야 합니다(-ne 연산자를 사용하여).

Get-ADGroup -Filter 'GroupCategory -eq "Security" -and GroupScope -ne "DomainLocal"'

쿼리 필터를 만드는 방법을 알고 싶다면 PowerShell에서 Active Directory 및 LDAP 필터 배우기를 확인하세요.

조직 단위(OU)별로 그룹 결과 제한하기

아마도 여러 그룹이 OU에 중첩되어 있을 것입니다. 모든 그룹을 찾는 것이 아니라 특정 OU에 있는 그룹만 찾으려는 경우 SearchBase 매개변수를 사용할 수 있습니다.

SearchBase 매개변수를 사용하면 그룹 검색을 시작할 OU의 식별 이름(DN)을 지정할 수 있습니다. 예를 들어, 도메인의 루트에 Locations OU가 있다고 가정해 보겠습니다. Locations OU에서는 Austin, NYC,Los Angeles와 같이 각 위치 OU가 생성되어 있습니다. NYC OU에 있는 그룹만 찾고 다른 그룹은 보고 싶지 않습니다.

아래에 예시 AD OU 구조가 표시되어 있습니다. Locations OU 외에 다른 그룹도 존재하는 것을 알 수 있습니다.

company.local
- Locations
  - Austin
  - NYC
    - Group 1
    - Group 2
  - Los Angeles
- Computers
  - Group 3
  - Group 4
- Service Accounts

아마도 NYC OU에만 있는 모든 AD 그룹을 찾아야 합니다. 검색을 제한하기 위해 SearchBase 매개변수를 사용하여 아래에 표시된 DN을 제공합니다. Locations OU 내의 모든 그룹이 반환됩니다.

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,OU=NYC,DC=company,DC=pri'

그러나 이제 Locations OU 아래의 모든 OU에서 모든 그룹을 찾아야 합니다. Get-ADGroupLocations OU 자체에 있는 그룹만 반환하고 자식 OU에 있는 그룹은 반환하지 않습니다.

자식 OU에 있는 그룹을 반환하려면 SearchScope 매개변수를 사용해야 합니다. 이 매개변수는 Recursive 매개변수와 유사하게 자식 개체도 검사합니다.

예를 들어, Locations OU 아래의 어떤 OU에 있는 모든 그룹을 찾으려면 Subtree 또는 2를 지정합니다. 이 SearchScope 값은 Get-ADGroup에게 모든 하위 OU, 손자 OU 및 그 이하의 OU를 재귀적으로 검색하도록 지시합니다.

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2

SearchScope 매개변수 옵션에 대한 자세한 내용은 Get-ADGroup 문서를 참조하세요.

AD 그룹 및 구성원 내보내기

이제 필요한 그룹과 그룹 구성원을 쿼리하고 반환하는 방법을 알았습니다. 이 모든 정보는 PowerShell 콘솔로 전송됩니다. 그러나 이제 이 정보를 CSV 파일이나 Excel 워크시트로 가져와야 합니다.

이제 모든 정보를 파일로 보내면 됩니다.

CSV로 내보내기

AD 정보를 내보내는 인기있는 형식 중 하나는 CSV입니다. PowerShell에는 PowerShell 출력에서 쉽게 CSV 파일을 생성할 수 있는 편리한 cmdlet인 Export-Csv가 있습니다.

이 문서에서 소개하는 모든 명령어를 사용하여 CSV 파일을 생성할 수 있습니다. Export-Csv에 파이프하여 모든 출력을 콘솔에서 CSV 파일로 리디렉션합니다.

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2 | Export-Csv -Path 'departmental_groups.csv' -NoTypeInformation

이 편리한 cmdlet에 대한 자세한 정보는 다음을 참조하십시오. Export-Csv: CSV 파일을 주요한 자료로 다루는 PowerShell 방법.

Get-AdGroupMember cmdlet을 사용하여 결과를 CSV로 쉽게 내보낼 수도 있습니다.

Excel로 내보내기

PowerShell에는 정보를 Excel로 내보내는 기본 기능이 없습니다. 그러나 ImportExcel이라는 무료 커뮤니티 모듈을 다운로드하여 CSV와 유사한 내보내기 기능을 Excel 워크시트에 직접 사용할 수 있습니다. PowerShell 모듈을 설치하려면 Install-Module ImportExcel -Scope CurrentUser를 실행하십시오.

위의 예제를 사용하여 CSV 파일 대신 그룹을 Excel 워크시트로 내보내야하는 경우 다음과 같이 Export-Excel cmdlet을 사용합니다.

Active Directory에서 유출된 및 안전하지 않은 암호를 NCSC 암호 목록과 비교하여 찾으세요.

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2 | Export-Excel -Path 'departmental_groups.csv'

ImportExcel 모듈에는 Excel과 작업하기 위한 다양한 기능이 있습니다. 보다 고급스러운 워크시트가 필요한 경우, 아마도 해당 기능이 있을 것입니다.

ImportExcel 모듈 사용에 대한 자세한 정보는 이 기사를 읽어보세요. 이 기사는 처리할 수 있는 일반적인 사용 사례에 대한 훌륭한 소개를 제공합니다.

ManageEngine ADManager Plus로 Active Directory, Exchange 및 Microsoft 365을 관리하고 보고하세요. 무료 평가판 다운로드!

결론

PowerShell cmdlet 두 개만 사용하여 AD 그룹으로 거의 모든 작업을 수행할 수 있습니다. 이 기사는 사용 가능한 기능에 대한 간단한 소개에 불과합니다. 여기에서 얻은 지식을 활용하고 기사의 깊은 주제 다이빙에 대한 링크를 따라가서 무엇을 구축할 수 있는지 확인해보세요!

Source:
https://adamtheautomator.com/get-adgroupmember/