Microsoft is releasing a new preview version of the next gen PowerShell scripting language. Interesting users can get the Preview 5 of PowerShell 7. It contains a number of new features and many bug fixes from both the community as well as the PowerShell team.
PowerShell is an advanced form of command prompt. It is extended with a huge set of ready-to-use cmdlets and comes with the ability to use .NET framework/C# in various scenarios. Windows includes a GUI tool, PowerShell ISE, which allows editing and debugging scripts in a useful way.
PowerShell 7 is the first command-line shell and scripting language package based on .NET Core 3.0. It can attain compatibility with 90+% of the inbox Windows PowerShell modules by leveraging changes in .NET Core 3.0 that bring back many APIs required by modules built on .NET Framework so that they work with .NET Core runtime.
Microsoft is about to release one more preview release next month in November. Then, barring any quality concerns, a Release Candidate in December aligned with the .NET Core 3.1 final release. Finally, they expect General Availability of PowerShell 7 in January as their first Long Term Servicing release.
Between the Release Candidate and General Availability, Microsoft will only accept critical bug fixes and no new features will be included. For that release, some Experimental Features will be considered design stable and no longer be Experimental. This means that any future design changes for those features will be considered a breaking change.
New Features in Preview 5
This release has a number of new features from both the community as well as the PowerShell team. Preview releases of PowerShell can be installed side-by-side with stable versions so you can use both.
The new Pipeline Chain Operators allow conditional execution of commands depending on whether the previous command succeeded for failed. This works with both native commands as well as PowerShell cmdlets or functions. Prior to this feature, you could already do this by use of
if statements along with checking if
$? indicated that the last statement succeeded or failed. This new operator makes this simpler and consistent with other shells.
Null conditional operators for coalescing and assignment
Often in your scripts, you may need to check if a variable is $null or if a property is $null before using it. The new Null conditional operators makes this simpler.
?? null coalescing operator removes the need for
else statements if you want to get the value of a statement if it’s not $null or return something else if it is $null. Note that this doesn’t replace the check for a boolean value of true or false, it’s only checking if it’s $null.
??= null conditional assignment operator makes it easy to assign a variable a value only if it’s not $null.
New PowerShell version notification
Using telemetry, the team have figured out that many users are using outdated PowerShell versions. Starting with PowerShell 7 it console will advertise a new version where available.
More details of this feature including how to disable it in the Notification on Version Update RFC
Tab completion for variable assignment
This new feature will allow you to use tab completion on variable assignment and get allowed values for enums or variables with type constraints like
[ValidateSet()]. This makes it easy to change
$ErrorActionPreference or the new
$ErrorView (detailed below) to valid values without having to type them out.
Format-Hex improved formatting
Get-HotFix is back
Get-HotFix cmdlet only works on Windows and will query the system on what patches have been installed. This was previously unavailable in PowerShell Core 6 because it depended on System.Management namespace which wasn’t available on .NET Core 2.x which PowerShell Core 6.x is built on. However, .NET Core 3.0 which PowerShell 7 is built on brought back this namespace (for Windows only) so we re-enabled this cmdlet.
There is a delay getting results in this example due to the number of patches the author has on his Windows 7 VM.
Select-String adds emphasis
This was a HackIllinois project by Derek Xia that uses inverse colored text to highlight the text in a string that matches the selection criteria. There is an optional
-NoEmphasis switch to suppress the emphasis.
ConciseView for errors
Some user feedback we’ve consistently received is about the amount of red text you get when you encounter an error in PowerShell.
$ErrorView preference variable allows you to change the formatting of errors. Previously, it supported
NormalView (the default) as well as a more terse
CategoryView. This feature adds a
ConciseView where most commands return just the relevant error message. In cases where there is additional contextual information in a script file or the location in a script block, you get the line number, the line of text in question, and a pointer to where the error occurred.
This new view is part of the Update Error View RFC so please provide feedback there.
ConciseView gives you more precise, but limited information on errors, we added a new cmdlet
Get-Error to get much richer information on errors.
By default, just running
Get-Error shows a formatted view of the most recent error including showing specific nested types like Exceptions and ErrorRecords making it easier to diagnose what went wrong.
This new cmdlet is part of the Update Error View RFC so please provide feedback there.
PowerShell 7 is set to be updated on a monthly basis, so users can expect more preview versions of the scripting language before it reaches general availability nearly a month after .NET Core 3.0.
Also, see the Release Notes for all the details of what is included in this release.
Winaero greatly relies on your support. You can help the site keep bringing you interesting and useful content and software by using these options:
If you like this article, please share it using the buttons below. It won't take a lot from you, but it will help us grow. Thanks for your support!