Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Connects a switch port to a LAN endpoint. Upon success of the connection, an active connection instance will be created that associates the port with the LAN endpoint.
Syntax
uint32 ConnectSwitchPort(
[in] Msvm_SwitchPort REF SwitchPort,
[in] CIM_LANEndpoint REF LANEndpoint,
[out] Msvm_ActiveConnection REF ActiveConnection
);
Parameters
-
SwitchPort [in]
-
Type: Msvm_SwitchPort
The switch port to be connected to the LAN endpoint. See Msvm_SwitchPort.
-
LANEndpoint [in]
-
Type: CIM_LANEndpoint
The LAN endpoint to be connected to the switch port. See CIM_LANEndpoint.
-
ActiveConnection [out]
-
Type: Msvm_ActiveConnection
Upon successful completion of this method, this parameter contains the created connection association. See Msvm_ActiveConnection.
Return value
Type: uint32
The method returns 0 if it succeeded synchronously. Any other return value indicates an error.
-
Completed with No Error (0)
-
Method Parameters Checked - Job Started (4096)
-
Failed (32768)
-
Access Denied (32769)
-
Not Supported (32770)
-
Status is unknown (32771)
-
Timeout (32772)
-
Invalid parameter (32773)
-
System is in used (32774)
-
Invalid state for this operation (32775)
-
Incorrect data type (32776)
-
System is not available (32777)
-
Out of memory (32778)
Remarks
Access to the Msvm_VirtualSwitchManagementService class might be restricted by UAC Filtering. For more information, see User Account Control and WMI.
Examples
The following C# sample connects a switch port. The referenced utilities can be found in Common Utilities for the Virtualization Samples.
using System;
using System.Management;
namespace HyperVSamples
{
class ConnectSwitchPortClass
{
ManagementObject switchService = null;
ManagementScope scope = null;
ConnectSwitchPortClass()
{
scope = new ManagementScope(@"root\virtualization", null);
switchService = Utility.GetServiceObject(scope, "Msvm_VirtualSwitchManagementService");
}
ManagementObject GetVirtualSwitch(string switchName)
{
string query = string.Format("select * from Msvm_VirtualSwitch where ElementName = '{0}'", switchName);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, new ObjectQuery(query));
ManagementObjectCollection virtualSwitchs = searcher.Get();
ManagementObject virtualSwitch = null;
foreach (ManagementObject instance in virtualSwitchs)
{
virtualSwitch = instance;
break;
}
searcher.Dispose();
return virtualSwitch;
}
ManagementObject GetVirtualSwitchPort(ManagementObject virtualSwitch, string switchPortName)
{
ManagementObjectCollection switchPorts = virtualSwitch.GetRelated
(
"Msvm_SwitchPort",
"Msvm_HostedAccessPoint",
null,
null,
"Dependent",
"Antecedent",
false,
null
);
ManagementObject switchPort = null;
foreach (ManagementObject instance in switchPorts)
{
if (instance["ElementName"].ToString().ToLower() == switchPortName.ToLower())
{
switchPort = instance;
break;
}
}
return switchPort;
}
ManagementObject GetVMEthernetPort(string vmName, string vmEthernetPortClass)
{
ManagementObject vmEthernetPort = null;
ManagementObject computerSystem = Utility.GetTargetComputer(vmName, scope);
ManagementObjectCollection vmEthernetPorts = computerSystem.GetRelated
(
vmEthernetPortClass,
"Msvm_SystemDevice",
null,
null,
"PartComponent",
"GroupComponent",
false,
null
);
foreach (ManagementObject instance in vmEthernetPorts)
{
vmEthernetPort = instance;
break;
}
return vmEthernetPort;
}
ManagementObject GetVMLanEndPoint(ManagementObject vmEthernetPort)
{
ManagementObjectCollection vmEndPoints = vmEthernetPort.GetRelated
(
"Msvm_VMLanEndPoint",
"Msvm_DeviceSAPImplementation",
null,
null,
"Dependent",
"Antecedent",
false,
null
);
ManagementObject vmEndPoint = null;
foreach (ManagementObject instance in vmEndPoints)
{
vmEndPoint = instance;
break;
}
return vmEndPoint;
}
void ConnectSwitchPort(ManagementObject switchPort, ManagementObject LanEndPoint)
{
ManagementBaseObject inParams = switchService.GetMethodParameters("ConnectSwitchPort");
inParams["SwitchPort"] = switchPort.Path.Path;
inParams["LANEndpoint"] = LanEndPoint.Path.Path;
ManagementBaseObject outParams = switchService.InvokeMethod("ConnectSwitchPort", inParams, null);
if ((UInt32)outParams["ReturnValue"] == ReturnCode.Completed)
{
Console.WriteLine("{0} was connected successfully", switchPort.Path.Path);
}
else
{
Console.WriteLine("Failed to connect {0} switch port.", switchPort.Path.Path);
}
inParams.Dispose();
outParams.Dispose();
switchPort.Dispose();
switchService.Dispose();
}
static void Usage()
{
Console.WriteLine("Usage: ConnectSwitchPort SwitchName SwitchPortName vmName vmNicType");
Console.WriteLine("vmNicType: Synthetic|Emulated");
Console.WriteLine("Example: ConnectSwitchPort {0} \"{1}\" {2} {3}",
"MyFirstSwitch",
"VM Switch Port",
"MyFirstVM",
"Emulated"
);
}
static void Main(string[] args)
{
if (args != null && args.Length != 4)
{
Usage();
return;
}
string switchName = args[0];
string switchPortName = args[1];
string vmName = args[2];
string vmNicType = args[3];
string vmNicClassName = null;
if (vmNicType.ToLower() == "emulated")
{
vmNicClassName = "Msvm_EmulatedEthernetPort";
}
else if (vmNicType.ToLower() == "synthetic")
{
vmNicClassName = "Msvm_SyntheticEthernetPort";
}
else
{
Usage();
}
ConnectSwitchPortClass connectSwitchPort = new ConnectSwitchPortClass();
ManagementObject virtualSwitch = connectSwitchPort.GetVirtualSwitch(switchName);
ManagementObject virtualSwitchPort = connectSwitchPort.GetVirtualSwitchPort(virtualSwitch, switchPortName);
ManagementObject vmNic = connectSwitchPort.GetVMEthernetPort(vmName, vmNicClassName);
ManagementObject vmLanEndPoint = connectSwitchPort.GetVMLanEndPoint(vmNic);
connectSwitchPort.ConnectSwitchPort(virtualSwitchPort, vmLanEndPoint);
virtualSwitch.Dispose();
virtualSwitchPort.Dispose();
vmNic.Dispose();
vmLanEndPoint.Dispose();
}
}
}
The following VBScript sample connects a switch port.
option explicit
dim objWMIService
dim switchService
dim fileSystem
const wmiStarted = 4096
const wmiSuccessful = 0
Main()
'-----------------------------------------------------------------
' Main
'-----------------------------------------------------------------
Sub Main()
dim computer, objArgs
dim switchFriendlyName, switchPortFriendlyName, switch, switchPort
dim vmName, vmEthernetPortType, vmEthernetPortClassName
dim vmEthernetPort, vmEthernetPortEndPoint
set objArgs = WScript.Arguments
if WScript.Arguments.Count = 4 then
switchFriendlyName = objArgs.Unnamed.Item(0)
switchPortFriendlyName = objArgs.Unnamed.Item(1)
vmName = objArgs.Unnamed.Item(2)
vmEthernetPortType = objArgs.Unnamed.Item(3)
vmEthernetPortClassName = GetEthernetPortClassName(vmEthernetPortType)
else
Usage()
end if
set fileSystem = Wscript.CreateObject("Scripting.FileSystemObject")
computer = "."
set objWMIService = GetObject("winmgmts:\\" & computer & "\root\virtualization")
set switchService = objWMIService.ExecQuery("select * from Msvm_VirtualSwitchManagementService").ItemIndex(0)
set switch = GetVirtualSwitch(switchFriendlyName)
if (switch Is Nothing) then
WriteLog Format1("Unable to find switch {0}", switchFriendlyName)
WScript.Quit(1)
end if
set switchPort = GetVirtualSwitchPort(switch, switchPortFriendlyName)
if (switchPort Is Nothing) then
WriteLog Format1("Unable to find switchPort '{0}'", switchPortFriendlyName)
WScript.Quit(1)
end if
set vmEthernetPort = GetVMEthernetPort(vmName, vmEthernetPortClassName)
if (vmEthernetPort Is Nothing) then
WriteLog Format1("Unable to find VM {0} instance.", vmEthernetPortClassName)
WScript.Quit(1)
end if
set vmEthernetPortEndPoint = GetVMEthernetPortEndPoint(vmEthernetPort)
if (vmEthernetPortEndPoint Is Nothing) then
WriteLog Format1("Unable to find VM {0} endpoint.", vmEthernetPortClassName)
WScript.Quit(1)
end if
if ConnectSwitchPort(switchPort, vmEthernetPortEndPoint) then
WriteLog "Done"
WScript.Quit(0)
else
WriteLog "ConnectSwitchPort failed"
WScript.Quit(1)
end if
End Sub
'-----------------------------------------------------------------
' Display command line help
'-----------------------------------------------------------------
Sub Usage()
WScript.Echo "usage: cscript ConnectSwitchPort SwitchFriendlyName" &_
"SwitchPortFriendlyName vmFriendlyName" &_
"vmEthernetPortType"
WScript.Echo "vmEthernetPortType: Synthetic | Emulated" & vbcrlf
WScript.Echo "Example: cscript ConnectSwitchPort ""First VirtualSwitch"" " &_
"""First VirtualSwitch Port"" MyFirstVM Emulated"
WScript.Quit(1)
End Sub
'-----------------------------------------------------------------
' Get vm Ethernet port WMI class name
'-----------------------------------------------------------------
Function GetEthernetPortClassName(vmEthernetportType)
if lcase(vmEthernetPortType) = "emulated" then
GetEthernetPortClassName = "Msvm_EmulatedEthernetPort"
elseif lcase(vmEthernetPortType) = "synthetic" then
GetEthernetPortClassName = "Msvm_SyntheticEthernetPort"
else
usage()
end if
End Function
'-----------------------------------------------------------------
' Retrieve VirtualSwitch
'-----------------------------------------------------------------
Function GetVirtualSwitch(friendlyName)
dim query
set GetVirtualSwitch = Nothing
query = Format1("select * from Msvm_VirtualSwitch where ElementName = '{0}'", friendlyName)
set GetVirtualSwitch= objWMIService.ExecQuery(query).ItemIndex(0)
End Function
'-----------------------------------------------------------------
' Retrieve VirtualSwitchPort
'-----------------------------------------------------------------
Function GetVirtualSwitchPort(switch, switchPortFriendlyName)
dim query, switchPort, switchPorts
set GetVirtualSwitchPort = Nothing
query = Format1("ASSOCIATORS OF {{0}} WHERE resultClass = Msvm_SwitchPort", switch.Path_.Path)
set switchPorts= objWMIService.ExecQuery(query)
for each switchPort in switchPorts
if lcase(switchPort.ElementName) = lcase(switchPortFriendlyName) then
set GetVirtualSwitchPort = switchPort
end if
next
End Function
'-----------------------------------------------------------------
' Get VM Ethernet port
'-----------------------------------------------------------------
Function GetVMEthernetPort(vmName, vmEthernetPortClass)
dim query, vmEthernetPort, vm
set GetVMEthernetPort = Nothing
query = Format1("select * from Msvm_ComputerSystem where ElementName = '{0}'", vmName)
set vm= objWMIService.ExecQuery(query).ItemIndex(0)
if (vm Is Nothing) then
WriteLog Format1("Unable to find specified VM {0}", vmName)
WScript.Quit(1)
end if
query = Format2("ASSOCIATORS OF {{0}} WHERE resultClass = {1}", vm.Path_.Path, vmEthernetPortClass)
set GetVMEthernetPort = objWMIService.ExecQuery(query).itemIndex(0)
End Function
'-----------------------------------------------------------------
' Get VM Ethernet port endpoint
'-----------------------------------------------------------------
Function GetVMEthernetPortEndPoint(vmEthernetPort)
dim query, vmEthernetPorts, vm
set GetVMEthernetPortEndPoint = Nothing
query = Format1("ASSOCIATORS OF {{0}} WHERE resultClass = Msvm_VmLANEndpoint", vmEthernetPort.Path_.Path)
set GetVMEthernetPortEndPoint = objWMIService.ExecQuery(query).ItemIndex(0)
End Function
'-----------------------------------------------------------------
' Connect switch port with vm Ethernet endpoint
'-----------------------------------------------------------------
Function ConnectSwitchPort(switchPort, lanEndpoint)
dim objInParam, objOutParams
ConnectSwitchPort = false
set objInParam = switchService.Methods_("ConnectSwitchPort").InParameters.SpawnInstance_()
objInParam.LANEndPoint = lanEndpoint.Path_.Path
objInParam.SwitchPort = switchPort.Path_.Path
set objOutParams = switchService.ExecMethod_("ConnectSwitchPort", objInParam)
if objOutParams.ReturnValue = wmiSuccessful then
ConnectSwitchPort = true
else
WriteLog Format1("ConnectSwitchPort failed with error code {0}", objOutParams.ReturnValue)
end if
End Function
'-----------------------------------------------------------------
' Create the console log files.
'-----------------------------------------------------------------
Sub WriteLog(line)
dim fileStream
set fileStream = fileSystem.OpenTextFile(".\ConnectSwitchPort.log", 8, true)
WScript.Echo line
fileStream.WriteLine line
fileStream.Close
End Sub
'------------------------------------------------------------------------------
' The string formatting functions to avoid string concatenation.
'------------------------------------------------------------------------------
Function Format2(myString, arg0, arg1)
Format2 = Format1(myString, arg0)
Format2 = Replace(Format2, "{1}", arg1)
End Function
'------------------------------------------------------------------------------
' The string formatting functions to avoid string concatenation.
'------------------------------------------------------------------------------
Function Format1(myString, arg0)
Format1 = Replace(myString, "{0}", arg0)
End Function
Requirements
| Minimum supported client |
None supported |
| Minimum supported server |
Windows Server 2008 |
| End of client support |
None supported |
| End of server support |
Windows Server 2012 |
| Namespace |
Root\Virtualization |
| MOF |
|