전체 인스턴스 업데이트
WMI 클래스 인스턴스를 업데이트하는 가장 일반적인 방법은 전체 인스턴스를 한 번에 업데이트하는 것입니다. WMI는 전체 인스턴스를 업데이트하므로 인스턴스를 개별 속성으로 구문 분석하고 애플리케이션에 보낼 필요가 없습니다. 대신 WMI는 단순히 전체 인스턴스를 보낼 수 있습니다. 완료되면 WMI는 변경된 전체 인스턴스를 원래 인스턴스에 복사할 수 있습니다.
다음 절차에서는 PowerShell을 사용하여 인스턴스를 수정하거나 업데이트하는 방법을 설명합니다.
PowerShell을 사용하여 인스턴스를 수정하거나 업데이트하는 방법
Get-WmiObject를 호출하여 개체의 로컬 복사본을 검색합니다.
$mySettings = get-WMIObject Win32_WmiSetting
필요한 경우 Properties 컬렉션에 대한 호출을 사용하여 개체의 속성을 확인합니다.
필수는 아니지만 속성 값을 변경하기 전에 알고 있는 것이 좋습니다.
$mySettings.Properties
로컬 개체 속성을 변경합니다.
이렇게 하면 로컬 복사본만 변경됩니다. WMI에 변경 내용을 저장하려면 전체 복사본을 WMI 리포지토리에 다시 배치해야 합니다.
$mySettings.LoggingLevel = 1
Put 메서드를 호출하여 개체를 WMI 리포지토리에 다시 배치합니다.
$mySettings.Put()
다음 절차에서는 C#을 사용하여 인스턴스를 수정하거나 업데이트하는 방법을 설명합니다.
C#(Microsoft.Management.Infrastructure)을 사용하여 인스턴스를 수정하거나 업데이트하는 방법
WMI 인스턴스 검색에 설명된 대로 CimSession.GetInstance를 호출하여 개체의 로컬 복사본을 검색합니다.
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";
CimSession.ModifyInstance에 대한 호출을 사용하여 개체를 WMI 리포지토리에 다시 배치합니다.
session.ModifyInstance(Namespace,myDisk);
다음 절차에서는 PowerShell을 사용하여 인스턴스를 수정하거나 업데이트하는 방법을 설명합니다.
참고
System.Management는 WMI에 액세스하는 데 사용되는 원래 .NET 네임스페이스였습니다. 그러나 이 네임스페이스의 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";
ManagementObject.Put 또는 메서드에 대한 호출을 사용하여 개체를 WMI 리포지토리에 다시 배치합니다.
myDisk.Put();
다음 절차에서는 VBScript를 사용하여 인스턴스를 수정하거나 업데이트하는 방법을 설명합니다.
VBScript를 사용하여 인스턴스를 수정하거나 업데이트하는 방법
GetObject를 호출하여 개체의 로컬 복사본을 검색합니다.
필요한 경우 Properties_ 메서드에 대한 호출을 사용하여 개체의 속성을 확인합니다.
필수는 아니지만 속성 값을 변경하기 전에 알고 있는 것이 좋습니다.
SWbemProperty.Value 메서드를 호출하여 개체 속성을 변경합니다.
Value 메서드는 로컬 복사본만 변경합니다. WMI에 변경 내용을 저장하려면 전체 복사본을 WMI 리포지토리에 다시 배치해야 합니다.
SWbemObject.Put_ 또는 SWbemObject.PutAsync_ 메서드를 호출하여 개체를 WMI 리포지토리에 다시 배치합니다.
이름에서 알 수 있듯 Put_은 PutAsync_가 비동기식으로 업데이트되는 동안 동기식으로 업데이트됩니다. 두 메서드는 수정된 인스턴스를 사용하여 원래 인스턴스를 복사합니다. 그러나 비동기식 처리를 활용하려면 SWbemSink 개체를 만들어야 합니다. 자세한 내용은 메서드 호출을 참조하세요.
다음 절차에서는 C++를 사용하여 인스턴스를 수정하거나 업데이트하는 방법을 설명합니다.
C++를 사용하여 인스턴스를 수정하거나 업데이트하는 방법
IWbemServices::GetObject 또는 IWbemServices::GetObjectAsync를 호출하여 인스턴스의 로컬 복사본을 검색합니다.
필요한 경우 IWbemClassObject::Get 메서드를 호출하여 개체의 속성을 확인합니다.
필수는 아니지만 속성 값을 변경하기 전에 알고 있는 것이 좋습니다.
IWbemClassObject::Put을 호출하여 필요에 따라 복사본을 변경합니다.
Put 메서드는 로컬 복사본만 변경합니다. WMI에 변경 내용을 저장하려면 전체 복사본을 WMI 리포지토리에 다시 배치해야 합니다.
IWbemServices::PutInstance 또는 IWbemServices::PutInstanceAsync 메서드를 호출하여 복사본을 WMI 리포지토리에 다시 배치합니다.
이름에서 알 수 있듯이 PutInstance 는 동기식으로 업데이트되지만 PutInstanceAsync는 비동기식으로 업데이트됩니다. 두 메서드는 수정된 인스턴스를 사용하여 원래 인스턴스를 복사합니다. 그러나 비동기식 처리를 활용하려면 IWbemObjectSink 인터페이스를 구현해야 합니다.
계층 구조의 다른 클래스와 관련된 오류로 인해 클래스 계층 구조에 속하는 인스턴스에 대한 업데이트 작업이 성공하지 못할 수 있다는 점에 유의해야 합니다. WMI는 원본 인스턴스를 소유하는 클래스가 파생되는 클래스를 담당하는 각 공급자의 PutInstanceAsync 메서드를 호출합니다. 이러한 공급자가 실패하면 원래 업데이트 요청이 실패합니다. 자세한 내용은 PutInstanceAsync의 주의 섹션을 참조하세요.
자세한 내용은 공급자 메서드 호출을 참조하세요.
참고
싱크에 대한 콜백은 클라이언트에서 요구하는 것과 동일한 인증 수준으로 반환되지 않을 수 있으므로 비동기 통신 대신 반동기를 사용하는 것이 좋습니다. 자세한 내용은 메서드 호출을 참조하세요.