AzureFeaturedPower ShellScripts

Remove Azure Runbooks – PS Script

Remove all runbooks with specific names from specific Automation Acct from Azure

I was recently being tasked to create a script to remove two specific Runbooks from Automation Accounts which names starts with “x-xxx” and containts “-x-“.

The script will has a function called “Remove-Runbook” with a parameter “-subscriptionID”.

Currently it works per subscription, you need to pass the subscription ID in parameter.

#requires -version 3
<#
.SYNOPSIS
  Remove Azure automation runbooks

.DESCRIPTION
  This script will remove  runbooks from  automation acct that the name starts with "x-xxx" and containts "-xx-" from a specific Subscription
  It will store the logs in c:\runbook automatically

.PARAMETER -SubscriptionID
    The -SubscriptionID is madatory to pass when running the Function

  
.EXAMPLE
  Remove-runbook -subscriptionID 'subscription id'


.NOTES
  Version:        1.0
  Author:         hashmat
  Creation Date:  3/18/2020
  Purpose/Change: Dev/Prod

#>

#---------------------------------------------------------[Initialisations]--------------------------------------------------------

#Set Error Action 
$ErrorActionPreference = "stop"


#----------------------------------------------------------[Declarations]----------------------------------------------------------



#-----------------------------------------------------------[Functions]------------------------------------------------------------


