Uppdatering av en hel instans
Det vanligaste sättet att uppdatera en WMI-klassinstans är att uppdatera hela instansen samtidigt. Genom att uppdatera en hel instans behöver WMI inte parsa instansen i enskilda egenskaper och skicka dem till ditt program. I stället kan WMI helt enkelt skicka hela instansen till dig. När du är klar kan WMI sedan kopiera hela den ändrade instansen över den ursprungliga instansen.
Följande procedur beskriver hur du ändrar eller uppdaterar en instans med hjälp av PowerShell.
Ändra eller uppdatera en instans med PowerShell
Hämta en lokal kopia av objektet med ett anrop till Get-WmiObject.
$mySettings = get-WMIObject Win32_WmiSetting
Om det behövs kan du visa egenskaperna för objektet med ett anrop till samlingen Egenskaper.
Även om det inte är nödvändigt kan det vara bra att veta värdet för egenskapen innan du ändrar den.
$mySettings.Properties
Gör ändringar i egenskaperna för det lokala objektet.
Om du gör det ändras endast den lokala kopian. Om du vill spara ändringarna i WMI måste du placera tillbaka hela kopian till WMI-lagringsplatsen.
$mySettings.LoggingLevel = 1
Placera tillbaka objektet till WMI-lagringsplatsen med hjälp av ett anrop till metoden Put.
$mySettings.Put()
Följande procedur beskriver hur du ändrar eller uppdaterar en instans med hjälp av C#.
Om du vill ändra eller uppdatera en instans med C# (Microsoft.Management.Infrastructure)
Hämta en lokal kopia av objektet genom ett anrop till CimSession.GetInstance, som beskrivs i Att hämta en WMI-instans.
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);
Om det behövs kan du visa egenskaperna för objektet med ett anrop till samlingen Egenskaper.
Även om det inte krävs kanske du vill veta värdet för egenskapen innan du ändrar den.
foreach (CimProperty property in myDisk.CimInstanceProperties) { Console.WriteLine(property.ToString()); } Console.ReadLine();
Gör ändringar i egenskaperna för det lokala objektet.
Om du gör det ändras endast den lokala kopian. Om du vill spara ändringarna i WMI måste du placera tillbaka hela kopian till WMI-lagringsplatsen.
myDisk.CimInstanceProperties["VolumeName"].Value = "NewName";
Placera tillbaka objektet till WMI-lagringsplatsen med hjälp av ett anrop till CimSession.ModifyInstance.
session.ModifyInstance(Namespace,myDisk);
Följande procedur beskriver hur du ändrar eller uppdaterar en instans med hjälp av PowerShell.
Anteckning
System.Management var det ursprungliga .NET-namnområdet som användes för att komma åt WMI. API:erna i det här namnområdet är dock vanligtvis långsammare och skalas inte lika bra i förhållande till deras modernare Microsoft.Management.Infrastructure motsvarigheter.
Ändra eller uppdatera en instans med C# (Microsoft.Management)
Hämta en lokal kopia av objektet med ett anrop till ManagementObject.Get.
using System.Management; ... ManagementObject myDisk = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'"); myDisk.Get();
Om det behövs kan du visa egenskaperna för objektet med ett anrop till samlingen Egenskaper.
Även om det inte krävs kanske du vill veta värdet för egenskapen innan du ändrar den.
foreach (PropertyData property in myDisk.Properties) { Console.WriteLine(property.Name + " " + property.Value); } Console.ReadLine();
Gör ändringar i egenskaperna för det lokala objektet.
Om du gör det ändras endast den lokala kopian. Om du vill spara ändringarna i WMI måste du placera tillbaka hela kopian till WMI-lagringsplatsen.
myDisk["VolumeName"] = "newName";
Placera tillbaka objektet till WMI-lagringsplatsen med hjälp av ett anrop till ManagementObject.Put eller metoden.
myDisk.Put();
Följande procedur beskriver hur du ändrar eller uppdaterar en instans med hjälp av VBScript.
Ändra eller uppdatera en instans med VBScript-
Hämta en lokal kopia av objektet med ett anrop till GetObject.
Om det behövs kan du visa egenskaperna för objektet med ett anrop till metoden Properties_.
Även om det inte krävs kanske du vill känna till värdet på egenskapen innan du ändrar den.
Gör ändringar i objektegenskaperna med ett anrop till metoden SWbemProperty.Value.
Metoden Value ändrar endast den lokala kopian. Om du vill spara ändringarna i WMI måste du placera tillbaka hela kopian till WMI-lagringsplatsen.
Placera objektet tillbaka till WMI-lagringsplatsen med ett anrop till metoderna SWbemObject.Put_ eller SWbemObject.PutAsync_.
Som namnen antyder uppdateras Put_ synkront medan PutAsync_ uppdateras asynkront. Någon av metoderna kopierar över den ursprungliga instansen med din ändrade instans. Men om du vill dra nytta av asynkron bearbetning måste du skapa ett SWbemSink- objekt. Mer information finns i Anropa en metod.
Följande procedur beskriver hur du ändrar eller uppdaterar en instans med hjälp av C++.
Ändra eller uppdatera en instans med C++
Hämta en lokal kopia av instansen med ett anrop till IWbemServices::GetObject eller IWbemServices::GetObjectAsync.
Om det behövs kan du visa egenskaperna för objektet med ett anrop till IWbemClassObject::Get.
Även om det inte är nödvändigt, kanske du vill veta egenskapens värde innan du ändrar den.
Gör nödvändiga ändringar i texten med ett anrop till IWbemClassObject::Put.
Metoden Put ändrar endast den lokala kopian. Om du vill spara ändringarna i WMI måste du placera tillbaka hela kopian till WMI-lagringsplatsen.
Placera tillbaka kopian till WMI-lagringsplatsen med ett anrop till IWbemServices::PutInstance eller IWbemServices::PutInstanceAsync metoder.
Som namnen antyder uppdateras PutInstance synkront medan PutInstanceAsync uppdateras asynkront. Antingen metod kopierar den ursprungliga instansen med din modifierade instans. Men för att kunna dra nytta av asynkron bearbetning måste du implementera IWbemObjectSink--gränssnittet.
Du bör vara medveten om att en uppdateringsåtgärd på en instans som tillhör en klasshierarki kanske inte lyckas på grund av ett fel som involverar en annan klass i hierarkin. WMI anropar metoden PutInstanceAsync för var och en av de leverantörer som ansvarar för de klasser som klassen som äger den ursprungliga instansen härleds från. Om någon av dessa leverantörer misslyckas misslyckas den ursprungliga uppdateringsbegäran. Mer information finns i avsnittet Anmärkningar i PutInstanceAsync.
Mer information finns i Anropa en leverantörsmetod.
Notera
Eftersom återanropet till mottagaren kanske inte returneras på samma autentiseringsnivå som klienten kräver rekommenderar vi att du använder semisynkron i stället för asynkron kommunikation. Mer information finns i Anropa en metod.