다음을 통해 공유


WMI 클래스 검색

검색할 수 있는 개체의 첫 번째 형식은 WMI 클래스입니다. WMI 클래스를 검색할 때 클래스를 완전히 설명하는 속성, 한정자 및 메서드의 목록인 클래스 정의를 실제로 검색합니다. 그러나 클래스 정의는 기본적으로 클래스 자체입니다.

PowerShell은 표준 쿼리를 사용하여 meta_class 클래스를 사용하여 클래스 정의를 검색합니다.

PowerShell 클래스 정의를 검색하려면

  • 검색할 클래스의 이름이 포함된 WHERE 절과 함께 meta_class쿼리와 함께 Get-WmiObject 사용합니다.

    Get-WmiObject -query "SELECT * FROM meta_class WHERE __class = 'Win32_LogicalDisk'"
    

    Get-WmiObject PowerShell이 WMI에서 클래스 및 인스턴스 정보를 검색하는 데 사용하는 표준 cmdlet입니다. meta_class 클래스는 쿼리를 스키마 쿼리로 정의합니다. meta_class 클래스가 없으면 이 쿼리는 모든 Win32_LogicalDisk 인스턴스를 반환합니다. WMI 쿼리에 대한 자세한 내용은 스키마 쿼리 SELECT 문을 참조하세요.

C#에서 WMI 정의를 검색하는 현재 프로세스는 CIMInstance 클래스를 사용하는 것입니다.

C#(Microsoft.Management.Infrastructure) 클래스 정의를 검색하려면

  1. Microsoft.Management.Infrastructure 네임스페이스를 사용하여 지정된 네임스페이스 및 클래스 이름을 사용하여 CIMInstance 클래스를 만듭니다.

    만든 클래스에는 모든 클래스 정보가 포함되지만 인스턴스 데이터는 포함되지 않습니다.

    using Microsoft.Management.Infrastructure;
    ...
    string Namespace = @"root\cimv2";
    string className = "Win32_LogicalDisk";
    
    CimInstance diskDrive = new CimInstance(className, Namespace);
    
  2. 또는 PowerShell과 마찬가지로 쿼리의 일부로 meta_class 태그를 사용하여 쿼리를 수행할 수도 있습니다.

    using Microsoft.Management.Infrastructure;
    ...
    string Namespace = @"root\cimv2";
    string diskDriveQuery = "SELECT * FROM meta_class WHERE __class = 'Win32_LogicalDisk'";
    
    CimSession mySession = CimSession.Create("localhost");
    IEnumerable<CimInstance> queryInstance = mySession.QueryInstances(Namespace, "WQL", diskDriveQuery);
    

PowerShell과 마찬가지로 C#은 meta_class 쿼리를 사용하여 클래스 정의를 검색합니다. 또는 ManagementClass 개체를 만들어 클래스 정의에 직접 액세스할 수 있습니다.

메모

System.Management는 WMI에 액세스하는 데 사용된 원래의 .NET 네임스페이스입니다. 그러나 이 네임스페이스에 있는 API는 일반적으로 느리고, 보다 현대적인 Microsoft.Management.Infrastructure 대안에 비해 확장성이 좋지 않습니다.

 

C#에서 클래스 정의를 가져오려면 (System.Management)

  1. 검색할 클래스의 이름이 포함된 WHERE 절을 사용하여 meta_class쿼리와 함께 ManagementObjectSerarcher 사용할 수 있습니다.

    using System.Management;
    ...
    ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM meta_class WHERE __class = 'Win32_LogicalDisk'");
    ManagementObjectCollection myDiskCollection = searcher.Get();
    

    ManagementObjectSerarcher .NET이 WMI에서 클래스 및 인스턴스 정보를 검색하는 데 사용하는 표준 클래스입니다. ManagementObjectSerarcher.Get 스키마 정의 클래스가 포함된 ManagementObjectCollection 반환합니다. meta_class 클래스는 쿼리를 스키마 쿼리로 정의합니다. meta_class 클래스가 없으면 이 쿼리는 모든 Win32_LogicalDisk인스턴스를 반환합니다. WMI 쿼리에 대한 자세한 내용은 스키마 쿼리 SELECT 문을 참조하세요.

  2. 또는 이름이 경로인 새 ManagementClass 개체를 만들어 클래스를 검색합니다.

    using System.Management;
    ...
    ManagementClass objInst = new ManagementClass("Win32_LogicalDisk");
    

특정 인스턴스를 검색하는 것과 비슷한 방식으로 VBScript에서 클래스 정의를 검색할 수 있습니다.

VBScript 클래스 정의를 가져오려면

  1. SWbemServices.Get 호출하지만 클래스의 개체 경로에서 특정 인스턴스를 식별하지는 않습니다.

  2. 다음 코드 예제에서는 컴퓨터의 논리 드라이브를 설명하는 클래스에 대한 클래스 정의를 검색합니다.

    Set objinst = GetObject("WinMgmts:Win32_LogicalDisk")
    

    WSH(Windows 스크립트 호스트)도 다음을 지원합니다.

    <OBJECT id="myLocator" progid="WbemScripting.SWbemLocator"></OBJECT>
    

    ASP(Active Server Pages)에서 서버 쪽 스크립트에서 GetObject 또는 CreateObject를 사용하십시오. 자세한 내용은 WMI 대한 활성 서버 페이지 만들기참조하세요.

  3. 클래스 또는 인스턴스를 지정할 수도 있습니다. 이 경우 반환된 개체는 서비스 개체가 아닌 Win32_LogicalDisk인스턴스와 같은 WMI 개체입니다. VBScript GetObject 함수를 사용하여 SWbemObject제네릭 개체의 인스턴스를 만들 수 없습니다.

  4. Microsoft IE(Internet Explorer)에서 실행되는 HTML 페이지에서는 ActiveX 컨트롤과 같은 WMI 스크립팅 개체가 스크립팅에 안전한 것으로 표시되지 않으므로 GetObjectCreateObject실패할 수 있습니다. 한 가지 예외는 SWbemDateTime 개체입니다. 이러한 호출이 성공할 수 있는 유일한 방법은 권장되지 않는 IE 보안 설정을 낮출 때입니다.

C++에서 클래스를 검색할 때 IWbemServices 버전의 GetObject호출합니다.

C++ 클래스 정의를 검색하려면

  1. IWbemServices::GetObject 또는 IWbemServices::GetObjectAsync 메서드를 호출하여 클래스의 정의를 검색합니다.
  2. 한 클래스에는 여러 클래스 정의가 있을 수 있으며, 일반적으로 둘 이상의 클래스 공급자가 하나의 네임스페이스에 로드된 경우 발생합니다. 클래스에 여러 클래스 정의가 있는 경우 WMI는 검색된 첫 번째 정의와 WBEM_S_DUPLICATE_OBJECTS 상태 코드를 반환합니다.

GetObject 클래스 정의를 반환하므로 일반적으로 인스턴스를 만드는 첫 번째 단계로 사용됩니다. GetObject사용하는 방법에 대한 자세한 내용은 C++사용하여 인스턴스 만들기 및 선언을 참조하세요.