Function Remove-Runbook{

  [CmdletBinding()]  
  Param(
  
    [Parameter(Mandatory)]
  $SubscriptionID
    

  )
  
  Begin{


            Write-host '###############################################################'
            Write-host '#      GETTING  SUBSCRIPTION                                  #'-foregroundcolor Green 
            Write-host '###############################################################'
            $subscriptionId = $SubscriptionID
            Set-AzContext -Subscription  $SubscriptionId 
        

            Write-host '###############################################################'
            Write-host '#             GETTING  AUTOMATION ACCOUNT                     #'-foregroundcolor Green 
            Write-host '###############################################################'

            Get-AzAutomationAccount | Where-Object {$_.AutomationAccountName.StartsWith('g-aaa-') -and $_.AutomationAccountName.Contains('-ia-')}  | select AutomationAccountName, SubscriptionId | ft -AutoSize
            $acct = Get-AzAutomationAccount | Where-Object {$_.AutomationAccountName.StartsWith('g-aaa-') -or $_.AutomationAccountName.Contains('-ia-')} | select AutomationAccountName, ResourceGroupName, SubscriptionId
            write-host "THere is Total $($acct.Count) Automation Accounts " -ForegroundColor Green
            $acct

            $runbookslocation = "c:\Runbook"
            if(!(test-path $runbookslocation)) {
                New-Item -ItemType Directory -Force -Path C:\runbook
            }


            $acct| Out-File c:\Runbook\ListingAutomationAcct.txt


            Write-host '###############################################################'
            Write-host '#                   Listing Runbooks                          #'-foregroundcolor Green 
            Write-host '###############################################################'

                foreach ($account in $acct){

                    $vmStartStopParent = Get-AzAutomationRunbook -ResourceGroupName $account.ResourceGroupName -AutomationAccountName $account.AutomationAccountName | Where-object {$_.name -eq 'run-vmStartStopParent'} 
                    
            
                    if($vmStartStopParent.name -eq 'run-vmStartStopParent') {
                    
                     Write-host  "Runbooks  $($vmStartStopParent.name)   EXIST in   $($vmStartStopParent.AutomationAccountName)" 
                     Write-output "Runbook   $($vmStartStopParent.name)    EXIST    $($vmStartStopParent.AutomationAccountName)" >> C:\Runbook\List-vmStartStopParent.txt
            
                    
                     }elseif($vmStartStopParent.name -ne 'run-vmStartStopParent'){
                        write-host "Runbook  run-vmStartStopParent   DOESNT EXIST in   $($account.AutomationAccountName)"
                         
                     }
               } 



                foreach ($account in $acct){

                    $vmStartStopChild = Get-AzAutomationRunbook -ResourceGroupName $account.ResourceGroupName -AutomationAccountName $account.AutomationAccountName | Where-object {$_.name -eq 'run-vmStartStopChild'} 
                    
            
                    if($vmStartStopChild.name -eq 'run-vmStartStopChild') {
                    
                    
                     Write-host  "Runbooks   $($vmStartStopChild.name)   EXIST in  $($vmStartStopChild.AutomationAccountName)" 
                     Write-output "Runbook   $($vmStartStopChild.name)   EXIST in  $($vmStartStopChild.AutomationAccountName)" >> C:\Runbook\List-vmStartStopChild.txt
                    
                   }elseif($vmStartStopParent.name -ne 'run-vmStartStopChild'){
                        write-host "Runbook  run-vmStartStopChild   DOESNT EXIST in   $($account.AutomationAccountName)" 
                     }
               } 

             

      
    
  }
  
  Process{
    Try{
    
            Write-host '###############################################################'
            Write-host '#           REMOVING  run-Runbooks                           #'-foregroundcolor Red 
            Write-host '###############################################################'
         
           #############   REMOVING RUN-VMSTARTSTOPPARENT ##########################
             foreach ($account in $acct){

                $vmStartStopParent = Get-AzAutomationRunbook -ResourceGroupName $account.ResourceGroupName -AutomationAccountName $account.AutomationAccountName | Where-object {$_.name -eq 'run-vmStartStopParent'}  | select name, AutomationAccountName
                
                if($vmStartStopParent.name -eq 'run-vmStartStopParent') {

                    Write-output "REMOVING   $($vmStartStopParent.name)  FROM  $($vmStartStopParent.AutomationAccountName)" >> C:\Runbook\Remove-vmStartStopParent.txt
                    Write-host  "REMOVING  $($vmStartStopParent.name)  FROM    $($vmStartStopParent.AutomationAccountName)" -ForegroundColor red

                    Remove-AzAutomationRunbook -AutomationAccountName $account.AutomationAccountName -Name  $vmStartStopParent.name -ResourceGroupName $account.ResourceGroupName -force

                }elseif($vmStartStopParent.name -ne 'run-vmStartStopParent' ){
                     Write-host  "RUNBOOK  run-vmStartStopParent   DOESN'T EXIST    in    $($account.AutomationAccountName)   to REMOVE" -ForegroundColor gray

                }

            }


            #############   REMOVING RUN-VMSTARTSTOPCHILD ##########################
            foreach ($account in $acct){

             $vmStartStopChild = Get-AzAutomationRunbook -ResourceGroupName $account.ResourceGroupName -AutomationAccountName $account.AutomationAccountName | Where-object {$_.name -eq 'run-vmStartStopChild'}  | select name, AutomationAccountName

                if($vmStartStopChild.name -eq 'run-vmStartStopChild') {
                      
                       
                      Write-host  "REMOVING   $($vmStartStopChild.name)   FROM   $($vmStartStopChild.AutomationAccountName)" -ForegroundColor red
                      Write-output "Removing   $($vmStartStopChild.name)   from    $($vmStartStopChild.AutomationAccountName)" >> C:\Runbook\Remove-vmStartStopChild.txt

                     Remove-AzAutomationRunbook -AutomationAccountName $account.AutomationAccountName -Name  $vmStartStopChild.name -ResourceGroupName $account.ResourceGroupName -Force                
             
                 }elseif($vmStartStopChild.name -ne 'run-vmStartStopChild' ){
                    Write-host  "RUNBOOK  run-vmStartStopChild   DOESN'T EXIST    in    $($account.AutomationAccountName)   to REMOVE" -ForegroundColor gray

                 }

            }


    }
    
    Catch{
     Write-Error -Message $_.Exception
      throw $_.Exception
      #Write-Host -BackgroundColor Red "Error: $($_.Exception)"
      Break
    }
  }
  

}

 

Show More
Back to top button