Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Наиболее распространенным средством обновления экземпляра класса WMI является обновление всего экземпляра одновременно. Обновив весь экземпляр, WMI не придётся разбирать экземпляр на отдельные свойства и отправлять их в ваше приложение. Вместо этого WMI может просто отправить весь экземпляр. После завершения WMI может скопировать весь измененный экземпляр на место исходного экземпляра.
В следующей процедуре описывается изменение или обновление экземпляра с помощью PowerShell.
Модификация или обновление экземпляра с помощью PowerShell
Получите локальную копию объекта с вызовом Get-WmiObject.
$mySettings = get-WMIObject Win32_WmiSettingПри необходимости просмотрите свойства объекта с вызовом коллекции Properties.
Хотя это не обязательно, вы можете знать значение свойства перед его изменением.
$mySettings.PropertiesВнесите изменения в свойства локального объекта.
Это изменяет только локальную копию. Чтобы сохранить изменения в WMI, необходимо поместить всю копию обратно в репозиторий WMI.
$mySettings.LoggingLevel = 1Поместите объект обратно в репозиторий WMI с помощью вызова метода Put.
$mySettings.Put()
В следующей процедуре описывается изменение или обновление экземпляра с помощью C#.
Изменение или обновление экземпляра с помощью C# (Microsoft.Management.Infrastructure)
Получение локальной копии объекта с использованием вызова CimSession.GetInstance, как описано в Получении экземпляра WMI.
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);При необходимости просмотрите свойства объекта с вызовом коллекции Properties.
Хотя это не обязательно, вы можете знать значение свойства перед его изменением.
foreach (CimProperty property in myDisk.CimInstanceProperties) { Console.WriteLine(property.ToString()); } Console.ReadLine();Внесите изменения в свойства локального объекта.
Это изменяет только локальную копию. Чтобы сохранить изменения в WMI, необходимо поместить всю копию обратно в репозиторий WMI.
myDisk.CimInstanceProperties["VolumeName"].Value = "NewName";Поместите объект обратно в репозиторий WMI с помощью вызова CimSession.ModifyInstance.
session.ModifyInstance(Namespace,myDisk);
В следующей процедуре описывается изменение или обновление экземпляра с помощью PowerShell.
Заметка
System.Management — исходное пространство имен .NET, используемое для доступа к WMI; однако, API в этом пространстве имен обычно работают медленнее и масштабируются хуже по сравнению с их более современными аналогами из Microsoft.Management.Infrastructure.
Чтобы изменить или обновить экземпляр с помощью C# (Microsoft.Management)
Получите локальную копию объекта с вызовом ManagementObject.Get.
using System.Management; ... ManagementObject myDisk = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'"); myDisk.Get();При необходимости просмотрите свойства объекта с вызовом коллекции Properties.
Хотя это не обязательно, вы можете знать значение свойства перед его изменением.
foreach (PropertyData property in myDisk.Properties) { Console.WriteLine(property.Name + " " + property.Value); } Console.ReadLine();Внесите изменения в свойства локального объекта.
Это изменяет только локальную копию. Чтобы сохранить изменения в WMI, необходимо поместить всю копию обратно в репозиторий WMI.
myDisk["VolumeName"] = "newName";Поместите объект обратно в репозиторий WMI с помощью вызова ManagementObject.Put или метода.
myDisk.Put();
В следующей процедуре описывается изменение или обновление экземпляра с помощью VBScript.
Изменение или обновление экземпляра с помощью VBScript
Получите локальную копию объекта с вызовом GetObject.
При необходимости просмотрите свойства объекта с вызовом метода Properties_.
Хотя это не обязательно, вы можете знать значение свойства перед его изменением.
Внесите изменения в свойства объекта с вызовом метода SWbemProperty. Value.
Метод Value изменяет только локальную копию. Чтобы сохранить изменения в WMI, необходимо поместить всю копию обратно в репозиторий WMI.
Поместите объект обратно в репозиторий WMI с вызовом методов SWbemObject.Put_ или SWbemObject.PutAsync_.
Как следует из названий, Put_ обновляется синхронно, а PutAsync_ обновляется асинхронно. Каждый из методов заменяет исходный экземпляр на ваш измененный экземпляр. Однако для использования асинхронной обработки необходимо создать объект SWbemSink. Дополнительные сведения см. в разделе Вызов метода.
В следующей процедуре описывается изменение или обновление экземпляра с помощью C++.
Изменение или обновление экземпляра с помощью C++
Получите локальную копию экземпляра с вызовом IWbemServices::GetObject или IWbemServices::GetObjectAsync.
При необходимости просмотрите свойства объекта с вызовом IWbemClassObject::Get.
Хотя это не обязательно, вы можете знать значение свойства перед его изменением.
Внесите необходимые изменения в копию с вызовом IWbemClassObject::Put.
Метод Put изменяет только локальную копию. Чтобы сохранить изменения в WMI, необходимо поместить всю копию обратно в репозиторий WMI.
Поместите копию обратно в репозиторий WMI с вызовом методов IWbemServices::PutInstance или IWbemServices::PutInstanceAsync.
Как подразумевают имена, PutInstance синхронно обновляется в то время как PutInstanceAsync асинхронно обновляется. Метод копирует изменённый экземпляр поверх исходного экземпляра. Однако для использования асинхронной обработки необходимо реализовать интерфейс IWbemObjectSink.
Следует учитывать, что операция обновления в экземпляре, принадлежащем иерархии классов, может не произойти из-за ошибки, связанной с другим классом в иерархии. WMI вызывает метод PutInstanceAsync каждого поставщика, ответственного за классы, от которых наследуется исходный экземпляр класса. Если какой-либо из этих поставщиков завершится ошибкой, исходный запрос на обновление завершается ошибкой. Дополнительные сведения см. в разделе "Примечания" PutInstanceAsync.
Дополнительные сведения см. в разделе вызов метода поставщика.
Заметка
Так как обратный вызов к приемнику не может быть возвращен на том же уровне проверки подлинности, что и клиент, рекомендуется использовать полусинхронное подключение вместо асинхронного взаимодействия. Дополнительные сведения см. в статье Вызов метода.