WMI 작업: 계정 및 도메인

계정 및 도메인 관리 작업은 컴퓨터 도메인 또는 현재 로그온한 사용자 같은 정보를 가져옵니다. 이러한 작업의 대부분은 ADSI 스크립트를 사용하여 수행하는 것이 가장 좋습니다. 자세한 내용과 기타 예제는 TechNet ScriptCenter 스크립트 리포지토리를 참조하세요.

이 항목에 표시된 스크립트 예제는 로컬 컴퓨터에서만 데이터를 가져옵니다. 스크립트를 사용하여 원격 컴퓨터에서 데이터를 가져오는 방법에 대한 자세한 내용은 원격 컴퓨터에서 WMI에 연결을 참조하세요.

다음 절차에서 스크립트를 실행하는 방법을 설명합니다.

스크립트를 실행하려면

  1. 코드를 복사하고 확장명이 .vbs인 파일(예: filename.vbs)에 저장합니다. 텍스트 편집기가 파일에 .txt 확장명을 추가하지 않는지 확인합니다.
  2. 명령 프롬프트 창을 열고 파일을 저장한 디렉터리로 이동합니다.
  3. 명령 프롬프트에 cscript filename.vbs를 입력합니다.
  4. 이벤트 로그에 액세스할 수 없는 경우 관리자 권한 명령 프롬프트에서 실행 중인지 확인합니다. 보안 이벤트 로그와 같은 일부 이벤트 로그는 UAC(사용자 액세스 제어)로 보호될 수 있습니다.

참고

기본적으로 cscript는 명령 프롬프트 창에 스크립트의 출력을 표시합니다. WMI 스크립트는 많은 양의 출력을 생성할 수 있으므로 출력을 파일로 리디렉션할 수 있습니다. 명령 프롬프트에서 cscript filename.vbs > outfile.txt를 입력하여 filename.vbs 스크립트의 출력을 outfile.txt로 리디렉션합니다.

다음 표에는 로컬 컴퓨터에서 다양한 형식의 데이터를 가져오는 데 사용할 수 있는 스크립트 예제가 나와 있습니다.

어떻게 할까요? WMI 클래스 또는 메서드
...컴퓨터가 속한 도메인을 확인하는 방법 Win32_ComputerSystem 클래스를 사용하고 Domain 속성의 값을 확인합니다. Win32_NetworkAdapterConfiguration에서 DNSDomain 속성을 사용할 수도 있습니다.

VB
strComputer = "." Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colSettings = objWMIService.ExecQuery("Select * from Win32_ComputerSystem") 

For Each objComputer in colSettings Wscript.Echo "System Name: " & objComputer.Name Wscript.Echo "Domain: " & objComputer.Domain Next

PowerShell
$computer = Get-WmiObject -Class Win32_ComputerSystem
"System Name: {0}" -f $computer.name
"Domain : {0}" -f $computer.domain

C#
using Microsoft.Management.Infrastructure; ... CimSession session = CimSession.Create("localHost"); IEnumerable<CimInstance> queryInstance = session.QueryInstances(@"root\cimv2", "WQL", "SELECT * FROM Win32_ComputerSystem"); 

foreach (CimInstance cimObj in queryInstance) { Console.WriteLine(cimObj.CimInstanceProperties["Name"].ToString()); Console.WriteLine(cimObj.CimInstanceProperties["Domain"].ToString()); }

...컴퓨터가 서버인지 워크스테이션인지 확인하는 방법

Win32_ComputerSystem 클래스와 DomainRole 속성을 사용합니다.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colComputers = objWMIService.ExecQuery("Select DomainRole from Win32_ComputerSystem")
For Each objComputer in colComputers
    Select Case objComputer.DomainRole 
        Case 0 
            strComputerRole = "Standalone Workstation"
        Case 1        
            strComputerRole = "Member Workstation"
        Case 2
            strComputerRole = "Standalone Server"
        Case 3
            strComputerRole = "Member Server"
        Case 4
            strComputerRole = "Backup Domain Controller"
        Case 5
            strComputerRole = "Primary Domain Controller"
    End Select
    Wscript.Echo strComputerRole
Next

