Как я могу прочитать physicalhostname registrykey через WMI
Мне нужно прочитать
SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters\PhysicalHostNameРаздел реестра для получения имени хоста виртуальной машины Hyper V.
Я могу подключиться и также получить много информации через wmi в других частях программы, но я спотыкаюсь, если дело доходит до чтения раздела реестра :(
Я знаю, что есть способ получить имена всех виртуальных машин через пространство имен/ virtualization/. Однако это не то, что мне нужно, так как я должен нацелиться непосредственно на виртуальные машины. Код не обязательно должен быть внутри vb.net я также могу перевести c#.
Дополнительная Отладочная Информация:
Состояние isConnected области управления истинно
OutParams ("sValue") ничего не возвращает
Было бы ооочень приятно, если бы кто-нибудь мог мне помочь в этом деле x.x !
Что я уже пробовал:
Dim strStringValue As String = "" Dim objManagementScope As ManagementScope Dim objManagementClass As ManagementClass Dim objManagementBaseObject As ManagementBaseObject Dim intRegistryHive As Integer = 80000002 Dim strSubKeyName As String = "SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters" Dim strValueName As String = "PhysicalHostName" strSubKeyName = strSubKeyName.Trim strValueName = strValueName.Trim If (strSubKeyName.Length > 0) Then 'Connect to the specified computer registry objManagementScope = New ManagementScope With objManagementScope With .Path .Server = m_ComputerName .NamespacePath = "root\default" End With With .Options .EnablePrivileges = True .Impersonation = ImpersonationLevel.Impersonate .Username = frmMain.txtUserName.Text .Password = frmMain.txtPassword.Text End With .Connect() End With 'Retrieve the required value from the registry If objManagementScope.IsConnected Then objManagementClass = New ManagementClass("StdRegProv") With objManagementClass .Scope = objManagementScope objManagementBaseObject = .GetMethodParameters("GetStringValue") With objManagementBaseObject .SetPropertyValue("hDefKey", CType("&H" & Hex(intRegistryHive), Long)) .SetPropertyValue("sSubKeyName", strSubKeyName) .SetPropertyValue("sValueName", strValueName) End With Dim OutParams As ManagementBaseObject = .InvokeMethod("GetStringValue", objManagementBaseObject, Nothing) strStringValue = CType(OutParams("sValue"), String) If strStringValue = Nothing Then strStringValue = "" End With End If End If Return strStringValue Catch ex As Exception Return "" End Try
Проблема, вероятно, где-то в
If objManagementScope.IsConnected Then objManagementClass = New ManagementClass("StdRegProv") With objManagementClass .Scope = objManagementScope objManagementBaseObject = .GetMethodParameters("GetStringValue") With objManagementBaseObject .SetPropertyValue("hDefKey", CType("&H" & Hex(intRegistryHive), Long)) .SetPropertyValue("sSubKeyName", strSubKeyName) .SetPropertyValue("sValueName", strValueName) End With Dim OutParams As ManagementBaseObject = .InvokeMethod("GetStringValue", objManagementBaseObject, Nothing) Dim tst As Object = OutParams("sValue") strStringValue = CType(OutParams("sValue"), String) If strStringValue = Nothing Then strStringValue = "" End With End If