Из коробки при запуске PowerShell с Cmder цвет переднего плана становится белым:
Сегодня я установил PowerShell Core и создал новую задачу Cmder точно так же, как по умолчанию «PowerShell as Admin task», но указывает на pwsh.exe
вместо Powershell.exe
:
*C:\Program Files\PowerShell\6\pwsh.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command "Invoke-Expression '. ''%ConEmuDir%\..\profile.ps1'''"
По причинам, которые я не понимаю, основной цвет для окна PowerShell Core - зеленый:
Пытаясь понять, почему, я потратил некоторое время, возясь со следующим блоком кода, который находится в \vendor\profile.ps1
:
[ScriptBlock]$CmderPrompt = {
$Host.UI.RawUI.ForegroundColor = "White"
Write-Host $pwd.ProviderPath -NoNewLine -ForegroundColor Green
checkGit($pwd.ProviderPath)
}
Вот где это становится странным. Если я изменю этот оператор Write-Host
на использование -ForegroundColor White
вместо Green
, цвет переднего плана останется постоянно белым. Если я изменю его на Red
, цвет переднего плана останется красным. Еще более странно: если я оставлю оригинальную инструкцию Write-Host
одиночку (используя оригинальный Green
цвет), но добавлю над ней дополнительную инструкцию Write-Host
без параметра Foregroundcolor
, цвет переднего плана останется белым. Это как если бы оператор Write-Host
требовался для поддержания состояния $Host.UI.RawUI.ForegroundColor
.
Кто-нибудь еще испытывает эту странность? Я что-то упустил глупо?
Я пробовал это с Cmder 1.3.5 и 1.3.6 - тот же результат.
Дополнительные примеры:
Результаты в white
цвете переднего плана:
[ScriptBlock]$CmderPrompt = {
$Host.UI.RawUI.ForegroundColor = "White"
Write-Host $pwd.ProviderPath -NoNewLine -ForegroundColor White
checkGit($pwd.ProviderPath)
}
Также приводит к white
цвету переднего плана:
[ScriptBlock]$CmderPrompt = {
$Host.UI.RawUI.ForegroundColor = "White"
Write-Host "blah"
Write-Host $pwd.ProviderPath -NoNewLine -ForegroundColor Green
checkGit($pwd.ProviderPath)
}
Результаты в red
цвете переднего плана:
[ScriptBlock]$CmderPrompt = {
$Host.UI.RawUI.ForegroundColor = "White"
Write-Host "blah" -ForegroundColor Red
Write-Host $pwd.ProviderPath -NoNewLine -ForegroundColor Green
checkGit($pwd.ProviderPath)
}