Skip to content

Instantly share code, notes, and snippets.

@digitaldrummerj
Forked from Novakov/generate_vm_xml_config.ps1
Last active August 29, 2015 14:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save digitaldrummerj/abc44d4a257112e2f1f8 to your computer and use it in GitHub Desktop.
Save digitaldrummerj/abc44d4a257112e2f1f8 to your computer and use it in GitHub Desktop.
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[string]$VMName,
[Parameter(Mandatory)]
[string]$OutputFile
)
function Get-DriveType($drive)
{
if($drive -is [Microsoft.HyperV.PowerShell.HardDiskDrive])
{
return "VHD"
}
if($drive -is [Microsoft.HyperV.PowerShell.DvdDrive])
{
return "ISO"
}
return "NONE"
}
function Get-Drives([Microsoft.HyperV.PowerShell.Drive[]]$drives)
{
$drives | ForEach-Object {
$num = $_.DiskNumber + 0
@"
<drive$num>
<pathname type="string">$($_.Path)</pathname>
<type type="string">$(Get-DriveType($_))</type>
</drive$num>
"@
}
}
function Get-IdeControllers($vm)
{
Get-VMIdeController -VM $vm | ForEach-Object {
@"
<controller$($_.ControllerNumber)>
$(Get-Drives($_.Drives))
</controller$($_.ControllerNumber)>
"@
}
}
function Get-ScsiControllers($vm)
{
Get-VMScsiController -VM $vm | ForEach-Object {
@"
<controller$($_.ControllerNumber)>
$(Get-Drives($_.Drives))
</controller$($_.ControllerNumber)>
"@
}
}
function Get-Controllers($vm)
{
if($vm.Generation -eq 1)
{
Get-IdeControllers($vm)
}
else
{
"<scsi ChannelInstanceGuid=`"x`">$(Get-ScsiControllers($vm))</scsi>"
}
}
$vm = Get-VM -Name $VMName
$adapter = Get-VMNetworkAdapter -VM $vm | select -First 1
if($vm.Generation -eq 1)
{
$bios = Get-VMBios -VM $vm
$startupOrder = $bios.StartupOrder
}
else
{
$firmware = Get-VMFirmware -VM $vm
$startupOrder = $firmware.BootOrder
}
$xml = [xml]@"
<?xml version="1.0" ?>
<configuration>
<properties>
<subtype type="integer">$($vm.Generation - 1)</subtype>
<name type="string">$($vm.Name)</name>
</properties>
<settings>
<processors>
<count type="integer">$($vm.ProcessorCount)</count>
</processors>
<memory>
<bank>
<dynamic_memory_enabled type="bool">$($vm.DynamicMemoryEnabled)</dynamic_memory_enabled>
<limit type="integer">$($vm.MemoryMaximum / 1MB)</limit>
<reservation type="integer">$($vm.MemoryMinimum / 1MB)</reservation>
<size type="integer">$($vm.MemoryStartup / 1MB)</size>
</bank>
</memory>
</settings>
<AltSwitchName type="string">$($adapter.SwitchName)</AltSwitchName>
<boot>
<device0 type="string">Optical</device0>
</boot>
<secure_boot_enabled type="bool">False</secure_boot_enabled> <!-- TODO -->
<notes type="string">$($vm.Notes)</notes>
<vm-controllers>
$(Get-Controllers($vm))
</vm-controllers>
</configuration>
"@
$xml.Save($OutputFile)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment