В оновленій ролі Hyper-V, представленої в Windows Server 2012 R2 і Windows 8.1 з'явилася можливість прямого копіювання файлів з хоста Hyper-V в віртуальну машину без використання мережевих інтерфейсів. Цей функціонал реалізується за допомогою нової служби в гостьовій ОС під назвою Guest Services, що входить до складу інтеграційних компонентів Hyper-V (Integration Services).
Отже, щоб скористатися можливістю прямого копіювання файлів у віртуальну машину з хостовой ОС Hyper-V, потрібно в ВМ встановити останню версію компонентів інтеграції (Integration Services версії не нижче 6.3.9600.16384), і активувати на ній службу Guest Services.
Служба Guest Services дозволяє здійснити копіювання файлів між хостової гіпервізором (комп'ютером з роллю Hyper-V) і віртуальною машиною, запущеної на ньому без використання мережевих компонентів. Процес копіювання здійснюється через високошвидкісну внутрішню шину vmbus (Virtual Machine Bus), безпосередньо зв'язує гипервизор і віртуальну машину. Завдяки цьому адміністратор може скопіювати всередину віртуальної машини будь-який файл, причому абсодютно неважливо в якій мережі знаходиться цільова віртуальна машина, підключена вона взагалі до віртуального комутатора, або знаходиться в ізольованій мережі.
Примітка. У попередніх версіях Hyper-V, щоб скопіювати файл всередину віртуальної машини з сервера Hyper-V доводилося налаштовувати rdp підключення, загальні папки через додаткову внутрішню мережу або загальні vhd файли. Також не варто плутати копіювання файлів через службу Guest Services з можливістю копіювання файлів через режим-розширення rdp-протоколу - Enchanted Session Mode.Служба Guest services для віртуальних машин за замовчуванням відключена. Включити її можна через GUI консолі Hyper-V в властивості віртуальної машини (в розділі Integration Services) або за допомогою Powershell.
Перевірити, чи включена служба Guest services для віртуальної машини, можна так:
Get-VMIntegrationService -VMName HV2012R2 -Name "Guest Service Interface"
В даному прикладі служба відключена: Guest Service Interface: False.
Щоб включити службу, скористаємося такою командою:
Enable-VMIntegrationService -VMName "HV2012R2" -Name "Guest Service Interface" -ErrorAction Continue
Всередині віртуальної машини повинна бути запущена служба Hyper-V Guest Service, її статус можна отримати так:
Get-Service vmicguestinterface
Після того, як служачи інтеграції Guest Service включена, можна за допомогою спеціального командлет Copy-VMFile скопіювати будь-який файл, розташований на файлову систему сервера Hyper-V безпосередньо в віртуальну машину. Щоб скопіювати файл в уже існуючу папку в гостьовій ОС, виконаємо на сервері команду:
Copy-VMFile "HV2012R2" -SourcePath C: \ Install \ 2012R2.iso -DestinationPath C: \ Install \ 2012R2.iso -FileSource Host
Якщо цільової шлях в гостьовій ОС не існує, команда поверне помилку. Щоб автоматично створити вказаний шлях на файлової системі гостьовий ОС, скористаємося аргументом -CreateFullPath
Copy-VMFile "HV2012R2" -SourcePath C: \ Install \ 2012R2.iso -DestinationPath C: \ Install \ 2012R2.iso -FileSource Host -CreateFullPathПримітка. Командлет Copy-VMFile дозволяє за раз скопіювати тільки один файл. Щоб скопіювати вміст папки цілком, можна скористатися такою конструкцією:
Get-ChildItem C: \ Scripts -Recurse -File | % Copy-VMFile "HV2012R2" -SourcePath $ _. FullName -DestinationPath $ _. FullName -CreateFullPath -FileSource Host
Відключити службу Guest Services можна так:
Get-VMIntegrationService -VMName "HV2012R2" -Name "Guest Service Interface" | Disable-VMIntegrationService -Passthru
Отже, завдяки службі Guest Services адміністратор Hyper-V може безпосередньо скопіювати будь-який файл всередину гостьовий ОС віртуальної машини.