Как передавать файлы используя буфер обмена в Hyper V


25 сентября 2019


Передача файлов с буфера обмена в Hyper V и копирование с Powershell

Для передачи файлов через буфер обмена в Hyper V виртуальную машину есть несколько способов. Каждый из них отличается от версии операционной системы и условий в которых вы его хотите использовать, но любой из них позволяет копировать файлы в виртуальную машину с хоста и обратно.

Первый вариант работает с версий ВМ Windows Server 2012 R2 и Windows 8.1 и называется Enhanced Session Mode (ESM). Эта возможность работает по тому же принципу, что и RDP, то есть мы можем использовать не только буфер обмена, но и USB устройства, принтеры и так далее. Отличия от RDP в том, что мы не используем сеть в данном случае, но если у вас настроены политики ограничивающие RDP подключения они могут быть причиной ошибок.

По умолчанию Enhanced Session Mode включен. Мы можем проверить ее если зайдем в настройки Hyper V:

Enhanced Session Mode Hyper V

Включение буфера обмена Hyper V

Или выполнить аналогичное через Powershell:

# Проверка
Get-VMHost | SELECT -Property EnableEnhancedSessionMode

# Включение
Set-VMHost -EnableEnhancedSessionMode $True -Passthru

Настройка расширенного сеанса Hyper V (ESM) устанавливается только на уровне сервера, но что бы у нас работала возможность копирования нужно включить и пакет интеграции Hyper V, который по умолчанию отключен. Эта служба интеграции называется Guest services (Гостевая служба), и она включается у каждой виртуально машины отдельно. Для ее включения зайдем в настройки виртуально машины:

Настройки виртуальной машины Hyper V

И включить гостевую службу:

Копирование Hyper V

Аналогичную настройку через Powershell можно сделать так:

# Просмотр включенных пакетов интеграций у ВМ с именем Win10
Get-VMIntegrationService -VMName 'Win10'

# Включение гостевого пакета интеграции
Enable-VMIntegrationService -VMName "Win10" -Name "Guest Service Interface"

# Включение на всех виртуальных машинах
Get-VM | Enable-VMIntegrationService -Name "Guest Service Interface"

Последнее что нужно сделать - это включить службу "Remote Desktop Services":

hyper v передача файлов

Можно установить и в консоли PS:

# Получение статуса сервиса
Get-Service "Remote Desktop Services"

# Установка сервиса на автоматический запуск
Set-Service "Remote Desktop Services" -StartupType Automatic

Теперь включим виртуальную машину и подключимся к ней:

Включение виртуальной машины Hyper V

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

Включение копирование файлов в виртуальную машину

На второй закладке стоит галочка под Clipboard (Буфер обмена) - это то что нам нужно:

Hyper V Clipboard буфер обмена

После этого у нас будет работать в Hyper V буфер обмена путем копирования/вставки, а перетаскивание файлов в виртуальную машину работать не будет, так как такого функционала нет.

Мы так же можем использовать Powershell:

# Откуда скопировать
$s_path = 'C:\file.txt'
# Куда скопировать
$d_path = 'C:\'
Copy-VMFile -Name 'Win10' -SourcePath $s_path -DestinationPath $d_path -FileSource Host

Microsoft описывает проблему, при которой  копирование так же не будет работать и оно связано с политиками. По следующему пути нужно изменить политику с "Do not allow drive redirection" на "Disabled" или "Not Configured":

Computer Configuration\Policies\Administrative Templates\Windows Components\Terminal Services\Terminal Server\Device and Resource Redirection

Такого пути в групповых политиках я у себя не нашел.

 

Передача файлов в Hyper V через публичную папку

Второй вариант это создать в Hyper V виртуальную сеть через внутренний коммутатор. Внутренний или Internal коммутатор не использует физический сетевой адаптер и разрешает пользоваться таким типом соединения хосту Hyper V и виртуальным машинам. Таким образом затрачиваемые ресурсы, при копировании в Hyper V большого объема данных, не будут сильно отличаться от первого способа.

Для создания внутреннего коммутатора нужно зайти в окно управления свичами:

Создание виртуальных свичей Hyper V

В новом окне выбрать "Internal" или "Частный":

Создание частного свича Hyper V

Ввести имя коммутатора и подтвердить создание:

Создание частного коммутатора Hyper V

Это делается в Powershell одной командой:

New-VMSwitch -Name 'Private' -SwitchType Private -ComputerName 'AD1'

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

Настройки виртуальной машины Hyper V

Теперь создадим виртуальный сетевой адаптер:

Создание сетевого адаптера Hyper V

Теперь подключим адаптер к коммутатору:

Подключение адаптера к коммутатору Hyper V

В случае с Powershell это так же одна команда:

Add-VMNetworkAdapter -SwitchName 'Private' -VMName 'Win10'

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

 

Копирование файлов в Hyper V через виртуальный диск

Этот способ заключается в подключении виртуального диска отключенной ВМ. Мы можем создать новый диск или использовать системный диск операционной системы. Я крайне не рекомендую использовать этот способ, так как в случае существования чекпоинтов/снэпшотов на этой ВМ или если вы забудете размонтировать диск, это может привести к необратимым последствиям.

Вы можете создать диск воспользовавшись статьей "Создание виртуальных дисков в Hyper V". Папку, где лежит виртуальный диск можно увидеть через настройки виртуальной машины:

Жесткий диск Hyper V

Если путь заканчивается на avhdx, то вы используете контрольную точку. Для монтирования диска нужно перейти по пути и выбрать Mount у vhd/vhdx файла:

Монтирование VHD и VHDX в Hyper VВ моем случае появилось два раздела, так как это системный диск. Для размонтирования дисков нужно кликнуть по разделу и нажать Eject. 

Если хотите выполнить команду через Powershell, то это можно сделать так:

$disk = Get-VMHardDiskDrive -VMName 'Win10'
# Монтирование
Mount-VHD -Path $disk.Path
# Размонтирование
Dismount-VHD $disk.Path

Командлет выше подразумевает, что  у вас подключен один диск. В случае нескольких дисков запустите:

$disk | select *

 

Копирование в Hyper V используя буфер обмена с RDP

Последний способ подключения работает через "Подключению к удаленному рабочему столу" или RDP. Для такой возможности копирования, кроме открытых портов и включенной возможности в свойствах компьютера дополнительных требований нет. Так же стоит проверить галочку в свойствах подключения RDP:

Копирование через RDP в Hyper V

Вы так же можете почитать как настроить RDP в Powershell.

...

Теги: #powershell #hyper-v


Популярные тэги
О блоге
Этот блог представляет собой конспекты выученного материала, преобретенного опыта и лучшие практики в системном администрировании и программировании.