// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright (c) Microsoft. All rights reserved.
namespace Microsoft.Samples.HyperV.Networking
{
using System;
using System.Management;
using System.Globalization;
using Microsoft.Samples.HyperV.Common;
static class ModifySwitchSample
{
///
/// Modifies the name and notes of an existing switch. We also show how to modify the
/// IOVPreferred property.
///
/// The current name of the switch to change.
/// The new name for the switch.
/// The new notes to apply to the switch.
static void
ModifySwitchName(
string existingSwitchName,
string newSwitchName,
string newNotes)
{
ManagementScope scope = new ManagementScope(@"root\virtualization\v2");
//
// Get the switch we want to modify.
//
using (ManagementObject ethernetSwitch = NetworkingUtilities.FindEthernetSwitch(existingSwitchName, scope))
//
// To make modifications to the switch, we need to modify its configuration object.
//
using (ManagementObject ethernetSwitchSettings = WmiUtilities.GetFirstObjectFromCollection(
ethernetSwitch.GetRelated("Msvm_VirtualEthernetSwitchSettingData",
"Msvm_SettingsDefineState",
null, null, null, null, false, null)))
{
//
// Modify its properties as desired.
//
ethernetSwitchSettings["ElementName"] = newSwitchName;
ethernetSwitchSettings["Notes"] = new string[] { newNotes };
//
// This is how you can modify the IOV Preferred property from its current value.
// We leave this commented out because it could potentially fail for a system that doesn't
// support IOV.
//
// ethernetSwitchSettings["IOVPreferred"] = !((bool)ethernetSwitchSettings["IOVPreferred"]);
//
// Now call the ModifySystemSettings method to apply the changes.
//
using (ManagementObject switchService = NetworkingUtilities.GetEthernetSwitchManagementService(scope))
using (ManagementBaseObject inParams = switchService.GetMethodParameters("ModifySystemSettings"))
{
inParams["SystemSettings"] = ethernetSwitchSettings.GetText(TextFormat.WmiDtd20);
using (ManagementBaseObject outParams =
switchService.InvokeMethod("ModifySystemSettings", inParams, null))
{
WmiUtilities.ValidateOutput(outParams, scope);
}
}
}
Console.WriteLine(string.Format(CultureInfo.CurrentCulture,
"The switch '{0}' was renamed to '{1}' successfully.",
existingSwitchName, newSwitchName));
}
///
/// Entry point for the ModifySwitch sample.
///
/// The command line arguments.
internal static void
ExecuteSample(
string[] args)
{
if ((args.Length != 2 && args.Length != 3) || (args.Length > 0 && args[0] == "/?"))
{
Console.WriteLine("Usage: ModifySwitch SwitchName NewSwitchName [Notes]\n");
Console.WriteLine("Example: ModifySwitch MySwitch MyModifiedSwitch \"I updated this switch\"");
return;
}
try
{
string notes = (args.Length == 3) ? args[2] : null;
ModifySwitchName(args[0], args[1], notes);
}
catch (Exception ex)
{
Console.WriteLine("Failed to modify the switch. Error message details:\n");
Console.WriteLine(ex.Message);
}
}
}
}