다음을 통해 공유


전체 인스턴스 업데이트

WMI 클래스 인스턴스를 업데이트하는 가장 일반적인 방법은 전체 인스턴스를 한 번에 업데이트하는 것입니다. 전체 인스턴스를 업데이트하여 WMI는 인스턴스를 개별 속성으로 구문 분석하고 애플리케이션에 보낼 필요가 없습니다. 대신 WMI는 단순히 전체 인스턴스를 보낼 수 있습니다. 완료되면 WMI는 변경된 전체 인스턴스를 원래 인스턴스에 복사할 수 있습니다.

다음 절차에서는 PowerShell을 사용하여 인스턴스를 수정하거나 업데이트하는 방법을 설명합니다.

PowerShell 사용하여 인스턴스를 수정하거나 업데이트하려면

  1. Get-WmiObject를 호출하여 개체의 로컬 복사본을 검색합니다.

    $mySettings = get-WMIObject Win32_WmiSetting
    
  2. 필요한 경우 Properties 컬렉션에 대한 호출을 사용하여 개체의 속성을 봅니다.

    필수는 아니지만 속성 값을 변경하기 전에 알고 싶을 수 있습니다.

    $mySettings.Properties
    
  3. 로컬 개체 속성을 변경합니다.

    이렇게 하면 로컬 복사본만 변경합니다. 변경 내용을 WMI에 저장하려면 전체 복사본을 WMI 리포지토리에 다시 배치해야 합니다.

    $mySettings.LoggingLevel = 1
    
  4. Put 메서드 호출을 사용하여 개체를 WMI 리포지토리에 다시 배치합니다.

    $mySettings.Put()
    

다음 절차에서는 C#을 사용하여 인스턴스를 수정하거나 업데이트하는 방법을 설명합니다.

C#(Microsoft.Management.Infrastructure) 사용하여 인스턴스를 수정하거나 업데이트하려면

  1. 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);
    
  2. 필요한 경우 Properties 컬렉션에 대한 호출을 사용하여 개체의 속성을 봅니다.

    필수는 아니지만 속성 값을 변경하기 전에 알고 싶을 수 있습니다.

    foreach (CimProperty property in myDisk.CimInstanceProperties)
    {
       Console.WriteLine(property.ToString());
    }
    
    Console.ReadLine();
    
  3. 로컬 개체 속성을 변경합니다.

    이렇게 하면 로컬 복사본만 변경합니다. 변경 내용을 WMI에 저장하려면 전체 복사본을 WMI 리포지토리에 다시 배치해야 합니다.

    myDisk.CimInstanceProperties["VolumeName"].Value = "NewName";
    
  4. CimSession.ModifyInstance호출을 사용하여 개체를 다시 WMI 리포지토리에 배치합니다.

    session.ModifyInstance(Namespace,myDisk);
    

다음 절차에서는 PowerShell을 사용하여 인스턴스를 수정하거나 업데이트하는 방법을 설명합니다.

메모

System.Management는 WMI에 액세스하기 위해 사용된 원래의 .NET 네임스페이스입니다. 그러나 이 네임스페이스의 API는 일반적으로 느리며, 더 현대적인 Microsoft.Management.Infrastructure 네임스페이스와 비교할 때 확장성이 떨어집니다.

 

C#(Microsoft.Management) 사용하여 인스턴스를 수정하거나 업데이트하려면

  1. ManagementObject.Get호출하여 개체의 로컬 복사본을 검색합니다.

    using System.Management;
    ...
    ManagementObject myDisk = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'");
    myDisk.Get();
    
  2. 필요한 경우 Properties 컬렉션에 대한 호출을 사용하여 개체의 속성을 봅니다.

    필수는 아니지만 속성 값을 변경하기 전에 알고 싶을 수 있습니다.

    foreach (PropertyData property in myDisk.Properties)
    {
       Console.WriteLine(property.Name + " " + property.Value);
    }
    
    Console.ReadLine();
    
  3. 로컬 개체 속성을 변경합니다.

    이렇게 하면 로컬 복사본만 변경합니다. 변경 내용을 WMI에 저장하려면 전체 복사본을 WMI 리포지토리에 다시 배치해야 합니다.

    myDisk["VolumeName"] = "newName";
    
  4. ManagementObject.Put 또는 메서드를 호출하여 개체를 WMI 리포지토리에 다시 배치합니다.

    myDisk.Put();
    

