Ошибка "Hyper-V encountered an error trying to access an object on computer 'HostName' because the object was not found. The object might have been deleted."

Hyper-V encountered an error trying to access an object on computer 'localhost' because the object was not foundПосле ряда удачных и не очень удачных экспериментов с развёртыванием ПО на хостах виртуализации тестового кластера Hyper-V на базе ОС Windows Server 2016 столкнулись с проблемой потери управления компонентами виртуализации. В частности, при попытке получить информацию о виртуальных машинах (Get-VM) или самом хосте (Get-VMHost) через PowerShell появились однотипные ошибки вида:

Get-VM : Hyper-V encountered an error trying to access an object on computer 'KOM-VM01' because the object was not found. The object might have been deleted. Verify that the Virtual Machine Management service on the computer is running.
At line:1 char:1
+ get-VM
+ ~~~~~~
    + CategoryInfo          : ObjectNotFound: (:) [Get-VM], VirtualizationException
    + FullyQualifiedErrorId : ObjectNotFound,Microsoft.HyperV.PowerShell.Commands.GetVM

При попытке подключения к хосту с помощью графической консоли Hyper-V Manager, появилась схожая по содержанию ошибка об отсутствии объекта.

image

Проверяем состояние службы "Hyper-V Virtual Machine Management" (vmms). Служба должна быть включена и запущена.

Следующим этапом выполняем поверхностную проверку состояния инструментария WMI для Hyper-V. В первую очередь убедимся в том, что пространство имён WMI, связанное с виртуализацией вообще присутствует:

Get-WmiObject -Namespace 'root\virtualization' -List
Get-WmiObject -Namespace 'root\virtualization' -Class __Namespace

В Windows Server 2016 последняя команда должна вернуть пространство имён 'root\virtualization\v2':

Hyper-V WMI root virtualization v2

Также можно попробовать запросить из этого пространства имён какую-нибудь информацию. Например, давайте попробуем получить статусные данные о виртуальных машинах хоста:

Get-WmiObject -Class "Msvm_ComputerSystem" –Namespace "root\virtualization\v2" | ? {$_.Caption -eq "Virtual Machine" } | Select ElementName,Status,StatusDescriptions

Get Hyper-V VM status via WMI in PowerShell

Если запросы к WMI возвращают ошибки об отсутствии объекта, то можно попробовать выполнить процедуру восстановления пространства WMI, связанного с работой компонент виртуализации, командой вида: 

mofcomp %SystemRoot%\System32\WindowsVirtualization.V2.mof

Recover WMI for Hyper-V

В нашем случае, после выполнения указанной команды, без каких-либо дополнительных манипуляций, заработали командлеты PowerShell и консоль Hyper-V Manager.

Всего комментариев: 2 Комментировать

  1. Sergey /

    Прошу уточнить, в случае, если запрос к списку и состоянию ВМ выдается без ошибок, то надо ли выполнять восстановление пространства WMI?

    1. Алексей Максимов / Автор записи

      Насколько помню, у нас были ошибки при попытке листинга объектов через PS, поэтому мы и проводили восстановление через WindowsVirtualization.V2.mof

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