Public/Invoke-HotAdd.ps1
Function Invoke-HotAdd { <# .SYNOPSIS -Taylor Lee Modified 06182019 .DESCRIPTION Modify Hotadd settings for a single or all VM's .EXAMPLE Disable Memory HotAdd on all VM's Invoke-HotAdd -DisableMem .EXAMPLE Disable Memory HotAdd on a single vm Invoke-HotAdd -DisableMem -VMName ExchangeServer .NOTES Requires the VMware.PowerCLI Module #> [CmdletBinding()] param ( [Parameter(Mandatory = $true, ParameterSetName = 'Disable Mem Hotadd')][switch]$DisableMem, [Parameter(Mandatory = $true, ParameterSetName = 'Disable CPU Hotadd')][switch]$DisableCPU, [Parameter(Mandatory = $true, ParameterSetName = 'Enable Mem Hotadd')][switch]$EnableMem, [Parameter(Mandatory = $true, ParameterSetName = 'Enable CPU Hotadd')][switch]$EnableCpu, [Parameter(Mandatory = $false, ParameterSetName = 'Disable Mem Hotadd')] [Parameter(Mandatory = $false, ParameterSetName = 'Disable CPU Hotadd')] [Parameter(Mandatory = $false, ParameterSetName = 'Enable Mem Hotadd')] [Parameter(Mandatory = $false, ParameterSetName = 'Enable CPU Hotadd')] $VMName ) if ($DisableMem) { if ($VMName) { Write-Host "Configuring $VMName" -ForegroundColor Yellow $vmview = Get-VM $VMName | Get-View $vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec $extra = New-Object VMware.Vim.optionvalue $extra.Key = "mem.hotadd" $extra.Value = "false" $vmConfigSpec.extraconfig += $extra $vmview.ReconfigVM($vmConfigSpec) } else { $vms = Get-VM | Get-View foreach ($vm in $vms) { Write-Host "Configuring hotadd on: " -ForegroundColor Yellow -NoNewline Write-Host $vm.name -ForegroundColor Cyan $vmview = Get-VM $vm.name | Get-View $vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec $extra = New-Object VMware.Vim.optionvalue $extra.Key = "mem.hotadd" $extra.Value = "false" $vmConfigSpec.extraconfig += $extra $vmview.ReconfigVM($vmConfigSpec) } } } if ($DisableCPU) { if ($VMName) { Write-Host "Configuring $VMName" -ForegroundColor Yellow $vmview = Get-VM $VMName | Get-View $vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec $extra = New-Object VMware.Vim.optionvalue $extra.Key = "vcpu.hotadd" $extra.Value = "false" $vmConfigSpec.extraconfig += $extra $vmview.ReconfigVM($vmConfigSpec) } else { $vms = Get-VM | Get-View foreach ($vm in $vms) { Write-Host "Configuring hotadd on: " -ForegroundColor Yellow -NoNewline Write-Host $vm.name -ForegroundColor Cyan $vmview = Get-VM $vm.name | Get-View $vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec $extra = New-Object VMware.Vim.optionvalue $extra.Key = "vcpu.hotadd" $extra.Value = "false" $vmConfigSpec.extraconfig += $extra $vmview.ReconfigVM($vmConfigSpec) } } } if ($EnableMem) { if ($VMName) { WWrite-Host "Configuring $VMName" -ForegroundColor Yellow $vmview = Get-VM $VMName | Get-View $vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec $extra = New-Object VMware.Vim.optionvalue $extra.Key = "mem.hotadd" $extra.Value = "true" $vmConfigSpec.extraconfig += $extra $vmview.ReconfigVM($vmConfigSpec) } else { $vms = Get-VM | Get-View foreach ($vm in $vms) { Write-Host "Configuring hotadd on: " -ForegroundColor Yellow -NoNewline Write-Host $vm.name -ForegroundColor Cyan $vmview = Get-VM $vm.name | Get-View $vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec $extra = New-Object VMware.Vim.optionvalue $extra.Key = "mem.hotadd" $extra.Value = "true" $vmConfigSpec.extraconfig += $extra $vmview.ReconfigVM($vmConfigSpec) } } } if ($EnableCpu) { Write-Host "Enabling CPU Hotadd will disable vNUMA and effect VM Performance" -ForegroundColor Yellow $prompt = Read-Host "Do you wish to continue? (yes/no)" if ($prompt -eq 'yes') { if ($VMName) { Write-Host "Configuring $VMName" -ForegroundColor Yellow $vmview = Get-VM $VMName | Get-View $vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec $extra = New-Object VMware.Vim.optionvalue $extra.Key = "vcpu.hotadd" $extra.Value = "true" $vmConfigSpec.extraconfig += $extra $vmview.ReconfigVM($vmConfigSpec) } } else { $vms = Get-VM | Get-View foreach ($vm in $vms) { Write-Host "Configuring hotadd on: " -ForegroundColor Yellow -NoNewline Write-Host $vm.name -ForegroundColor Cyan $vmview = Get-VM $vm.name | Get-View $vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec $extra = New-Object VMware.Vim.optionvalue $extra.Key = "vcpu.hotadd" $extra.Value = "true" $vmConfigSpec.extraconfig += $extra $vmview.ReconfigVM($vmConfigSpec) } } else { Write-Host "Enable CPU Hotadd Canceled" -ForegroundColor Yellow } } } |