Start-Stop-VMs.ps1
<#PSScriptInfo .VERSION 1.0.1 .GUID 71977474-9f23-435f-afb9-b3c200852310 .AUTHOR Dr. Raymond Zheng .COMPANYNAME Telstra Health .COPYRIGHT 2019 Telstra Health .TAGS start Raymond stop startvm stopvm startup shutdown .PRIVATEDATA Written by Dr. Raymond Zheng @ Telstra Health Sydney Australia on 6 March 2019. .DESCRIPTION Start Up or Shut Down Azure Virtual Machines in Current Subscription. Resource group and VM list are supported. Requirement: Make sure the default AzureServicePrincipal named 'AzureRunAsConnection' exists in Automation Account --> Connections. #> Workflow Start-Stop-AzureVMs { Param ( # Action to perform (startup or shutdown) [Parameter(Mandatory=$true)][ValidateSet("Start","Stop")][String]$Action, # Resource group where the vm belongs to [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()][string]$ResourceGroup, # The list of the VM's to perform action to (separate by ',') [Parameter(Mandatory=$false)][String]$VMList ) # Suppress Warnings Set-Item Env:\SuppressAzurePowerShellBreakingChangeWarnings "true" # Authenticate with your Automation Account $Conn = Get-AutomationConnection -Name AzureRunAsConnection Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationID $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint # Get the Azure VM list if($VMList) { $AzureVMs = $VMList.Split(",") [System.Collections.ArrayList]$AzureVMsToHandle = $AzureVMs } else { $AzureVMs = (Get-AzureRmVM $ResourceGroup).Name [System.Collections.ArrayList]$AzureVMsToHandle = $AzureVMs } # Get the existing VM's $VMs = Get-AzureRmVM $ResourceGroup # Check the existence of each VM foreach($AzureVM in $AzureVMsToHandle) { if(!($VMs| ? {$_.Name -eq $AzureVM})) { throw " AzureVM : [$AzureVM] - Does not exist! - Check your inputs " } } #Shut down or Start up VM's if($Action -eq "Stop") { Write-Output "Stopping VMs"; foreach -parallel ($AzureVM in $AzureVMsToHandle) { $VMs | ? {$_.Name -eq $AzureVM} | Stop-AzureRmVM -Force } } else { Write-Output "Starting VMs"; foreach -parallel ($AzureVM in $AzureVMsToHandle) { $VMs | ? {$_.Name -eq $AzureVM} | Start-AzureRmVM } } } |