2011-07-16 1 views
2

힐로 모든WMI를 통해 HyperV 안에서 가상 컴퓨터의 네트워크 어댑터의 게이트웨이, 서브넷을 변경하는 방법?

내 질문은 : 1. 어떻게 프로그래밍 방식으로 WMI 및 C#을 통해 하이퍼 V의 가상 머신 내부 서브넷 마스크, DNS 주소 및 네트워크 어댑터의 게이트웨이 주소를 설정?

참고 : here

이 친절하게 감사

에게 스티브 도움이 설명 된 바와 같이 나는 성공적으로 추가하고 retireve IP 주소 수 있어요

, 노출 된 SCVMM 서비스 아무튼 그를 지원하지 않는
+0

이 작업을 수행하는 방법에 대한 코드 샘플이 있습니까? 나는 똑같은 질문을하고 해결책을 찾고 있는데, 고마워. – KPS

답변

2

하이퍼 V 그렇게 할 방법이 없어요. 수동으로해야 해요. 서브넷 및 게이트웨이와 함께 IP 설정

0

서버 2012 이상인 경우 @ slayerbot의 링크를 사용하겠습니다. 2012 이상이 아닌 경우 Win32_NetworkAdapterConfiguration 클래스의 메서드를 살펴볼 수 있습니다. 즉

https://msdn.microsoft.com/en-us/library/aa394217(v=vs.85).aspx#methods

에서는 Win32_NetworkAdapterConfiguration의 SetDNSServerSearchOrder의 EnableStatic 방법

.

IP 주소를 변경하지 않으면 먼저 현재 IP 주소를 쿼리 한 다음 "EnableStatic"inParams에서 다시 사용합니다.

또한 변경하려는 NIC의 색인을 알아야합니다.

Imports System.Globalization 
Imports System.Management 

Module SetDNSServerSearchOrder 

    Dim UserName As String = "DOMAIN\UserName" 
    Dim Password As String = "Passw0rd1" 

    Public Sub Main() 
     Dim VmName As String = "HYPERVGUESTOS1"      ' Name of the VM to change NetworkAdapter on 
     Dim NicIndex As Int16 = 0         ' Index of the network adapter to change 
     Dim DnsList As String() = {"192.168.0.10", "192.168.0.11"} ' List of DNS IP Addresses 
     Dim Gateway As String = "192.168.0.1"      ' Gateway IP address 
     Dim IPAddress As String = "192.168.1.101"     ' New (or old) IP Address 
     Dim Subnet As String = "255.255.254.0"      ' Subnet mask 

     ' Get the network adapter to configure 
     Dim NetworkAdapter As ManagementObject = GetAdapter(VmName, NicIndex) 

     ' Set DNS Server search order, then change the gateway, then IP/Subnet 
     changeDNS(NetworkAdapter, DnsList) 
     ChangeGateway(NetworkAdapter, GateWay) 
     changeIP(NetworkAdapter, IPAddress, Subnet) 
    End Sub 

    Private Function GetAdapter(VmName As String, NicIndex As Int16) As ManagementObject 
     Dim Options As New ConnectionOptions With { 
      .Username = UserName, 
      .Password = Password 
     } 

     Dim Scope As New ManagementScope("\\" & VmName & "\Root\CIMV2", Options) 
     Dim Query As New SelectQuery("SELECT * FROM Win32_NetworkAdapterConfiguration.Index=" & NicIndex & "") 
     Using Searcher As New ManagementObjectSearcher(Scope, Query) 
      Using Collection As ManagementObjectCollection = Searcher.Get() 
       If Collection.Count = 0 Then 
        Throw New ManagementException(String.Format(CultureInfo.CurrentCulture, "No network adapter could be found with index ""{0}"" on host ""{1}""" & NicIndex, VmName)) 
       End If 

       For Each NetworkAdapter As ManagementObject In Collection 
        Return NetworkAdapter 
        Exit For 
       Next 
      End Using 
     End Using 
     Return Nothing 
    End Function 

    Private Sub changeDNS(NetworkAdapter As ManagementObject, DnsList As String()) 
     Using inParams As ManagementObject = NetworkAdapter.GetMethodParameters("SetDNSServerSearchOrder") 
      inParams("DNSServerSearchOrder") = DnsList 

      Using outParams As ManagementObject = NetworkAdapter.InvokeMethod("SetDNSServerSearchOrder", inParams, Nothing) 
       ' Validate the job output here 
      End Using 
     End Using 
    End Sub 

    Private Sub changeGateway(NetworkAdapter As ManagementObject, Gateway As String) 
     Using inParams As ManagementObject = NetworkAdapter.GetMethodParameters("SetGateways") 
      inParams("DefaultIPGateway") = Gateway 

      Using outParams As ManagementObject = NetworkAdapter.InvokeMethod("SetGateways", inParams, Nothing) 
       ' Validate the job output here 
      End Using 
     End Using 
    End Sub 

    Private Sub changeIP(NetworkAdapter As ManagementObject, IPAddress As String, Subnet As String) 
     Using inParams As ManagementObject = NetworkAdapter.GetMethodParameters("EnableStatic") 
      inParams("IPAddress") = IPAddress 
      inParams("SubnetMask") = Subnet 

      Using outParams As ManagementObject = NetworkAdapter.InvokeMethod("EnableStatic", inParams, Nothing) 
       ' Validate the job output here 
      End Using 
     End Using 
    End Sub 
End Module 
관련 문제