Domyślnie uruchomienie programu PowerShell z Cmder ustawia kolor pierwszego planu na biały:
Dzisiaj zainstalowałem PowerShell Core i utworzyłem nowe zadanie Cmder dokładnie tak, jak domyślne „PowerShell as Admin task”, ale wskazuje pwsh.exezamiast Powershell.exe:
*C:\Program Files\PowerShell\6\pwsh.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command "Invoke-Expression '. ''%ConEmuDir%\..\profile.ps1'''"
Z powodów, których nie rozumiem, kolor pierwszego planu dla okna PowerShell Core jest zielony:
Próbując zrozumieć, dlaczego, spędziłem trochę czasu na majstrowaniu przy następującym bloku kodu zawartym w \vendor\profile.ps1:
[ScriptBlock]$CmderPrompt = {
$Host.UI.RawUI.ForegroundColor = "White"
Write-Host $pwd.ProviderPath -NoNewLine -ForegroundColor Green
checkGit($pwd.ProviderPath)
}
Tutaj zaczyna się dziwnie. Jeśli zmienię tę Write-Hostinstrukcję na -ForegroundColor Whitezamiast Green, kolor pierwszego planu pozostanie trwale biały. Jeśli zmienię to Red, kolor pierwszego planu pozostanie trwale czerwony. Jeszcze dziwniejsze: jeśli pozostawię oryginalną Write-Hostinstrukcję w spokoju (używając oryginalnego Greenkoloru), ale dodam dodatkową Write-Hostinstrukcję powyżej bez Foregroundcolorparametru, kolor pierwszego planu pozostanie biały. To tak, jakby Write-Hostoświadczenie było wymagane w celu utrzymania stanu $Host.UI.RawUI.ForegroundColor.
Czy ktoś jeszcze doświadcza tej osobliwości? Czy brakuje mi czegoś głupiego?
Próbowałem tego z Cmder 1.3.5 i 1.3.6 - ten sam wynik.
Dodatkowe przykłady:
Wyniki w whitekolorze pierwszego planu:
[ScriptBlock]$CmderPrompt = {
$Host.UI.RawUI.ForegroundColor = "White"
Write-Host $pwd.ProviderPath -NoNewLine -ForegroundColor White
checkGit($pwd.ProviderPath)
}
Wyniki również w whitekolorze pierwszego planu:
[ScriptBlock]$CmderPrompt = {
$Host.UI.RawUI.ForegroundColor = "White"
Write-Host "blah"
Write-Host $pwd.ProviderPath -NoNewLine -ForegroundColor Green
checkGit($pwd.ProviderPath)
}
Wyniki w redkolorze pierwszego planu:
[ScriptBlock]$CmderPrompt = {
$Host.UI.RawUI.ForegroundColor = "White"
Write-Host "blah" -ForegroundColor Red
Write-Host $pwd.ProviderPath -NoNewLine -ForegroundColor Green
checkGit($pwd.ProviderPath)
}

