functions/Get-ValidRepo.ps1

function Get-ValidRepo
{
    <#
    .SYNOPSIS
    Private function. Used to return a list of valid repos and generate necessary warnings.
 
    .DESCRIPTION
    Private function. Used to return a list of valid repos and generate necessary warnings.
 
    .PARAMETER Repo
    Repo parameter passed to Get-GitRepo
 
    .PARAMETER FunctionName
    Value to be displayed in the warning message.
 
    .INPUTS
    [System.String[]]
    Accepts string objects via the Repo parameter.
 
    .OUTPUTS
    [GitRepo]
    Returns a custom GitRepo object. The DirectoryInfo property contains the filesystem directory object for the repository.
 
    .NOTES
    Author : nmbell
 
    .LINK
    about_powdrgit
    .LINK
    https://github.com/nmbell/powdrgit/blob/main/help/about_powdrgit.md
    #>


    # Use cmdlet binding
    [CmdletBinding()]

    # Declare output type
    [OutputType('GitRepo')]

    # Declare parameters
    Param
    (

        [Parameter(
          Mandatory                       = $true
        , Position                        = 0
        , ValueFromPipeline               = $true
        , ValueFromPipelineByPropertyName = $true
        )]
    # [ArgumentCompleter()]
        [AllowEmptyString()]
        [AllowNull()]
        [Alias('RepoName','RepoPath')]
        [String[]]
        $Repo

    )

    BEGIN
    {
        $bk = 'B'

        # Common BEGIN:
        Set-StrictMode -Version 3.0
        $thisFunctionName = $MyInvocation.MyCommand
        $start            = Get-Date
        $indent           = ($Powdrgit.DebugIndentChar[0]+' ')*($PowdrgitCallDepth++)
        $PSDefaultParameterValues += @{ '*:Verbose' = $(If ($DebugPreference -notin 'Ignore','SilentlyContinue') { $DebugPreference } Else { $VerbosePreference }) } # turn on Verbose with Debug
        $warn             = $Powdrgit.ShowWarnings -and !($PSBoundParameters.ContainsKey('WarningAction') -and $PSBoundParameters.WarningAction -eq 'Ignore') # because -WarningAction:Ignore is not implemented correctly
        $callingFunction  = (Get-PSCallStack)[1].Command; If ($callingFunction -eq '<ScriptBlock>') { $callingFunction = $thisFunctionName }
        Write-Debug " $(ts)$indent[$thisFunctionName][$bk]Start: $($start.ToString('yyyy-MM-dd HH:mm:ss.fff'))"

        # Function BEGIN:
    }

    PROCESS
    {
        $bk = 'P'

        Try
        {
            # Get the repository info
            $validRepos = New-Object -TypeName System.Collections.ArrayList
            $matchCounts = $null
            $validRepos += Get-GitRepo -Repo $Repo -InformationVariable matchInfo

            # Provide a user warning for unexpected behavior
            ForEach ($_repo in $Repo)
            {
                $matchCounts = $matchInfo | Where-Object Tags -eq 'f6c9c6f3-11e4-49d7-abff-5d26c0b37160' | Select-Object -ExpandProperty MessageData

                If ($Repo -and ![String]::IsNullOrWhiteSpace($_repo) -and [Math]::Abs($matchCounts.$_repo) -lt 1)
                {
                    If ($warn) { Write-Warning "[$callingFunction]Repository '$_repo' not found. Check the repository directory exists and has been added to the `$Powdrgit.Path module variable." }
                }

                If ([Math]::Abs($matchCounts.$_repo) -gt 1)
                {
                    If ($warn) { Write-Warning "[$callingFunction]Repo argument '$_repo' matched multiple repositories. Please confirm any results or actions are as expected." }
                }
            }

            # Return the repos
            $validRepos
        }
        Catch
        {
            Throw
        }
    }

    END
    {
        $bk = 'E'

        # Function END:

        # Common END:
        $end      = Get-Date
        $duration = New-TimeSpan -Start $start -End $end
        Write-Debug " $(ts)$indent[$thisFunctionName][$bk]Finish: $($end.ToString('yyyy-MM-dd HH:mm:ss.fff')) ($($duration.ToString('d\d\ hh\:mm\:ss\.fff')))"
        $PowdrgitCallDepth--
    }
}