Программная настройка имени моментального снимка Hyper-V.

#c# #wmi #snapshot #hyper-v

#c# #wmi #моментальный снимок #hyper-v

Вопрос:

Я создаю моментальный снимок Hyper-V с помощью программы на C #:

     private static bool Snapshot(string vmName, string snapshotName)
    {
        var result = false;
        var scope = new ManagementScope(@"rootvirtualization", null);
        var virtualSystemService = Utility.GetServiceObject(scope, "Msvm_VirtualSystemManagementService");

        var vm = Utility.GetTargetComputer(vmName, scope);

        var inParams = virtualSystemService.GetMethodParameters("CreateVirtualSystemSnapshot");
        inParams["SourceSystem"] = vm.Path.Path;

        var outParams = virtualSystemService.InvokeMethod("CreateVirtualSystemSnapshot", inParams, null);

        if ((UInt32)outParams["ReturnValue"] == ReturnCode.Started)
        {
            if (Utility.JobCompleted(outParams, scope))
            {
                Console.WriteLine("Snapshot was created successfully.");
                result = true;
            }
            else
            {
                Console.WriteLine("Failed to create snapshot VM");
                result = false;
            }
        }
        else if ((UInt32)outParams["ReturnValue"] == ReturnCode.Completed)
        {
            Console.WriteLine("Snapshot was created successfully.");
            result = true;
        }
        else
        {
            Console.WriteLine("Create virtual system snapshot failed with error {0}", outParams["ReturnValue"]);
            result = false;
        }

        inParams.Dispose();
        outParams.Dispose();
        vm.Dispose();
        virtualSystemService.Dispose();

        return resu<
    }
  

(ПРИМЕЧАНИЕ: этот код был взят из MSDN)

Есть ли способ задать имя моментального снимка с помощью этого вызова WMI? В противном случае, кто-нибудь знает рабочее решение для переименования моментального снимка с помощью вызова WMI? Я уже нашел этот поток, но он какой-то неоднозначный и не дает никакого решения…

РЕДАКТИРОВАТЬ: решение состояло в том, чтобы переименовать снимок после его создания. Вот моя функция для переименования моментального снимка, используя советы Ганса:

РЕШЕНИЕ:

     public static bool RenameSnapshot(string vmName, string snapshotName)
    {

        var result = false;
        var scope = new ManagementScope(@"rootvirtualization", null);
        var vm = Utility.GetTargetComputer(vmName, scope);

        // load snapshot
        var objSnapshot = GetLastVirtualSystemSnapshot(vm);

        // rename snapshot
        objSnapshot["ElementName"] = snapshotName;

        // save
        var virtualSystemService = Utility.GetServiceObject(scope, "Msvm_VirtualSystemManagementService");
        var inParams = virtualSystemService.GetMethodParameters("ModifyVirtualSystem");
        inParams["ComputerSystem"] = vm.Path.Path;
        inParams["SystemSettingData"] = objSnapshot.GetText(TextFormat.CimDtd20);
        var outParams = virtualSystemService.InvokeMethod("ModifyVirtualSystem", inParams, null);

        if ((UInt32)outParams["ReturnValue"] == ReturnCode.Completed)
        {
            result = true;
        }
        else
        {
            result = false;
        }



        inParams.Dispose();
        outParams.Dispose();
        vm.Dispose();
        virtualSystemService.Dispose();


        return resu<
    }
  

Ответ №1:

ModifyVirtualSystem Msvm_VirtualSystemManagementService Для переименования моментального снимка hyper-v необходимо использовать метод класса. Существует пример MSDN о том, как переименовать виртуальную машину hyper-v (вам нужно изменить код, чтобы переименовать моментальный снимок). Кроме того, я нашел этот пример о том, как переименовать моментальный снимок hyper-v. Надеюсь, это поможет.