option explicit
Dim HyperVServer
Dim SwitchFriendlyName
Dim TypeLib
Dim SwitchName
Dim ExternalSwitchPortFriendlyName
Dim ExternalSwitchPortName
Dim ExternalEthernetPort
Dim ExternalEthernetPorts
Dim ExternalEthernetPortName
Dim ExternalEthernetPortString
Dim ExternalLanEndPoint
Dim ScopeofResidence
Dim WMIService
Dim VirtualSwitchManagementService
Dim Switch
Dim ExternalSwitchPort
Dim InParam
Dim OutParams
Dim Job
Dim Test
'Prompt for the Hyper-V Server to use
HyperVServer = InputBox("Specify the Hyper-V Server to create the internal virtual network switch:")
'Get an instance of the WMI Service in the virtualization namespace.
set WMIService = GetObject("winmgmts:\\" & HyperVServer & "\root\virtualization")
'Get the Msvm_VirtualSwitchManagementService object
set VirtualSwitchManagementService = WMIService.ExecQuery("select * from Msvm_VirtualSwitchManagementService").ItemIndex(0)
'Get all possible physical network adapters that can be used for a switch
Set ExternalEthernetPorts = WMIService.ExecQuery("Select * From Msvm_ExternalEthernetPort WHERE IsBound=False AND EnabledState=2")
'Build the string to ask what physical network adapter to use
ExternalEthernetPortString = "The following network adapters are available:" & chr(10) & chr(10)
for each ExternalEthernetPort in ExternalEthernetPorts
ExternalEthernetPortString = ExternalEthernetPortString & ExternalEthernetPort.Name & chr(10)
next
ExternalEthernetPortString = ExternalEthernetPortString & chr(10) & "Please type in the (exact) name of the network adapter you want to use for the external connection:"
'Setup a loop to keep on asking for a network adapter until we get a valid response
Test = true
while test
ExternalEthernetPortName = InputBox(ExternalEthernetPortString)
on error resume next
Set ExternalEthernetPort = WMIService.ExecQuery("Select * From Msvm_ExternalEthernetPort WHERE Name='" & ExternalEthernetPortName & "' AND IsBound=False AND EnabledState=2").ItemIndex(0)
If Err.Number = 0 Then
Test = false
End If
on error goto 0
wend
'Get friendly name for the external virtual network switch
SwitchFriendlyName = InputBox("Specify the name of the new external virtual network switch:")
'Set the friendly name for the external switch port
ExternalSwitchPortFriendlyName = "ExternalSwitchPort"
'Generate GUIDs for the unique switch name and external ethernet port name
Set TypeLib = CreateObject("Scriptlet.TypeLib")
SwitchName = TypeLib.Guid
Set TypeLib = CreateObject("Scriptlet.TypeLib")
ExternalSwitchPortName = TypeLib.Guid
'Create a new virtual network switch
'Setup the input parameter list
set InParam = VirtualSwitchManagementService.Methods_("CreateSwitch").InParameters.SpawnInstance_()
InParam.FriendlyName = SwitchFriendlyName
InParam.Name = SwitchName
InParam.NumLearnableAddresses = 1024
InParam.ScopeofResidence = null
'Execute the method and store the results in OutParam
set OutParams = VirtualSwitchManagementService.ExecMethod_("CreateSwitch", InParam)
'Get the new switch object out of the results
Set Switch = WMIService.Get(OutParams.CreatedVirtualSwitch)
'Create a new external switch port
'Setup the input parameter list
set InParam = VirtualSwitchManagementService.Methods_("CreateSwitchPort").InParameters.SpawnInstance_()
InParam.VirtualSwitch = Switch.Path_.Path
InParam.FriendlyName = ExternalSwitchPortFriendlyName
InParam.Name = ExternalSwitchPortName
InParam.ScopeofResidence = null
'Execute the method and store the results in OutParam
set OutParams = VirtualSwitchManagementService.ExecMethod_("CreateSwitchPort", InParam)
'Get the new external switch port out of the results
Set ExternalSwitchPort = WMIService.Get(OutParams.CreatedSwitchPort)
'Bind the external ethernet port to prepare it to be connected to a switch
'Setup the input parameter list
set InParam = VirtualSwitchManagementService.Methods_("BindExternalEthernetPort").InParameters.SpawnInstance_()
InParam.ExternalEthernetPort = ExternalEthernetPort.Path_.Path
'Execute the method and store the results in OutParam
set OutParams = VirtualSwitchManagementService.ExecMethod_("BindExternalEthernetPort", InParam)
'Get the CIM_LanEndpoint Object associated with the external ethernet port
Set ExternalLanEndPoint = (ExternalEthernetPort.Associators_("CIM_DeviceSAPImplementation", "Cim_LanEndpoint")).ItemIndex(0)
'Connect the switch to the external ethernet port via the CIM_LanEndpoint
'Setup the input parameter list
set InParam = VirtualSwitchManagementService.Methods_("ConnectSwitchPort").InParameters.SpawnInstance_()
InParam.LANEndPoint = ExternalLanEndPoint.Path_.Path
InParam.SwitchPort = ExternalSwitchPort.Path_.Path
'Execute the method and store the results in OutParam
set OutParams = VirtualSwitchManagementService.ExecMethod_("ConnectSwitchPort", InParam)