public/Get-AzToolsAutomationRunbook.ps1
function Get-AzToolsAutomationRunbook { <# .SYNOPSIS Get Azure Automation Runbooks .DESCRIPTION Get and/or export Azure Automation Runbooks .PARAMETER SelectContext Optional. Prompt to select the Azure context (tenant/subscription) .PARAMETER Filter Optional. Filter runbooks by name pattern. Default = "*" (all matching) .PARAMETER TagName Optional. Name of Tag to filter results. .PARAMETER TagValue Optional. If TagName is provided, filters the results to matching tag and value If not provided with TagName, then results are filtered to return runbooks which have Tag [TagName] regardless of the value assigned to the tag. .PARAMETER Export Optional. Save runbooks to local path .PARAMETER ExportPath Optional. If -Export is used, specifies the path where runbook files will be saved. Default is current user profile "desktop" path. .EXAMPLE Get-AzToolsAutomationRunbook Returns all runbooks in the active Automation Account .EXAMPLE Get-AzToolsAutomationRunbook -Filter "UserAccount*" Returns runbooks where the name begins with 'UserAccount' .EXAMPLE Get-AzToolsAutomationRunbook -TagName "RunOn" -TagValue "Azure" Returns runbooks which have tag "RunOn" assigned to value "Azure" .EXAMPLE Get-AzToolsAutomationRunbook -SelectContext Prompts to select the Subscription, ResourceGroup, AutomationAccount and then returns all runbooks in the selected Automation Account. .EXAMPLE Get-AzToolsAutomationRunbook -Export -ExportPath "c:\temp" Exports runbooks to files under "c:\temp" .LINK https://github.com/Skatterbrainz/aztools/tree/main/docs/Get-AzToolsAutomationRunbook.md #> [CmdletBinding()] param ( [parameter()][switch]$SelectContext, [parameter()][string]$Filter = "*", [parameter()][string]$TagName, [parameter()][string]$TagValue, [parameter()][switch]$Export, [parameter()][string]$ExportPath = "$($env:USERPROFILE)\desktop" ) if ($SelectContext) { Switch-AzToolsContext } if (!$global:AzToolsLastSubscription -or $SelectContext) { Select-AzToolsSubscription } if ($global:AzToolsLastSubscription) { Write-Verbose "Subscription: $($AzToolsLastSubscription.Id) - $($AzToolsLastSubscription.Name)" if (!$global:AzToolsLastResourceGroup -or $SelectContext) { Select-AzToolsResourceGroup } if ($global:AzToolsLastResourceGroup) { Write-Verbose "Resource group: $AzToolsLastResourceGroup" if (!$global:AzToolsLastAutomationAccount -or $SelectContext) { Select-AzToolsAutomationAccount } if ($global:AzToolsLastAutomationAccount) { $aaname = $global:AzToolsLastAutomationAccount.AutomationAccountName $rgname = $global:AzToolsLastResourceGroup.ResourceGroupName Write-Verbose "Account=$((Get-AzContext).Account) Subscription=$($AzToolsLastSubscription.Id) ResourceGroup=$($rgname) AutomationAccount=$($aaname)" $params = @{ ResourceGroupName = $rgname AutomationAccountName = $aaname } $runbooks = Get-AzAutomationRunbook @params | Sort-Object Name #| Select-Object Name,RunbookType,Location,State,LastModifiedTime if ($Filter -ne "*") { Write-Verbose "Filtering results on: $Filter" $runbooks = $runbooks | Where-Object { $_.Name -like $Filter } } if (![string]::IsNullOrWhiteSpace($TagName)) { Write-Verbose "Filtering results on: Tag=$TagName and Value=$TagValue" if (![string]::IsNullOrWhiteSpace($TagValue)) { $runbooks = $runbooks | Where-Object {$_.Tags[$TagName] -eq $TagValue} } else { $runbooks = $runbooks | Where-Object {$_.Tags[$TagName]} } } if ($Export) { foreach ($runbook in $runbooks) { Write-Host "Exporting: $(Join-Path $ExportPath $runbook.Name)" -ForegroundColor Cyan $params = @{ Name = $runbook.Name OutputFolder = $ExportPath ResourceGroupName = $rgname AutomationAccountName = $aaname Force = $True } $null = Export-AzAutomationRunbook @params } } else { $runbooks } } else { Write-Warning "Automation Account not yet selected" } } else { Write-Warning "Resource Group not yet selected" } } else { Write-Warning "Azure Subscription not yet selected" } } |