【问题标题】:Getting tasks from esxi从 esxi 获取任务
【发布时间】:2018-02-12 19:58:16
【问题描述】:

我有以下代码:

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。

【问题讨论】:

    标签: c# vmware esxi


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢@ysk。我将浏览您的答案和您链接到的示例。我相信我会有更多问题。
    猜你喜欢
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 2017-02-23
    • 2015-12-04
    • 2020-07-18
    • 1970-01-01
    相关资源
    最近更新 更多