/// <summary> /// Returns a list of VM ManagementObjects which have the specified VHD attached. /// </summary> /// <param name="VHD"></param> /// <param name="Server"></param> /// <returns></returns> public static IEnumerable<ManagementObject> LocateVHD(string VHD, string Server = null) { ManagementScope scope = GetScope(Server); var VHDs = new ManagementObjectSearcher(scope, new SelectQuery(VMStrings.ResAllocData, "ResourceSubType like '" + ResourceSubTypes.VHD + "'")).Get().Cast<ManagementObject>(); VHDs = VHDs.Where(obj => { string HD = ((string[]) obj["Connection"])[0]; return HD.Equals(VHD, StringComparison.InvariantCultureIgnoreCase); }); List<ManagementObject> VMs = new List<ManagementObject>(); foreach (var vhd in VHDs) { string id = ((string) vhd["InstanceID"]).Split('\\')[0].Split(':').Last(); VMs.AddRange(GetVM(scope, VMID: id)); } return VMs; }