Перечисляем виртуальные машины на Hyper-V

Скрипт берет имена или ip адреса физических серверов под управлением Hyper-V (не важно Windows Server 2008R2 with Hyper-V или просто Hyper-V Server) из таблицы базы данных и заносит названия виртуальных машин в другую таблицу базы данных. У таблиц настроены связи по ключевым полям поэтому в MS Access можно достаточно удобно посмотреть где и что работает.

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

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

'==========================================================================
'
' AUTHOR: NefKA
'
' COMMENT: Скрипт пробегает по виртулкам на заданном hyper-v и добавляет их имена  в базу.
'
'==========================================================================

Const adOpenStatic = 3
Const adLockOptimistic = 3
 
Dim sSrv, sNL
sNL = Chr(10)&Chr(13)
 
'создаем нужные объекты
Set objConn = CreateObject("ADODB.Connection")
Set objRSVM = CreateObject("ADODB.Recordset")
Set objRHost = CreateObject("ADODB.Recordset")
'подключаемся к базе
objConn.Open "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = virtuals_db.mdb"
'смотрим таблицу с физическими серверами
objRSHost.Open "select * from THOST", objConn,adOpenStatic,adLockOptimistic
objRSHost.MoveFirst
While Not objRSHost.EOF
    'берем IP адрес сервера (можно и имя брать)
    sSrv = objRSHost.Fields("IPAddress")
    'подключаемся к серверу
    Set WMIService = GetObject("winmgmts:\\"&sSrv&"\root\virtualization")
    'получаем список виртуальных машин, нужно помнить, что на первом месте
    'идет имя самого сервера добавлять его в базу или как-то обрабатывать
    'решать вам
    Set VMList = WMIService.ExecQuery("SELECT * FROM Msvm_ComputerSystem")
    objRSVM.Open "select * from TVM", objConn,adOpenStatic,adLockOptimistic
    For Each VMM In VMList
        objRSVM.AddNew
        objRSVM.Fields("VMElementName") = VMM.Elementname
        objRSVM.Fields("KeyState") = VMM.EnabledState
        objRSVM.Fields("KeyHost") = objRSHost.Fields("Number")
        objRSVM.Update
    Next
    objRSVM.Close
    Set WMIService = Nothing
    Set VMList = Nothing
    objRSHost.MoveNext
Wend 
objRSHost.Close
objConn.Close