The AutomaticCheckpointsEnabled option may not always be available depending on the version in use. Check for support before applying the configured value. If automatic checkpoints are to be enabled and support is not available, force an error.
119 lines
2.9 KiB
PowerShell
119 lines
2.9 KiB
PowerShell
#Requires -Modules VagrantVM, VagrantMessages
|
|
|
|
param(
|
|
[parameter (Mandatory=$true)]
|
|
[Guid] $VMID,
|
|
[parameter (Mandatory=$false)]
|
|
[string] $SwitchID=$null,
|
|
[parameter (Mandatory=$false)]
|
|
[string] $Memory=$null,
|
|
[parameter (Mandatory=$false)]
|
|
[string] $MaxMemory=$null,
|
|
[parameter (Mandatory=$false)]
|
|
[string] $Processors=$null,
|
|
[parameter (Mandatory=$false)]
|
|
[string] $AutoStartAction=$null,
|
|
[parameter (Mandatory=$false)]
|
|
[string] $AutoStopAction=$null,
|
|
[parameter (Mandatory=$false)]
|
|
[switch] $VirtualizationExtensions,
|
|
[parameter (Mandatory=$false)]
|
|
[switch] $EnableCheckpoints,
|
|
[parameter (Mandatory=$false)]
|
|
[switch] $EnableAutomaticCheckpoints
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
try {
|
|
$VM = Hyper-V\Get-VM -Id $VMID
|
|
} catch {
|
|
Write-ErrorMessage "Failed to locate VM: ${PSItem}"
|
|
exit 1
|
|
}
|
|
|
|
if($Processors) {
|
|
try {
|
|
Set-VagrantVMCPUS -VM $VM -CPUCount ($Processors -as [int])
|
|
} catch {
|
|
Write-ErrorMessage "Failed to configure CPUs: ${PSItem}"
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
if($Memory -or $MaxMemory) {
|
|
try {
|
|
Set-VagrantVMMemory -VM $VM -Memory $Memory -MaxMemory $MaxMemory
|
|
} catch {
|
|
Write-ErrorMessage "Failed to configure memory: ${PSItem}"
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
if($AutoStartAction -or $AutoStopAction) {
|
|
try {
|
|
Set-VagrantVMAutoActions -VM $VM -AutoStartAction $AutoStartAction -AutoStopAction $AutoStopAction
|
|
} catch {
|
|
Write-ErrorMessage "Failed to configure automatic actions: ${PSItem}"
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
if($VirtualizationExtensions) {
|
|
$virtex = $true
|
|
} else {
|
|
$virtex = $false
|
|
}
|
|
|
|
try {
|
|
Set-VagrantVMVirtExtensions -VM $VM -Enabled $virtex
|
|
} catch {
|
|
Write-ErrorMessage "Failed to configure virtualization extensions: ${PSItem}"
|
|
exit 1
|
|
}
|
|
|
|
if($SwitchID) {
|
|
try {
|
|
$SwitchName = Get-VagrantVMSwitch -NameOrID $SwitchID
|
|
Set-VagrantVMSwitch -VM $VM -SwitchName $SwitchName
|
|
} catch {
|
|
Write-ErrorMessage "Failed to configure network adapter: ${PSItem}"
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
if($EnableCheckpoints) {
|
|
$checkpoints = "Standard"
|
|
$CheckpointAction = "enable"
|
|
} else {
|
|
$checkpoints = "Disabled"
|
|
$CheckpointAction = "disable"
|
|
}
|
|
|
|
try {
|
|
Hyper-V\Set-VM -VM $VM -CheckpointType $checkpoints
|
|
} catch {
|
|
Write-ErrorMessage "Failed to ${CheckpointAction} checkpoints on VM: ${PSItem}"
|
|
exit 1
|
|
}
|
|
|
|
if($EnableAutomaticCheckpoints) {
|
|
$autochecks = 1
|
|
$AutoAction = "enabled"
|
|
} else {
|
|
$autochecks = 0
|
|
$AutoAction = "disable"
|
|
}
|
|
|
|
try {
|
|
if($autochecks -eq 1 -and (Get-Command Hyper-V\Set-VM).Parameters["AutomaticCheckpointsEnabled"] -eq $null) {
|
|
Write-ErrorMessage "AutomaticCheckpointsEnabled is not available"
|
|
exit 1
|
|
}
|
|
|
|
Hyper-V\Set-VM -VM $VM -AutomaticCheckpointsEnabled $autochecks
|
|
} catch {
|
|
Write-ErrorMessage "Failed to ${AutoAction} automatic checkpoints on VM: ${PSItem}"
|
|
exit 1
|
|
}
|