For those of you that haven’t been keeping up with PowerShell developments over the last few years, Windows PowerShell 5.1 was the last version of PowerShell released exclusively for Windows. And while still supported, it is in maintenance mode. Which means that there won’t be any new features, but Microsoft will still provide bug and security patches.
Because Windows PowerShell is based on the full .NET Framework, it doesn’t provide cross-platform support. PowerShell Core 6.0 was released in January 2018 and it is based on .NET Core, so it runs on Windows, Linux, and MacOS. It is open-source and it is designed for managing heterogeneous environments and the hybrid cloud.
So far, so good. But PowerShell Core 6 is based on .NET Core 2, so it doesn’t provide full compatibility with modules that were designed for Windows PowerShell, limiting how PS Core can be used. PowerShell Core and Windows PowerShell can be installed side-by-side but in an ideal world, you would use only one version. Microsoft claims that PowerShell Core has seen an increase in usage on Linux and MacOS but remained static on Windows systems. And that’s largely due to the lack of support for legacy modules.
PowerShell 7 (PS7) is based on .NET Core 3.0 and Microsoft is aiming to provide much greater compatibility with Windows PowerShell modules, as much as 90 percent. This should enable administrators to use one version of PowerShell on Windows, Linux, and MacOS. APIs required by Windows PowerShell modules have been added to the .NET Core 3.0 runtime to achieve better compatibility. And for those of you that have missed it, Out-GridView should be back but only on Windows.
Moving to .NET Core 3.0 will not only bring better compatibility but also performance improvements. On Windows, .NET Core 3.0 will provide access to Windows Presentation Foundation (WPF) and WinForms APIs, among others.
As part of PowerShell 7, Microsoft is introducing a way to securely use credentials from a local or remote store so that passwords don’t need to be embedded in scripts. Logging will also be improved to provide a mechanism that sends local machine logs to a remote device, irrespective of the originating operating system.
‘Core’ has been dropped from the name to reduce complexity in the documentation and clarify that PS7 is intended as a replacement for Windows PowerShell.
PowerShell Core 6 is governed by Microsoft’s Modern Lifecycle Policy, meaning that you must install the latest stable version within 6 months of a minor version release. But in PowerShell 7, Microsoft will align support with the .NET Core support lifecycle, so there will be a long-term and non-long-term servicing releases.
The first preview of PowerShell 7 was released at the end of May and you can download it from GitHub here. Just like PSCore 6, PS7 can be installed side-by-side with Windows PowerShell 5.1.
It’s still early days and Microsoft hasn’t finalized the feature list yet, so don’t expect to see too much in this first release. PS7 is expected to reach general availability soon after .NET Core 3, which is slated to be sometime in the second half of 2019. Microsoft says that it plans to include PowerShell 7 as an inbox feature in Windows 10 at some point, alongside Windows PowerShell 5.1. But there are still some details to work out and no date has been given on when that will happen.
PowerShell briefly entered the top 50 TIOBE Index of programming languages earlier this year, only to then drop out. So, while PowerShell has experienced an increase in use since it was open sourced and made available for Linux and MacOS, it’s still got a way to go before it catches up with Bash. But comparisons with Bash, Perl, and Python are somewhat academic because they are all designed for different purposes. For example, Bash is a shell, PowerShell is a shell plus a complete scripting environment, and Python is a high-level, general-purpose programming language.