При администрировании Hyper-V иногда возникают нетипичные задачи, например, возникает необходимость получить возможность работать с COM-портами в виртуальных машинах Hyper-V Gen2. Хотя многие администраторы, работающие с такими графическими инструментами управления как Hyper-V Manager, Failover Cluster Manager, Virtual Machine Manager знают, что настройки COM-портов есть только свойствах виртуальных машин первого поколения.
То есть разделы настройки COM-портов, которые мы можем видеть в специальных вкладках среди свойств ВМ Hyper-V Gen1, не отображаются в свойствах ВМ Hyper-V Gen2:
Однако, если обратиться к этому вопросу с помощью PowerShell на стороне хоста виртуализации, то мы увидим, что сведения о COM-портах для виртуальных машин второго поколения на самом деле присутствуют:
Get-VMComPort -VMName KOM-DEV02
Конфигурируем порты, предварительно выключив виртуальную машину:
Set-VMComPort -VMName KOM-DEV02 1 \\.\pipe\Hyper-V-VM-DEV02-COM1-TempPipe
Set-VMComPort -VMName KOM-DEV02 2 \\.\pipe\Hyper-V-VM-DEV02-COM2-TempPipe
Get-VMComPort -VMName KOM-DEV02
Включаем виртуальную машину и проверяем результат. Например, заглянем в оснастку Device Manager и убедимся в том, что в составе оборудования гостевой ОС появились COM-порты:
Таким образом мы привяжем виртуальные COM-порты гостевой системы к именованным каналам текущего хоста виртуализации, на котором выполнялись указанные ранее команды.
Чтобы убедиться в том, что каналы действительно созданы на локальном хосте виртуализации, можем выполнить листинг именованных каналов с указанием маски имени:
[System.IO.Directory]::GetFiles('\\.\\pipe\\') -match 'Hyper-V'
Обратите внимание на тот момент, что если COM-порты в ВМ требуется использовать для средств отладки Windows Kernel Debugging, то потребуется отключить режим безопасной загрузки Secure Boot в свойствах виртуальной машины.
Для отключения COM-портов от ВМ (и удаления соответствующих именованных каналов на стороне хоста) можно снова выключить ВМ и выполнить на стороне хоста виртуализации команды вида:
Set-VMComPort -VMName KOM-DEV02 1 ""
Set-VMComPort -VMName KOM-DEV02 2 ""
Дополнительные источники информации:
У меня возникала необходимость работать с COM-портами на VM Hyper-V Gen2 в Windows11. Выполнил все как описано, проверил.
PS C:\Users\1> [System.IO.Directory]::GetFiles('\\.\\pipe\\') -match 'Hyper-V'
\\.\\pipe\\Hyper-V-VM-DEV02-COM1-TempPipe
\\.\\pipe\\Hyper-V-VM-DEV02-COM2-TempPipe
Однако подключенное устройство на хосте "конвертер USB на RS232 UART TTL PL2303TA GSMIN AK86" (настроено на порт COM1) не видно на VM .
COM1 и COM2 в диспетчере устройств на VM есть, но конвертора VM не видит.
Подскажите пожалуйста, в чем проблема? Может для моей задачи надо еще перебрасывать и USB порт?