Adding Memory and Enabling MemoryHotAdd

Post date: Jul 12, 2013 6:18:03 PM

I wrote this to configure an array of VMs that needed to have their memory upgraded to a requested amount however some of the VMs had MemoryHotAdd Enabled and some VMs already had the requested amount. This would automate the process with PowerCLI. I probably could have used a csv file instead of an array but as I am still somewhat new to PowerCLI and had already made the array of 50+ VMs I figured it best just stick with that I had.

$VMs = @("VM1","VM2","VM3")

$NewMem = 8192

Function Enable-MemHotAdd($VirtualM){

$VMget = Get-VM $VirtualM

$Spec = New-Object VMware.Vim.VirtualMachineConfigSpec

$Spec.MemoryHotAddEnabled = $true

$VMget.ExtensionData.ReconfigVM($Spec)

}

ForEach ($VM in $VMs)

{

$gVM = Get-VM $VM

If (($gVM.ExtensionData.Config.MemoryHotAddEnabled -eq $true) -and ($gVM.MemoryMB -lt $NewMem)){

Set-VM -VM $VM –MemoryMB $NewMem –Confirm:$false

}

ElseIf (($gVM.ExtensionData.Config.MemoryHotAddEnabled -eq $false) -and ($gVM.MemoryMB -lt $NewMem)){

Shutdown-VMGuest $gVM –Confirm:$false

While ($gVM.PowerState –eq “PoweredOn”){

Sleep –Seconds 1

$gVM = Get-VM $VM

}

Set-VM -VM $VM –MemoryMB $NewMem –Confirm:$false

Enable-MemHotAdd $VM

Start-VM $VM –Confirm:$false

}

Else {Write "I did nothing to this VM. -----> $VM"}

}