Hier ist eine Lösung, die Powershell umgeht, die ANSI-Escape-Codes nicht unterstützt.
erlauben Dies sollte Sie, welche Zeichen, das Sie als Trennzeichen verwenden, um anzugeben
function Write-Colored {
param(
[Parameter(Mandatory=$True, Position=1)]
[string]$text,
[Parameter(Mandatory=$True, Position=2)]
[string]$delimiter
)
$i = $text.Split($delimiter)
function pr ([string]$item, [System.ConsoleColor]$color){
Write-Host $item.Substring(1) -fore $color -NoNewline
}
foreach ($item in $i){
$colorcode = $item.ToCharArray()[0]
switch($colorcode){
"b" { pr $item Blue }
"r" { pr $item Red }
"g" { pr $item Green }
"y" { pr $item Yellow }
default { Write-Host $item -NoNewline }
}
}
}
im Schalterblock, hinzufügen, was eine Abkürzung Codes, die Sie zu einer bestimmten Farbe entsprechen soll. Ich nahm einzelne Zeichen, da es einfacher gegen zu validieren, und die Ergebnisse sind wie folgt:
Eingang:
$text = "#rmy #gname #yis #bchris"
gibt so etwas wie
nur im Auge behalten, während Sie Diese Hilfsfunktion müssen Sie verwenden
`n
zum Hinzufügen von Zeilenumbrüchen zu Ihrem Text oder fügen Sie am Ende Ihrer Funktion einen write-host ""
hinzu, falls gewünscht.
Bearbeiten: Überarbeiteter Code ein wenig zuverlässiger zu sein
Möchten Sie die Farbe im mittleren Text dann ändern? Das kann gemacht werden, aber Sie müssen immer noch die Parameter einstellen und müssen "-NoNewLine" verwenden. Eine Funktion wäre die Antwort, aber ich bin mir sicher, dass dir das aufgefallen ist. – Matt
Sie denken wahrscheinlich an ANSI-Escape-Sequenzen. AFAIK PowerShell unterstützt diese nicht. [This] (http://stackoverflow.com/a/30178582/1630171) könnte jedoch helfen. –
@AnsgarWiechers Das ist ein schöner Fund. Code benötigt aber ein Update .... all diese 'if's .... – Matt