Skip to main content
  1. Blog/

Stop or Start all WebApps in your Azure subscription

·409 words·2 mins·
azure devops powershell app service
Carlos Mendible
Author
Carlos Mendible

Stop or Start all WebApps in your Azure subscription with Stop-Start-All-WebApps.ps1 a simple PowerShell workflow runbook that will help you automate the process of stopping or starting every single WebApp (Website) you’ve deployed.

The script receives two required parameters:

  • Stop: If set to true stop the WebApps (Websites) otherwise start the WebApps (Websites)
  • CredentialAssetName: The name of a valid Credential Asset (AutomationPSCredential) you must have previously configured.

As you can see below, the script is quite simple and uses the following PowerShell Activities and Cmdlets:

TypeNameDescription
ActivityGet-AutomationPSCredentialGets a credential to use in a runbook or DSC configuration. Returns a System.Management.Automation.PSCredential object.
CmdletAdd-AzureAccountAdds an authenticated account to use for Resource Manager cmdlet requests.
CmdletAdd-AzureRmAccountAdds the Azure account to Windows PowerShell
CmdletGet-AzureWebsiteGets Azure websites in the current subscription
CmdletStop-AzureWebsiteStops the specified webiste
CmdletStart-AzureWebsiteStarts the specified webiste

Here is the script:

<# 
    .SYNOPSIS  
        Start or Stop all WebApps (Websites) in your subscription. 
 
    .DESCRIPTION 
        Runbook which allows you to start/stop all WebApps (Websites) in your subscription. 
 
    .PARAMETER Stop 
        If set to true: stop the WebApps (Websites). Otherwise start the WebApps (Websites) 
 
    .PARAMETER CredentialAssetName 
        The name of a working AutomationPSCredential 
         
    .NOTES 
        AUTHOR: Carlos Mendible 
        LASTEDIT: June 2, 2016 
#> 
Workflow Stop-Start-All-WebApps  
{ 
    # Parameters 
    Param( 
        [Parameter (Mandatory= $true)] 
        [bool]$Stop, 
         
        [Parameter (Mandatory= $true)] 
        [string]$CredentialAssetName 
       )   
        
    #The name of the Automation Credential Asset this runbook will use to authenticate to Azure. 
    $CredentialAssetName = $CredentialAssetName; 
     
    #Get the credential with the above name from the Automation Asset store 
    $Cred = Get-AutomationPSCredential -Name $CredentialAssetName 
    if(!$Cred) { 
        Throw "Could not find an Automation Credential Asset named '${CredentialAssetName}'. Make sure you have created one in this Automation Account." 
    } 
 
    #Connect to your Azure Account        
    Add-AzureRmAccount -Credential $Cred 
    Add-AzureAccount -Credential $Cred 
     
    $status = 'Stopped' 
    if ($Stop) 
    { 
        $status = 'Running' 
    } 
 
    # Get Running WebApps (Websites) 
    $websites = Get-AzureWebsite | where-object -FilterScript{$_.state -eq $status } 
     
    foreach -parallel ($website In $websites) 
    { 
        if ($Stop) 
        { 
            $result = Stop-AzureWebsite $website.Name 
            if($result) 
            { 
                Write-Output "- $($website.Name) did not shutdown successfully" 
            } 
            else 
            { 
                Write-Output "+ $($website.Name) shutdown successfully" 
            } 
        } 
        else 
        { 
            $result = Start-AzureWebsite $website.Name 
            if($result) 
            { 
                Write-Output "- $($website.Name) did not start successfully" 
            } 
            else 
            { 
                Write-Output "+ $($website.Name) started successfully" 
            } 
        }  
    }     
}

You can download the script from the Technet Script Gallery, import it as a runbook for your automation account in the Azure portal or simply copy the code from this post.

Hope it helps!