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