TextFilesHandling/Join-ObjectsTxtFile.ps1

function Join-ObjectsTxtFile {
    <#
    .SYNOPSIS
        Joins all .txt files from a specified directory to a single .txt file
 
    .DESCRIPTION
        Joins all the files in the specified directory including the files from all subdirectories of the specified directory
 
    .EXAMPLE
        Join-ObjectsTxtFile -SourcePath ~/MyProject/Apps -Destination ~/MyProject/allObjects.txt
 
    .NOTES
        The function includes all .txt files. It does not include any other text files like .md.
    #>

    [CmdletBinding()]
    param (
        # Directory where the .txt objects are stored
        [string] $SourcePath = './Apps',
        # Path to the file where the joint objects will be saved
        [string] $Destination = './objects.txt'
    )
    if (SourcesInSubfolders($SourcePath)) {
        $objectFilesContent = JoinObjectsFromSubfolders($SourcePath)
    } else {
        $objectFilesContent = JoinObjectsFromFolder($SourcePath)
    }
    $objectFilesContent | Set-Content -Path $Destination -Encoding Oem
}

function SourcesInSubfolders($SourcePath) {
    $sourceFileList = Get-Item (Join-Path $SourcePath '*.txt')
    return ($null -eq $sourceFileList)
}

function JoinObjectsFromSubfolders($SourcePath) {
    $objects = @()
    $subfolders = Get-ChildItem -Path $SourcePath -Directory
    foreach($subfolder in $subfolders){
        $subfolderPath = Join-Path $SourcePath $subfolder
        $objects += JoinObjectsFromFolder($subfolderPath)
    }
    return $objects
}
function JoinObjectsFromFolder($SourcePath) {
    $objects = Get-Item -Path (Join-Path $SourcePath "*.txt") | Get-Content -Encoding Oem
    return $objects
}

Export-ModuleMember -Function Join-ObjectsTxtFile