I put together a quick script to auto shutdown tagged ARM VMs.
There are many people still running ASM VMs and why wouldn’t you they are still supported (as of 9/2016).
The process is not much different and in fact now Azure Automation enables a RunAs account at set up its much easier to configure.
In the example below I have tacked on changes to the Azure Automation Team’s sample script, one of four created for you when you enable the feature.
<# .DESCRIPTION An example runbook which gets all the Classic VMs in a subscription using the Classic Run As Account (certificate) and then shuts down running VMs .NOTES AUTHOR: Azure Automation Team + Jonathan Wade LASTEDIT: 28-08-2016 #> $ConnectionAssetName = "AzureClassicRunAsConnection" $ServiceName = "wadeclassiv01" # Get the connection $connection = Get-AutomationConnection -Name $connectionAssetName # Authenticate to Azure with certificate Write-Verbose "Get connection asset: $ConnectionAssetName" -Verbose $Conn = Get-AutomationConnection -Name $ConnectionAssetName if ($Conn -eq $null) { throw "Could not retrieve connection asset: $ConnectionAssetName. Assure that this asset exists in the Automation account." } $CertificateAssetName = $Conn.CertificateAssetName Write-Verbose "Getting the certificate: $CertificateAssetName" -Verbose $AzureCert = Get-AutomationCertificate -Name $CertificateAssetName if ($AzureCert -eq $null) { throw "Could not retrieve certificate asset: $CertificateAssetName. Assure that this asset exists in the Automation account." } Write-Verbose "Authenticating to Azure with certificate." -Verbose Set-AzureSubscription -SubscriptionName $Conn.SubscriptionName -SubscriptionId $Conn.SubscriptionID -Certificate $AzureCert Select-AzureSubscription -SubscriptionId $Conn.SubscriptionID # Get cloud service $VMs = Get-AzureVM -ServiceName $ServiceName # Stop each of the started VMs foreach ($VM in $VMs) { if ($VM.PowerState -eq "Stopped") { # The VM is already stopped, so send notice Write-Output ($VM.InstanceName + " is already stopped") } else { # The VM needs to be stopped $StopRtn = Stop-AzureVM -Name $VM.Name -ServiceName $VM.ServiceName -Force -ErrorAction Continue if ($StopRtn.OperationStatus -ne 'Succeeded') { # The VM failed to stop, so send notice Write-Output ($VM.InstanceName + " failed to stop") } else { # The VM stopped, so send notice Write-Output ($VM.InstanceName + " has been stopped") } } }
Disclaimer: Please note although I work for Microsoft the information provided here does not represent an official Microsoft position and is provided as is.