Share via


WMI 인스턴스 검색

인스턴스 검색은 WMI에서 수행할 가능성이 높은 가장 일반적인 검색 절차 중 하나입니다. 기존 인스턴스를 검색하거나 명명되지 않은 새 인스턴스를 만들 수 있습니다. 기존 인스턴스에 대한 WMI 경로는 필수 매개 변수입니다. 자세한 내용은 WMI 개체의 위치 설명을 참조하세요.

참고

인스턴스를 제공할 때 공급자가 특정 속성에 대한 값을 제공하지 못할 수 있습니다. 속성 설명에 달리 명시되지 않는 한, 빈 값에서 의미를 유추할 수 없습니다. NULL 값이 있는 문자열과 혼동해서는 안 됩니다. 이 경우 값이 채워집니다. 비어 있지만 NULL 값이 있습니다.

 

PowerShell Get-WmiObject cmdlet을 호출하여 인스턴스의 로컬 복사본을 검색합니다.

PowerShell을 사용하여 WMI 클래스의 인스턴스를 검색하려면 다음을 따릅니다.

  • -class-filter 매개 변수를 사용하여 특정 인스턴스를 검색할 수 있습니다.

    Get-WmiObject -query "SELECT * FROM Win32_logicalDisk WHERE DeviceID = 'C:'"
    

CimInstance를 사용하여 검색 개체를 만든 다음, 관련 키 값으로 채우고 CimSession.GetInstance 호출을 통해 해당 개체를 검색하는 방식으로 C#을 사용하여 WMI 인스턴스를 검색할 수 있습니다.

C#을 사용하여 WMI 클래스의 인스턴스를 검색하려면(Microsoft.Management.Infrastructure)

  1. Microsoft.Management.Infrastructure 네임스페이스를 사용하여 관련 클래스 이름 및 네임스페이스로 새 CimInstance 개체를 만듭니다.

    using Microsoft.Management.Infrastructure;
    ...
    string Namespace = @"root\cimv2";
    string className = "Win32_LogicalDisk";
    
    CimInstance myDrive = new CimInstance(className, Namespace);
    
  2. 검색하려는 인스턴스의 키 속성 이름과 값이 포함된 CimProperty를 만들고 해당 속성을 클래스 개체에 추가합니다.

    myDrive.CimInstanceProperties.Add(CimProperty.Create("DeviceID", "C:", CimFlags.Key));
    
  3. CimSession.GetInstance 호출을 사용하여 WMI에서 개체를 검색합니다.

    CimSession mySession = CimSession.Create("localhost");
    CimInstance searchInstance = mySession.GetInstance(Namespace, myDrive);
    

System.Management 네임스페이스의 클래스를 사용하여 특정 WMI 클래스 인스턴스 또는 WMI 클래스 인스턴스의 컬렉션을 검색할 수 있습니다.

참고

System.Management는 WMI에 액세스하는 데 사용되는 원래 .NET 네임스페이스였습니다. 그러나 이 네임스페이스의 API는 일반적으로 최신 네임스페이스인 Microsoft.Management.Infrastructure에 비해 더 느리고 스케일링 성능이 떨어집니다.

 

C#을 사용하여 WMI 클래스의 인스턴스를 검색하려면 다음을 따릅니다.(System.Management)

  1. ManagementPath 매개 변수를 통해 전달된 이름 및 특정 인스턴스 값을 사용하여 새 ManagementObject를 만들어 특정 인스턴스의 로컬 복사본을 검색합니다. 그런 다음 ManagementObject.Get을 명시적으로 호출하여 인스턴스 데이터를 검색할 수 있습니다.

    using System.Management;
    ...
    ManagementObject objInst = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'");
    objInst.Get();
    
  2. 또는 ManagementObjectSearcher를 사용하여 검색한 다음, 반환된 ManagementObjectCollection을 통해 열거하는 방식으로 WMI 클래스의 모든 인스턴스를 검색할 수 있습니다.

    using System.Management;
    ...
    ManagementObjectSearcher mgmtObjSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk");
    ManagementObjectCollection colDisks = mgmtObjSearcher.Get();
    
    foreach (ManagementObject objDisk in colDisks)
    {
       Console.WriteLine("Device ID : {0}", objDisk["DeviceID"]);
    }
    
    Console.ReadLine();
    

    인스턴스에 액세스하여 Get 메서드를 암시적으로 호출할 수 있습니다. 자세한 내용은 WMI 인스턴스의 일부 검색을 참조하세요.

VBScript GetObject 메서드를 호출하여 인스턴스의 로컬 복사본을 검색합니다.

VBScript를 사용하여 WMI 클래스의 인스턴스를 검색하려면 다음을 따릅니다.

  • 다음 예제에 표시된 것처럼 인스턴스의 개체 경로를 사용하여 GetObject를 호출합니다.

    Set objinst = GetObject("WinMgmts:Win32_LogicalDisk='C:'")
    

    특정 인스턴스를 검색하려면 개체 경로의 일부로 이름을 지정해야 합니다.

C++에서 IWbemServices::GetObject를 호출합니다.

C++를 사용하여 WMI 클래스의 인스턴스를 검색하려면 다음을 따릅니다.