如何使用Delphi或c#在Hyper-v上获取虚拟机状态

本文关键字:获取 虚拟机 状态 Hyper-v 何使用 Delphi | 更新日期: 2023-09-27 18:12:23

是否有任何组件或类允许我获得在Hyper-v上运行的所有虚拟机的状态?我希望能够列出所有虚拟机及其状态(已停止,正在运行,暂停等)。

我知道微软有WMI方法,但我得到的所有示例都是针对。net的,没有针对Delphi的。我应该能够转换这些类做Delphi,但它会更容易,如果我可以使用一些已经为Delphi。

编辑

我有一个c#的例子:

/

/ define the information we want to query - in this case, just grab all properties of the object
ObjectQuery queryObj = new ObjectQuery("SELECT * FROM Msvm_ComputerSystem");
// object for storing WMI connection options
// pass the "user", "password" and "domain" from command-line
// don't hard-code these into the application!
ConnectionOptions connOpts = new ConnectionOptions();
connOpts.Username  = user;
connOpts.Authority = "ntlmdomain:" + domain;
connOpts.Password  = password;
// management scope object
ManagementScope manScope = new ManagementScope(@"''RemoteSystem'root'virtualization", connOpts);
// connect and set up our search
ManagementObjectSearcher vmSearcher = new ManagementObjectSearcher(manScope, queryObj);
ManagementObjectCollection vmCollection = vmSearcher.Get();
// loop through the VMs
foreach (ManagementObject vm in vmCollection)
{
    // display VM details
    Console.WriteLine("'nName: {0}'nStatus: {1}'nDescription: {2}'n",
                      vm["ElementName"].ToString(),
                      vm["EnabledState"].ToString(),
                      vm["Description"].ToString());
}

我试着在Visual Studio上运行这个,看看它是否有效,所以我可以试着把它翻译成Delphi。但是,即使我改变了用户名,域名和密码,我仍然得到这个错误:

{"The RPC server is not available. (HRESULT: 0x800706BA)"}

如何使用Delphi或c#在Hyper-v上获取虚拟机状态

最新的Delphi for WMI是Rodrigos组件:

wmi-delphi-code-creator

object-pascal-wmi-class-generator

在MagWMI中有免费的Delphi代码用于访问MagWMI。它有完整的源代码,包括一个让你运行WMI查询的演示应用程序。它的当前网页(上面的链接)说它与当前的Windows(和Delphi)版本兼容。

我不知道它是否特别适用于虚拟化,但它至少会让你开始从Delphi代码中使用WMI。(编辑:看来,演示文件只在本地计算机上工作,因此必须传递更少的参数,以使演示更容易理解。但是,它仍然显示了在Delphi中使用WMI的基础知识,因此它应该可以让您开始学习。