public static ManagementObject NewResource(this ManagementObject VM, ResourceTypes ResType, string SubType, ManagementScope Scope) { var pool = new ManagementObjectSearcher(Scope, new SelectQuery(VMStrings.ResourcePool, "ResourceType = " + (ushort) ResType + " and ResourceSubType = '" + SubType + "'")) .Get().Cast<ManagementObject>().ToArray(); return !pool.Any() ? null : new ManagementObject(pool.SelectMany( item => item.GetRelated("MSVM_AllocationCapabilities") .Cast<ManagementObject>() .SelectMany( cap => cap.GetRelationships("MSVM_SettingsDefineCapabilities") .Cast<ManagementObject>() .Where(defCap => uint.Parse(defCap["ValueRole"].ToString()) == 0))).First()["PartComponent"].ToString()); /* if (!pool.Any()) return null; var var1 = pool.SelectMany(item => item.GetRelated("MSVM_AllocationCapabilities").Cast<ManagementObject>()); var var2 = var1.SelectMany(cap =>cap.GetRelationships("MSVM_SettingsDefineCapabilities").Cast<ManagementObject>()); var var3 = var2.Where(defCap => uint.Parse(defCap["ValueRole"].ToString()) == 0); var var4 = var3.First(); return var4; */ /* var AllocQuery = new SelectQuery("MSVM_AllocationCapabilities", "ResourceType = " + (ushort)ResType +" and ResourceSubType = '" + SubType + "'"); var AllocResult = new ManagementObjectSearcher(Scope, AllocQuery).Get().Cast<ManagementObject>().FirstOrDefault(); var objQuery = new SelectQuery("MSVM_SettingsDefineCapabilities", "ValueRange = 0"); var objOut = new ManagementObjectSearcher(Scope, objQuery).Get().Cast<ManagementObject>(); objOut = objOut.Where(each => { return each == null ? false : each["GroupComponent"] == null ? false : each["GroupComponent"].ToString().Equals(AllocResult["__Path"].ToString()); }); var Out = objOut.First(); var MC = GetObject(Out["PartComponent"].ToString()); return MC; /* var MgmtSvc = GetServiceObject(Scope, ServiceNames.VSManagement); ManagementBaseObject inputs = MgmtSvc.GetMethodParameters("AddVirtualSystemResources"); inputs["TargetSystem"] = VM.Path.Path; inputs["ResourceSettingData"] = new []{MC.GetText(TextFormat.WmiDtd20)}; var result = MgmtSvc.InvokeMethod("AddVirtualSystemResources", inputs, null); switch (Int32.Parse(result["ReturnValue"].ToString())) { case (int)ReturnCodes.OK: var tmp = result["NewResources"]; return GetObject(((ManagementObject[])result["NewResources"]).First()["__Path"].ToString()); case (int)ReturnCodes.JobStarted: var job = GetObject(result["Job"].ToString()); var r = WaitForJob(job); if (r == 0) { var res = result["NewResources"]; var arr = (ManagementBaseObject[])res; var fir = arr.First(); var path = fir["__Path"].ToString(); var o = GetObject(path); return GetObject(((ManagementObject[])result["NewResources"]).First()["__Path"].ToString()); } return null; default: return null; } */ }