CreateSwitch method of the Msvm_VirtualSwitchManagementService class

Creates a new virtual switch.


uint32 CreateSwitch(
  [in]  string                 Name,
  [in]  string                 FriendlyName,
  [in]  uint32                 NumLearnableAddresses,
  [in]  string                 ScopeOfResidence,
  [out] Msvm_VirtualSwitch REF CreatedVirtualSwitch


Name [in]

Type: string

The name of the switch. This name must be unique to all virtual switches in the system.

FriendlyName [in]

Type: string

A user-readable name for the switch.

NumLearnableAddresses [in]

Type: uint32

The maximum number of MAC addresses that can be learned by the switch.

ScopeOfResidence [in]

Type: string

The initial scope of the switch.

CreatedVirtualSwitch [out]

Type: Msvm_VirtualSwitch

Upon successful completion of this method, this parameter contains the created switch. See Msvm_VirtualSwitch.

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)


Access to the Msvm_VirtualSwitchManagementService class might be restricted by UAC Filtering. For more information, see User Account Control and WMI.


The following C# sample creates a virtual switch. The referenced utilities can be found in Common Utilities for the Virtualization Samples.

using System;
using System.Management;

namespace HyperVSamples
    class CreateSwitchClass
        static ManagementObject CreateSwitch(string name, string friendlyName, int learnableAddress)
            ManagementScope scope = new ManagementScope(@"root\virtualization", null);
            ManagementObject switchService = Utility.GetServiceObject(scope, "Msvm_VirtualSwitchManagementService");

            ManagementObject createdSwitch = null;

            ManagementBaseObject inParams = switchService.GetMethodParameters("CreateSwitch");
            inParams["FriendlyName"] = friendlyName;
            inParams["Name"] = name;
            inParams["NumLearnableAddresses"] = learnableAddress;
            inParams["ScopeofResidence"] = null;
            ManagementBaseObject outParams = switchService.InvokeMethod("CreateSwitch", inParams, null);
            if ((UInt32)outParams["ReturnValue"] == ReturnCode.Completed)
                Console.WriteLine("{0} was created successfully", inParams["Name"]);
                createdSwitch = new ManagementObject(outParams["CreatedVirtualSwitch"].ToString());
                Console.WriteLine("Failed to create {0} switch.", inParams["Name"]);
            return createdSwitch;

        static void Main(string[] args)
            if (args != null && args.Length != 3)
                Console.WriteLine("Usage: CreateSwitch name friendlyName NumLearnableAddresses");
                Console.WriteLine("Example: CreateSwitch FirstSwitch \"My First Switch\" 1024");
            CreateSwitch(args[0], args[1], int.Parse(args[2]));

The following VBScript sample creates a virtual switch.

option explicit 

dim objWMIService
dim switchService
dim fileSystem

const wmiStarted = 4096
const wmiSuccessful = 0


' Main
Sub Main()

    dim name, friendlyName, learnableAddress
    dim computer, objArgs, createdSwitch

    set objArgs = WScript.Arguments
    if WScript.Arguments.Count = 3 then
       name = objArgs.Unnamed.Item(0)
       friendlyName = objArgs.Unnamed.Item(1)
       learnableAddress = objArgs.Unnamed.Item(2)
       WScript.Echo "usage: cscript CreateSwitch.vbs name friendlyName learnableAddress"
       WScript.Echo "Example: CreateSwitch FirstSwitch ""My First Switch"" 1024"
    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 createdSwitch = CreateSwitch(name, friendlyName, learnableAddress)
    if createdSwitch Is Nothing then
        WriteLog "CreateSwitch failed."
        WriteLog "Done"
    end if

End Sub

' Create a virtual switch by calling CreateSwitch WMI method
Function CreateSwitch(name, friendlyName, learnableAddress)

    dim objInParam, objOutParams
    set CreateSwitch = Nothing
    set objInParam = switchService.Methods_("CreateSwitch").InParameters.SpawnInstance_()
    objInParam.FriendlyName = friendlyName
    objInParam.Name = name
    objInParam.NumLearnableAddresses = learnableAddress
    objInParam.ScopeofResidence = null

    set objOutParams = switchService.ExecMethod_("CreateSwitch", objInParam)
    if objOutParams.ReturnValue = wmiSuccessful then
        set CreateSwitch = objWMIService.Get(objOutParams.CreatedVirtualSwitch)
        WriteLog Format1("CreateSwitch 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(".\CreateSwitch.log", 8, true)
    WScript.Echo line
    fileStream.WriteLine line

End Sub

' The string formatting functions to avoid string concatenation.
Function Format1(myString, arg0)
    Format1 = Replace(myString, "{0}", arg0)
End Function


Minimum supported client
None supported
Minimum supported server
Windows Server 2008
End of client support
None supported
End of server support
Windows Server 2012

See also