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)
Microsoft.Management.Infrastructure 네임스페이스를 사용하여 지정된 네임스페이스 및 클래스 이름을 사용하여 CIMInstance 클래스를 만듭니다.
만든 클래스에는 모든 클래스 정보가 포함되지만 인스턴스 데이터는 포함되지 않습니다.
using Microsoft.Management.Infrastructure; ... string Namespace = @"root\cimv2"; string className = "Win32_LogicalDisk"; CimInstance diskDrive = new CimInstance(className, Namespace);
또는 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)
검색할 클래스의 이름이 포함된 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 문을 참조하세요.
또는 이름을 경로로 사용하여 새 ManagementClass 개체를 만들어 클래스를 검색합니다.
using System.Management; ... ManagementClass objInst = new ManagementClass("Win32_LogicalDisk");
특정 인스턴스를 검색하는 것과 비슷한 방식으로 VBScript에서 클래스 정의를 검색할 수 있습니다.
VBScript에서 클래스 정의를 검색하려면
SWbemServices.Get을 호출하지만 클래스의 개체 경로에서 특정 인스턴스를 식별하지 않습니다.
다음 코드 예제에서는 컴퓨터의 논리 드라이브를 설명하는 클래스에 대한 클래스 정의를 검색합니다.
Set objinst = GetObject("WinMgmts:Win32_LogicalDisk")
WSH(Windows 스크립트 호스트)도 다음을 지원합니다.
<OBJECT id="myLocator" progid="WbemScripting.SWbemLocator"></OBJECT>
ASP(Active Server Pages)에서는 서버 쪽 스크립트에서 GetObject 또는 CreateObject를 사용합니다. 자세한 내용은 WMI에 대한 Active Server Pages 만들기를 참조하세요.
클래스 또는 인스턴스를 지정할 수도 있습니다. 이 경우 반환된 개체는 서비스 개체가 아닌 Win32_LogicalDisk 인스턴스와 같은 WMI 개체입니다. VBScript GetObject 함수를 사용하여 제네릭 개체 SWbemObject의 인스턴스를 만들 수 없습니다.
Microsoft IE(Internet Explorer)에서 실행되는 HTML 페이지에서는 ActiveX 컨트롤과 같은 WMI 스크립팅 개체가 스크립팅에 안전한 것으로 표시되지 않으므로 GetObject 및 CreateObject가 실패할 수 있습니다. 한 가지 예외는 SWbemDateTime 개체입니다 . 이러한 호출이 성공할 수 있는 유일한 방법은 권장되지 않는 IE 보안 설정을 낮추는 것입니다.
C++에서 클래스를 검색할 때 GetObject의 IWbemServices 버전을 호출합니다.
C++에서 클래스 정의를 검색하려면
- IWbemServices::GetObject 또는 IWbemServices::GetObjectAsync 메서드를 호출하여 클래스의 정의를 검색합니다.
- 한 클래스에는 여러 클래스 정의가 있을 수 있으며, 일반적으로 둘 이상의 클래스 공급자가 하나의 네임스페이스에 로드된 경우에 발생합니다. 클래스에 여러 클래스 정의가 있는 경우 WMI는 검색된 첫 번째 정의와 WBEM_S_DUPLICATE_OBJECTS 상태 코드를 반환합니다.
GetObject는 클래스 정의를 반환하므로 일반적으로 인스턴스를 만드는 첫 번째 단계로 사용됩니다. GetObject를 사용하는 방법에 대한 자세한 내용은 C++를 사용하여 인스턴스 만들기 및 선언을 참조하세요.