Private/Get-IndexableFile.ps1

using namespace System
using namespace System.IO
using namespace System.Security.Cryptography
using namespace System.Collections.Immutable

Set-StrictMode -Version Latest

#### <h2 style="color: #DCA657;">Get-IndexableFile</h2>
####
function Get-IndexableFile {
    #### Enumerate and return a list of included files.
    ####
    #### Exclusion happens by directory at enuermation time.
    ####
    #### <b style="color: #D2A8FF;">Parameters</b>
    ####
    [CmdletBinding()]
    [OutputType([System.IO.FileInfo])]
    param(
        #### - `[DirectoryInfo]`: __Directory__
        #### - *Directory to recursively enumerate.*
        [Parameter(Mandatory)][System.IO.DirectoryInfo]$Directory,

        #### - `[string[]]`: __Include__
        #### - *Wildcard patterned file names.*
        [Parameter(Mandatory)][string[]]$Include,

        #### - `[string[]]`: __Exclude__
        #### - *Directory basenames to exclude during enumeration.*
        [Parameter(Mandatory)][string[]]$Exclude
    )

    #### A directory whose `Name` is in `Exclude` is skipped before recursion.
    foreach ($subDir in $Directory.EnumerateDirectories()) {
        if ($subDir.Name -in $Exclude) { continue }
        Get-IndexableFile -Directory $subDir -Include $Include -Exclude $Exclude
    }

    ####
    #### <b style="color: #369FFF;">Returns</b>
    ####
    #### - `[FileInfo]`
    #### - *Return enumerated file whose `Name` matches a pattern in `Include`.*
    foreach ($file in $Directory.EnumerateFiles()) {
        foreach ($pattern in $Include) {
            if ($file.Name -like $pattern) {
                $file
                break
            }
        }
    }
}
####
#### ---
####