Share via


Starting Virtual Machines via Scripting with Windows Virtual PC

Here are some simple scripts that allow you to start a virtual machine with Windows Virtual PC.  Now, you may be wondering why you would want to do this.  Well there are a couple of reasons I can think of:

  • Automated testing.   If you have a virtual machine that runs an automated tests, or a daily batch job: use a script to run the virtual machine in the background.
  • Patch deployment.  If you have an environment where patches are deployed after-hours – these scripts can ensure that virtual machines are running at the right time to receive the updates.
  • Faster launch. A virtual machine that is running in the background can still be used for seamless applications or for full-desktop virtual machine usage.  If you have a virtual machine that you regularly use, starting it with a script when you login means that it will be ready to go as soon as you need it.

PowerShell:

 param([string]$vmName)
  
 # Check for correct command-line arguments
 If ($vmName -eq "")
  {
  write-host "Missing command-line argument."
  write-host "USage: StartVM.ps1 -vmName `"Name of virtual machine`""
  exit
  }
  
 # Connect to Virtual PC
 $vpc=new-object –com VirtualPC.Application –Strict
  
 # Get virtual machine object
 $vm = $vpc.FindVirtualMachine($vmName)
  
 # Start the virtual machine
 write-host "Starting the virtual machine " $vmName "..."
 $vmTask = $vm.Startup()
  
 # Wait for the virtual machine to start
 $vmTask.WaitForCompletion(-1)
  
 # Display success or failure
 If ($vmTask.result -eq 0) 
  {
  write-host "Virtual machine started."
  }
 Else
  {
  write-host "Failed to start virtual machine."
  write-host
  write-host $vmTask.ErrorDescription
  }

 

VBScript:

 Option Explicit
  
 Dim namedArguments, vpc, vm, vmName, vmTask
  
 ' Check that the script is running at the command line.
 If UCase(Right(Wscript.FullName, 11)) = "WSCRIPT.EXE" Then
  WScript.Echo "This script must be run under CScript."
  WScript.Quit
 End If
  
 ' Get the virtual machine name from the command-line arguments
 Set namedArguments = WScript.Arguments.Named
  
 If namedArguments.Exists("vm") Then
  vmName = namedArguments.Item("vm")
 Else
  WScript.Echo "Missing command-line argument"
  WScript.Echo
  WScript.Echo "Usage: StartVM.vbs /vm:" & chr(34) & "Name of virtual machine to be started" & chr(34)
  WScript.Echo
  WScript.Quit
 End If
  
 ' Attempt to connect to Virtual PC
 On Error Resume Next
 Set vpc = CreateObject("VirtualPC.Application")
 If Err.Number <> 0 Then
  WScript.Echo "Unable to connect to Virtual PC."
  WScript.Quit
 End if
 On Error Goto 0
  
 ' Get virtual machine object
 Set vm = vpc.FindVirtualMachine(vmName)
  
 ' Start the virtual machine
 WScript.Echo "Starting the virtual machine " & vmName & "..."
 Set vmTask = vm.Startup
  
 ' Wait for the virtual machine to start
 vmTask.WaitForCompletion(-1)
  
 WScript.Echo
  
 ' Display success or failure
 If vmTask.result = 0 Then
  WScript.Echo "Virtual machine started."
 Else
  WScript.Echo "Failed to start virtual machine."
  WScript.Echo
  WScript.Echo vmTask.ErrorDescription
 End If
  
 WScript.Echo

 

I have also attached these scripts to this post.

Cheers,
Ben

StartVM.zip

Comments

  • Anonymous
    August 13, 2009
    The comment has been removed

  • Anonymous
    August 13, 2009
    Yes, you can script shutting down a virtual machine, but getting it to run on logoff would be tricky. Cheers, Ben

  • Anonymous
    August 31, 2009
    Is there any possibility to turnoff a hibernated windows virtual pc machine? When trying your code and executing the turnoff method instead of the startup methods it results in an error stating that the maschine is not running.

  • Anonymous
    July 26, 2012
    What is the commant to shut down a VM? Is it possible to shutdown all the VMs at the same time? Which command? Thanks