Сценарии PowerShell для Hyper-V и WMI. Использование компонента интеграции обмена парами ключ-значение (KVP Exchange integration component). Часть 2 — Добавление новых элементов из родительского раздела


В прошлый раз мы рассмотрели «Компонент интеграции обмена парами ключ-значение» (Key Value Pair, KVP Exchange Integration Component). Теперь мы знаем, какие уже есть внутренние (intrinsic) KVP, как получить текущие значения KVP и как их расшифровать.


Одни KVP доступны из родительского раздела и несут информацию о гостевой ОС (Fully Qualified Domain Name, OS Version, Processor Architecture и т.д.). Есть также KVP, доступные из гостевой ОС и содержащие информацию о родительском разделе — такие, как HostName, PhysicalHostName, PhysicalHostNameFullyQualified и VirtualMachineName. Эти значения хранятся в реестре в ветке «HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters».


С помощью KVP мы можем из родительского раздела записать ключи в реестр гостевой ОС, а также прочитать в родительском разделе ключи, переданные из гостевого раздела. Это реализуется с помощью метода AddKvpItems класса Msvm_VirtualSystemManagementService. Сейчас мы рассмотрим пример передачи ключей от родительского раздела в гостевые.


Сценарий PowerShell Add-KVP.ps1







$ComputerName = “localhost”


$VMManagementService = Get-WmiObject -class “Msvm_VirtualSystemManagementService” -namespace “root\virtualization” -ComputerName $ComputerName


$Vm = Get-WmiObject -Namespace root\virtualization -ComputerName $ComputerName -Query “Select * From Msvm_ComputerSystem Where ElementName=’Vista'”


$Kvp = Get-WmiObject -Namespace root\virtualization -ComputerName $ComputerName -Query “Associators of {$Vm} Where AssocClass=Msvm_SystemDevice ResultClass=Msvm_KvpExchangeComponent”


$Msvm_KvpExchangeDataItemPath = “\\$ComputerName\root\virtualization:Msvm_KvpExchangeDataItem”


$Msvm_KvpExchangeDateItem = ([WmiClass]$Msvm_KvpExchangeDataItemPath).CreateInstance()


$Msvm_KvpExchangeDateItem.Name = “Test4”


$Msvm_KvpExchangeDateItem.Data = “Testing”


$Msvm_KvpExchangeDateItem.Source = 0


$VMManagementService.AddKvpItems($Vm, $Msvm_KvpExchangeDateItem.PSBase.GetText(1))


Мы записали из родительского раздела ключ «Test4» и теперь можем увидеть в реестре гостевой ОС по адресу «HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Virtual Machine\External».


В следующей статье мы поговорим о том, как передаваемые ключи добавляются в гостевые разделы, а также о том, как их можно считать из родительского раздела.

Comments (2)

  1. Alex A says:

    Нет.

    НИКАКОГО доступа из одной ОС в другую, кроме как по сети нет. Виртуализация подразумевает полную изоляцию.

    Технически, ВЫКЛЮЧИВ виртуальную машину можно подмонтировать VHD диск, подключить ветвь реестра system и поставить в ней статические адреса, но это нужно скриптовать, и не поддерживается Microsoft.

  2. Alexandr Belov says:

    Привет. Можно ли задать сетевые настройки (IP, DNS, и тд) из родительской ос в гостевой OS, если да, то как это сделать?

Skip to main content