箱から出して、CmderでPowerShellを実行すると、前景色が白に設定されます。
今日、PowerShell Coreをインストールし、デフォルトの「管理者タスクとしてのPowerShell」とまったく同じように新しいCmderタスクを作成しましたが、_pwsh.exe
_ではなく_Powershell.exe
_を指しています。
_*C:\Program Files\PowerShell\6\pwsh.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command "Invoke-Expression '. ''%ConEmuDir%\..\profile.ps1'''"
_
わかりませんが、PowerShellCoreウィンドウの前景色は緑です。
理由を理解しようとしている間、私は _\vendor\profile.ps1
_ に含まれる次のコードブロックをいじくり回しました。
[ScriptBlock]$CmderPrompt = { $Host.UI.RawUI.ForegroundColor = "White" Write-Host $pwd.ProviderPath -NoNewLine -ForegroundColor Green checkGit($pwd.ProviderPath) }
ここがおかしくなるところです。その_Write-Host
_ステートメントをGreen
の代わりに_-ForegroundColor White
_を使用するように変更すると、前景色は永続的に白のままになります。 Red
に変更すると、前景色は永続的に赤のままになります。さらに奇妙なことに、元の_Write-Host
_ステートメントをそのままにして(元のGreen
色を使用)、その上にForegroundcolor
パラメーターなしで_Write-Host
_ステートメントを追加すると、前景色は白のままです。 _Write-Host
_の状態を維持するには、_$Host.UI.RawUI.ForegroundColor
_ステートメントが必要であるかのようです。
この奇妙なことを経験している人は他にいますか?私は愚かな何かを逃していますか?
私はこれをCmder1.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) }
質問へのコメントで述べたように、私もこの問題を経験しています。なぜこれが起こっているのか正確にはわかりませんでしたが、回避策を見つけました。
OPは私にWrite-Host
もいじくり回すように促したので、私はこれを思いついた:
# File "$env:CMDER_ROOT\config\user-profile.ps1"
# I copy-pasted this from "$env:CMDER_ROOT\vendor\profile.ps1" and added the `b line.
[ScriptBlock]$CmderPrompt = {
$Host.UI.RawUI.ForegroundColor = "White"
# Workaround to make above line apply the "White" foreground color.
# Seems like you have to print _something_ before using Write-Host with -ForegroundColor.
# Note: Empty string "" doesn't work.
Write-Host "`r" -NoNewline
Microsoft.PowerShell.Utility\Write-Host $pwd.ProviderPath -NoNewLine -ForegroundColor Green
Microsoft.PowerShell.Utility\Write-Host (checkGit($pwd.ProviderPath)) -NoNewLine
}
カーソルがその時点で行の先頭にあることがわかっているので、これは私にとってはうまくいきます。したがって、 `rは何もしません。きれいではありませんが、簡単に修正できます。他の人にもそうなることを願っています。
既知の修正が行われるまで機能する、より簡単な回避策を作成しました。
powershell
コマンドを記述します。これでPowerShellを使用できますが、cmdのデフォルトの色がすべて使用されています。 2つの分割タブを開く必要がある場合は、優れた/簡単なソリューションになるはずです。 PowerShellコマンドを書くのが面倒な場合は、powershell
コマンドを使用して起動する別のcmdセッションを作成するだけです。