从esxi获取任务

时间:2017-09-04 14:42:17

标签: c# vmware esxi

我有以下代码:

VMware.Vim.Task task = new VMware.Vim.Task(Client,thisDC.MoRef);
foreach(VMware.Vim.Task eachTask in task)
                {

                    lvLogging.Items.Add(eachTask.DescriptionId);
                }

但是我收到了错误:

foreach statement cannot operate on variables of type 'VMware.Vim.Task' because 'VMware.Vim.Task' does not contain a public definition for 'GetEnumerator'

所以我做了以下事情:

List<VMware.Vim.Task> task = new List<VMware.Vim.Task>();
task = new VMware.Vim.Task(Client,thisDC.MoRef);

但现在我有以下错误:

Cannot implicitly convert type 'VMware.Vim.Task' to 'System.Collections.Generic.List<VMware.Vim.Task>'

我完全迷失在这里? 我要做的是从ESXi主机获取任务,然后发送到ListView。

1 个答案:

答案 0 :(得分:0)

您的第一个代码段会尝试枚举单个Task(不是任务列表),因此会失败。您的第二个代码段会尝试将单个Task分配给Tasks列表,因此会失败。

您也在滥用ManagedObjectReference结构。它不应包含Client。相反,它应该包含类型字符串(例如“任务”,“VirtualMachine”等)和值(例如“task-123”或“vm-456”)。您应该阅读vSphere SDK编程指南中的relevant section - 这将是您尝试使用的任何API的基础。

我认为这里丢失的基本观点是,您通常不会自己创建 Task;相反,vSphere API将根据您指定的某些条件向您发送 Task。获得这些任务的一种方法是通过TaskHistoryCollector,例如here所示。我建议你从该线程中的示例开始,该示例应该很容易从Java转换为C#。看到你可以让它发挥作用,你了解它的作用,然后在需要时发布另一个问题。