// 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.Storage
{
using System;
using System.Globalization;
using System.Management;
using Microsoft.Samples.HyperV.Common;
static class StorageDetachSample
{
///
/// Detaches a VHD/VHDX that is currently mounted.
///
/// The name of the server on which to perform the action.
/// The path to the VHD/VHDX to detach.
internal static void
DetachVirtualHardDisk(
string ServerName,
string VirtualHardDiskPath)
{
ManagementScope scope =
new ManagementScope("\\\\" + ServerName + "\\root\\virtualization\\v2");
ManagementClass mountedStorageImageServiceClass =
new ManagementClass("Msvm_MountedStorageImage");
mountedStorageImageServiceClass.Scope = scope;
using (ManagementObjectCollection collection = mountedStorageImageServiceClass.GetInstances())
{
foreach (ManagementObject image in collection)
{
using (image)
{
string Name = image.GetPropertyValue("Name").ToString();
if (string.Equals(Name, VirtualHardDiskPath, StringComparison.OrdinalIgnoreCase))
{
image.InvokeMethod("DetachVirtualHardDisk", null, null);
}
}
}
}
}
}
}