Сценарии 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
Anonymous
January 01, 2003
Нет. НИКАКОГО доступа из одной ОС в другую, кроме как по сети нет. Виртуализация подразумевает полную изоляцию. Технически, ВЫКЛЮЧИВ виртуальную машину можно подмонтировать VHD диск, подключить ветвь реестра system и поставить в ней статические адреса, но это нужно скриптовать, и не поддерживается Microsoft.Anonymous
February 02, 2009
Привет. Можно ли задать сетевые настройки (IP, DNS, и тд) из родительской ос в гостевой OS, если да, то как это сделать?