이것은 Active Directory 건강 점검에 관한 두 번째 이야기입니다. 필수로 읽을 필요는 없지만, 이 기사에서 배우게 될 PowerShell 스크립트가 어떻게 구축되었는지 알고 싶다면 Active Directory 건강 점검 도구 만들기 [자세히]: Part I를 확인하시기 바랍니다.
Part I에서 여러 가지 다른 테스트와 그 중요성에 대해 배웠습니다. 이제 이 모든 것을 함께 모아 도구를 만들어 봅시다. 이번 파트에서는 Part I에서 설명한 모든 Active Directory 건강 점검을 테스트 프레임워크로 변환하는 방법을 배우게 될 것입니다. 또한 Pester와 PRTG라는 모니터링 도구에 대한 AD 건강 점검 결과를 출력하는 방법도 배우게 될 것입니다.
이 기사에서 배울 도구를 따라하거나 완성된 버전을 보려면 GitHub에서 ADHealthCheck-NoResult.ps1 스크립트를 다운로드하십시오.
출력 정의
공통 객체 유형과 쉽게 생성할 수 있는 방법이 있다면, 테스트 결과를 선택한 도구로 변환하는 것이 훨씬 쉬워집니다.
모든 잠재적 도구에 대해 통일된 출력을 생성하기 위해 PowerShell 클래스를 사용하기로 결정했습니다. 필수는 아니지만, 여기서는 이 접근 방식을 선택한 것입니다. 주요한 점은 모든 AD 건강 점검이 동일한 유형의 출력을 반환하는 것을 보장하는 것입니다.
A PowerShell class is a schema that defines how a PowerShell object should look and what it should do. Each line you see below represents a property the objects return will have. You can see below I’m planning on each AD health check to return ten properties.
이 수업 생성을 가속화하기 위해 New-AdhcResult라는 도우미 함수를 사용하겠습니다. 이 함수는 수업을 생성하고 따라할 수 있는 모든 것을 생성합니다. 이 함수는 사용자 정의
[AdhcResult]
타입 오브젝트를 출력합니다.
AD Health Check 도구 실행
먼저, AD Health Check 스크립트를 도메인 컨트롤러에 다운로드하고 복사하세요. PowerShell ISE에서 열고 실행하세요. 이 도구의 이 부분에서는 어떤 정보도 반환하지 않습니다.
이 스크립트는 각 체크의 결과를 $TestResults
변수에 여러 개의 [AdhcResult]
오브젝트로 저장합니다. 나중에 보고서를 생성하거나 다양한 도구로 출력하기 위해 이러한 오브젝트를 사용할 것입니다. 이와 같이 체크 결과를 이 변수에 저장하는 것은 다른 결과를 추가하고 New-AdHcResult
명령을 사용할 수 있도록 합니다.
스크립트 실행이 완료되면, 이제 $TestResults
변수에 완전한 AD Health Check 오브젝트 세트가 저장되어 있어야 합니다. 이제 콘솔에서 $TestResults
를 실행하여 원시 결과를 확인할 수 있습니다.
도구에서 AD Health Check 결과 표시
모든 체크가 공통된 오브젝트 타입으로 되어 있으므로, Pester와 PRTG와 같은 몇 가지 도구를 통해 더 잘 검토할 수 있습니다.
이 섹션에서는 extent라는 도구를 사용하여 HTML 보고서를 작성하고 PRTG에서 보고서를 표시하는 방법을 배우게 될 것입니다.
Pester를 사용하여 nUnit XML 파일을 생성하는 방법
먼저 PowerShell 객체를 도구가 이해할 수 있는 형식으로 변환해야 합니다. 대부분의 도구는 XML 또는 더 정확히는 nUnit XML을 이해합니다. 이는 결과를 표시하기 위해 다양한 도구에 가져올 수 있는 형식입니다.
PowerShell을 사용하기 때문에 AD 건강 점검 스크립트의 출력을 읽고 nUnit XML 파일을 생성하기 위해 Pester 테스트 프레임워크를 사용할 것입니다.
먼저 최신 버전의 Pester를 다운로드하십시오. 관리자 권한이 있는 PowerShell 콘솔에서 Install-Module
을 실행하여 Pester를 다운로드할 수 있습니다. 아래 명령은 최신 Pester 버전을 강제로 설치합니다. Pester에 서명된 발행자 인증서는 Windows 10에 포함되어 있으므로 SkipPublisherCheck
매개 변수를 사용하여 설치해야 합니다.
Pester를 사용할 수 있게 되면 스크립트를 실행하여 동적으로 Pester 테스트 세트를 생성할 수 있습니다.
참고: 제공된 PowerShell 스크립트를 사용하지 않고 직접 Pester 테스트를 생성할 수도 있습니다.
아래 PowerShell 스크립트는 ADHealthCheck-NoResult.ps1 스크립트에서 정의된 $TestResults
변수의 출력을 사용하여 Pester를 사용하여 nUnit XML 파일을 생성합니다.
이 파일을 AD 건강 점검 스크립트와 동일한 폴더에 Pester.ps1로 저장하세요.
마지막으로, 아래의 Invoke-Pester
를 실행하여 Pester.ps1 파일을 호출하고 결과를 NUnitXml
형식으로 저장하세요.
Extent 도구를 사용하여 HTML 보고서 작성
NUnit XML 파일을 사용하여 HTML로 변환할 수 있는 도구 중 하나는 extent입니다. Extent는 Nunit XML 파일에서 HTML 보고서를 생성하는 유용한 도구입니다.
먼저, 이전에 생성한 NunitReport.xml 파일과 동일한 디렉토리에 extent를 다운로드하세요. 그런 다음 PowerShell 세션에서 다음 명령을 실행하세요. 이러한 명령은 HTML 파일을 저장할 디렉토리를 생성하고 변환을 수행하는 extent.exe를 실행합니다.
완료되면 HTMLReports 디렉토리에 두 개의 HTML 파일이 있습니다. 이 파일들은 웹 브라우저로 열면 아래 스크린샷과 같습니다.


