In our previous article, I explained how to write a simple PowerShell script to expand the size of an Azure VM.
- PowerShell script to expand and reduce the size of an Azure VM
- Change the size of Azure VM in a given schedule using Azure Runbook
In this article I’ll explain how to execute PowerShell scripts in a given schedule using Azure Automation Account, Runbooks and Schedules.
What is an Azure Automation?
Azure Automation is a Software as a Service (SaaS) that can be used to automate processes. You can automate cloud automation tasks using Azure Automation. Some common tasks are,
- Build and deploy resources
- Configure VMs
- Monitor resources
What is a Runbook?
Azure Automation use Runbooks to automate processes. Runbooks are executed in automation Sandboxes, which means as a Platform as a Service (PaaS) VMs. You will get the isolation that you expect from Runbooks
Following are the steps I used to expand and reduce the size of VMs in my Azure tenant.
1. Create Azure Automation Account

Navigate to Variables section and create following variables


2. Create the Runbook

Create new Runbook as a PowerShell script to expand the size

Add following script
$connectionName = "AzureRunAsConnection"
try
{
# Get the connection "AzureRunAsConnection "
$servicePrincipalConnection=Get-AutomationConnection -Name $connectionName
"Logging in to Azure..."
Add-AzureRmAccount `
-ServicePrincipal `
-TenantId $servicePrincipalConnection.TenantId `
-ApplicationId $servicePrincipalConnection.ApplicationId `
-CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
}
catch {
if (!$servicePrincipalConnection)
{
$ErrorMessage = "Connection $connectionName not found."
throw $ErrorMessage
} else{
Write-Error -Message $_.Exception
throw $_.Exception
}
}
$vmName = Get-AutomationVariable -Name 'vmName'
$resourceGroup = Get-AutomationVariable -Name 'resourceGroup'
$lowHwProfile = Get-AutomationVariable -Name 'lowHwProfile'
"Updating VM size"
Get-AzureRmVMSize -ResourceGroupName $resourceGroup -VMName $vmName
$vm = Get-AzureRmVM -ResourceGroupName $resourceGroup -Name $vmName
$vm.HardwareProfile.VmSize = $lowHwProfile
Update-AzureRmVM -VM $vm -ResourceGroupName $resourceGroup
"VM size updated"
Same way create another Runbook to reduce the VM size
3. Create Schedules and apply to Runbooks
Click on Schedules in Automation Account


Navigate to specific Runbook to apply the schedule


That’s it. We have to create another schedule to reduce the size of the VM on Monday night and apply to the particular Runbook