[CmdletBinding()]param(
    [Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
    [Alias("Elapsed")]
    [TimeSpan]$TimeSpan,
    [switch]$NoSeconds
)
process {
    foreach( $local:ts in $TimeSpan ) {
        $local:out = [string]::Empty
        if( $ts.Days ) {
            $out = "$($ts.Days)d "
        }
        if( $out -or $ts.Hours ) {
            $out += "$($ts.Hours)h "
        }
        if( $out -or $ts.Minutes -or ($NoSeconds -and -not $out) ) {
            $out += "$($ts.Minutes)m "
        }
        if( -not $NoSeconds -and ($ts.Seconds -or -not $out) ) {
            $out += "$($ts.Seconds)s"
        }
        $out.Trim();
    }
}