PRTG로 AD 건강 점검 결과 가져오기
PRTG는 Paessler에서 개발한 인프라 및 서비스를 모니터링하는 인기있는 도구입니다. 이 섹션에서는 건강 점검 스크립트가 실행된 후 건강 점검 결과를 PRTG로 푸시하는 방법을 배우게 됩니다.
결과를 PRTG로 푸시하는 것은 툴이 정보를 가져오는 것보다 더 많은 작업이 필요하지만, 시간을 투자하는 가치가 있는 설정을 최종적으로 확인하게 될 것입니다.
전제 조건
이 문서에서 구축된 AD 건강 점검 스크립트를 모니터링 도구로서 PRTG를 성공적으로 설정하려면 다음 사항을 준비해야 합니다:
- PRTG가 설치되어 구성되었음
- PRTG에 모든 도메인 컨트롤러가 설정되었음
- GitHub에서 다운로드한 Send-AdhcResultToPrtg.ps1 PowerShell 스크립트
- 사용 중인 PRTG 센서의 URL 및 포트
준비 사항이 각각 완료되었다면, 아래 단계별 지침을 따라 AD 건강 점검 결과를 PRTG로 푸시하는 것을 권장하는 방법을 알아보세요.
- Domain 또는 선호하는 이름으로 PRTG에서 장치를 생성하세요.
- 고급 HTTP 푸시 센서를 생성하고 IdentityToken을 directory-adhealthcheck로 설정하세요. 이는 대소문자를 구분합니다!
- PRTG의 각 도메인 컨트롤러 장치마다 하나의 고급 HTTP 푸시 센서를 생성하세요. 각 IdentityToken에 -adhealthcheck를 추가하여 각 센서를 생성하세요. 예를 들어 dc01-adhealthcheck입니다.
- 다음의 PowerShell 스크립트 Send-AdhcResultToPrtg.ps1의 내용을 우리가 다룬 PowerShell 스크립트 ADHealthCheck-NoResult.ps1의 끝에 추가합니다.
- 변수
$PRTGUrl
을 PRTG 센서의 URL과 포트로 변경합니다. - 스크립트를 실행합니다.
스크립트 실행이 완료되면 AD 건강상태 확인 스크립트는 이제 아래와 같이 PRTG 센서로 상태를 전송해야 합니다.