PowerShell
$Computer = Get-WmiObject -Class Win32_ComputerSystem 

"Computer &quot;{0}.{1}" is a: "-f $Computer.Name,$computer.domain

switch ($computer.DomainRole) { 0 {"Standalone Workstation"} 1 {"Member Workstation"} 2 {"Standalone Server"} 3 {"Member Server"} 4 {"Backup Domain Controller"} 5 {"Primary Domain Controller"} }

...컴퓨터 이름을 확인하는 방법

Win32_ComputerSystem 클래스와 Name 속성을 사용합니다. Win32_NetworkAdapterConfiguration에서 DNSHostName 속성을 사용할 수도 있습니다.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For Each objItem in colItems
    Wscript.Echo "Computer Name: " & objItem.Name
Next
PowerShell
$Computer = Get-WmiObject -Class Win32_ComputerSystem
"Computer Name is: {0}" -f $Computer.Name

C#
using Microsoft.Management.Infrastructure; ... CimSession session = CimSession.Create("localHost"); IEnumerable<CimInstance> queryInstance = session.QueryInstances(@"root\cimv2", "WQL", "SELECT * FROM Win32_ComputerSystem"); 

foreach (CimInstance cimObj in queryInstance) { Console.WriteLine(cimObj.CimInstanceProperties["Name"].ToString()); }

...컴퓨터에 현재 로그온한 사용자의 이름을 찾는 방법

Win32_ComputerSystem 클래스와 UserName 속성을 사용합니다.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
Set colComputer = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
 
For Each objComputer in colComputer
    Wscript.Echo "User Name = " & objComputer.UserName & VBNewLine & "Computer Name = " & objComputer.Name
WScript.Echo objComputer.UserName
Next
PowerShell
$computers = Get-WmiObject -Class Win32_ComputerSystem 
"Logged on user(s):"
foreach($computer in $computers) {
   "User: {0}" -f $computer.UserName
}

C#
using Microsoft.Management.Infrastructure; ... CimSession session = CimSession.Create("localHost"); IEnumerable<CimInstance> queryInstance = session.QueryInstances(@"root\cimv2", "WQL", "SELECT * FROM Win32_ComputerSystem"); 

foreach (CimInstance cimObj in queryInstance) { Console.WriteLine("User Name: " + cimObj.CimInstanceProperties["UserName"].ToString()); }

...컴퓨터 이름을 바꾸는 방법

Win32_ComputerSystem 클래스와 Rename 메서드를 사용합니다.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colComputers = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For Each objComputer in colComputers
    errReturn = ObjComputer.Rename("NewName")
    WScript.Echo "Computer name is now " & objComputer.Name
Next

PowerShell
param ( [$String] $NewName = 'NewName', [$string] $Comp = "." } 

<# Get computer object #> $Computer = Get-WmiObject -Class Win32_ComputerSystem -ComputerName $comp

<# Rename the Computer #> $Return = $Computer.Rename($NewName)

if ($return.ReturnValue -eq 0) { "Computer name is now: $NewName" " but you need to reboot first" } else { " RenameFailed, return code: {0}" -f $return.ReturnValue }

...WMI를 사용하여 로컬 그룹만 검색하는 방법

Win32_Group 클래스를 사용하고 다음 WHERE 절을 WQL 쿼리에 포함합니다.

Where LocalAccount = True

VB
strComputer = "."
Set objWMIService = GetObject( _
    "winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
    ("Select * from Win32_Group  Where LocalAccount = True")
For Each objItem in colItems
    Wscript.Echo "Local Account: " & objItem.LocalAccount & VBNewLine _
        & "Name: " & objItem.Name & VBNewLine _
        & "SID: " & objItem.SID & VBNewLine _
        & "SID Type: " & objItem.SIDType & VBNewLine _
        & "Status: " & objItem.Status & VBNewLine
Next
PowerShell
$Accts=Get-WMIObjectWin32_Group|where {$_.LocalAccount}
$accts |ftName, Sid, SidType, Status-autosize

스크립트 및 애플리케이션에 대한 WMI 작업

WMI C++ 애플리케이션 예제

TechNet ScriptCenter