Functions/Format-ReverseToken.ps1

Function Format-ReverseToken {
<#
.SYNOPSIS
    To reverse a string that is broken into tokens by a delimiter
.DESCRIPTION
    To reverse a string that is broken into tokens by a delimiter
.PARAMETER String
    The string you wish to be reversed. Can be a string or an array of strings.
    Can be passed from the pipeline
.PARAMETER Delimiter
    The delimiter character that separates the tokens. Defaults to '.'
.PARAMETER IncludeInput
    Switch to display the input parameters with the output
.PARAMETER Trim
    Switch to trim each token
.EXAMPLE
    Format-ReverseToken -String 'google.com'
 
    Would return
    com.google
.EXAMPLE
    Format-ReverseToken -String 'monster.us .google.com'
 
    Would return
    com.google.us .monster
.EXAMPLE
    Format-ReverseToken -String 'monster.us .google.com' -Trim -IncludeInput
 
    Would return
    Original Delimiter Trim ReverseToken
    -------- --------- ---- ------------
    monster.us .google.com . True com.google.us.monster
.EXAMPLE
    'yahoo.com','google.com' | Format-ReverseToken
 
    Would return
    com.yahoo
    com.google
.EXAMPLE
    Format-ReverseToken -String 'monster;google;com' -Trim -Delimiter ';'
 
    Would return
    com;google;monster
#>


    [CmdletBinding(ConfirmImpact='None')]
    [outputtype('string')]
    param(
        [Parameter(Mandatory,Position=0,ValueFromPipeline)]
        [string[]] $String,

        [string] $Delimiter = '.',

        [switch] $IncludeInput,

        [switch] $Trim
    )

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

    process {
        foreach ($currentString in $String) {
            if ($Trim) {
                $currentString = $currentString.Trim()
            }
            $tmpArray = $currentString.split($Delimiter)
            if ($Trim) {
                for ($i=0; $i -lt $tmpArray.Count; $i++) {
                    $tmpArray[$i] = $tmpArray[$i].Trim()
                }
            }
            $ReturnVal = $tmpArray[($tmpArray.Count-1)..0] -join $Delimiter
            if ($IncludeInput) {
                New-Object -TypeName 'psobject' -Property ([ordered] @{
                    Original     = $currentString
                    Delimiter    = $Delimiter
                    Trim         = $Trim
                    ReverseToken = $ReturnVal
                })
            } else {
                write-output $ReturnVal
            }
        }
    }

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

}