Virtualization WMI Provider
Сегодня я хочу попытаться объяснить как используя PowerShell, можно управлять ролью виртуализации Hyper-v. Пока я для себя вижу такую возможность только через WMI провайдер под названием Virtualization WMI Provider. Знакомство начнем с класса Msvm_ComputerSystem он нам позволит узнать информацию о хост машине и о ВМ созданных на этом сервере.
__GENUS : 2
__CLASS : Msvm_ComputerSystem
__SUPERCLASS : CIM_ComputerSystem
__DYNASTY : CIM_ManagedElement
__RELPATH : Msvm_ComputerSystem.CreationClassName="Msvm_ComputerSystem",Name="A115BF3C-1856-4F59-BF04-F3E8B0FF96B6"
__PROPERTY_COUNT : 29
__DERIVATION : {CIM_ComputerSystem, CIM_System, CIM_EnabledLogicalElement, CIM_LogicalElement...}
__SERVER : VS-02
__NAMESPACE : root\virtualization
__PATH : \\VS-02\root\virtualization:Msvm_ComputerSystem.CreationClassName="Msvm_ComputerSystem"
,Name="A115BF3C-1856-4F59-BF04-F3E8B0FF96B6"
AssignedNumaNodeList : {0}
Caption : Виртуальная машина
CreationClassName : Msvm_ComputerSystem
Dedicated :
Description : Виртуальная машина (Майкрософт)
ElementName : SRV-01
EnabledDefault : 2
EnabledState : 2
HealthState : 5
IdentifyingDescriptions :
InstallDate : 20090421014319.000000-000
Name : A115BF3C-1856-4F59-BF04-F3E8B0FF96B6
NameFormat :
OnTimeInMilliseconds : 14056760
OperationalStatus : {2}
OtherDedicatedDescriptions :
OtherEnabledState :
OtherIdentifyingInfo :
PowerManagementCapabilities :
PrimaryOwnerContact :
PrimaryOwnerName : ISEA\abigor_adm
ProcessID : 2824
RequestedState : 12
ResetCapability : 1
Roles :
Status :
StatusDescriptions :
TimeOfLastConfigurationChange : 20090421021103.000000-000
TimeOfLastStateChange : 20090421021103.000000-000
Так, вот мы получили все данные по ВМ. Как видно у меня она пока одна. Эту информацию теперь можно использовать например для создания снимков состояния данной ВМ.
Для создания снимка воспользуемся классом Virtual System Management Classes
У него есть метод CreateVirtualSystemSnapshot, ниже я приведу выдержку описания свойства этого метода:
uint32 CreateVirtualSystemSnapshot(
[in] CIM_ComputerSystem REF SourceSystem,
[out] CIM_VirtualSystemSettingData REF SnapshotSettingData,
[out] CIM_ConcreteJob REF Job
);
Если честно, тут из описания, я понял, что SourceSystem это имя виртуальной машины. Но ниже на справочной странице есть пример скрипта, в нем я понял что это путь до ВМ
Пробуем создать снимок.
[PS] C:\>$vm = get-wmiobject -namespace root\virtualization -Class Msvm_ComputerSystem -filter 'ElementName <> "VS-02"'
[PS] C:\>$vm.__PATH
\\VS-02\root\virtualization:Msvm_ComputerSystem.CreationClassName="Msvm_ComputerSystem",Name="A115BF3C-1856-4F59-BF04-F3E8B0FF96B6"
Так, теперь создадим сам снимок следующей командой:
__GENUS : 2
__CLASS : __PARAMETERS
__SUPERCLASS :
__DYNASTY : __PARAMETERS
__RELPATH :
__PROPERTY_COUNT : 3
__DERIVATION : {}
__SERVER :
__NAMESPACE :
__PATH :
Job : \\VS-02\root\virtualization:Msvm_ConcreteJob.InstanceID="7E004A3B-ECD9-4A2E-8DB9-38708E701417"
ReturnValue : 4096
SnapshotSettingData :
[PS] C:\>
В оснастке Hyper-V у ВМ srv-01 появился снимок, получилось ![]()
Все отлично, но не может же у нас до бесконечности накапливаться количество снимков, Тут попросту ни каких винчестеров не хватит, значит надо и удалять старые снимки. Для этого у класса Msvm_VirtualSystemManagementService есть метод RemoveVirtualSystemSnapshot со следующеми свойствами:
uint32 RemoveVirtualSystemSnapshot(
[in] CIM_VirtualSystemSettingData REF SnapshotSettingData,
[out] CIM_ConcreteJob REF Job
);
Все отлично, но надо понять, что удалять для это воспользуемся классом Msvm_VirtualSystemSettingData у него есть свойство SettingType который принимает два значения:
3 – Настройки/данные ВМ
5 – Настройки/данные снимков ВМ
Теперь в переменной $vsmss у нас хранятся информация о всех снимках. Так как пока у меня снимок один, я его и удалю через метод RemoveVirtualSystemSnapshot:
Смотрим через оснастку. Да, у меня больше созданного снимка нету ![]()
Пока все

.gif)
