Public/ConvertTo-LeafName.ps1

Function ConvertTo-LeafName {
    <#
        .Synopsis
            Replace all invalid filename characters with a replacement character.
        .Example
            'ui\a/op.txt' | ConvertTo-LeafName -ReplaceBy ''
            # Returns: 'uiaop.txt'
    #>

    [CmdletBinding()]
    [OutputType([string])]
    param(
        [Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)]
        [Alias('Leaf')]
        [String]$Name,

        [Parameter(Mandatory = $false, Position = 1)]
        [Alias('Replace')]
        [AllowEmptyString()]
        [String]$ReplaceBy = [string]::Empty
    )
    Process {
        $Replacement = '-'
        if (Test-LeafName -Name $ReplaceBy) {
            $Replacement = $ReplaceBy
        }
        $Name -replace ('[{0}]' -f [Regex]::Escape([IO.Path]::GetInvalidFileNameChars() -join '')), $Replacement
    }
}