在 c# 中使用 vsphere-automation-sdk.net 从 VMWare 禁用 VM 的网络接口卡时出现问题

Issue in Disable Network interface Card of VM from the VMWare using vsphere-automation-sdk.net in c#

这是我在 VMware 中禁用 VM 网络接口卡的代码。它运行完美,所有凭据无一例外都是正确的。它的编码与 sdk 文档中提到的相同。但是在 运行 之后,当我在 VMWare 上看到 VM 时,NIC 没有被禁用。任何人请帮我解决这个问题。谢谢你。

基本上,我们为客户提供 DRaaS。因此,对于 DR 测试,我们正在尝试在同一 VMWare 上创建现有 VM 的新 VM 克隆。但是当我们克隆 VM 时,它的 NIC 与现有 VM 冲突。谢谢。

VMTypes.PlacementSpec vmPlacementSpec = new VMTypes.PlacementSpec();

VMTypes.FilterSpec VMFilterSpec = new VMTypes.FilterSpec();

HashSet<string> datacenters = new HashSet<string>
{
    GetDatacenter(serviceManager, vmModel.DataCenterName)
};

VMFilterSpec.SetNames(new HashSet<String> { vmModel.vmName });
VMFilterSpec.SetDatacenters(datacenters);

VM vmservice = serviceManager.VapiConnection.GetService<VM>();

List<VMTypes.Summary> vmsummarize = vmservice.List(VMFilterSpec);

if (vmsummarize.Count >= 0)
{
    string Vm_Id = vmsummarize[0].GetVm();
    if (Vm_Id != null)
    {
        Network netWork = serviceManager.VapiConnection.GetService<Network>();

            VMTypes.Info VMConfigInfo = vmservice.Get(Vm_Id);
            Dictionary<string, EthernetTypes.Info> dictOfEthernetAdapters = VMConfigInfo.GetNics();
            foreach (var item in dictOfEthernetAdapters)
            {
                EthernetTypes.Info NetworkDetails = item.Value;
                NetworkDetails.SetWakeOnLanEnabled(false);
                NetworkDetails.SetState(ConnectionState.UNRECOVERABLE_ERROR);
                NetworkDetails.SetStartConnected(false);
                NetworkDetails.SetAllowGuestControl(false);
            }
    }
}

最后我自己搞定了。我发现要禁用 NIC,我必须关闭电源然后再打开电源。感谢您向所有查看过的人查看我的问题。

VMTypes.PlacementSpec vmPlacementSpec = new VMTypes.PlacementSpec();

        VMTypes.FilterSpec VMFilterSpec = new VMTypes.FilterSpec();

        HashSet<string> datacenters = new HashSet<string>
        {
            GetDatacenter(serviceManager, vmModel.DataCenterName)
        };

        VMFilterSpec.SetNames(new HashSet<String> { vmModel.vmName });
        VMFilterSpec.SetDatacenters(datacenters);

        VM vmservice = serviceManager.VapiConnection.GetService<VM>();

        List<VMTypes.Summary> vmsummarize = vmservice.List(VMFilterSpec);

        if (vmsummarize.Count >= 0)
        {
            string Vm_Id = vmsummarize[0].GetVm();
            if (Vm_Id != null)
            {
                Power power = serviceManager.VapiConnection.GetService<Power>();
                Network netWork = serviceManager.VapiConnection.GetService<Network>();
                PowerTypes.Info powertype = power.Get(Vm_Id);

                if (powertype.GetState().Name == "POWERED_ON")
                {
                    Console.WriteLine("Power Off starting ");
                    power.Stop(Vm_Id);
                    Console.WriteLine("Powered Off Now ");

                    VMTypes.Info VMConfigInfo = vmservice.Get(Vm_Id);
                    Dictionary<string, EthernetTypes.Info> dictOfEthernetAdapters = VMConfigInfo.GetNics();
                    foreach (var item in dictOfEthernetAdapters)
                    {
                        EthernetTypes.Info NetworkDetails = item.Value;
                        NetworkDetails.SetWakeOnLanEnabled(false);
                        NetworkDetails.SetState(ConnectionState.UNRECOVERABLE_ERROR);
                        NetworkDetails.SetStartConnected(false);
                        NetworkDetails.SetAllowGuestControl(false);
                    }
                    Console.WriteLine("Power ON starting ");
                    power.Start(Vm_Id);
                    Console.WriteLine("Powered ON Now ");
                }
                else if (powertype.GetState().Name == "POWERED_OFF")
                {
                    VMTypes.Info VMConfigInfo = vmservice.Get(Vm_Id);
                    Dictionary<string, EthernetTypes.Info> dictOfEthernetAdapters = VMConfigInfo.GetNics();
                    foreach (var item in dictOfEthernetAdapters)
                    {
                        EthernetTypes.Info NetworkDetails = item.Value;
                        NetworkDetails.SetWakeOnLanEnabled(false);
                        NetworkDetails.SetState(ConnectionState.UNRECOVERABLE_ERROR);
                        NetworkDetails.SetStartConnected(false);
                        NetworkDetails.SetAllowGuestControl(false);
                    }
                    Console.WriteLine("Powered ON started ");
                    power.Start(Vm_Id);
                    Console.WriteLine("Powered ON Now ");
                }
            }
        }
        else
        {
            Console.WriteLine("Index was out of range");
        }