Scripts/Disable-AzLogicAppsFromConfig.ps1
param( [string][Parameter(Mandatory = $true)]$ResourceGroupName, [string]$DeployFileName ) function ExecuteStopType() { [CmdletBinding()] param ( [string][parameter(Mandatory = $true)]$ResourceGroupName, [string][parameter(Mandatory = $true)]$LogicAppName, [string][parameter(Mandatory = $true)]$stopType ) BEGIN { Write-Host("> Executing StopType '$stopType' for Logic App '$LogicAppName' in resource group '$ResourceGroupName'") If ($stopType -Match "Immediate") { try { Write-Host "Attempting to disable $LogicAppName" Set-AzLogicApp -ResourceGroupName $ResourceGroupName -Name $LogicAppName -State Disabled -Force -ErrorAction Stop Write-Host "Successfully disabled $LogicAppName" } catch { Write-Warning "Failed to disable $LogicAppName" $ErrorMessage = $_.Exception.Message Write-Warning "Error: $ErrorMessage" } } ElseIf ($stopType -Match "None") { Write-Host "Executing Stop 'None' => peforming no stop" } else { Write-Warning "StopType '$stopType' has no known implementation, doing nothing.." } } } function ExecuteCheckType() { [CmdletBinding()] param ( [string][parameter(Mandatory = $true)]$ResourceGroupName, [System.Array][parameter(Mandatory = $true)]$batch ) BEGIN { Write-Host("> Executing CheckType '$($batch.checkType)' for batch '$($batch.description)' in resource group '$ResourceGroupName'") If ($batch.checkType -Match "NoWaitingOrRunningRuns") { Write-Host "Executing Check 'NoWaitingOrRunningRuns'" $batch.logicApps | ForEach-Object { $logicApp = $_; try { $RunningRunsCount = Get-AzLogicAppRunHistory -ResourceGroupName $ResourceGroupName -Name $logicApp | Where-Object Status -eq "Running" | Measure-Object | ForEach-Object { $_.Count } $WaitingRunsCount = Get-AzLogicAppRunHistory -ResourceGroupName $ResourceGroupName -Name $logicApp | Where-Object Status -eq "Waiting" | Measure-Object | ForEach-Object { $_.Count } if ($RunningRunsCount -ne 0 -and $WaitingRunsCount -ne 0) { while ($RunningRunsCount -ne 0 -and $WaitingRunsCount -ne 0) { Write-Host "Logic App '$logicApp' has Running and/or Waiting Runs, waiting 10 seconds and checking again.." Write-Host "Number of running runs: $RunningRunsCount" Write-Host "Number of waiting runs: $WaitingRunsCount" Start-Sleep -Second 10 $RunningRunsCount = Get-AzLogicAppRunHistory -ResourceGroupName $ResourceGroupName -Name $logicApp | Where-Object Status -eq "Running" | Measure-Object | ForEach-Object { $_.Count } $WaitingRunsCount = Get-AzLogicAppRunHistory -ResourceGroupName $ResourceGroupName -Name $logicApp | Where-Object Status -eq "Waiting" | Measure-Object | ForEach-Object { $_.Count } if ($RunningRunsCount -eq 0 -and $WaitingRunsCount -eq 0) { Write-Host("Found no more waiting or running runs for '$logicApp', executing stopType for Logic App") ExecuteStopType -resourceGroupName $ResourceGroupName -LogicAppName $logicApp -stopType $batch.stopType } } }else{ Write-Host("Found no more waiting or running runs for '$logicApp', executing stopType for Logic App") ExecuteStopType -resourceGroupName $ResourceGroupName -LogicAppName $logicApp -stopType $batch.stopType } Write-Host("> Check 'NoWaitingOrRunningRuns' executed successfully on '$logicApp'") } catch { Write-Warning "Failed to perform check 'NoWaitingOrRunningRuns' for $logicApp" $ErrorMessage = $_.Exception.Message Write-Warning "Error: $ErrorMessage" } } } ElseIf ($batch.checkType -Match "None") { Write-Host "Executing Check 'None' => peforming no check and executing stopType" $batch.logicApps | ForEach-Object { $logicApp = $_; ExecuteStopType -resourceGroupName $ResourceGroupName -LogicAppName $logicApp -stopType $batch.stopType } } else { Write-Warning "CheckType '$batch.checkType' has no known implementation, performing no check or stop on the Logic App.." } } } $json = Get-Content $DeployFileName | Out-String | ConvertFrom-Json if ($json -is [array]) { [array]::Reverse($json) } $json | ForEach-Object { $batch = $_; $batchDescription = $batch.description Write-Host("Executing batch: '$batchDescription'") Write-Host("====================================") #Call the ExecuteCheckType function which will call the ExecuteStopType function after a check for a Logic App has completed ExecuteCheckType -resourceGroupName $ResourceGroupName -batch $batch ## Wrap up Write-Host("-> Batch: '$batchDescription' has been executed") Write-Host("") } |