Teljes instancia frissítése
A WMI-osztálypéldányok frissítésének leggyakoribb módja a teljes példány egyidejű frissítése. Egy teljes példány frissítésével a WMI-nek nem kell feldarabolnia a példányt egyes tulajdonságokra, és elküldenie az alkalmazásnak. Ehelyett a WMI egyszerűen elküldi a teljes példányt. Ha végzett, a WMI ezután átmásolhatja a teljes módosított példányt az eredeti példányra.
Az alábbi eljárás azt ismerteti, hogyan módosíthatja vagy frissítheti a példányokat a PowerShell használatával.
Példány módosításához vagy frissítéséhez a PowerShell használatával
Kérje le az objektum helyi másolatát a Get-WmiObject hívásával.
$mySettings = get-WMIObject Win32_WmiSetting
Ha szükséges, tekintse meg az objektum tulajdonságait a Tulajdonságok gyűjtemény hívásával.
Bár nem kötelező, érdemes tudnia a tulajdonság értékét a módosítás előtt.
$mySettings.Properties
Módosítsa a helyi objektum tulajdonságait.
Ezzel csak a helyi példányt módosítja. A WMI módosításainak mentéséhez a teljes példányt vissza kell helyeznie a WMI-adattárba.
$mySettings.LoggingLevel = 1
Helyezze vissza az objektumot a WMI-adattárba a Put metódus hívásával.
$mySettings.Put()
Az alábbi eljárás azt ismerteti, hogyan módosíthatja vagy frissítheti a példányokat a C# használatával.
Egy példány módosítása vagy frissítése C# nyelvvel (Microsoft.Management.Infrastructure)
Kérje le az objektum helyi másolatát a CimSession.GetInstancehívásával, a "WMI példány lekérése"című részben leírtak szerint.
using Microsoft.Management.Infrastructure; ... string Namespace = @"root\cimv2"; string className = "win32_logicalDisk"; CimInstance diskDrive = new CimInstance(className, Namespace); diskDrive.CimInstanceProperties.Add(CimProperty.Create("DeviceID", "C:", CimFlags.Key)); CimSession session = CimSession.Create("localhost"); CimInstance myDisk = session.GetInstance(Namespace, diskDrive);
Ha szükséges, tekintse meg az objektum tulajdonságait a Tulajdonságok gyűjtemény hívásával.
Bár nem kötelező, érdemes tudnia a tulajdonság értékét a módosítás előtt.
foreach (CimProperty property in myDisk.CimInstanceProperties) { Console.WriteLine(property.ToString()); } Console.ReadLine();
Módosítsa a helyi objektum tulajdonságait.
Ezzel csak a helyi példányt módosítja. A WMI módosításainak mentéséhez a teljes példányt vissza kell helyeznie a WMI-adattárba.
myDisk.CimInstanceProperties["VolumeName"].Value = "NewName";
Helyezze vissza az objektumot a WMI-adattárba a CimSession.ModifyInstance hívásával.
session.ModifyInstance(Namespace,myDisk);
Az alábbi eljárás azt ismerteti, hogyan módosíthatja vagy frissítheti a példányokat a PowerShell használatával.
Jegyzet
System.Management a WMI eléréséhez használt eredeti .NET-névtér volt; azonban a névtér API-jai általában lassabbak, és nem méreteznek olyan jól a modernebb Microsoft.Management.Infrastructure megfelelőikhez képest.
Példány módosítása vagy frissítése C# nyelven (Microsoft.Management)
Kérje le az objektum helyi másolatát a ManagementObject.Get hívásával.
using System.Management; ... ManagementObject myDisk = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'"); myDisk.Get();
Ha szükséges, tekintse meg az objektum tulajdonságait a Tulajdonságok gyűjtemény hívásával.
Bár nem kötelező, érdemes tudnia a tulajdonság értékét a módosítás előtt.
foreach (PropertyData property in myDisk.Properties) { Console.WriteLine(property.Name + " " + property.Value); } Console.ReadLine();
Módosítsa a helyi objektum tulajdonságait.
Ezzel csak a helyi példányt módosítja. A WMI módosításainak mentéséhez a teljes példányt vissza kell helyeznie a WMI-adattárba.
myDisk["VolumeName"] = "newName";
Helyezze vissza az objektumot a WMI-adattárba a ManagementObject.Put vagy metódus hívásával.
myDisk.Put();
Az alábbi eljárás azt ismerteti, hogyan módosíthatja vagy frissítheti a példányokat a VBScript használatával.
VBScript használatával példány módosítása vagy frissítése
Kérje le az objektum helyi másolatát a GetObject hívásával.
Ha szükséges, tekintse meg az objektum tulajdonságait a Properties_ metódus meghívásával.
Bár nem kötelező, érdemes tudnia a tulajdonság értékét a módosítás előtt.
Módosítsa az objektumtulajdonságokat az SWbemProperty.Value metódus hívásával.
A Érték metódus csak a helyi példányt módosítja. A WMI módosításainak mentéséhez a teljes példányt vissza kell helyeznie a WMI-adattárba.
Helyezze vissza az objektumot a WMI-adattárba a SWbemObject.Put_ vagy SWbemObject.PutAsync_ metódus meghívásával.
Ahogy a nevek is utalnak, Put_ szinkron módon frissülnek, miközben PutAsync_ aszinkron módon frissülnek. Bármelyik metódus átmásolja az eredeti példányt a módosított példánysal. Az aszinkron feldolgozás előnyeinek kihasználásához azonban létre kell hoznia egy SWbemSink objektumot. További információkért lásd: Metódus meghívása.
Az alábbi eljárás azt ismerteti, hogyan módosíthatja vagy frissítheti a példányokat a C++ használatával.
Egy példány módosítása vagy frissítése C++-szal
A példány helyi másolatának lekérése IWbemServices::GetObject vagy IWbemServices::GetObjectAsynchívásával.
Ha szükséges, tekintse meg az objektum tulajdonságait az IWbemClassObject::Getmeghívásával.
Bár nem kötelező, érdemes tudnia a tulajdonság értékét a módosítás előtt.
Végezze el a szükséges módosításokat a szövegen az IWbemClassObject::Puthívásával.
A Put metódus csak a helyi példányt módosítja. A WMI módosításainak mentéséhez a teljes példányt vissza kell helyeznie a WMI-adattárba.
Helyezze vissza a másolatot a WMI-adattárba az IWbemServices::PutInstance vagy IWbemServices::PutInstanceAsync metódusok meghívásával.
Ahogy a nevek is utalnak rá, PutInstance szinkron módon frissülnek, míg PutInstanceAsync aszinkron módon frissülnek. Bármelyik metódus átmásolja az eredeti példányt a módosított példánysal. Az aszinkron feldolgozás előnyeinek kihasználásához azonban implementálnia kell a IWbemObjectSink felületet.
Vegye figyelembe, hogy egy osztályhierarchiához tartozó példány frissítési művelete nem feltétlenül sikerül a hierarchia egy másik osztályát érintő hiba miatt. A WMI meghívja a PutInstanceAsync metódust minden olyan szolgáltató számára, amelyek felelősek azokért az osztályokért, amelyekből az eredeti példányt birtokló osztály származik. Ha bármelyik szolgáltató sikertelen, az eredeti frissítési kérés meghiúsul. További információért lásd a PutInstanceAsyncMegjegyzések szakaszát.
További információkért lásd: Szolgáltatói módszer meghívása.
Jegyzet
Mivel előfordulhat, hogy a fogadó visszahívása nem az ügyfél által igényelt hitelesítési szinten történik, javasoljuk, hogy az aszinkron kommunikáció helyett félszinkron kommunikációt alkalmazzon. További információért lásd: Metódus hívása.