原网页地址:http://www.codeproject.com/KB/server-management/Intro2WMI2.aspx
Msvm_ComputerSystem
是我们需要掌握的第一个类,这个类代表主机或者虚拟机系统。下面显示了这个类的属性以及方法RequestStateChange 这个方法对管理vm的多种状态非常有用。下面是这个类的定义,它与传统的类的定义方式不同, 因为它采用的是MOF(Managed Object Format).
[Dynamic,
Provider
("VmmsWmiInstanceAndMethodProvider")]class Msvm_ComputerSystem : CIM_ComputerSystem
{
string Caption;
string Description;
string ElementName;
datetime InstallDate;
uint16 OperationalStatus[];
string StatusDescriptions[];
string Status;
uint16 HealthState = 5;
uint16 EnabledState;
string OtherEnabledState;
uint16 RequestedState;
uint16 EnabledDefault = 2;
datetime TimeOfLastStateChange;
string CreationClassName;
string Name = "GUID";
string PrimaryOwnerName;
string PrimaryOwnerContact;
string Roles[];
string NameFormat;
string OtherIdentifyingInfo[];
string IdentifyingDescriptions[];
uint16 Dedicated[];
string OtherDedicatedDescriptions[];
uint16 ResetCapability = 1;
uint16 PowerManagementCapabilities[];
uint64 OnTimeInMilliseconds;
datetime TimeOfLastConfigurationChange;
uint32 ProcessID;
uint16 AssignedNumaNodeList[];
};
现在,让我们获取一个Msvm_ComputerSystem类的对象,以便于我们能够执行方法RequestStateChange去改变vm的状态。首先让我们来定义一个 帮助程序,这个帮助程序会查询包含这个类的所有的属性和方法的命名空间,这个程序最终会返回一个ManagementObject对象,这个对象可以用来执行改变vm状态的方法。下面是Utility sample里的代码(默认之前已经定义了ManagementScope,此处省去了):
public static ManagementObject GetTargetComputer
(string vmElementName, ManagementScope scope)
{
string query = string.Format("select * from
Msvm_ComputerSystem Where ElementName = '{0}'", vmElementName);
ManagementObjectSearcher searcher = new
ManagementObjectSearcher(scope, new ObjectQuery(query));
ManagementObjectCollection computers = searcher.Get();
ManagementObject computer = null;
foreach (ManagementObject instance in computers)
{
computer = instance;
break;
}
return computer;
}
根据上面的方法,我们可以在程序里编写如下代码调用上面的方法获取Msvm_ComputerSystem 的一个实例:
ManagementObject vm = Utility.GetTargetComputer(vmName, scope);
vm就是我们获取到的Msvm_ComputerSystem实例,然后我们可以调用Msvm_ComputerSystem里的方法“RequestStateChange”,调用WMI类的方法需要用到GetMethodParameters,规则如下:
ManagementBaseObject inParams = vm.GetMethodParameters("RequestStateChange");
输入该方法需要的参数
inParams["RequestedState"] = Enabled;
ManagementBaseObject outParams =
vm.InvokeMethod("RequestStateChange", inParams, null);
if ((UInt32)outParams["ReturnValue"] == ReturnCode.Completed)
{
Console.WriteLine("{0} state was
changed successfully.", vmName);
}
else
{
Console.WriteLine("Change virtual system
state failed with error{0}", outParams["ReturnValue"]);
}
}
至此我们已经成功改变了vm的状态,但是有一些问题需要注意,上面的例子里将vm的状态改为Enalbled,但是在这之前并没有检查当前vm是否就是这个状态。要在修改状态前检查vm状态,我们可以参考之前写的一边文章。
除此之外,我们还注意到InvokeMethod不能立即返回成功与否的状态。当vm正在启动的时候(starting),它不能返回已启动状态(started),所以我们应该做个方法等待状态修改完成并报告这个最终执行情况。我们在Utility里定义了一个JobCompleted()方法,来跟踪InvokeMethod方法。
if ((UInt32)outParams["ReturnValue"]
== ReturnCode.Started)
{
if (Utility.JobCompleted(outParams, scope))
{
Console.WriteLine("{0} state was changed
successfully.", vmName);
}
else
{
Console.WriteLine("Failed to change
virtual system state");
}
}
else if ((UInt32)outParams["ReturnValue"]
== ReturnCode.Completed)
{
Console.WriteLine("{0} state was
changed successfully.", vmName);
}
else
{
Console.WriteLine("Change virtual
system state failed with error {0}",
outParams ["ReturnValue"]);
}
JobCompleted方法描述如下:
public static bool JobCompleted(ManagementBaseObject outParams,
ManagementScope scope)
{
bool jobCompleted = true;
string JobPath = (string)outParams["Job"];
ManagementObject Job = new ManagementObject(scope,
new ManagementPath(JobPath), null);
Job.Get();
while ((UInt16)Job["JobState"] == JobState.Starting
|| (UInt16)Job["JobState"] == JobState.Running)
{
Console.WriteLine("In progress... {0}% completed.",
Job["PercentComplete"]);
System.Threading.Thread.Sleep(1000);
Job.Get();
}
UInt16 jobState = (UInt16)Job["JobState"];
if (jobState != JobState.Completed)
{
UInt16 jobErrorCode = (UInt16)Job["ErrorCode"];
Console.WriteLine("Error Code:{0}", jobErrorCode);
Console.WriteLine("ErrorDescription: {0}",
(string)Job["ErrorDescription"]);
jobCompleted = false;
}
return jobCompleted;
}
分享到:
相关推荐
Windows Management Instrumentation(WMI)是微软开发的一种管理框架,用于提供对Windows操作系统以及...在“常用WMI列表.txt”文件中,很可能包含了这些类的详细描述和使用示例,对于学习和掌握WMI技术非常有帮助。
**WMI(Windows Management Instrumentation)编程工具是IT专业人员在管理系统时不可或缺的资源,而WMITools...通过掌握WMI和WMITools的使用,IT专业人员能更好地应对各种系统管理挑战,提升日常运维的效率和准确性。
**Windows Management Instrumentation (WMI) 技术指南** Windows Management Instrumentation(WMI)是Microsoft Windows操作系统中的一个...学习和掌握WMI技术,能够极大提升IT专业人员在Windows环境下的工作效率。
**正文** WMI(Windows Management ...掌握WMI代码创建工具,对于提升开发者在系统级编程中的能力具有重要意义。同时,配合.NET框架的其他组件,如ADO.NET进行数据库操作,可以构建出强大的系统管理和监控应用。
总的来说,WMI接口是Windows系统管理和自动化的重要工具,通过学习和掌握WMI,开发者和系统管理员可以更高效地管理和维护Windows环境。在提供的WMI资料中,可能包含了关于WMI的详细文档、示例代码、教程等内容,可以...
**WmiTools:Windows系统工具详解** WmiTools是一款针对Windows操作系统的实用工具,它主要利用Windows Management Instrumentation...通过学习和掌握WMI以及WmiTools的使用,可以极大地提升Windows系统的管理效率。
**WMI代码生成器**是一种实用工具,专为开发者设计,能够自动生成针对Windows Management Instrumentation(WMI)接口的代码。...通过熟练掌握WMI和利用代码生成工具,开发者可以更轻松地驾驭这个丰富的管理环境。
总之,WMI是Windows管理员和开发者的重要工具,它提供了丰富的系统管理功能,而理解和掌握WMI的使用方法对于提升自动化和管理效率至关重要。通过不断实践和探索,你将能够充分利用WMI的潜力,解决各种系统管理和维护...
总的来说,掌握WMI查询对于Windows系统管理员来说是一项必备技能,它极大地提高了管理效率,使得日常的系统维护和问题排查工作更加高效和精确。通过实践和学习,你可以充分利用WMI的强大功能来优化你的IT环境。
4. **WMI类和实例**:掌握WMI类的概念,它们是WMI对象的蓝图,以及如何实例化这些类来访问或操作特定的系统对象。 5. **管理提供者**:理解不同类型的提供者,如操作系统提供者、硬件提供者和管理工具提供者,以及...
总的来说,WMI是Windows平台强大的管理系统资源的工具,无论你是系统管理员还是开发者,理解和掌握WMI都能极大地提升你在系统管理和自动化任务中的效率。通过学习“WMI基础知识”,你可以了解到如何使用WMI来获取和...
掌握WMI Explorer的使用,意味着能够更有效地管理和诊断Windows环境。通过实践和学习,可以深入了解WMI类的结构,提高系统管理效率。同时,了解WMI对于系统管理员、开发者和IT专业人员来说,都是提升技能的重要途径...
9. **提高效率**: 对于需要频繁与WMI交互的项目,使用WMI Delphi Code Creator可以大大减少手动编码的时间,让开发者更专注于业务逻辑和用户体验设计。 10. **维护和更新**: 由于WMI接口可能会随着新的Windows更新...
总之,WMI是Windows系统管理的强大工具,通过熟练掌握WMI查询,我们可以方便地获取和操作各种设备信息,提高管理效率。在日常开发和运维工作中,掌握WMI的使用技巧,无疑会极大地提升工作效率。
### Window高级编程之WMI编程应用 #### 12.1 WMI技术基础...无论是对于系统管理员还是开发者而言,掌握WMI都是提高工作效率的有效手段。通过WMI,可以轻松实现对系统状态的监控、资源的管理和自动化任务的执行等功能。
1. 用户通过界面输入或选择需要查询的WMI类或实例。 2. 工具使用WMI API(如`SWbemLocator`和`SWbemServices`对象)连接到本地或远程的WMI服务,执行查询。 3. 查询结果被解析,并根据结果结构自动生成对应的类代码...
**WMI查询工具详解** Windows Management Instrumentation(WMI)是微软提供的一个核心系统组件,它为管理系统提供了统一的接口...对于系统管理员和自动化任务编写者,掌握WMI查询和工具的使用是提升工作效率的关键。
在Windows操作系统中,WMI(Windows Management Instrumentation)是一个强大的管理工具,用于获取和操作系统的各种信息,包括硬件、软件和服务等...对于IT专业人士来说,熟练掌握WMI的使用是提升工作效率的重要手段。
在IT领域,Windows Management Instrumentation(WMI)是Windows操作系统提供的一个核心组件,它允许应用程序...通过这样的实践,你不仅能掌握WMI的基本用法,还能了解到如何将WMI技术应用于实际的系统管理和监控场景。
**WMI查询操作系统** Windows Management Instrumentation(WMI)是微软提供的一种管理和配置...通过理解和掌握这些WMI查询操作系统的知识点,开发者可以更有效地管理Windows环境,提升系统的可维护性和稳定性。