Active Directory(AD)의 컴퓨터 개체에는 설명(Description) 필드에 다양한 유용한 정보를 저장할 수 있습니다. 예를 들어 컴퓨터 제조사와 모델명, 하드웨어 인벤터리 정보, 마지막 로그온 사용자 계정 등을 기록해 두면 자산 관리와 문제 해결에 큰 도움이 됩니다. 이 글에서는 PowerShell을 활용해 AD 컴퓨터 개체의 설명 필드를 자동으로 입력하고 최신 상태로 유지하는 방법을 단계별로 살펴보겠습니다.
PowerShell로 Active Directory 컴퓨터 설명 필드 업데이트하기
예를 들어 'Active Directory 사용자 및 컴퓨터(ADUC)' 콘솔에서 컴퓨터와 서버의 설명 필드에 제조사(Vendor), 모델(Model), 일련번호(Serial Number) 정보가 표시되도록 하고 싶다고 가정해 보겠습니다. 로컬 컴퓨터에서는 다음 PowerShell 명령으로 WMI를 통해 이 정보를 가져올 수 있습니다.
Get-WMIObject Win32_ComputerSystemProduct | Select Vendor, Name, IdentifyingNumber
WMI 쿼리는 아래와 같은 데이터를 반환합니다.
- Vendor – HP
- Name – Proliant DL 360 G5
- IdentifyingNumber – CZJ733xxxx
먼저 환경 변수에서 현재 컴퓨터 이름을 가져와 $computer 변수에 할당합니다.
$computer = $env:COMPUTERNAME
그다음 컴퓨터의 하드웨어 정보를 변수에 저장합니다.
$computerinfo = Get-WMIObject Win32_ComputerSystemProduct
$Vendor = $computerinfo.vendor
$Model = $computerinfo.Name
$SerialNumber = $computerinfo.identifyingNumber
각 변수에 어떤 값이 할당되었는지 확인해 보겠습니다.
$computer
$vendor
$Model
$SerialNumber
이제 남은 작업은 수집한 데이터를 AD의 컴퓨터 계정 설명 필드에 기록하는 것입니다. 다음 PowerShell 스크립트를 실행합니다.
$ComputerSearcher = New-Object DirectoryServices.DirectorySearcher
$ComputerSearcher.SearchRoot = "LDAP://$("DC=$(($ENV:USERDNSDOMAIN).Replace(".",",DC="))")"
$ComputerSearcher.Filter = "(&(objectCategory=Computer)(CN=$Computer))"
$computerObj = [ADSI]$ComputerSearcher.FindOne().Path
$computerObj.Put( "Description", "$vendor|$Model|$SerialNumber" )
$computerObj.SetInfo()
Set-ADComputer cmdlet 사용하기
AD PowerShell 모듈의 Set-ADComputer cmdlet을 사용해서도 컴퓨터 설명을 변경할 수 있습니다. 단, 이 방법은 RSAT(Remote Server Administration Tools)에 포함된 Active Directory 모듈이 해당 컴퓨터에 설치되어 있어야 합니다.
Set-ADComputer $computer -Description "$vendor|$Model|$SerialNumber"
RSAT 전체를 설치하지 않고 AD 모듈 cmdlet을 사용하고 싶다면, 모듈 파일만 대상 컴퓨터에 복사하는 방법도 가능합니다.
스크립트 실행 후 ADUC 콘솔에서 컴퓨터의 설명 필드에 제조사와 모델 정보가 정상적으로 표시되는지 확인합니다.
위 스크립트는 현재 컴퓨터의 설명 속성만 갱신합니다. Get-ADComputer와 foreach 루프를 조합하면 도메인 내 모든 컴퓨터의 설명을 원격으로 채울 수도 있습니다. 하지만 훨씬 더 효율적인 방법은 사용자 로그온 시점이나 컴퓨터 부팅 시점에 각 컴퓨터가 스스로 자신의 정보를 AD에 업데이트하도록 구성하는 것입니다.
그룹 정책(GPO)과 로그온 스크립트로 자동화하기
이를 위해서는 PowerShell 로그온 스크립트가 포함된 그룹 정책을 만들어 모든 컴퓨터에 적용하면 됩니다.
- 도메인 그룹 정책 관리 콘솔(
gpmc.msc)을 열고 새 GPO를 생성한 뒤, 컴퓨터가 있는 OU에 연결합니다. - GPO를 다음 경로까지 확장합니다: 사용자 구성(User Configuration) → 정책(Policies) → Windows 설정 → 스크립트(로그온/로그오프) → 로그온(Logon)
- PowerShell 스크립트 탭으로 이동합니다.
- 파일 표시(Show Files) 버튼을 클릭하고 다음 코드로 FillCompDesc.ps1 파일을 생성합니다.
# 컴퓨터 하드웨어/모델 정보를 AD의 Description 필드에 기록
$computer = $env:COMPUTERNAME
$computerinfo = Get-WMIObject Win32_ComputerSystemProduct
$Vendor = $computerinfo.vendor
$Model = $computerinfo.Name
$SerialNumber = $computerinfo.identifyingNumber
$DNSDOMAIN = (Get-WmiObject -Namespace root\cimv2 -Class Win32_ComputerSystem).Domain
$ComputerSearcher = New-Object DirectoryServices.DirectorySearcher
$ComputerSearcher.SearchRoot = "LDAP://$("DC=$(($DNSDOMAIN).Replace(".",",DC="))")"
$ComputerSearcher.Filter = "(&(objectCategory=Computer)(CN=$Computer))"
$computerObj = [ADSI]$ComputerSearcher.FindOne().Path
$computerObj.Put( "Description", "$vendor|$Model|$SerialNumber" )
$computerObj.SetInfo()
문제 해결을 위해 PowerShell 스크립트의 동작을 별도 로그 파일로 남기는 것도 좋은 방법입니다. - 추가(Add) 버튼을 클릭하고 스크립트 매개변수를 설정합니다.
스크립트 이름:FillCompDesc.ps1
스크립트 매개변수:-ExecutionPolicy Bypass
이렇게 하면 PowerShell 실행 정책을 변경하거나 PS1 스크립트 파일에 서명하지 않아도 스크립트를 실행할 수 있습니다. - 대상 OU에 대해 Authenticated Users 도메인 그룹에 AD 권한을 위임합니다. 해당 OU 내 모든 컴퓨터 개체의 Description 특성을 변경할 수 있는 권한(
Write Description)을 부여하세요. 이를 통해 도메인 사용자와 컴퓨터가 컴퓨터 개체의 Description 값을 변경할 수 있게 됩니다. - 대상 OU의 컴퓨터를 재부팅하고 그룹 정책 설정이 갱신되면, AD의 설명 필드가 자동으로 채워집니다. 이 필드에는 컴퓨터 하드웨어 정보가 담기게 됩니다. GPO 적용에 문제가 있다면
gpresult도구나 그룹 정책 미적용 원인 관련 자료를 참고해 진단할 수 있습니다.
이런 방식으로 AD 컴퓨터 개체의 설명 필드에는 어떤 정보든 추가할 수 있습니다. 예를 들어 마지막 로그온 사용자 이름, 부서 정보(Get-ADUser cmdlet으로 조회 가능), 컴퓨터의 IP 주소 등 필요한 정보를 자유롭게 기록할 수 있습니다.
참고: 이 방식의 단점은 인증된 모든 AD 사용자가 도메인 내 임의의 컴퓨터 설명을 변경하거나 삭제할 수 있다는 점입니다. 보안 요구 사항이 엄격한 환경이라면 권한 위임 범위를 신중하게 설계해야 합니다.
컴퓨터 설명에 마지막 로그온 사용자 이름 추가하기
앞서 만든 PowerShell 스크립트는 응용 범위가 넓어, 다른 정보를 설명에 추가하는 데에도 그대로 활용할 수 있습니다. 예를 들어 컴퓨터 설명에 현재 로그온한 사용자를 표시하면 특정 사용자가 어느 PC를 사용 중인지 바로 파악할 수 있어 매우 유용합니다. 여기에 사용자가 인증을 수행한 도메인 컨트롤러 이름(LOGONSERVER)도 함께 추가해 보겠습니다.
로그온 스크립트에서 한 줄만 다음과 같이 수정하면 됩니다.
$computerObj.Put("Description","$vendor|$Model|$SerialNumber|$env:username|$env:LOGONSERVER")
로그오프한 뒤 사용자 계정으로 다시 로그인하고, 컴퓨터 설명 특성에 현재 사용자 이름과 인증에 사용된 로그온 서버(도메인 컨트롤러)가 함께 표시되는지 확인합니다.
Description 특성 데이터 파싱하기
Description 특성에 저장된 데이터를 역으로 조회하려면 다음 PowerShell 코드를 사용할 수 있습니다.
$ComputerName = 'PC-MUN22s7b2'
$vendor,$Model,$SerialNumber,$Username,$LogonServer = ((Get-ADComputer -identity $ComputerName -Properties *).description).split("|")
설명 필드의 값은 |(파이프 문자)로 구분되어 있으므로, split으로 나누어 여러 개별 변수에 할당했습니다. 지정한 원격 컴퓨터에서 로그온한 사용자 이름을 얻으려면 다음 변수만 출력하면 됩니다.
$Username
반대로 특정 사용자가 현재 로그온해 있는 컴퓨터 이름을 찾으려면 다음 PowerShell 스크립트를 사용합니다.
$user='*M.Becker*'
Get-ADComputer -Filter "description -like '$user'" -properties * | select name,description | ft
이처럼 PowerShell과 그룹 정책을 조합하면 Active Directory의 컴퓨터 설명 필드를 자동으로 관리할 수 있으며, 자산 관리, 사용자 추적, 헬프데스크 지원 등 다양한 운영 시나리오에서 실질적인 효율을 얻을 수 있습니다.