src/Workflows/Get-XrmBusinessProcessFlowStage.ps1

<#
    .SYNOPSIS
    Retrieve a business process flow stage.

    .DESCRIPTION
    Get a process stage record by stage name and process identifier.

    .PARAMETER XrmClient
    Xrm connector initialized to target instance. Use latest one by default. (Dataverse ServiceClient)

    .PARAMETER StageName
    Name of the BPF stage to retrieve.

    .PARAMETER ProcessId
    Business process flow unique identifier (workflow id).

    .EXAMPLE
    $xrmClient = New-XrmClient -ConnectionString $connectionString;
    $stage = Get-XrmBusinessProcessFlowStage -XrmClient $xrmClient -StageName "Qualify" -ProcessId $bpfProcessId;
#>

function Get-XrmBusinessProcessFlowStage {
    [CmdletBinding()]
    [OutputType([PSCustomObject])]
    param
    (        
        [Parameter(Mandatory = $false, ValueFromPipeline)]
        [Microsoft.PowerPlatform.Dataverse.Client.ServiceClient]
        $XrmClient = $Global:XrmClient,

        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [string]
        $StageName,

        [Parameter(Mandatory = $true)]
        [Guid]
        $ProcessId
    )
    begin {   
        $StopWatch = [System.Diagnostics.Stopwatch]::StartNew(); 
        Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Start -Parameters ($MyInvocation.MyCommand.Parameters);
    }    
    process {
        $query = New-XrmQueryExpression -LogicalName "processstage" -TopCount 1;
        $query = $query | Add-XrmQueryCondition -Field "processid" -Condition Equal -Values @($ProcessId);
        $query = $query | Add-XrmQueryCondition -Field "stagename" -Condition EndsWith -Values @($StageName);
        $stages = Get-XrmMultipleRecords -XrmClient $XrmClient -Query $query;

        $stage = $stages | Select-Object -First 1;
        if (-not $stage) {
            throw "Stage '$StageName' not found for process '$ProcessId'.";
        };
        $stage;
    }
    end {
        $StopWatch.Stop();
        Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Stop -StopWatch $StopWatch;
    }    
}

Export-ModuleMember -Function Get-XrmBusinessProcessFlowStage -Alias *;