设为首页 收藏本站
查看: 2013|回复: 0

[经验分享] C# 实现 Hyper-V 虚拟机 管理

[复制链接]

尚未签到

发表于 2015-4-2 15:19:44 | 显示全部楼层 |阅读模式
本帖最后由 wuyvzhang 于 2016-8-2 17:27 编辑

  Hyper-V WMI Provider   工具类如下: using System; using System.Collections.Generic; using System.Management; namespace MyNamespace { #region Return Value of RequestStateChange Method of the Msvm_ComputerSystem Class //Return Value of RequestStateChange Method of the Msvm_ComputerSystem Class //This method returns one of the following values. //Completed with No Error (0) //DMTF Reserved (7–4095) //Method Parameters Checked - Transition Started (4096) //Failed (32768) //Access Denied (32769) //Not Supported (32770) //Status is unknown (32771) //Timeout (32772) //Invalid parameter (32773) //System is in use (32774) //Invalid state for this operation (32775) //Incorrect data type (32776) //System is not available (32777) //Out of memory (32778) #endregion public class VMManagement { private static string hostServer = "hostServer"; private static string userName = "username"; private static string password = "password"; public static string HostServer { get; set; } public static string UserName { get; set; } public static string Password { get; set; } public static VMState GetVMState(string vmName) { VMState vmState = VMState.Undefined; ConnectionOptions co = new ConnectionOptions(); co.Username = userName; co.Password = password; ManagementScope manScope = new ManagementScope(string.Format(@"\\{0}\root\virtualization", hostServer), co); manScope.Connect(); ObjectQuery queryObj = new ObjectQuery("SELECT * FROM Msvm_ComputerSystem"); ManagementObjectSearcher vmSearcher = new ManagementObjectSearcher(manScope, queryObj); ManagementObjectCollection vmCollection = vmSearcher.Get(); foreach (ManagementObject vm in vmCollection) { if (string.Compare(vm["ElementName"].ToString(), vmName, true) == 0) { vmState = ConvertStrToVMState(vm["EnabledState"].ToString()); break; } } return vmState; } public static bool StartUp(string vmName) { return ChangeVMState(vmName, VMState.Enabled); } public static bool ShutDown(string vmName) { return ChangeVMState(vmName, VMState.Disabled); } public static bool RollBack(string vmName, string snapShotName) { ConnectionOptions co = new ConnectionOptions(); co.Username = userName; co.Password = password; ManagementScope manScope = new ManagementScope(string.Format(@"\\{0}\root\virtualization", hostServer), co); manScope.Connect(); ObjectQuery queryObj = new ObjectQuery("SELECT * FROM Msvm_ComputerSystem"); ManagementObjectSearcher vmSearcher = new ManagementObjectSearcher(manScope, queryObj); ManagementObjectCollection vmCollection = vmSearcher.Get(); object opResult = null; // loop the virtual machines foreach (ManagementObject vm in vmCollection) { // find the vmName virtual machine, then get the list of snapshot if (string.Compare(vm["ElementName"].ToString(), vmName, true) == 0) { ObjectQuery queryObj1 = new ObjectQuery(string.Format("SELECT * FROM Msvm_VirtualSystemSettingData WHERE SystemName='{0}' and SettingType=5", vm["Name"].ToString())); ManagementObjectSearcher vmSearcher1 = new ManagementObjectSearcher(manScope, queryObj1); ManagementObjectCollection vmCollection1 = vmSearcher1.Get(); ManagementObject snapshot = null; // find and record the snapShot object foreach (ManagementObject snap in vmCollection1) { if (string.Compare(snap["ElementName"].ToString(), snapShotName, true) == 0) { snapshot = snap; break; } } ObjectQuery queryObj2 = new ObjectQuery("SELECT * FROM Msvm_VirtualSystemManagementService"); ManagementObjectSearcher vmSearcher2 = new ManagementObjectSearcher(manScope, queryObj2); ManagementObjectCollection vmCollection2 = vmSearcher2.Get(); ManagementObject virtualSystemService = null; foreach (ManagementObject o in vmCollection2) { virtualSystemService = o; break; } if (ConvertStrToVMState(vm["EnabledState"].ToString()) != VMState.Disabled) { ShutDown(vm["ElementName"].ToString()); } opResult = virtualSystemService.InvokeMethod("ApplyVirtualSystemSnapShot", new object[] { vm.Path, snapshot.Path }); break; } } return "0" == opResult.ToString(); } public static List GetVMSnapShotList(string vmName) { List shotList = new List(); ConnectionOptions co = new ConnectionOptions(); co.Username = userName; co.Password = password; ManagementScope manScope = new ManagementScope(string.Format(@"\\{0}\root\virtualization", hostServer), co); manScope.Connect(); ObjectQuery queryObj = new ObjectQuery("SELECT * FROM Msvm_ComputerSystem"); ManagementObjectSearcher vmSearcher = new ManagementObjectSearcher(manScope, queryObj); ManagementObjectCollection vmCollection = vmSearcher.Get(); string str = ""; // loop through the machines foreach (ManagementObject vm in vmCollection) { str += "Snapshot of " + vm["ElementName"].ToString() + "\r\n"; //Get the snaplist if (string.Compare(vm["ElementName"].ToString(), vmName, true) == 0) { ObjectQuery queryObj1 = new ObjectQuery(string.Format("SELECT * FROM Msvm_VirtualSystemSettingData WHERE SystemName='{0}' and SettingType=5", vm["Name"].ToString())); ManagementObjectSearcher vmSearcher1 = new ManagementObjectSearcher(manScope, queryObj1); ManagementObjectCollection vmCollection1 = vmSearcher1.Get(); foreach (ManagementObject snap in vmCollection1) { SnapShot ss = new SnapShot(); ss.Name = snap["ElementName"].ToString(); ss.CreationTime = DateTime.ParseExact(snap["CreationTime"].ToString().Substring(0, 14), "yyyyMMddHHmmss", null).ToLocalTime(); ss.Notes = snap["Notes"].ToString(); shotList.Add(ss); } } } return shotList; } private static bool ChangeVMState(string vmName, VMState toState) { string toStateCode = ConvertVMStateToStr(toState); if (toStateCode == string.Empty) return false; ConnectionOptions co = new ConnectionOptions(); co.Username = userName; co.Password = password; ManagementScope manScope = new ManagementScope(string.Format(@"\\{0}\root\virtualization", hostServer), co); manScope.Connect(); ObjectQuery queryObj = new ObjectQuery("SELECT * FROM Msvm_ComputerSystem"); ManagementObjectSearcher vmSearcher = new ManagementObjectSearcher(manScope, queryObj); ManagementObjectCollection vmCollection = vmSearcher.Get(); object o = null; foreach (ManagementObject vm in vmCollection) { if (string.Compare(vm["ElementName"].ToString(), vmName, true) == 0) { o = vm.InvokeMethod("RequestStateChange", new object[] { toStateCode }); break; } } return "0" == o.ToString(); } private static VMState ConvertStrToVMState(string statusCode) { VMState vmState = VMState.Undefined; switch (statusCode) { case "0": vmState = VMState.Unknown; break; case "2": vmState = VMState.Enabled; break; case "3": vmState = VMState.Disabled; break; case "32768": vmState = VMState.Paused; break; case "32769": vmState = VMState.Suspended; break; case "32770": vmState = VMState.Starting; break; case "32771": vmState = VMState.Snapshotting; break; case "32773": vmState = VMState.Saving; break; case "32774": vmState = VMState.Stopping; break; case "32776": vmState = VMState.Pausing; break; case "32777": vmState = VMState.Resuming; break; } return vmState; } private static string ConvertVMStateToStr(VMState vmState) { string status = string.Empty; switch (vmState) { case VMState.Unknown: status = "0"; break; case VMState.Enabled: status = "2"; break; case VMState.Disabled: status = "3"; break; case VMState.Paused: status = "32768"; break; case VMState.Suspended: status = "32769"; break; case VMState.Starting: status = "32770"; break; case VMState.Snapshotting: status = "32771"; break; case VMState.Saving: status = "32773"; break; case VMState.Stopping: status = "32774"; break; case VMState.Pausing: status = "32776"; break; case VMState.Resuming: status = "32777"; break; } return status; } } /// ///- Undefined --> "Not defined" ///0 Unknown --> "Unknown" ///2 Enabled --> "Running" ///3 Diabled --> "Off" ///32768 Paused --> "Paused" ///32769 Suspended --> "Saved" ///32770 Starting --> "Starting" ///32771 Snapshotting --> "Snapshooting ///32773 Saving --> "Saving" ///32774 Stopping --> "Shuting down ///32776 Pausing --> "Pausing" ///32777 Resuming --> "Resuming" /// public enum VMState { Undefined, Unknown, Enabled, Disabled, Paused, Suspended, Starting, Snapshotting, Saving, Stopping, Pausing, Resuming } public class SnapShot { public string Name { get; set; } public DateTime CreationTime { get; set; } public string Notes { get; set; } } }    SO娱乐城:真_人.足球.彩票齐全| 开户送10元.首存送58元.手机可投ㄩ注任何游戏顶级信用ㄩ提现即时到账SO.CC

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-53194-1-1.html 上篇帖子: 添加Hyper-V群集主机到VMM服务器 下篇帖子: 如何配置Hyper-V的虚拟机通过主机网络上网 (NAT)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表