public/FormatTaskName.ps1

function FormatTaskName {
    <#
    .SYNOPSIS
    This function allows you to change how psake renders the task name during a build.
 
    .DESCRIPTION
    This function takes either a string which represents a format string (formats using the -f format operator see "help about_operators") or it can accept a script block that has a single parameter that is the name of the task that will be executed.
 
    .PARAMETER Format
    A format string or a scriptblock to execute
 
    .EXAMPLE
    A sample build script that uses a format string is shown below:
 
    Task default -depends TaskA, TaskB, TaskC
 
    FormatTaskName "-------- {0} --------"
 
    Task TaskA {
    "TaskA is executing"
    }
 
    Task TaskB {
    "TaskB is executing"
    }
 
    Task TaskC {
    "TaskC is executing"
 
    -----------
    The script above produces the following output:
 
    -------- TaskA --------
    TaskA is executing
    -------- TaskB --------
    TaskB is executing
    -------- TaskC --------
    TaskC is executing
 
    Build Succeeded!
    .EXAMPLE
    A sample build script that uses a ScriptBlock is shown below:
 
    Task default -depends TaskA, TaskB, TaskC
 
    FormatTaskName {
        param($taskName)
        write-host "Executing Task: $taskName" -foregroundcolor blue
    }
 
    Task TaskA {
    "TaskA is executing"
    }
 
    Task TaskB {
    "TaskB is executing"
    }
 
    Task TaskC {
    "TaskC is executing"
    }
 
    -----------
    The above example uses the scriptblock parameter to the FormatTaskName function to render each task name in the color blue.
 
    Note: the $taskName parameter is arbitrary, it could be named anything.
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        $Format
    )

    Write-Debug "Setting task name format to $(if ($Format -is [scriptblock]) { 'scriptblock' } else { "'$Format'" })"
    $psake.Context.Peek().config.taskNameFormat = $Format
}