Author Posts

August 28, 2017 at 3:29 pm

Hello, I have been making basic scripts with Powershell for a while and have just started messing with a Powershell profile script. One thing I wanted was a teal-ish background, so I set the console's background to "DarkCyan".

$Host.UI.RawUI.BackgroundColor = "DarkCyan"
Clear-Host

Problem is this is the same color that Intellisense will change any string (any input wrapped in single or double quotes) to by default, making it invisible as I type.

Note: Output colors are fine, I just want to change the foreground color for inputs (interactive console).

In ISE, I can go to Tools > Options and in the "Colors and Fonts" tab under Console Pane > Console Tokens > String, I can edit the color. This method only affects the ISE console and NOT* the actual shell console. Is there a way to do this (preferably via script)?

* EDIT

I have checked the following for methods\properties that might work, but haven't found anything:

$Host
$Host.UI
$Host.UI.RawUI
$Host.PrivateData
[console]::

Likewise, I have gone the GUI route within a shell console Right-click the top of window > Properties, but I can't find anything about Intellisense or strings.

I have searched this forum and the web in general, but haven't found anything regarding to what I am specifically looking for.

August 28, 2017 at 3:31 pm

The IntelliSense function is provided by the PSReadLine module; you should manage your color settings there (as in https://superuser.com/questions/676140/how-to-set-colors-in-psreadline-in-powershell), rather than changing the colors in the console app itself. The console doesn't "know" that PSReadLine is running, so it can't mitigate any color problems.

August 28, 2017 at 4:49 pm

Correct me if I'm wrong, but PSReadLine requires PS 5+, right?

August 28, 2017 at 5:47 pm

Thanks, Don. That is exactly what I was looking for.