Remove vmware memory limits with Powershell

Using Memory Limits in vmware vSphere can cause severe performance issues. The guest operating system assumes it can use all of the allocated memory, but vSphere will make sure the vm cannot use more than the memory limit. It does this by inflating a memory balloon using the balloon driver included with the vmware tools. The performance chart in the vSphere Client will show the virtual machine is ballooning. I never recommend using memory limits in vmware.
The following script will remove all memory limits in your vSphere infrastructure, preventing the problems described above.

$vCenterServer = MyvCenterServer.domain.local #Enter your vCenter server FQDN here
#Connect to vCenter Server
$VC = Connect-VIServer $vCenterServer
#Gathering data
ForEach ($vm in get-vm)
	$vmView = $vm | get-view
	Write-Host "======"
	Write-Host "VM: $($vm.Name)"
	Write-Host "Current Limit: $($vmView.config.MemoryAllocation.Limit)"
	If ($vmView.config.MemoryAllocation.Limit -ne -1)
		#Preparing modified data
		$spec = New-Object VMware.Vim.VirtualMachineConfigSpec
		$MemoryAllocation = New-Object VMware.Vim.ResourceAllocationInfo
		$MemoryAllocation.Limit = -1
		$spec.MemoryAllocation = $MemoryAllocation
		#Applying modification
		Write-Host "Removing Memory Limit"
		#Reloading data
		$vm = get-vm $
		$vmView = $vm | get-view
		Write-Host "Current Limit: $($vmView.config.MemoryAllocation.Limit)"
	Clear-Variable vmView -ErrorAction SilentlyContinue
Disconnect-VIServer $vCenterServer -Confirm:$false

You can download the script here (rename to .ps1): Remove-MemoryLimits

Don’t forget to use PowerCLI to run the script, or add the PowerCLI snapin to your Powershell session (Add-PSSnapIn vmware*).


Close Menu