PowerShell:單行輸出不同顏色的文字

通常Powershell輸出文字都是用Write-Host。

想變換前景顏色加參數-ForegroundColor後面搭配顏色

想變換背景顏色加參數-BackgroundColor後面搭配顏色

例如:

Write-Host "Hello World" -ForegroundColor White -BackgroundColor Blue

這樣就會輸出藍底白字的Hello World

但是如果你想單行輸出不同顏色的字,就要另外自帶Function進來

分享一下我找到的Function:Write-Color

function Write-Color([String[]]$Text, [ConsoleColor[]]$Color = "White", [int]$StartTab = 0, [int] $LinesBefore = 0,[int] $LinesAfter = 0, [string] $LogFile = "", $TimeFormat = "yyyy-MM-dd HH:mm:ss") {
$DefaultColor = $Color[0]
if ($LinesBefore -ne 0) { for ($i = 0; $i -lt $LinesBefore; $i++) { Write-Host "`n" -NoNewline } } # Add empty line before
if ($StartTab -ne 0) { for ($i = 0; $i -lt $StartTab; $i++) { Write-Host "`t" -NoNewLine } } # Add TABS before text
if ($Color.Count -ge $Text.Count) {
for ($i = 0; $i -lt $Text.Length; $i++) { Write-Host $Text[$i] -ForegroundColor $Color[$i] -NoNewLine }
} else {
for ($i = 0; $i -lt $Color.Length ; $i++) { Write-Host $Text[$i] -ForegroundColor $Color[$i] -NoNewLine }
for ($i = $Color.Length; $i -lt $Text.Length; $i++) { Write-Host $Text[$i] -ForegroundColor $DefaultColor -NoNewLine }
}
Write-Host
if ($LinesAfter -ne 0) { for ($i = 0; $i -lt $LinesAfter; $i++) { Write-Host "`n" } } # Add empty line after
if ($LogFile -ne "") {
$TextToFile = ""
for ($i = 0; $i -lt $Text.Length; $i++) {
$TextToFile += $Text[$i]
}
Write-Output "[$([datetime]::Now.ToString($TimeFormat))]$TextToFile" | Out-File $LogFile -Encoding unicode -Append
}
}

當你想輸出一行三個英文單字,但三個不同顏色,用-Text “AA”,”BB”,”CC” -Color 顏色,顏色,顏色

就可以將一行字分別輸出成三種顏色

Write-Color -Text "Blue ", "Green ", "White " -Color Blue,Green,White

另外她其他參數

-StartTab參數指的是在這一行前面增加你指定的TABS

-LinesBefore此排文字前,你想加幾行空白的行數

-LinesAfter此排文字後,你想加幾行空白的行數

你說這是不是很方便呢