Private/Join-Parts.ps1

function Join-Parts {
    <#
    .SYNOPSIS
        Join strings with a specified separator.
 
    .DESCRIPTION
        Join strings with a specified separator.
 
        This strips out null values and any duplicate separator characters.
 
        See examples for clarification.
 
    .PARAMETER Separator
        Separator to join with
 
    .PARAMETER Parts
        Strings to join
 
    .EXAMPLE
        Join-Parts -Separator "/" this //should $Null /work/ /well
 
        # Output: this/should/work/well
 
    .EXAMPLE
        Join-Parts -Parts http://this.com, should, /work/, /wel
 
        # Output: http://this.com/should/work/wel
 
    .EXAMPLE
        Join-Parts -Separator "?" this ?should work ???well
 
        # Output: this?should?work?well
 
    .EXAMPLE
 
        $CouldBeOneOrMore = @( "JustOne" )
        Join-Parts -Separator ? -Parts CouldBeOneOrMore
 
        # Output JustOne
 
        # If you have an arbitrary count of parts coming in,
        # Unnecessary separators will not be added
 
    .NOTES
        Credit to Rob C. and Michael S. from this post:
        http://stackoverflow.com/questions/9593535/best-way-to-join-parts-with-a-separator-in-powershell
 
    #>

    [cmdletbinding()]
    param
    (
        [string]$Separator = "/",
        [switch]$DontTrimSeparator,

        [parameter(ValueFromRemainingArguments=$true)]
        [string[]]$Parts = $null
    )

    $Output = ( $Parts |
        Where-Object { $_ } |
        Foreach-Object { ( [string]$_ ).trim($Separator) } |
        Where-Object { $_ }
    ) -join $Separator

    if($Parts[-1][-1] -eq $Separator -and $DontTrimSeparator) { $Output = "$Output$Separator"}
    $Output
}