Ошибка импорта виртуальной машины Hyper-V через PowerShell "Import-VM : Unable to import virtual machine due to configuration errors. Please use Compare-VM to repair the virtual machine"

Error importing Hyper-V virtual machine via PowerShell "Import-VM : Unable to import virtual machine due to configuration errors. Please use Compare-VM to repair the virtual machine"Импорт виртуальных машин Hyper-V можно выполнять разными способами – как через графические инструменты типа Hyper-V Manager, так и с помощью PowerShell. Мастер импорта в оснастке Hyper-V Manager, взаимодействуя с администратором в интерактивном диалоге, позволяет разрешить ряд проблем, которые могут возникнуть в ходе импорта. Если же для импорта используется PowerShell, то здесь нюансы несовместимости исходной и целевой сред виртуализации могут выливаться в ошибки, останавливающие процедуру импорта. Так при попытке импорта виртуальной машины, подготовленной сторонней организацией мы можем столкнуться с ситуацией, когда PowerShell командлет Import-VM завершает свою работу с ошибкой вида:

Import-VM : Unable to import virtual machine due to configuration errors.  Please use Compare-VM to repair the virtual machine

Попробуем рассмотреть пример такого импорта с возникновением описанной ошибки и рассмотрим метод её исправления.

Распаковываем файлы экспортированной ранее виртуальной машины в то месторасположение, где она будет выполняться (в нашем примере это каталог C:\ClusterStorage\Volume1\VM01\). В консоли PowerShell переходим в этот каталог и выполняем команду импорта, указав файл конфигурации ВМ *.vmcx):

Set-Location -Path 'C:\ClusterStorage\Volume1\VM01\'
Import-VM -Path '.\Virtual Machines\F5AEEF4B-C5D5-4B05-9780-9B3E8F8EA9AC.vmcx'

В результате мы можем получить выше обозначенную ошибку:

Hyper-V PowerShell error - Import-VM : Unable to import virtual machine due to configuration errors. Please use Compare-VM to repair the virtual machine

Если прочитать онлайн справку по командлету Compare-VM, на который нас отсылает текст ошибки, то там мы сможем найти пример решения подобной проблемы.

Выполним команду проверки совместимости файла конфигурации ВМ с настройками и возможностями текущего хоста виртуализации, и поместим результат проверки в некую переменную, например $report.

$report = Compare-VM -Path '.\Virtual Machines\F5AEEF4B-C5D5-4B05-9780-9B3E8F8EA9AC.vmcx'
$report

Hyper-V PowerShell Compare-VM Summary

Как видим, в свойстве "Incompatibilities" есть набор объектов, каждый из которых представляет какую-либо проблему совместимости. В нашем случае найдено две таких проблемы. Посмотрим подробней:

$report.Incompatibilities | Format-List

Hyper-V PowerShell Compare-VM Incompatibilities

Как видим, ВМ не может быть импортирована на хост, так как на хосте нет
виртуального сетевого коммутатора Hyper-V с именем "New Virtual Switch", которое фигурирует в конфигурации ВМ.

Можем более углублённо посмотреть текущую конфигурацию проблемных компонент через набор данных в свойстве "Source":

$report.Incompatibilities.Source | Select Name,MacAddress,Connected | Format-Table

Hyper-V PowerShell Compare-VM Incompatibilities details

Простым решением этой конкретной проблемы является отключение сетевых адаптеров в конфигурации импортируемой ВМ от несуществующего виртуального коммутатора (после импорта нужные виртуальные коммутаторы Hyper-V можно будет снова назначить на виртуальных сетевых адаптерах ВМ).
У нас две несовместимости и мы обрабатываем каждую их них по порядковому индексу начиная с 0, оперируя при этом объектами конфигурации ВМ точно также, как для любой локальной ВМ на хосте.

$report.Incompatibilities[0].Source | Disconnect-VMNetworkAdapter
$report.Incompatibilities[1].Source | Disconnect-VMNetworkAdapter

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

$report.Incompatibilities.Source | Select Name,MacAddress,Connected | Format-Table

Fix Compare-VM Incompatibilities via Source objects

Теперь пробуем снова выполнить импорт ВМ, вызывая командлет импорта в специальном режиме с обработкой откорректированных данных о совместимости из переменной $report (при этом путь к конфигурации vmcx уже не указываем, так как он уже есть в данных $report):

Import-VM -CompatibilityReport $report

Hyper-V PowerShell success import of VM

Как видим, теперь импорт виртуальной машины завершился успешно.

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