如何使用VI Java SDK在Vmware中获取PoweredOn VM计数?有没有一种基于电源状态过滤虚拟机的方法?

以下代码提供了VM参考对象。

 ManagedEntity[] vms = new InventoryNavigator(clusterEntity).searchManagedEntities("VirtualMachine");


要过滤PoweredOn状态的VM,我们必须遍历托管实体并检索VM对象,这是一项耗时的操作。因此,有没有办法单独获取计数信息?

最佳答案

一种实现方法是通过PropertyCollectorRetrievePropertiesEx方法。

请注意,PropertyCollector是一个相当复杂的野兽-非常简单,您需要为其提供递归策略(例如,递归到子文件夹中)以及要提取的属性。如果您以前从未使用过PropertyCollector,则应在线查找示例程序并进行修改。

关于PropertyCollector的好处是,它是单个调用,可以检索大量实体的特定信息。因此在这方面非常有效。您还可以轻松获得计数。

如您所述,另一种方法是逐一查询每个VM,执行多个查询并接收要处理的更多数据。根据您拥有/期望拥有的VM数量以及性能要求,可以选择最适合您的方法。

如果您使用的是vSphere 6.5,请考虑使用REST API。它对VM进行list操作,该操作接受查询参数,并且电源状态是通过该API公开的少数几个属性之一。因此,您可以使用URL GET https://{server}/rest/vcenter/vm?filter.power_states.1=POWERED_ON获取已启动的VM的列表。请注意,这仅限于1000个VM。

关于java - 使用VI Java获取Vmware中的PoweredOn VM计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45728794/

10-16 21:28