Functions/Get-InvalidFileCharacter.ps1

function Get-InvalidFileCharacter {
<#
.SYNOPSIS
    Gets invalid filename characters
.DESCRIPTION
    Gets invalid filename characters
.PARAMETER IncludeValues
    Switch indicating that decimal and hexadecimal representations of characters are to be included in output
.PARAMETER Printable
    Switch indicating that only printable characters are to be in the output
.EXAMPLE
    Get-InvalidFileCharacter -Printable
 
    Would return
    "
    <
    >
    |
    :
    *
    ?
    \
    /
.EXAMPLE
    Get-InvalidFileCharacter -Printable -IncludeValues
 
    Would return
    Char Dec Hex
    ---- --- ---
       " 34 22
       < 60 3c
       > 62 3e
       | 124 7c
       : 58 3a
       * 42 2a
       ? 63 3f
       \ 92 5c
       / 47 2f
#>


    [CmdletBinding(ConfirmImpact='None')]
    [outputtype([char[]])]
    Param (
        [switch] $IncludeValues,

        [switch] $Printable
    )

    begin {
        Write-Verbose -Message "Starting [$($MyInvocation.Mycommand)]"
    }

    process {
        $Invalid = [System.IO.Path]::GetInvalidFileNameChars() | Select-Object @{Name='Char';Expr={$_.ToString()}},
            @{Name='Dec';Expr={[int][char] $_}},
            @{Name='Hex';Expr={'{0:x}' -f ([int][char] $_)}}
        if ($Printable) {
            $Invalid = $Invalid | Where-Object {$_.Dec -gt 32}
        }
        if ($IncludeValues) {
            Write-Output -InputObject $Invalid
        } else {
            Write-Output -InputObject $Invalid.Char
        }
    }

    end {
        Write-Verbose -Message "Ending [$($MyInvocation.Mycommand)]"
    }
}

# for backward compatibility
Set-Alias -Name 'Show-InvalidFileCharacter' -Value 'Get-InvalidFileCharacter' -Description 'Alias for Get-InvalidFileCharacter for backward compatibility'