Načtení instance WMI
Načtení instance je jedním z nejběžnějších postupů načítání, které pravděpodobně budete provádět ve službě WMI. Můžete načíst existující instanci nebo vytvořit novou nepojmenovanou instanci. Cesta rozhraní WMI k existující instanci je povinný parametr. Další informace naleznete v tématu Popis umístění objektu WMI.
Poznámka
Při poskytování instance nemusí poskytovatel zadat hodnotu pro určité vlastnosti. Pokud není v popisu vlastnosti uvedeno jinak, nelze odvodit žádný význam z prázdné hodnoty. To není zaměňovat s řetězcem, který má hodnotu null. V tomto případě se hodnota naplní. Je prázdný, ale má hodnotu: null.
Načtěte místní kopii instance pomocí volání rutiny PowerShellu Get-WmiObject.
K načtení instance třídy WMI pomocí PowerShellu
Konkrétní instance můžete načíst pomocí parametrů -class a -filter.
Get-WmiObject -query "SELECT * FROM Win32_logicalDisk WHERE DeviceID = 'C:'"
Instanci rozhraní WMI můžete načíst pomocí jazyka C# vytvořením objektu vyhledávání pomocí cimInstancea jeho vyplněním příslušnými klíčovými hodnotami a následným vyhledáním tohoto objektu pomocí CimSession.GetInstance volání.
Načtení instance třídy služby WMI pomocí jazyka C# (Microsoft.Management.Infrastructure)
Pomocí oboru názvů Microsoft.Management.Infrastructure vytvořte nový objekt CimInstance s příslušným názvem třídy a oborem názvů.
using Microsoft.Management.Infrastructure; ... string Namespace = @"root\cimv2"; string className = "Win32_LogicalDisk"; CimInstance myDrive = new CimInstance(className, Namespace);
Vytvořte CimProperty obsahující název a hodnotu klíčové vlastnosti instance, kterou chcete vyhledat, a přidejte tuto vlastnost do objektu třídy.
myDrive.CimInstanceProperties.Add(CimProperty.Create("DeviceID", "C:", CimFlags.Key));
Načtěte objekt z rozhraní WMI pomocí volání CimSession.GetInstance.
CimSession mySession = CimSession.Create("localhost"); CimInstance searchInstance = mySession.GetInstance(Namespace, myDrive);
Pomocí tříd v oboru názvů System.Management můžete načíst buď konkrétní instanci třídy WMI, nebo kolekci instancí třídy WMI.
Poznámka
System.Management byl původní obor názvů .NET používaný pro přístup k rozhraní WMI; v tomto oboru názvů jsou však rozhraní API obecně pomalejší a neškálují se tak dobře ve srovnání se svými modernějšími protějšky Microsoft.Management.Infrastructure.
Načtení instance třídy služby WMI pomocí jazyka C# (System.Management)
Načtěte místní kopii konkrétní instance vytvořením nového ManagementObjects názvem a konkrétní hodnotou instance předanou parametrem ManagementPath. Data instance pak můžete načíst explicitním voláním ManagementObject.Get.
using System.Management; ... ManagementObject objInst = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'"); objInst.Get();
Alternativně můžete načíst všechny instance třídy WMI vyhledáním pomocí ManagementObjectSearchera pak výčtem vrácené ManagementObjectCollection.
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();
Metodu Get můžete implicitně volat přístupem k instanci. Další informace naleznete v části Načtení části instance rozhraní WMI.
Načtěte místní kopii instance použitím metody VBScript GetObject.
Načtení instance třídy WMI pomocí jazyka VBScript
Volání GetObject s cestou objektu instance, jak je znázorněno v následujícím příkladu.
Set objinst = GetObject("WinMgmts:Win32_LogicalDisk='C:'")
Načtení konkrétní instance vyžaduje zadání názvu v rámci cesty k objektu.
V jazyce C++ volejte IWbemServices::GetObject.
Načíst instanci třídy WMI pomocí jazyka C++
Načtěte místní kopii instance pomocí volání IWbemServices::GetObject nebo IWbemServices::GetObjectAsync. Musí být zahrnuta cesta rozhraní WMI k objektu.
Jak název napovídá, GetObjectAsync načte instanci asynchronně, zatímco GetObject načte instanci synchronně. Pokud chcete použít asynchronní načítání, musíte implementovat IWbemObjectSink rozhraní.