I am a big fan of the Powershell ISE, but I have always felt it was lacking. I have never used it exclusively, but it has a set place in my toolset. Recently I was watching a talk by Dave Wyatt and saw him using ISESteroids. I was immediately interested and had to try it out. After playing with it I noticed it had additional theming support. I have always been unimpressed with the default ISE theming, so this excited me.
I prefer creating custom themes for my text editors. I am inside a text editor for the vast majority of my day, so even small adjustments can vastly improve my user experience. ISESteroids has really changed the way I look at the ISE. I normally have issues using dark themes with editors like Powershell ISE. I feel dark themes are easier on the eyes, but much of this is ruined when using a dark theme with a white editor. ISESteroids gives me enough control over the interface theme that a dark syntax theme is doable.
When exploring the ISESteroids Theme Manager I had issues finding the values I was looking for. If you enable UI Customization it allows you to right click an element and customize the color. This is great in theory, but I could figure out where to click to change a large percentage of the values. I quickly realized that going to the actual xml file and manually editing the values was the way to go. I quickly found that trial and error was needed for finding the correct values to change. This process was actually quite time consuming, so I decided to document the process and share my results so others may have an easier time than I did. It also will make it easier to port some of my other themes over. I will be adding any themes I create to my Github.
If you just need a quick reference I have created a Theme Template Gist/Repo with comments documenting the theme xml. I go into greater detail with screenshots in this post if further documentation is needed. Feel free to Fork and/or Share any themes or theme ideas.
I have good news and bad news. To make things easier, I used a theme that was almost entirely green and made all changes in red. This gave a nice contrast and lets the changes really stand out. However, it may make your eyes bleed. If you aren’t sure where to find your Theme xml files, you can find a link to your theme folder in the theme drop down. You can make changes to your theme and reload it to see the changes. If you do not have a color picker handy, you can just use the built in color picker in ISESteroids.
The default color picker has a nice feature that lets you steal colors from other applications or windows. You can move the color picker window over an application with colors you want. When you have the color picker focused you can move your mouse pointer over a color you want to steal and press ctrl. This will steal the color under the cursor and insert into the color picker. This is an easy way to get colors from other applications.
The Console Window has several customizable settings that are different from the Script Panes. You can Share the Font Settings between the Console and the Script Pane by setting the ShareFontForConsole setting to True. The following settings allow you to set all of the Console Pane and Script Pane Font Settings if you want them to have different values.
The Text Error Colors can be set with the following Settings:
This image shows Verbose text with ConsolePaneVerboseForegroundColor set to Blue and ConsolePaneVerboseBackgroundColor Set to Transparent.
Menu Bar Settings
The Menu Header can have normal text or can be set to all caps. To set all caps you can set CapitalizeMainMenuHeaders to True.
The following image shows the Menu Header with CapitalizeMainMenuHeaders set to True.
Menu Bar Colors
You will see a Monochrome setting in several places throughout this XML. This setting acts as a switch between a gradient and a solid color. If MenuBarMonochrome is set to true, only the first color setting will be used. The following are the settings for the Menu Bar:
Solid Menu Bar Color
When MenuBarMonochrome is set to true the MenuBarColor1 will determine the color. The image below shows the changes once applied.
Gradient Colored Menu Bar
If MenuBarMonochrome is set to false the other colors are applied. If MenuBarMonochrome was set to true and you just changed MenuBarColor3 you can see the portion of the gradient that it changes. You can then change one at a time until you get the desired gradient.
After a few colors are changed you can start to see the gradient take shape.
Tabs have a few settings that can be tweaked. One of the first I went hunting for was the square tab option. Here are the settings for Tabs.
For Active Tabs:
For Inactive Tabs:
Tabs have a ScriptSquareTabs setting that if set to true makes the tab square. This can be seen in the following image:
Active Tab Colors
The Tabs also use a similar Monochrome setting for single color or gradient called ScriptSelectedMonochrome. This works the same as the other Elements that use Monochrome.
Solid Tab Color
You can also see the solid Tab color in the Square Tab image above. Only the ScriptSelectedColor1 value applies if ScriptSelectedMonochrome is set to true.
Gradient Tab Color
If ScriptSelectedMonochrome is set to false the tab will be a gradient. In the example in the image below, ScriptSelectedColor2 is blue, ScriptSelectedColor3 is yellow and ScriptSelectedColor4 is pink. You can see how it makes a crazy Tab color combination.
Tab Background Color
The colors for the Tab Background function similar to the other color settings. Here you can find the settings that apply:
You can the Background with a gradient in the following image:
The EditorTabControlBackground Setting had a somewhat confusing name. It actually seemed to control the border color of the Editor. You can see the border in the following image:
The Toolbars are the sets of buttons in the Menu Bar. They have several options that can be customized. Here is a list of the Toolbar Options:
The Button Groups by default have a very light transparent color. This will lighten the default background color and make the buttons easier to see. Here is an image of this:
You can set ToolbarGroupBackground to a full color for a bigger impact. You can see Red in the following image:
You will notice that there are some Group Button Backgrounds that did not change. The Run Code/Debugger section has its own set of Settings. They work the same way as the other group colors.
There are also Overflow Buttons that can be colored. These function the same way as the Button Groups above, but target the Overflow Buttons. You can see them set to Red in the image below:
There are also settings for the Code/Debugger section that function the same way. Then the last setting is the RunspaceBarBackground that controls the Border Color. You can see what it looks like set to Red in the image below:
Function Bar Settings
This section has Settings for the Search and Function Bar Area under the Menu Bar at the top. Here is a list of the Settings:
The Function/Search Bar is colored by FunctionComboCollapsedFill and the dropdown for your functions is colored by FunctionComboExpandedFill. You can also adjust the Text colors in this section as well. Here is an example of the FunctionComboCollapsedFill being set to Red:
And here is a FunctionComboExpandedFill being set to Red:
Script Restore Settings
These settings control a Script Expander Menu that is normally hidden. This menu is only visible when the Script Pane is hidden. The settings for this section work the same as the other menu settings that use Monochrome. Here are the settings:
Here is an image of the Script Expander with a Red Background:
When the Script Pane is hidden, the Script Expander Menu will be in the location of the Tab Bar.
Panel Divider Settings
These settings control the colors of the dividers between scripting, terminal, and other panels. They have the same coloring scheme as the other monochrome settings. There are two different sets of settings that control Vertical and Horizontal Splitters. Here are the settings:
For Vertical Dividers:
For Horizontal Dividers:
The picture below shows how the dividers look when Monochrome is set to True and VerticalSplitterColor1 and HorizontalSplitterColor1 are set to Red.
Status Bar Settings
The Status Bar is the Bar at the very bottom of the ISE. You can customize the coloring of the Bar and its text. There are also options to customize the hyperlink colors. Here are are settings for the Status Bar:
Here is an image of the Status Bar with StatusBarBackgroundInactive color set to Red, StatusBarForegroundColorInactive set to White, and StatusBarHyperlinkDefaultColor set to a tan shade of yellow:
This controls the name color of a snippet. In the image below, the color of the word BlockComment is controlled by this setting.
The SnippetHeader, SnippetDescription, and SnippetBorder control the color settings for the Snippet Box that opens after inserting a Snippet. In the image you can see the Snippet box with a Red Border and Light Blue Header.
When a Snippet text has been typed into the ISE they will be colored to let you know a Snippet can be auto-completed. The SnippetInsertionBorder and SnippetInsertionFill Settings control these colors. In the image below, you can see the text “func1” has been highlighted. A Red background and blue border were used in this example.
The Gutter can be different colors based on different criteria. If a script is saved or unsaved it can have different colors, but it can also have different colors based on debugging. There are also Gutter settings for colors when there are changes made to the current script. We can also customize the color of the current line Arrow.
Debugger Margin Colors
Here we can see the Gutter color when DebuggerMarginSavedScript is Colored Red
When the Debugger is active, the Gutter gets a striped pattern. In the next image we see the Gutter with DebuggerMarginDebuggerActive colored Red with the Debugger Active.
File Change Colors
When a file is edited the ISE tracks those changes in the gutter using different colors for changes made before a save, after a save, and any changes reverted. The following image shows the Gutter Colors when something has been added, but not yet saved. In the example the TrackChangesBeforeSave has been set to the color Red.
Current Line Arrow
The Current Line Arrow can be colored with two different settings. The first determines the background color and the second determines the outline color. This can be seen in the following image.
Line Number Settings
Line Numbers have several settings that can change their color depending on certain criteria. These are the settings that control the Line Numbers:
In the previous section, we saw the Track Changes image. In this image the LineNumberMarginSize was set to 10. In the Below image the LineNumberMarginSize is set to 20. You can see that it has made the margin size much smaller.
Functions can be set to always have a unique line number color. In the following image the LineNumberMarginFuncForegroundColor is set to Red. This sets the line number to Red if the Line is the start of the Function.
Here you can see where multiple lines have been selected. The LineNumberMarginCurrentForegroundColor has been set to Red. All lines in the selection have had their line numbers set to the color Red.
The below image shows the LineNumberMarginForegroundColor set to Red. This sets the Default Line Number Color.
Function Reference Settings
Function References will show up just above Functions in your scripts. Any time those functions are referenced it will give links to the places referencing them. These settings control the Font and Color settings of those References:
The following image shows an active Reference with 8 References. The FunctionReferenceActive settings is set to the color Red.
Collapsed Test Settings
There are several elements of Collapsed Text that can be customized. The following settings control these elements:
The CollapsedTextColor Setting controls the color of a collapsed block of text as seen below.
The following image shows the CollapseBarSelection and CollapseSelectionBackground Settings. The Brown bar in the margin is the CollapseBarSelection. The CollapseSelectionBackground is set to Red and sets the color of the background when hovering over text that can be collapsed.
The next image shows the the Square in the margin colored Red. This is set by the CollapseSquareBackground Setting.
Text Warning Settings
These Settings set the colors of the squiggle lines under issues in your code.
The following image shows Red colored squiggles caused by a Syntax Error.
These settings set the background and border of Matching Brackets.
The following image shows the BraceMatchingFill Setting set to the color Red.
The selection colors can be a little confusing at first. There are several settings that control different aspects of Selection Colors. The following are the settings that control these.
The Actively Selected text is the text you have highlighted. In the following image you can see this set to a transparent shade of red.
Text Section Border
The ASTDashLineColor sets the border color of the section of lines or text you have selected. The following image shows this set to Red.
These are the colors of siblings. Siblings are other instances of the currently selected item. In the image below you can see how multiple instances of $ArchivedOutLogFile have been colored.
The following image shows the ASTScopeFill setting set to Red. It is the current Scope of where you cursor is located. In this image you can see it colors the entire block of quoted text.
The ASTPipelineFill and ASTPipelineBorder set the colors of a selected Pipeline. In the image you can see these set to Red.
Console Admin Warning Settings
If you right click the left margin in the console, you can turn on Show Admin Warning. If this is enabled and the ISE is launched with Admin privileges, there will be a Bar in the left margin letting you know the ISE has been ran as Admin. This is an added visual feature to help notify ensure the user has ran ISE as admin. If ISE is ran as Admin you will also notice the ISE icon is red. Here are the settings:
The below image shows the Admin Console Warning in the left margin.
Color Picker Palette Settings
The Color Picker has a section of easy to select colors called Palettes. The Palettes in the color picker can be set with the following settings:
The following image shows the palettes on the right side.
I wont go in depth on these settings. These you can edit via Tools => Options in the ISE. This is the same editor as in the Default ISE.
This is still a work in progress, and I am still making minor tweaks as I go. This theme is based on a Monokai theme and customized in a few areas for personal preference.
- VSCode Tips · Using VSCode Background Tasks to Automatically Run Pester Tests
- Release Pipeline · Part 2 - Development Environment
- Release Pipeline · Part 1 - Gitting Started
- PowerShell · Building a Release Pipeline
- PowerShell · Set Default for VS Code's New Integrated Terminal to 64 Bit PowerShell
- PowerShell · The Little Known PowerShell V3 Feature that Everyone should be using
- PowerShell · Getting Started with Editor Commands
- PowerShell · Having some fun with Dynamic Parameters and Rick Rolls
- PowerShell · How to manage Local Group Policy with Powershell
- Powershell · Powershell: Find and Extract Drivers that break Task Sequences in Windows 10.
- PowerShell · Creating a Custom Theme for ISESteroids
Brandon Padgett POWERSHELL
powershell ise theme