Active Directory 건강상태 확인 스크립트 예약
AD 건강상태 모니터링은 계속적인 프로세스입니다. 단시간 인스턴스 대신 항상 테스트를 실행해야 합니다. Active Directory 건강상태 확인 스크립트를 자주 실행되도록 스케줄링해 봅시다.
이러한 체크를 자동화하는 가장 쉬운 방법은 스크립트를 작업 스케줄러에 추가하고 AD 사용자 계정 또는 그룹 관리 서비스 계정으로 실행하도록 설정하는 것입니다.
그룹 관리 서비스 계정(gMSA)을 사용하는 것이 예약된 작업을 자동으로 실행하는 더 안전한 방법입니다. 이 계정은 AD에서 비밀번호를 가져올 수 있는 지정된 컴퓨터 계정만 사용할 수 있습니다. 그러나 일부 조직에서는 이러한 기능을 사용할 수 없을 수도 있습니다.
AD 사용자 계정 만들기
스케줄된 작업을 실행하기 위해 AD 사용자 계정을 설정하는 데 필요한 단계를 먼저 살펴보겠습니다.
사용자 계정으로 예약된 작업을 실행할 경우, 반드시 자신의 계정으로 실행하지 마십시오! 이를 위해 별도의 사용자 계정을 생성하십시오.
시간을 절약하기 위해 아래 PowerShell 스크립트를 참조하십시오. 이는 Domain Admins 그룹의 일부인 AD 사용자 계정을 생성하는 예제 스크립트입니다. 이 계정을 사용하여 예약된 작업을 실행할 수 있습니다.
그룹 관리 서비스 계정 생성
gMSA를 사용하여 상태 점검을 실행하는 것은 gMSA를 이미 사용하고 있는 경우에는 약간 까다로울 수 있지만 더 안전합니다.
KDS 루트 키 생성
AD 상태 점검 스크립트를 실행할 gMSA 계정을 만들려면, 먼저 KDS 루트 키를 추가하세요. 도메인 컨트롤러에서 PowerShell 명령 Get-KDSRootKey
를 실행하여 KDS 루트 키가 있는지 확인할 수 있습니다.
KDS 루트 키가 없으면, 2012R2 이상의 도메인 컨트롤러에서 Domain Admins AD 그룹의 사용자 계정으로 Add-KDSRootKey -EffectiveImmediately
를 실행하여 하나를 만듭니다.
키는 다른 도메인 컨트롤러로 복제되어야만 완전히 적용됩니다. 이 프로세스에 대한 자세한 정보는 Microsoft 문서에서 찾을 수 있습니다.
gMSA 만들기
KDS 루트 키를 만들었다면, PowerShell을 사용하여 gMSA 계정을 만들 준비가 되었습니다. 아래에는 Domain Admins 그룹의 도메인 컨트롤러에서만 인증을 허용하는 gMSA 계정을 만들기 위해 사용할 수 있는 예제 스크립트가 있습니다.
gMSA 설치 및 테스트
이제 gMSA가 생성되었으므로 마지막 단계는 모든 도메인 컨트롤러에 설치하고 테스트하는 것입니다. 이를 위해 Invoke-Command
PowerShell 명령을 사용하는 방법이 있습니다. 아래에는 gMSA를 모든 DC에 설치하고 제대로 작동하는지 확인하는 PowerShell 스크립트가 있습니다.
gMSA에 일괄 작업으로 실행 권한 부여
gMSA가 설치되면 일괄 작업으로 실행할 권한을 DC에 부여해야 합니다. 계정은 예약된 작업으로 백그라운드에서 자율적으로 실행되므로 이 권한이 필요합니다.
기존 GPO를 통해이 권한을 설정하거나 새 GPO를 생성하고 도메인 컨트롤러 OU에 연결하여이 권한을 설정할 수 있습니다. 사용할 GPO가 없는 경우 아래에는 GPO를 생성하는 데 사용할 수 있는 몇 가지 단계가 나와 있습니다.
- DC에서 그룹 정책 편집기를 실행합니다.
- 도메인 컨트롤러 OU에서 마우스 오른쪽 단추를 클릭하고 이 도메인에서 GPO 만들고 이곳에 연결을 선택합니다.
- DC – Logon as batch 또는 기타 원하는 이름으로 이름을 지정합니다.
- GPO를 마우스 오른쪽 단추로 클릭하고 편집을 클릭합니다.
- 컴퓨터 구성 -> Windows 설정 -> 보안 설정 -> 사용자 권한 할당로 이동합니다.
- 일괄 작업으로 로그인을 왼쪽 클릭하고 속성을 클릭하십시오.
- 사용자 또는 그룹 추가를 클릭하십시오.
- 개체 유형을 클릭하고 서비스 계정만 선택한 후 확인을 클릭하십시오.
- 이전에 만든 svcADHealthCheck 서비스 계정을 검색하고 선택한 후 확인을 클릭하십시오.
이제 아래와 같이 AD 개체 목록에 gMSA가 표시됩니다.

스케줄된 작업 생성
이제 스케줄된 작업을 실행할 계정이 생성되었으므로 원하는 도메인에 가입된 서버에서 스케줄된 작업을 생성할 수 있습니다.
GUI를 통해 스케줄된 작업을 생성할 수도 있지만, 너무 많이 클릭해야합니다! 대신 PowerShell로 생성하는 것을 추천합니다. 왜냐하면 아래에 보이는 코드를 그대로 복사하여 사용할 수 있기 때문입니다.
아래에는 두 개의 스크립트가 있습니다. 두 스크립트는 유사하지만 하나는 AD 사용자 계정을 가정하고 다른 하나는 gMSA를 가정합니다. 사용하는 계정에 맞는 스크립트를 사용하십시오.
작업이 완료되었습니다! 이제 예약된 작업은 위의 스크립트 중 하나에서 제공한 간격으로 실행됩니다.
요약
휴! 만약 Part I부터 끝까지 따라오셨다면 AD 헬스에 대해 깊게 알게 되었을 것입니다. 이 주제에는 많은 내용이 있어서 두 개의 긴 블로그 포스트로도 다 다룰 수 없습니다.
하지만 이제 충분한 지식과 미리 구축된 PowerShell 프레임워크를 갖고 있으므로 발생하는 다른 Active Directory 헬스 체크를 추가할 수 있을 것입니다.
추가로 읽어볼 만한 자료
Source:
https://adamtheautomator.com/active-directory-health-check-2/