/// <summary> /// /// </summary> /// <param name="virtualMachine"></param> protected void LoginGuest(VMWareVirtualMachine virtualMachine) { PowerOnVirtualMachine(virtualMachine); Log.LogMessage(string.Format("Logging in {0}", Filename)); virtualMachine.LoginInGuest(GuestUsername, GuestPassword, _interactive ? Constants.VIX_LOGIN_IN_GUEST_REQUIRE_INTERACTIVE_ENVIRONMENT : 0, _loginTimeout); }
/// <summary> /// Dispose the object, unmap a previously mapped network drive. /// </summary> public void Dispose() { if (_mapped) { UnMapNetworkDrive(); } _vm = null; // don't hold another reference, http://communities.vmware.com/message/1144091 }
/// <summary> /// Creates an instance of a mapped network drive. /// </summary> /// <param name="vm">Virtual machine.</param> /// <param name="info">Mapped network drive info.</param> public MappedNetworkDrive(VMWareVirtualMachine vm, MappedNetworkDriveInfo info) { _vm = vm; _info = info; if (_info.Auto) { MapNetworkDrive(); } }
/// <summary> /// /// </summary> /// <param name="virtualMachine"></param> protected void PowerOnVirtualMachine(VMWareVirtualMachine virtualMachine) { Log.LogMessage(string.Format("Powering on {0}", Filename)); virtualMachine.PowerOn(PowerOnTimeout); if (WaitForTools) { Log.LogMessage(string.Format("Waiting for {0}", Filename)); virtualMachine.WaitForToolsInGuest(WaitForToolsTimeout); } }
/// <summary> /// /// </summary> /// <returns></returns> public override bool Execute() { using (VMWareVirtualHost host = GetConnectedHost()) { using (VMWareVirtualMachine virtualMachine = OpenVirtualMachine(host)) { LoginGuest(virtualMachine); } } return(true); }
/// <summary> /// /// </summary> /// <returns></returns> public override bool Execute() { using (VMWareVirtualHost host = GetConnectedHost()) { using (VMWareVirtualMachine virtualMachine = OpenVirtualMachine(host)) { // opened virtual machine } } return(true); }
public VMWareVirtualMachineConfig GetConfiguration(VMWareVirtualMachine virtualMachine) { foreach (VMWareVirtualMachineConfig virtualMachineConfig in _config.VirtualMachines) { if (virtualMachineConfig.File == virtualMachine.PathName) { return(virtualMachineConfig); } } return(null); }
/* * Run PolicySync as system user * To wait for the completion of PolicySync, we look for PsExec.exe process on guest, * when null is returned the process does not exist */ private static void policySync(VMWareVirtualMachine ivm) { VMWareVirtualMachine.Process psync = detachSystemCommand(@"C:\Program Files (x86)\LANDesk\LDClient\PolicySync.exe", "", ivm); if (psync != null) { while (ivm.GuestProcesses.FindProcess(psync.Name, StringComparison.CurrentCulture) != null) { System.Threading.Thread.Sleep(1000); } } Console.WriteLine("[\u221A] PolicySync complete."); }
/// <summary> /// /// </summary> /// <returns></returns> public override bool Execute() { using (VMWareVirtualHost host = GetConnectedHost()) { using (VMWareVirtualMachine virtualMachine = OpenVirtualMachine(host)) { WaitForVMwareUserProcessInGuest(virtualMachine); } } return(true); }
/// <summary> /// /// </summary> /// <returns></returns> public override bool Execute() { using (VMWareVirtualHost host = GetConnectedHost()) { using (VMWareVirtualMachine virtualMachine = OpenVirtualMachine(host)) { Log.LogMessage(string.Format("Powering off {0}", Filename)); virtualMachine.PowerOff(0, PowerOffTimeout); } } return(true); }
/// <summary> /// /// </summary> /// <returns></returns> public override bool Execute() { using (VMWareVirtualHost host = GetConnectedHost()) { using (VMWareVirtualMachine virtualMachine = OpenVirtualMachine(host)) { Log.LogMessage(string.Format("Shutting down {0}", Filename)); virtualMachine.ShutdownGuest(ShutdownTimeout); } } return(true); }
/// <summary> /// /// </summary> /// <returns></returns> public override bool Execute() { using (VMWareVirtualHost host = GetConnectedHost()) { using (VMWareVirtualMachine virtualMachine = OpenVirtualMachine(host)) { Log.LogMessage(string.Format("Removing snapshot {0}", _snapshotName)); virtualMachine.Snapshots.RemoveSnapshot(_snapshotName, _removeSnapshotTimeout); } } return(true); }
/// <summary> /// /// </summary> /// <returns></returns> public override bool Execute() { using (VMWareVirtualHost host = GetConnectedHost()) { using (VMWareVirtualMachine virtualMachine = OpenVirtualMachine(host)) { LoginGuest(virtualMachine); Log.LogMessage(string.Format("Copying host '{0}' to guest '{1}'", _hostPathName, _guestPathName)); virtualMachine.CopyFileFromHostToGuest(_hostPathName, _guestPathName, _copyFileTimeout); } } return(true); }
/// <summary> /// /// </summary> /// <returns></returns> public override bool Execute() { using (VMWareVirtualHost host = GetConnectedHost()) { using (VMWareVirtualMachine virtualMachine = OpenVirtualMachine(host)) { LoginGuest(virtualMachine); Log.LogMessage(string.Format("Checking file '{0}' in guest os", _guestPathName)); _fileExists = virtualMachine.FileExistsInGuest(_guestPathName, _fileExistsTimeout); } } return(true); }
/// <summary> /// /// </summary> /// <returns></returns> public override bool Execute() { using (VMWareVirtualHost host = GetConnectedHost()) { using (VMWareVirtualMachine virtualMachine = OpenVirtualMachine(host)) { LoginGuest(virtualMachine); Log.LogMessage(string.Format("Retreiving file information for '{0}' from guest os", _guestPathName)); _fileInfo = virtualMachine.GetFileInfoInGuest(_guestPathName, _getFileInfoTimeout); } } return(true); }
/// <summary> /// /// </summary> /// <returns></returns> public override bool Execute() { using (VMWareVirtualHost host = GetConnectedHost()) { using (VMWareVirtualMachine virtualMachine = OpenVirtualMachine(host)) { LoginGuest(virtualMachine); Log.LogMessage(string.Format("Deleting guest file '{0}'", _guestPathName)); virtualMachine.DeleteFileFromGuest(_guestPathName, _deleteFileTimeout); } } return(true); }
/// <summary> /// /// </summary> /// <returns></returns> public override bool Execute() { using (VMWareVirtualHost host = GetConnectedHost()) { using (VMWareVirtualMachine virtualMachine = OpenVirtualMachine(host)) { LoginGuest(virtualMachine); _guestPathName = virtualMachine.CreateTempFileInGuest(_createTempFileTimeout); Log.LogMessage(string.Format("Created temporary file '{0}' in guest os", _guestPathName)); } } return(true); }
/* * Runs regedit export of LANDesk software tracking, pulls file from guest -> host and returns number of lines in the file. * */ private static int getRegEntryNum(VMWareVirtualMachine ivm) { if (ivm.FileExistsInGuest(pstempGuest + @"\reg.txt")) { ivm.DeleteFileFromGuest(pstempGuest + @"\reg.txt"); } VMWareVirtualMachine.Process proc = ivm.RunProgramInGuest(@"C:\Windows\System32\Reg.exe", "export \"HKEY_LOCAL_MACHINE\\SOFTWARE\\LANdesk\\SOFTWARE\" \"" + pstempGuest + "\\reg.txt\""); if (File.Exists(workingDir + @"\reg.txt")) { File.Delete(workingDir + @"\reg.txt"); } ivm.CopyFileFromGuestToHost(pstempGuest + @"\reg.txt", workingDir + @"\reg.txt"); return(File.ReadAllLines(workingDir + @"\reg.txt").Length); }
/// <summary> /// /// </summary> /// <returns></returns> public override bool Execute() { using (VMWareVirtualHost host = GetConnectedHost()) { using (VMWareVirtualMachine virtualMachine = OpenVirtualMachine(host)) { LoginGuest(virtualMachine); Log.LogMessage(string.Format("Creating guest directory '{0}'", _guestPathName)); virtualMachine.CreateDirectoryInGuest(_guestPathName, _createDirectoryTimeout); } } return(true); }
/* * Rolls back the given virtual machine to the deployPoint snapshot, * powers the vm on and logs in to an interactive session as the standand user. * Then calls policySync */ private static void revertAndLogin(VMWareVirtualMachine ivm) { Console.WriteLine("[i] Rolling back."); count = 0; deployPoint.RevertToSnapshot(); ivm.PowerOn(); ivm.WaitForToolsInGuest(); Login: try { ivm.LoginInGuest(domainName + @"\" + usrnm, psswd, 8, 300); } catch (Exception) { goto Login; } Console.WriteLine("[\u221A] Logged in."); policySync(ivm); }
public VMWareMappedVirtualMachine( string name, VMWareVirtualMachine vm, string username, string password, CopyMethod copyMethod, bool simulationOnly) { _name = name; _vm = vm; _copyMethod = copyMethod; _username = username; _password = password; _simulationOnly = simulationOnly; }
public void GetEnvironmentVariablesSample() { #region Example: Enumerating Environment Variables on the GuestOS without VixCOM // connect to a local virtual machine and power it on VMWareVirtualHost virtualHost = new VMWareVirtualHost(); virtualHost.ConnectToVMWareWorkstation(); VMWareVirtualMachine virtualMachine = virtualHost.Open(@"C:\Users\dblock\Virtual Machines\Windows XP Pro SP3 25GB\WinXP Pro SP3 25GB.vmx"); virtualMachine.PowerOn(); virtualMachine.WaitForToolsInGuest(); virtualMachine.LoginInGuest("Administrator", "admin123"); Shell guestShell = new Shell(virtualMachine); Dictionary <string, string> guestEnvironmentVariables = guestShell.GetEnvironmentVariables(); Console.WriteLine(guestEnvironmentVariables["ProgramFiles"]); #endregion }
/* * Procedure for logging in interactively */ private static void interactiveLogin(VMWareVirtualMachine ivm) { try { Console.Write("[i] Log in as " + domainName + @"\" + usrnm + " on the virtual machine, then press enter in the console."); Console.ReadLine(); ivm.LoginInGuest(domainName + @"\" + usrnm, psswd, 8, 300); Console.WriteLine("[\u221A] Logged in."); } catch (Exception) { Console.WriteLine("[!] You did not log in correctly. Wait for all scripts to run, then try again."); interactiveLogin(ivm); } }
public void Dispose() { if (_virtualMachine != null) { _virtualMachine.Dispose(); _virtualMachine = null; } if (_host != null) { _host.Dispose(); _host = null; } _config = null; }
/// <summary> /// /// </summary> /// <returns></returns> public override bool Execute() { using (VMWareVirtualHost host = GetConnectedHost()) { using (VMWareVirtualMachine virtualMachine = OpenVirtualMachine(host)) { Log.LogMessage(string.Format("Creating snapshot {0}", _snapshotName)); using (VMWareSnapshot snapshot = virtualMachine.Snapshots.CreateSnapshot( _snapshotName, _snapshotDescription, 0, _createSnapshotTimeout)) { // snapshot created } } } return(true); }
/// <summary> /// /// </summary> /// <returns></returns> public override bool Execute() { using (VMWareVirtualHost host = GetConnectedHost()) { using (VMWareVirtualMachine virtualMachine = OpenVirtualMachine(host)) { LoginGuest(virtualMachine); Log.LogMessage(string.Format("Running '{0}{1}'", _guestProgramName, string.IsNullOrEmpty(_commandLineArgs) ? string.Empty : " " + _commandLineArgs)); _process = virtualMachine.RunProgramInGuest(_guestProgramName, _commandLineArgs, 0, _runProgramTimeout); } } return(true); }
public void TestRevertToLiveSnapshot() { using (VMWareVirtualHost virtualHost = new VMWareVirtualHost()) { virtualHost.ConnectToVMWareWorkstation(); Console.WriteLine(virtualHost.ConnectionType); using (VMWareVirtualMachine virtualMachine = virtualHost.Open( @"C:\Users\dblock\Documents\Virtual Machines\Windows 98 SE\Windows 98.vmx")) { Console.WriteLine(virtualMachine.PathName); VMWareSnapshot snapshot = virtualMachine.Snapshots.GetNamedSnapshot("Live"); // snapshot.RevertToSnapshot(); // snapshot.RevertToSnapshot(Interop.VixCOM.Constants.VIX_VMPOWEROP_LAUNCH_GUI, // VMWareInterop.Timeouts.RevertToSnapshotTimeout); snapshot.RevertToSnapshot(Interop.VixCOM.Constants.VIX_VMPOWEROP_SUPPRESS_SNAPSHOT_POWERON, VMWareInterop.Timeouts.RevertToSnapshotTimeout); // virtualMachine.PowerOn(); } } }
public void CopyFromHostToGuestWithoutVixCOMSample() { #region Example: Copying Files to/from the Guest Operating System Without VixCOM // connect to a local virtual machine and power it on VMWareVirtualHost virtualHost = new VMWareVirtualHost(); virtualHost.ConnectToVMWareWorkstation(); VMWareVirtualMachine virtualMachine = virtualHost.Open(@"C:\Users\dblock\Virtual Machines\Windows XP Pro SP3 25GB\WinXP Pro SP3 25GB.vmx"); virtualMachine.PowerOn(); virtualMachine.WaitForToolsInGuest(); // map the C:\ drive (\\guest\c$) MappedNetworkDriveInfo info = new MappedNetworkDriveInfo(); info.RemotePath = @"C:\"; info.Username = @"dblock-blue\Administrator"; info.Password = @"admin123"; MappedNetworkDrive mappedNetworkDrive = new MappedNetworkDrive(virtualMachine, info); string hostFile = @"C:\WINDOWS\win.ini"; string guestFile = mappedNetworkDrive.GuestPathToNetworkPath(@"C:\host-win.ini"); Console.WriteLine(guestFile); File.Copy(hostFile, guestFile); #endregion }
public void GettingStartedWorkstation() { #region Example: Getting Started (Workstation) // declare a virtual host using (VMWareVirtualHost virtualHost = new VMWareVirtualHost()) { // connect to a local VMWare Workstation virtual host virtualHost.ConnectToVMWareWorkstation(); // open an existing virtual machine using (VMWareVirtualMachine virtualMachine = virtualHost.Open(@"C:\Virtual Machines\xp\xp.vmx")) { // power on this virtual machine virtualMachine.PowerOn(); // wait for VMWare Tools virtualMachine.WaitForToolsInGuest(); // login to the virtual machine virtualMachine.LoginInGuest("Administrator", "password"); // run notepad virtualMachine.RunProgramInGuest("notepad.exe", string.Empty); // create a new snapshot string name = "New Snapshot"; // take a snapshot at the current state VMWareSnapshot createdSnapshot = virtualMachine.Snapshots.CreateSnapshot(name, "test snapshot"); createdSnapshot.Dispose(); // power off virtualMachine.PowerOff(); // find the newly created snapshot using (VMWareSnapshot foundSnapshot = virtualMachine.Snapshots.GetNamedSnapshot(name)) { // revert to the new snapshot foundSnapshot.RevertToSnapshot(); // delete snapshot foundSnapshot.RemoveSnapshot(); } } } #endregion }
public void GettingStartedVI() { #region Example: Getting Started (VI) // declare a virtual host using (VMWareVirtualHost virtualHost = new VMWareVirtualHost()) { // connect to a remove (VMWare ESX) virtual machine virtualHost.ConnectToVMWareVIServer("esx.mycompany.com", "vmuser", "password"); // open an existing virtual machine using (VMWareVirtualMachine virtualMachine = virtualHost.Open("[storage] testvm/testvm.vmx")) { // power on this virtual machine virtualMachine.PowerOn(); // wait for VMWare Tools virtualMachine.WaitForToolsInGuest(); // login to the virtual machine virtualMachine.LoginInGuest("Administrator", "password"); // run notepad virtualMachine.RunProgramInGuest("notepad.exe", string.Empty); // create a new snapshot string name = "New Snapshot"; // take a snapshot at the current state virtualMachine.Snapshots.CreateSnapshot(name, "test snapshot"); // power off virtualMachine.PowerOff(); // find the newly created snapshot using (VMWareSnapshot snapshot = virtualMachine.Snapshots.GetNamedSnapshot(name)) { // revert to the new snapshot snapshot.RevertToSnapshot(); // delete snapshot snapshot.RemoveSnapshot(); } } } #endregion }
/// <summary> /// Release any references to the virtual machine. /// </summary> public void Dispose() { _vm = null; // don't hold another reference, http://communities.vmware.com/message/1144091 }
/* * Run PolicySync as system user * To wait for the completion of PolicySync, we look for PsExec.exe process on guest, * when null is returned the process does not exist */ private static void policySync(VMWareVirtualMachine ivm) { VMWareVirtualMachine.Process psync = detachSystemCommand(@"C:\Program Files (x86)\LANDesk\LDClient\PolicySync.exe", "", ivm); if (psync != null) while (ivm.GuestProcesses.FindProcess(psync.Name, StringComparison.CurrentCulture) != null) System.Threading.Thread.Sleep(1000); Console.WriteLine("[\u221A] PolicySync complete."); }
public VMWareVirtualMachineConfig GetConfiguration(VMWareVirtualMachine virtualMachine) { foreach (VMWareVirtualMachineConfig virtualMachineConfig in _config.VirtualMachines) { if (virtualMachineConfig.File == virtualMachine.PathName) { return virtualMachineConfig; } } return null; }
/// <summary> /// New instance of a shell wrapper object. /// </summary> /// <param name="vm">Powered virtual machine.</param> public Shell(VMWareVirtualMachine vm) : base(vm) { }
/// <summary> /// New instance of a guest operating system wrapper. /// </summary> /// <param name="vm">Powered virtual machine.</param> public GuestOS(VMWareVirtualMachine vm) { _vm = vm; }
/// <summary> /// Waits for vmware user process in the guest /// </summary> /// <param name="virtualMachine"></param> protected void WaitForVMwareUserProcessInGuest(VMWareVirtualMachine virtualMachine) { Log.LogMessage(string.Format("Waiting for vmware user process in {0}", Filename)); virtualMachine.WaitForVMWareUserProcessInGuest(GuestUsername, GuestPassword, WaitForVMwareUserProcessTimeout); }
/* * Detaches commands as the SYSTEM user in the guest OS * Added the /WAIT argument to have hstart64 run until it's called process (PsExec) is done. So tracking hstart is the most * effective way of figuring out if the process is alive. */ private static VMWareVirtualMachine.Process detachSystemCommand(string command, string args, VMWareVirtualMachine sysVm) { VMWareVirtualMachine.Process tst, desiredProc = null, hstartWait = sysVm.DetachProgramInGuest(pstempGuest + @"\hstart64.exe", "/WAIT /UAC \"" + pstempGuest + "\\PsExec.exe /accepteula -i -s \"" + command + "\" " + args + "\""); while ((tst = sysVm.GuestProcesses.FindProcess(hstartWait.Name, StringComparison.CurrentCulture)) != null && desiredProc == null) { desiredProc = sysVm.GuestProcesses.FindProcess(Path.GetFileName(command), StringComparison.CurrentCulture); } return desiredProc; }
public VMWareVirtualHost Reconnect() { _virtualMachine = null; _host = null; return ConnectedVirtualHost; }
/* * Runs regedit export of LANDesk software tracking, pulls file from guest -> host and returns number of lines in the file. * */ private static int getRegEntryNum(VMWareVirtualMachine ivm) { if (ivm.FileExistsInGuest(pstempGuest + @"\reg.txt")) ivm.DeleteFileFromGuest(pstempGuest + @"\reg.txt"); VMWareVirtualMachine.Process proc = ivm.RunProgramInGuest(@"C:\Windows\System32\Reg.exe", "export \"HKEY_LOCAL_MACHINE\\SOFTWARE\\LANdesk\\SOFTWARE\" \"" + pstempGuest + "\\reg.txt\""); if (File.Exists(workingDir + @"\reg.txt")) File.Delete(workingDir + @"\reg.txt"); ivm.CopyFileFromGuestToHost(pstempGuest + @"\reg.txt", workingDir + @"\reg.txt"); return File.ReadAllLines(workingDir + @"\reg.txt").Length; }
public VirtualMachine(VMWareVirtualMachine vm) { this.vm = vm; }
public Process(VMWareVirtualMachine.Process p) { this.p = p; }