Skip to content

Instantly share code, notes, and snippets.

@drphrozen
Last active August 29, 2015 13:57
Show Gist options
  • Save drphrozen/9752098 to your computer and use it in GitHub Desktop.
Save drphrozen/9752098 to your computer and use it in GitHub Desktop.
Simple string format to handle color output in PowerShell
function Format-Colors {
Param(
[Parameter(Position=0, Mandatory=$true)]
[string] $Format,
[Parameter(Position=1)]
[object] $Arguments
)
if($Arguments -is [string]) {$Arguments = ,($Arguments)}
$result = Select-String -Pattern '\{(?:(\d+)(?::(\d|[0-9a-zA-Z]+))?)\}' -InputObject $Format -AllMatches
$i = 0
foreach($match in $result.Matches) {
$group = $match.Captures[0]
Write-Host -NoNewline $Format.Substring($i, $group.Index - $i)
if($group.Groups[2].Success) {
Write-Host -NoNewline -ForegroundColor $([System.ConsoleColor] $group.Groups[2].Value) $Arguments[$group.Groups[1].Value]
} else {
$arg = $Arguments[[int]$group.Groups[1].Value]
$value = $arg[0]
$color = $arg[1]
Write-Host -NoNewline -ForegroundColor $([System.ConsoleColor] $color) $value
}
$i = $group.Index + $group.Length
}
if($i -lt $Format.Length){Write-Host -NoNewline $Format.Substring($i, $Format.Length - $i)}
Write-Host ""
}
Write-Host 'Examples:'
Write-Host
Write-Host "> Format-Colors `"{0:Red} {1:Green} {2:9}`" -Arguments 'Red', 'Green', 'Blue'"
Format-Colors "{0:Red} {1:Green} {2:9}" -Arguments 'Red', 'Green', 'Blue'
Write-Host
Write-Host "> Format-Colors `"Hello {0:10}{1:11}{2:12}{3:13}{4:14}!`" -Arguments 'W', 'o', 'r', 'l', 'd'"
Format-Colors "Hello {0:10}{1:11}{2:12}{3:13}{4:14}!" -Arguments 'W', 'o', 'r', 'l', 'd'
Write-Host
Write-Host "> Format-Colors `"{0} {1}!`" -Arguments @{0=@('Hello', '11');1=@('World', 'Magenta')}"
Format-Colors "{0} {1}!" -Arguments @{0=@('Hello', '11');1=@('World', 'Magenta')}
Write-Host
0..15 | %{
$color = [System.ConsoleColor]$_;
$number = $("{0,2}" -f $_)
Format-Colors "$number {0:$color}" $color.ToString()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment