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)
Microsoft.Management.Infrastructure 네임스페이스를 사용하여 관련 클래스 이름 및 네임스페이스로 새 CimInstance 개체를 만듭니다.
using Microsoft.Management.Infrastructure; ... string Namespace = @"root\cimv2"; string className = "Win32_LogicalDisk"; CimInstance myDrive = new CimInstance(className, Namespace);
검색하려는 인스턴스의 키 속성 이름과 값이 포함된 CimProperty를 만들고 해당 속성을 클래스 개체에 추가합니다.
myDrive.CimInstanceProperties.Add(CimProperty.Create("DeviceID", "C:", CimFlags.Key));
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)
ManagementPath 매개 변수를 통해 전달된 이름 및 특정 인스턴스 값을 사용하여 새 ManagementObject를 만들어 특정 인스턴스의 로컬 복사본을 검색합니다. 그런 다음 ManagementObject.Get을 명시적으로 호출하여 인스턴스 데이터를 검색할 수 있습니다.
using System.Management; ... ManagementObject objInst = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'"); objInst.Get();
또는 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 클래스의 인스턴스를 검색하려면 다음을 따릅니다.
IWbemServices::GetObject 또는 IWbemServices::GetObjectAsync를 호출하여 인스턴스의 로컬 복사본을 검색합니다. 개체에 대한 WMI 경로를 포함해야 합니다.
이름에서 알 수 있듯이 GetObjectAsync는 인스턴스를 비동기적으로 검색하지만 GetObject는 인스턴스를 동기적으로 검색합니다. 비동기 검색을 사용하려면 IWbemObjectSink 인터페이스를 구현해야 합니다.