Skip to content

Set-VirtualMachine

VMware: Modifies the configuration of a virtual machine

#Requires -Version 5.1
#Requires -Modules VMware.VimAutomation.Core
[CmdletBinding(DefaultParameterSetName = "byName")]
Param(
    [Parameter(Mandatory = $true, ParameterSetName = "byID")]
    [Parameter(Mandatory = $true, ParameterSetName = "byName")]
    [string]$VIServer,
    [Parameter(Mandatory = $true, ParameterSetName = "byID")]
    [Parameter(Mandatory = $true, ParameterSetName = "byName")]
    [pscredential]$VICredential,
    [Parameter(Mandatory = $true, ParameterSetName = "byID")]
    [string]$VMId,
    [Parameter(Mandatory = $true, ParameterSetName = "byName")]
    [string]$VMName,
    [Parameter(ParameterSetName = "byID")]
    [Parameter(ParameterSetName = "byName")]
    [string]$Notes,
    [Parameter(ParameterSetName = "byID")]
    [Parameter(ParameterSetName = "byName")]
    [int32]$Cpus,
    [Parameter(ParameterSetName = "byID")]
    [Parameter(ParameterSetName = "byName")]
    [int32]$CoresPerSocket,
    [Parameter(ParameterSetName = "byID")]
    [Parameter(ParameterSetName = "byName")]
    [decimal]$MemoryGB,
    [Parameter(ParameterSetName = "byID")]
    [Parameter(ParameterSetName = "byName")]
    [string]$Network,
    [Parameter(ParameterSetName = "byID")]
    [Parameter(ParameterSetName = "byName")]
    [string]$GuestId,
    [Parameter(ParameterSetName = "byID")]
    [Parameter(ParameterSetName = "byName")]
    [string]$OSCustomizationSpec,
    [Parameter(ParameterSetName = "byID")]
    [Parameter(ParameterSetName = "byName")]
    [string]$HardwareVersion,
    [Parameter(ParameterSetName = "byID")]
    [Parameter(ParameterSetName = "byName")]
    [ValidateSet("WithVM", "Inherit", "InHostDatastore")]
    [string]$VMSwapfilePolicy,
    [Parameter(ParameterSetName = "byID")]
    [Parameter(ParameterSetName = "byName")]
    [string]$NewName
)
Process {
    try {
        [string[]]$Properties = @('Name', 'Id', 'NumCpu', 'CoresPerSocket', 'Notes', 'GuestId', 'MemoryGB', 'VMSwapfilePolicy', 'ProvisionedSpaceGB', 'Folder')
        $vmServer = Connect-VIServer -Server $VIServer -Credential $VICredential -ErrorAction Stop
        if ($PSCmdlet.ParameterSetName -eq "byID") { $machine = Get-VM -Server $vmServer -Id $VMId -ErrorAction Stop }
        else { $machine = Get-VM -Server $vmServer -Name $VMName -ErrorAction Stop }
        $setArgs = @{ Server = $vmServer; VM = $machine; Confirm = $false; ErrorAction = 'Stop' }
        if ($Cpus -gt 0) { $null = Set-VM @setArgs -NumCpu $Cpus }
        if ($CoresPerSocket -gt 0) { $null = Set-VM @setArgs -CoresPerSocket $CoresPerSocket }
        if ($MemoryGB -gt 0) { $null = Set-VM @setArgs -MemoryGB $MemoryGB }
        if ($PSBoundParameters.ContainsKey('Notes')) { $null = Set-VM @setArgs -Notes $Notes }
        if ($PSBoundParameters.ContainsKey('GuestId')) { $null = Set-VM @setArgs -GuestId $GuestId }
        if ($PSBoundParameters.ContainsKey('OSCustomizationSpec')) { $spec = Get-OSCustomizationSpec -Name $OSCustomizationSpec -Server $vmServer -ErrorAction Stop; $null = Set-VM @setArgs -OSCustomizationSpec $spec }
        if ($PSBoundParameters.ContainsKey('HardwareVersion')) { $null = Set-VM @setArgs -HardwareVersion $HardwareVersion }
        if ($PSBoundParameters.ContainsKey('Network')) { $adapter = Get-NetworkAdapter -Server $vmServer -VM $machine -ErrorAction Stop; $null = Set-NetworkAdapter -NetworkName $Network -NetworkAdapter $adapter -Confirm:$false -ErrorAction Stop }
        if ($PSBoundParameters.ContainsKey('VMSwapfilePolicy')) { $null = Set-VM @setArgs -VMSwapfilePolicy $VMSwapfilePolicy }
        if ($PSBoundParameters.ContainsKey('NewName')) { $null = Set-VM @setArgs -Name $NewName }
        $result = Get-VM -Server $vmServer -ID $machine.Id -ErrorAction Stop | Select-Object $Properties
        if ($null -ne $result) { $result | Add-Member -NotePropertyName Timestamp -NotePropertyValue (Get-Date -Format "yyyy-MM-dd HH:mm:ss") -PassThru -Force }
    }
    catch { throw }
    finally { if ($null -ne $vmServer) { Disconnect-VIServer -Server $vmServer -Force -Confirm:$false -ErrorAction SilentlyContinue } }
}

IP address or DNS name of the vSphere server

PSCredential object for authenticating with the server

ID of the VM

Name of the VM

New description

Number of virtual CPUs

Number of cores per socket

Memory size in GB

Network to connect to

Guest OS identifier

Customization specification

Hardware version

Swapfile policy: WithVM, Inherit, InHostDatastore

New name for the VM

An interactive directory of PowerShell scripts.