public void Login()
 {
     if (VimHelper.CurrentSession == null)
     {
         VimHelper.Login();
     }
 }
        public IVMConnection CreateLinkedClone(string snapshotName, string linkedVMName)
        {
            var snapshot = VimHelper.GetDynamicProperty <VirtualMachineSnapshotInfo>(MOB, "snapshot");

            if (snapshot != null)
            {
                var snapshotMOB = FindSnapshotByName(snapshot.rootSnapshotList, snapshotName);
                if (snapshotMOB != null)
                {
                    var relSpec = new VirtualMachineRelocateSpec();
                    relSpec.diskMoveType = "createNewChildDiskBacking";
                    var cloneSpec = new VirtualMachineCloneSpec();
                    cloneSpec.powerOn  = false;
                    cloneSpec.template = false;
                    cloneSpec.location = relSpec;
                    cloneSpec.snapshot = snapshotMOB;
                    ManagedObjectReference folder = VimHelper.GetDynamicProperty <ManagedObjectReference>(MOB, "parent");
                    ManagedObjectReference task   = VimHelper.ServiceInstance.CloneVM_Task(MOB, folder, linkedVMName, cloneSpec);
                    while (true)
                    {
                        TaskInfo info = VimHelper.GetDynamicProperty <TaskInfo>(task, "info");
                        if (info.state == TaskInfoState.success)
                        {
                            return(new VSphereVMConnection(info.result as ManagedObjectReference));
                        }
                        else if (info.state == TaskInfoState.error)
                        {
                            throw new Exception(info.error.localizedMessage);
                        }
                        System.Threading.Thread.Sleep(500);
                    }
                }
            }
            return(null);
        }
        public void RevertToNamedSnapshot(string snapshotName)
        {
            var snapshot = VimHelper.GetDynamicProperty <VirtualMachineSnapshotInfo>(MOB, "snapshot");

            if (snapshot != null)
            {
                var snapshotMOB = FindSnapshotByName(snapshot.rootSnapshotList, snapshotName);
                if (snapshotMOB != null)
                {
                    ManagedObjectReference task = VimHelper.ServiceInstance.RevertToSnapshot_Task(snapshotMOB, null, false, false);
                    while (true)
                    {
                        TaskInfo info = VimHelper.GetDynamicProperty <TaskInfo>(task, "info");
                        if (info.state == TaskInfoState.success || info.state == TaskInfoState.error)
                        {
                            break;
                        }
                        System.Threading.Thread.Sleep(500);
                    }
                }
                else
                {
                    throw new NullReferenceException("Could not find the snapshot named '" + snapshotName + "' for VM '" + path + "'");
                }
            }
            else
            {
                throw new NullReferenceException("Could not find the 'snapshot' property for this VM, or the property was null. VM: " + path);
            }
        }
        public void TakeSnapshot(string snapShotName, string desc)
        {
            ManagedObjectReference task = VimHelper.ServiceInstance.CreateSnapshot_Task(MOB, snapShotName, desc, false, false);

            while (true)
            {
                TaskInfo info = VimHelper.GetDynamicProperty <TaskInfo>(task, "info");
                if (info.state == TaskInfoState.success || info.state == TaskInfoState.error)
                {
                    break;
                }
                System.Threading.Thread.Sleep(500);
            }
        }
        public void RevertToCurrentSnapshot()
        {
            ManagedObjectReference task = VimHelper.ServiceInstance.RevertToCurrentSnapshot_Task(MOB, null, false, false);

            while (true)
            {
                TaskInfo info = VimHelper.GetDynamicProperty <TaskInfo>(task, "info");
                if (info.state == TaskInfoState.success || info.state == TaskInfoState.error)
                {
                    break;
                }
                System.Threading.Thread.Sleep(500);
            }
        }
        private ManagedObjectReference getDataStore(DataStores datastore)
        {
            ManagedObjectReference[] datastores = VimHelper.GetDynamicProperty <ManagedObjectReference[]>(VimHelper.DataCenterMOB, "datastore");

            for (int i = 0; i < datastores.Length; i++)
            {
                ManagedObjectReference curDatastore = datastores[i];
                string name = VimHelper.GetDynamicProperty <string>(curDatastore, "name");
                if (name == datastore.ToString())
                {
                    return(curDatastore);
                }
            }
            return(null);
        }