PowerShell Script for Exporting a virtual machine
Even though it might be tempting just to copy a whole virtual machine from Hyper-V Host to Hyper-V Host, this is not the way to do it. Importing and Exporting Hyper-V-style is. This post provides a PowerShell script to make it easier.
I need to automate the process of exporting a virtual machine recently – and when I checked around I found that while there are a number of sample scripts out there that show you how to do this (some even on this blog) they are all written in VBScript. As I am now to the stage where PowerShell is my preferred scripting language – I sat down and wrote up this short script:
# Function for handling WMI jobs / return values
Function ProcessResult($result, $successString, $failureString)
{
#Return success if the return value is "0"
if ($result.ReturnValue -eq 0)
{write-host $successString}
#If the return value is not "0" or "4096" then the operation failed
ElseIf ($result.ReturnValue -ne 4096)
{write-host $failureString " Error value:" $result.ReturnValue}
Else
{#Get the job object
$job=[WMI]$result.job
#Provide updates if the jobstate is "3" (starting) or "4" (running)
while ($job.JobState -eq 3 -or $job.JobState -eq 4)
{write-host $job.PercentComplete "% complete"
start-sleep 1
#Refresh the job object
$job=[WMI]$result.job}
#A jobstate of "7" means success
if ($job.JobState -eq 7)
{write-host $successString
return $true}
Else
{write-host $failureString
write-host "ErrorCode:" $job.ErrorCode
write-host "ErrorDescription" $job.ErrorDescription
return $false}
}
}
# Prompt for the Hyper-V Server to use
$HyperVServer = Read-Host "Specify the Hyper-V Server to use (enter '.' for the local computer)"
# Prompt for the virtual machine to use
$VMName = Read-Host "Specify the name of the virtual machine"
# Prompt for the path to export to
$ExportPath = Read-Host "Specify the path to place the exported virtual in"
# Get the management service
$VMMS = gwmi -namespace root\virtualization Msvm_VirtualSystemManagementService -computername $HyperVServer
# Get the virtual machine object
$VM = gwmi MSVM_ComputerSystem -filter "ElementName='$VMName'" -namespace "root\virtualization" -computername $HyperVServer
# Export the virtual machine
$result = $VMMS.ExportVirtualSystem($VM, $true, $ExportPath)
# Check to make sure we succeeded
$exportSucceeded = ProcessResult $result "Virtual machine exported." "Failed to export virtual machine."
Some quick notes to make about this script:
- This script takes a Hyper-V server name, a virtual machine name and an export path – and then performs a full export to the requested location.
- I am using the older (deprecated) ExportVirtualSystem method here – and not ExportVirtualSystemEx (which I really should do). The main reason for this is that while ExportVirtualSystemEx is a lot more powerful than ExportVirtualSystem, ExportVirtualSystem works perfectly fine for this basic use case and is much easier to script.
Source and download: http://blogs.msdn.com/b/virtual_pc_guy/archive/2012/02/08/powershell-script-for-exporting-a-virtual-machine.aspx
Similar Posts:
- Installing print drivers and migrating the logical printers on Terminal Server
- Free Guest-based snapshotting tool for Hyper-V
- VMMUpdate: Free MS SCVMM update script
- How Windows 8 IOPS Footprint is different and how it matter to VDI
- How to put a VM on Azure
Leave a comment