Getty Images/iStockphoto
Use these PowerShell add-ons to supercharge your experience
These PowerShell new features and modules introduce several customization and functionality features to the popular automation tool to ease coding tasks for administrators.
The developers behind PowerShell released a handful of tools and new functionality to improve how you work with the popular administrative tool.
The extensibility aspect of PowerShell is among its many strengths. These PowerShell add-ons can help you be more efficient and offer many customization options. The new features range from user-interface tweaks, such as adding color, to opening up the PowerShell prompt to the artificial intelligence capabilities of the Azure cloud for easier script development.
The current state of PowerShell
PowerShell has been at version 7 for more than a year, and it's time to leave Windows PowerShell behind for several reasons, but mainly because any new features are only available in PowerShell v7.
PowerShell v5 is known as Windows PowerShell. It is no longer under development, but Microsoft will include it in future versions of Windows. The company will only provide security updates for Windows PowerShell.
PowerShell v7 runs on Windows, Mac and Linux; it uses a cross-platform version of the .Net software framework -- formerly .Net Core -- to make it work on those platforms. Microsoft initially referred to this open source version as PowerShell Core but has since reclaimed the PowerShell name.
As of publication, PowerShell v7 is still an add-on that you manually install in new Windows builds. One of the recent PowerShell releases introduced a Microsoft Update feature to deliver new releases via conventional methods, such as Windows Update for Business and Windows Server Update Services.
How to work with ANSI colors and the $PSStyle variable
At time of publication, the latest production-ready iteration of PowerShell is v7.2.2. This version is stable and ready to use on corporate workstations.
In PowerShell v7.2, Microsoft introduced an automatic variable named $PSStyle to go with the support for ANSI colors for text. This feature benefits admins who want to customize the console colors to their liking.
While the PowerShell team introduced support for ANSI colors, they did not include any new cmdlets to configure the colors. You adjust the $PSStyle variable to change the colors. The variable has 26 color values.
Initially, it might look difficult to work with the values, but it gets easier once you see the pattern. The color code chart below shows 16 colors to get you started.
Color | Value | Color | Value |
Black |
30 |
Bright Black |
30;1 |
Red |
31 |
Bright Red |
31;1 |
Green |
32 |
Bright Green |
32;1 |
Yellow |
33 |
Bright Yellow |
33;1 |
Blue |
34 |
Bright Blue |
34;1 |
Magenta |
35 |
Bright Magenta |
35;1 |
Cyan |
36 |
Bright Cyan |
36;1 |
White |
37 |
Bright White |
37;1 |
There are two ways to set a value to change the colors: Use the color name or the color value.
The following example changes the table headers to Bright Red.
$PSStyle.Formatting.TableHeader = $psstyle.Foreground.BrightRed
The second option to set the color value is to use the actual value of the color. The following example changes the output of the table header from Bright Green to Bright Yellow.
$PSStyle.Formatting.TableHeader = "`e[33;1m"
The changes only live in the current session. When the PowerShell console closes, the colors revert to their default. Permanent color changes must be added to your PowerShell profile script.
How to use the PSReadLine module
The PSReadLine module customizes the command-line editing environment in PowerShell with several features, including syntax highlighting, multi-line editing and support for undo-redo. The module is several years old, but it was recently rewritten to work with the cross-platform PowerShell v7, introducing new functionality in the process.
To start, run the following command to install the module:
Install-Module PSReadLine
After installation, syntax coloring turns on by default.
The PSReadLine history feature gives access to a list of previously used commands. The module stores all the code run from PowerShell sessions in a central file on the host machine to predict code you might enter next.
You can customize the colors to something that makes working in sessions easier. The color options are hexadecimal, RGB or console colors. One line of code sets the colors to your preferences. The following command sets the text in red -- using a #ff0000 hexadecimal value -- for matches in search history and cyan for the predictive suggestion.
Set-PSReadLineOption -Colors @{emphasis = '#ff0000'; inlinePrediction = 'Cyan'}
To show how useful color customization is, press the F2 to toggle the view style from inline view to list view.
Dynamic Help is another useful PSReadLine feature. Type the name of the cmdlet and press F1 for the cmdlet's help. Prior to PSReadLine, you would type Get-Help, or its alias Help, followed by the cmdlet name to see the documentation.
Dynamic Help has changed the way I work at the console. Dynamic Help is not limited to cmdlet names. It also works to access the help information for a parameter.
The PSReadLine configuration will reset to the defaults when you close your PowerShell console. A permanent change requires an adjustment to your PowerShell profile. There is much more information for the PSReadLine module from Microsoft's documentation site and the PowerShell team blog posts.
How to use Azure more efficiently with AZ Predictor
Microsoft created the Az.Tools.Predictor module, also known as Az Predictor, to take advantage of the artificial intelligence capabilities of the Azure cloud. The Az Predictor module works in tandem with the PSReadLine module to offer code suggestions as you type.
The Az PowerShell module has more than 4,000 cmdlets to manage Azure services. It's impossible for any one person to know all the cmdlets and their parameters. Az Predictor attempts to bridge the knowledge gap by offering context-aware code suggestions. I have been pleasantly surprised by the quality, consistency and accuracy of the recommendations.
To use Az Predictor, you need at least v2.1.0 of PSReadLine installed. Next, change the PSReadLine prediction source parameter from History to HistoryAndPlugin. Plugin is shorthand for the Az.Tools.Predictor module.
Set-PSReadLineOption -PredictionSource HistoryAndPlugin
Next, install the Az.Tools.Predictor module and enable it for all sessions:
Install-Module -Name Az.Tools.Predictor
Enable-AzPredictor -AllSession
After the configuration, as you type Azure cmdlets, the Az Predictor module will offer suggestions. The formatting settings for the PSReadLine module also apply to the Az Predictor module.
In the screenshot, I typed new-az and PSReadLine displayed a list of matches for previously used commands and offered suggestions from the AZ Predictor module.
The more you type, the fewer matches will appear as the Az Predictor module dials in suggestions. Press the down arrow on the keyboard to select a suggested entry, which provides the syntax to manage the Azure resource.
Microsoft has developed this back-end AI code for other Azure modules, so this functionality should expand to more tools.
Find easier ways to work with PowerShell output
One thing I enjoy about PowerShell is how I can customize data output. Based on what I need, I have several options, including CSV, HTML, XML, JSON or Excel spreadsheet via the ImportExcel module.
I can format my data as lists or tables, and then I can output those results in my console or to an interactive console using the Out-GridView cmdlet.
Out-GridView creates a new window. You can filter the results and change them dynamically. One advantage is you can send a long list of data to Out-GridView and then use the search filter to find specific data. Another benefit is you can select lines from the list of results to make line selections to pass back to the console for further use in PowerShell.
The following PowerShell command executes a search for some processes and pipes the results to the Out-GridView cmdlet:
get-service -name sp* -Exclude spp* | Out-GridView
ConsoleGuiTools works with data output in the same way as Out-GridView but displays results in the PowerShell console. This module was released in March 2020 as a preview release and has received regular updates and improvements. It's not production-ready, but I find it is stable for everyday use. The install process is the same as other PowerShell modules:
install-module microsoft.powershell.consoleguitools
This adds a new cmdlet Out-ConsoleGridView to work with data in the PowerShell console. The following command runs the previous search but pipes the results to the new cmdlet.
get-service -name sp* | Out-ConsoleGridview
In this new view, you can filter text in the gray bar. When you type, the module finds matches. Along with filtering, you can select lines, designated by checkmarks to the left of the line.
After selecting lines, press Enter and PowerShell returns the selected lines to the console to use the data for other cmdlets.
The benefit to this module is continuity. The cmdlet keeps results in the same window to continue working in the PowerShell console.
This tool works with regular expressions for filtering, which provides some unique possibilities. Be aware that the color palette for this module pulls color information from whatever PowerShell host displays the output. That means PowerShell and Microsoft Terminal could have some small differences even though they both might run PowerShell v7.