HOWTO · PowerShell
Get-ADComputer -PowerShell의 필터
이 문서에서는 PowerShell의 운영 체제용 Get-ADComputer -Filter에 대해 설명합니다.
이 페이지의 내용
Get-ADComputer -Filter를 사용하여 특성을 기준으로 Active Directory 컴퓨터 계정을 찾을 수 있습니다. -Filter 매개 변수는 Name -like '*elitebook*'와 같은 PowerShell 스타일 식을 받으며, 이 식은 도메인 컨트롤러에서 서버 측으로 평가되고 cmdlet은 일치하는 계정마다 컴퓨터 개체 하나를 반환합니다. 아래 Active Directory 명령에는 원격 서버 관리 도구(RSAT)와 함께 설치되거나 도메인 컨트롤러에 이미 포함된 ActiveDirectory 모듈과 연결 가능한 도메인이 필요합니다. 이 명령들은 해당 환경 안에서만 실행되므로 상황에 맞게 조정할 수 있는 인라인 구문으로 작성되었습니다. 펜스로 묶인 프로그램은 이러한 비교와 동일한 동작을 수행하는 독립 실행형 예제이며, 각각의 실제 출력이 바로 아래에 표시됩니다.
Get-ADComputer로 컴퓨터 계정 가져오기
Get-ADComputer는 Active Directory에서 하나 이상의 컴퓨터 계정을 가져오며 ActiveDirectory 모듈의 일부로 제공됩니다. 모듈이 설치된 컴퓨터에서 Get-Help Get-ADComputer를 실행하면 cmdlet의 매개 변수와 각 매개 변수가 허용하는 값을 확인할 수 있습니다.
알고 있는 계정을 -Identity에 전달하면 바로 그 컴퓨터를 가져옵니다: Get-ADComputer -Identity PC-01. 이 매개 변수는 고유 이름(distinguished name), GUID, 보안 식별자(SID) 또는 sAMAccountName을 허용하므로 보유한 데이터가 제공하는 형식 그대로 계정을 지정할 수 있습니다.
결과는 Name, DNSHostName, Enabled, SID처럼 제한된 기본 속성 집합을 담은 컴퓨터 개체입니다. OperatingSystem 같은 특성은 요청하지 않으면 로드되지 않으며, Get-ADComputer -Identity PC-01 -Properties *를 실행하면 계정에 저장된 모든 특성을 가져옵니다.
이름으로 컴퓨터 필터링
컴퓨터 이름의 일부만 알고 있을 때 -Filter를 사용하면 일치하는 모든 계정을 찾을 수 있습니다. 필터 문자열 안에서 -like는 와일드카드 일치를 수행하며, *는 임의 길이의 문자열을 나타내고 비교 시 대소문자를 구분하지 않습니다.
다음 예제를 실행해 보세요:
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
import fnmatch
print(fnmatch.fnmatchcase('ELITEBOOK-840-G8'.lower(), '*elitebook*'))
True
-Filter 안의 동일한 패턴은 디렉터리에 있는 모든 컴퓨터 계정의 Name 특성에 적용되므로 Get-ADComputer -Filter "Name -like '*elitebook*'"는 일치하는 모든 컴퓨터를 반환합니다. 일치 작업은 결과가 네트워크를 지나기 전에 도메인 컨트롤러에서 실행되므로 모든 계정을 가져온 뒤 Where-Object로 로컬에서 검사하는 것보다 훨씬 빠릅니다. 각 결과는 컴퓨터 개체로 전달되므로 Format-Table, Select-Object 또는 다른 cmdlet으로 파이프하여 추가로 처리할 수 있습니다.
운영 체제와 여러 조건으로 컴퓨터 필터링
관리자는 업그레이드를 계획하거나 정책을 적용하기 위해 특정 운영 체제를 실행하는 컴퓨터 목록이 필요한 경우가 많습니다. OperatingSystem 특성은 Windows 10 Enterprise와 같은 문자열을 저장하므로 Get-ADComputer -Filter "OperatingSystem -like '*Windows 10*'"는 버전 이름을 포함하는 모든 에디션과 일치합니다.
-eq는 특성 값 전체를 비교하므로 정확한 문자열에 적합하고, -or와 -and는 여러 조건을 하나의 필터로 결합합니다. 실행 가능한 형태의 동일한 비교는 다음과 같습니다:
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
os_name = 'Windows 11 Pro'
print(os_name == 'Windows 10' or os_name == 'Windows 11 Pro')
True
디렉터리에 적용하면 Get-ADComputer -Filter "OperatingSystem -eq 'Windows 10' -or OperatingSystem -eq 'Windows 11'"는 기록된 값이 두 문자열 중 하나와 정확히 일치하는 컴퓨터를 반환하며, -or를 -and로 바꾸면 결과 범위가 넓어지는 대신 좁아집니다. 기록된 값에는 보통 Pro 같은 에디션 접미사가 포함되므로 OperatingSystem -like 'Windows 10*'처럼 끝에 와일드카드를 붙이는 편이 버전 이름만 지정한 -eq보다 더 많은 컴퓨터와 일치하는 경우가 많습니다.
속성 선택 및 결과 내보내기
필터링은 도메인 컨트롤러에서 실행되므로 -Filter 안에 사용된 특성이 반환되는 속성에 포함될 필요는 없습니다. 그러나 OperatingSystem를 표시하거나 저장하려면 -Properties로 요청한 뒤 Select-Object로 출력을 다듬어야 합니다: Get-ADComputer -Filter "OperatingSystem -like 'Windows 10*'" -Properties OperatingSystem | Select-Object Name, OperatingSystem.
선택한 개체를 Export-Csv로 파이프하면 파일에 저장할 수 있습니다. -NoTypeInformation은 .NET 형식 헤더를 생략하여 CSV에 열 머리글 행과 데이터만 남기고, -Path는 쓰기 가능한 모든 위치를 받습니다: Get-ADComputer -Filter * -Properties OperatingSystem | Select-Object Name, OperatingSystem | Export-Csv -Path .\computers.csv -NoTypeInformation.
이렇게 만들어진 CSV는 스프레드시트에서 열거나 보고 및 후속 관리 작업을 위해 다른 PowerShell 명령에 전달할 수 있습니다.