Private/Set-VMConfiguration.ps1
|
function Set-VMConfiguration { <# .SYNOPSIS Applies post-creation configuration to a Hyper-V VM. .DESCRIPTION Configures processor count, video resolution, integration services, nested virtualization, TPM, guest services, automatic start/stop actions, and disables automatic checkpoints on an existing VM. #> [Diagnostics.CodeAnalysis.SuppressMessage('PSUseShouldProcessForStateChangingFunctions', '')] [CmdletBinding()] param( [Parameter(Mandatory)] [System.Object] $VM, [Parameter()] [System.Int32] $ProcessorCount = 2, [Parameter()] [System.Int64] $HorizontalResolution = 1920, [Parameter()] [System.Int64] $VerticalResolution = 1080, [Parameter()] [System.Boolean] $NestedVirtualization = $true, [Parameter()] [System.Boolean] $TPM = $true, [Parameter()] [System.Boolean] $GuestServices = $true, [Parameter()] [ValidateSet('Nothing', 'StartIfRunning', 'Start')] [System.String] $AutomaticStartAction = 'Nothing', [Parameter()] [ValidateSet('TurnOff', 'Save', 'ShutDown')] [System.String] $AutomaticStopAction = 'ShutDown' ) $vmName = $VM.VMName Write-Verbose "Configuring VM '$vmName': ProcessorCount=$ProcessorCount" Set-VM -VMName $vmName -ProcessorCount $ProcessorCount ` -AutomaticCheckpointsEnabled:$false ` -AutomaticStartAction $AutomaticStartAction ` -AutomaticStopAction $AutomaticStopAction Write-Verbose "Setting video resolution to ${HorizontalResolution}x${VerticalResolution}." Set-VMVideo -VMName $vmName -ResolutionType Single ` -HorizontalResolution $HorizontalResolution ` -VerticalResolution $VerticalResolution if ($GuestServices) { Write-Verbose "Enabling Guest Service Interface integration service." Enable-VMIntegrationService -VMName $vmName -Name 'Guest Service Interface' } if ($NestedVirtualization) { Write-Verbose "Enabling nested virtualization for VM '$vmName'." Set-VMProcessor -VMName $vmName -ExposeVirtualizationExtensions:$true } if ($TPM) { Write-Verbose "Enabling vTPM for VM '$vmName'." Set-VMKeyProtector -VMName $vmName -NewLocalKeyProtector Enable-VMTPM -VMName $vmName } } |