Functions/Resize-AHVM.ps1
Function Resize-AHVM { <# .SYNOPSIS Resizes a VM. .DESCRIPTION Resizes a VM to $NewVMSize .PARAMETER SubscriptionId If the VM is not in the current subscription specify the subsctiptionId of the subscription it is in here .PARAMETER VMName The name of the VM to resize .PARAMETER ResourceGroup The resource group the VM is in .PARAMETER NewVMSize The size the VM should be resized to .PARAMETER AutoStart Turns the VM on after the resize .PARAMETER Force Deallocates the VM to resize it if it is currently not deallocated .EXAMPLE .INPUTS String .OUTPUTS .NOTES Author: Paul Harrison .LINK #> [CmdletBinding()] param ( [Parameter()] [ValidateScript( { ((Get-AzSubscription).Id) -contains $_ })] [string] $SubscriptionId, [Parameter()] [string] $VMName, [Parameter()] [string] $ResourceGroup, [Parameter()] [string] $NewVMSize, [Parameter()] [switch] $Force, [Parameter()] [switch] $AutoStart ) $oldSub = ((Get-AzContext).Subscription.Id) If ($SubscriptionId -and ($SubscriptionId -ne ((Get-AzContext).Subscription.Id))) { try { Set-AzContext $SubscriptionId } catch { throw } } try { $VMStatus = Get-AzVM -ResourceGroupName $ResourceGroup -VMName $VMName -Status $VM = Get-AzVM -ResourceGroupName $ResourceGroup -VMName $VMName } catch { throw } If ($NewVMSize -eq $VM.HardwareProfile.VmSize) { Write-Verbose "$($VM.Name) is already a $NewVMSize - no changes made" return } Write-Verbose "Verifying the VM is deallocated" If (!(($VMStatus.Statuses.code -like "*PowerState/*" -like "*deallocated"))) { If ($Force) { Stop-AzVM -ResourceGroupName $VM.ResourceGroupName -Name $VM.Name -Force -NoWait While (!(((get-azvm -ResourceGroupName $VM.ResourceGroupName -Name $VM.Name -Status).Statuses.code) -like "*PowerState/*" -like "*deallocated" )) { Write-Verbose "Waiting for $($VM.Name) to deallocate..." Start-Sleep -Seconds 5 } } Else { Throw "The VM $($VM.Name) is currently not dealloated. Unable to resize." } } Write-Verbose "Verifying $NewVMSize is allowed in $($VM.Location)" If ((Get-AzVMSize -Location $($VM.Location)).Name -notcontains $NewVMSize) { Throw "Invalid VM Size for $($VM.Location)" } $VM.HardwareProfile.VmSize = $NewVMSize Update-AzVM -VM $VM -ResourceGroupName $VM.ResourceGroupName If ($AutoStart) { Start-AzVM -ResourceGroupName $VM.ResourceGroupName -Name $VM.Name } If ($SubscriptionId) { Set-AzContext $oldSub } } |