Public/Get-Activity.ps1

<#
.SYNOPSIS
Gets activities from a pipeline.
 
.DESCRIPTION
Returns all activities in the pipeline, or only the activity whose name matches the supplied name. Use Recurse to include activities nested in If Condition branches.
 
.LINK
https://abbgrade.github.io/PsDataFactory/docs/Get-AdfActivity.html
 
.LINK
https://learn.microsoft.com/en-us/rest/api/datafactory/pipelines/create-or-update?view=rest-datafactory-2018-06-01
 
.OUTPUTS
System.Management.Automation.PSCustomObject. One or more pipeline activities.
 
.EXAMPLE
$pipeline = New-AdfPipeline -Name 'MyPipeline'
$ifCondition = New-AdfIfCondition -Name 'IsReady' -Expression '1=1'
$activity = New-AdfPipelineActivity -Name 'CopyToArchive' -PipelineName 'ArchivePipeline'
$ifCondition.typeProperties | Add-Member -NotePropertyName ifTrueActivities -NotePropertyValue @($activity)
$pipeline | Add-AdfActivity -Activity $ifCondition
$pipeline | Get-AdfActivity -Recurse
Returns both the If Condition and its nested CopyToArchive activity.
#>

function Get-Activity {

    [CmdletBinding()]
    param (
        # The pipeline from which to retrieve activities.
        [Parameter( Mandatory, ValueFromPipeline )]
        [ValidateNotNullOrEmpty()]
        [PsCustomObject] $Pipeline,

        # An optional activity name used to filter the results.
        [Parameter()]
        [string] $Name,

        # Include activities nested in If Condition branches.
        [Parameter()]
        [switch] $Recurse
    )

    process {
        $activitiesToVisit = [System.Collections.Generic.Stack[object]]::new()
        $activities = @($Pipeline.properties.activities)
        for ($index = $activities.Count - 1; $index -ge 0; $index--) {
            $activitiesToVisit.Push($activities[$index])
        }

        while ($activitiesToVisit.Count -gt 0) {
            $activity = $activitiesToVisit.Pop()
            if (-not $Name -or $activity.Name -eq $Name) {
                Write-Output $activity
            }

            if ($Recurse -and $activity.type -eq 'IfCondition') {
                $nestedActivities = @(
                    $activity.typeProperties.ifTrueActivities
                    $activity.typeProperties.ifFalseActivities
                ) | Where-Object { $null -ne $_ }

                for ($index = $nestedActivities.Count - 1; $index -ge 0; $index--) {
                    $activitiesToVisit.Push($nestedActivities[$index])
                }
            }
        }
    }
}