Как добавить COM-порт в виртуальную машину Hyper-V Gen2

How to add a COM port to a Hyper-V Gen2 virtual machineПри администрировании Hyper-V иногда возникают нетипичные задачи, например, возникает необходимость получить возможность работать с COM-портами в виртуальных машинах Hyper-V Gen2. Хотя многие администраторы, работающие с такими графическими инструментами управления как Hyper-V Manager, Failover Cluster Manager, Virtual Machine Manager знают, что настройки COM-портов есть только свойствах виртуальных машин первого поколения.

То есть разделы настройки COM-портов, которые мы можем видеть в специальных вкладках среди свойств ВМ Hyper-V Gen1, не отображаются в свойствах ВМ Hyper-V Gen2:

Hyper-V Manager VM Hardware and COM ports

Однако, если обратиться к этому вопросу с помощью PowerShell на стороне хоста виртуализации, то мы увидим, что сведения о COM-портах для виртуальных машин второго поколения на самом деле присутствуют:

Get-VMComPort -VMName KOM-DEV02

PowerShell Get-VMComPort

Конфигурируем порты, предварительно выключив виртуальную машину:

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

PowerShell Set-VMComPort

Включаем виртуальную машину и проверяем результат. Например, заглянем в оснастку Device Manager и убедимся в том, что в составе оборудования гостевой ОС появились COM-порты:

Hyper-V VM Gen2 with COM ports in Device Manager

Таким образом мы привяжем виртуальные COM-порты гостевой системы к именованным каналам текущего хоста виртуализации, на котором выполнялись указанные ранее команды.

Чтобы убедиться в том, что каналы действительно созданы на локальном хосте виртуализации, можем выполнить листинг именованных каналов с указанием маски имени:

[System.IO.Directory]::GetFiles('\\.\\pipe\\') -match 'Hyper-V'

PowerShell Get Pipes in Hyper-V Host

Обратите внимание на тот момент, что если COM-порты в ВМ требуется использовать для средств отладки Windows Kernel Debugging, то потребуется отключить режим безопасной загрузки Secure Boot в свойствах виртуальной машины.

Для отключения COM-портов от ВМ (и удаления соответствующих именованных каналов на стороне хоста) можно снова выключить ВМ и выполнить на стороне хоста виртуализации команды вида:

Set-VMComPort -VMName KOM-DEV02 1 ""
Set-VMComPort -VMName KOM-DEV02 2 ""

Дополнительные источники информации:

Только один комментарий Комментировать

  1. Sergey /

    У меня возникала необходимость работать с 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 порт?

Добавить комментарий