다음 절차에서는 VBScript를 사용하여 인스턴스를 수정하거나 업데이트하는 방법을 설명합니다.

VBScript 사용하여 인스턴스를 수정하거나 업데이트하려면

  1. GetObject호출하여 개체의 로컬 복사본을 검색합니다.

  2. 필요한 경우 Properties_ 메서드를 호출하여 개체의 속성을 봅니다.

    필수는 아니지만 속성 값을 변경하기 전에 알고 싶을 수 있습니다.

  3. SWbemProperty.Value 메서드를 호출하여 개체 속성을 변경합니다.

    Value 메서드는 로컬 복사본만 변경합니다. 변경 내용을 WMI에 저장하려면 전체 복사본을 WMI 리포지토리에 다시 배치해야 합니다.

  4. SWbemObject.Put_ 또는 SWbemObject.PutAsync_ 메서드를 호출하여 개체를 WMI 리포지토리에 다시 배치합니다.

이름에서 암시하듯이 Put_ 비동기적으로 업데이트되는 동안 PutAsync_ 동기적으로 업데이트됩니다. 수정된 인스턴스를 사용하여 원래 인스턴스를 복사하는 방법 중 하나. 그러나 비동기 처리를 활용하려면 SWbemSink 개체를 만들어야 합니다. 자세한 내용은 메서드호출을 참조하세요.

다음 절차에서는 C++를 사용하여 인스턴스를 수정하거나 업데이트하는 방법을 설명합니다.

C++ 사용하여 인스턴스를 수정하거나 업데이트하려면

  1. IWbemServices::GetObject 또는 IWbemServices::GetObjectAsync호출하여 인스턴스의 로컬 복사본을 검색합니다.

  2. 필요한 경우 IWbemClassObject::Get호출하여 개체의 속성을 봅니다.

    필수는 아니지만 속성 값을 변경하기 전에 알고 싶을 수 있습니다.

  3. IWbemClassObject::Put호출하여 필요한 경우 복사본을 수정하십시오.

    Put 메서드는 로컬 복사본만 변경합니다. 변경 내용을 WMI에 저장하려면 전체 복사본을 WMI 리포지토리에 다시 배치해야 합니다.

  4. IWbemServices::P utInstance 또는 IWbemServices::P utInstanceAsync 메서드를 호출하여 복사본을 WMI 리포지토리에 다시 배치합니다.

    이름에서 암시하듯이 PutInstance는 동기적으로 업데이트되고, PutInstanceAsync는 비동기적으로 업데이트됩니다. 두 가지 방법 모두 수정된 인스턴스로 원래 인스턴스를 덮어씁니다. 그러나 비동기 처리를 활용하려면 IWbemObjectSink 인터페이스를 구현해야 합니다.

    계층 구조의 다른 클래스와 관련된 오류로 인해 클래스 계층에 속하는 인스턴스에 대한 업데이트 작업이 성공하지 못할 수 있습니다. WMI는 원래 인스턴스를 소유하는 클래스가 파생되는 클래스를 담당하는 각 공급자의 PutInstanceAsync 메서드를 호출합니다. 이러한 공급자가 실패하면 원래 업데이트 요청이 실패합니다. 자세한 내용은 PutInstanceAsync설명 섹션을 참조하세요.

자세한 내용은 공급자 메서드 호출을 참조하세요.

메모

싱크에 대한 콜백은 클라이언트가 요구하는 것과 동일한 인증 수준에서 반환되지 않을 수 있으므로 비동기 통신 대신 반동기를 사용하는 것이 좋습니다. 자세한 내용은 메서드호출을 참조하세요.