PowerShell History and Current State

This entry is part 4 of 8 in the series Learn PowerShell

The State of the Shell

Having a pulse on the current and future state of the language is beneficial in your PowerShell journey. It also helps to know a little PowerShell history. PowerShell is evolving rapidly. Knowing how to navigate the PowerShell landscape will help you make good decisions as you dive deeper into the language.

This post will briefly cover some PowerShell history. It will investigate some of the differences between versions, and what that means for you. Finally, we’ll cover where PowerShell is headed in the future.

Video

If you prefer video format over written documentation I discuss this topic in the following TechThoughts video:

PowerShell History

PowerShell History - PowerShell Icons

The Monad Manifesto

Jefferey Snover invented PowerShell in 2002 and proposed the idea in the Monad Manifesto. While not required reading, I encourage you to look it over. It provides a lot of insight into the creation of PowerShell. With additional design help from Bruce Payette and James Truher, PowerShell saw it’s initial 1.0 release in 2006.

A New Shell for Windows

PowerShell from the beginning has aimed to make IT Admins lives easier. It’s capabilities and ease of use quickly made it the tool of choice for many.

Initial versions were coupled directly to Windows releases. Later versions were released as part of the WMF (Windows Management Framework).

Each new PowerShell version continued to add more cmdlets, features, and functionality. This means that the PowerShell version you are running may have different capabilities than another version. Familiarize yourself with the version that is currently deployed in your environment. (Reference the PowerShell Version Information at the bottom of this article for more details)

# determine what version of PowerShell you are running with the following:
$PSVersionTable
# The PSVersion number is the version. you can get it specifically like this:
$PSVersionTable.PSVersion

PowerShell for all

PowerShell 6.0 was released in January 2018. With it came some of the biggest changes PowerShell had seen to date:

  • PowerShell is now free, and open source
    • This means you can visit the PowerShell repository on GitHub. Open issues, view the code base, interact with the community, and even contribute to PowerShell!
  • Linux and MacOS support added
    • Now that PowerShell is cross-platform, admins can learn one language and be effective on several platforms.
  • PowerShell 5.1 regulated to security fixes only

PowerShell 5.1 vs PowerShell 6.x

There was a lot of confusion in the community concerning version 6 of PowerShell. It’s important that you understand how PowerShell 5.1 and PowerShell 6+ relate to one another.

For Linux and MacOS users, there is only choice: PowerShell 6 or higher is a requirement. For Windows users though, PowerShell had started with 1.0 and had matured all the way to 5.1. In fact, for the majority of modern Windows environments, 5.1 is fairly standard. PowerShell 6 didn’t really add much net new functionality for Windows admins. In fact, it actually had less functionality than 5.1.

The PowerShell 6 release aimed at achieving some of the above mentioned points. It’s goal wasn’t to radically boost Windows capabilities. 5.1 was already doing a good job at that, and will continue to do so.

PowerShell 5.1 will receive security fixes only moving forward. While PowerShell 6 does lag in Windows capability, it will continue to advance on both Linux and Windows. Eventually it will eclipse 5.1’s Windows capabilities. In the interim, you can run both on a system without issue.

Running 5.1 and 6.x side-by-side

On a Windows device you can see this behavior in action by running both PowerShell 5.1 and PowerShell 6+ side-by-side. Yes, you can run both on the same Windows system without issue. Simply download the PowerShell 6.2.1 release and install to follow along.

  • PowerShell 5.1 install path:
    • C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
  • PowerShell 6+ install path:
    • C:\Program Files\PowerShell\6\pwsh.exe

Because the two versions have different install paths and exe names, you can run both at the same time. Try the following code to see the differences in the number of cmdlets between the two versions:

# in a 5.1 window count the number of cmdlets:
Get-Command | Measure
# now try the same thing in a 6+ console window
Get-Command | Measure

On a Windows system you can add additional functionality to PowerShell 6+ by installing the WindowsCompatibility Module.

# in a 6+ console window run the following:
Install-Module WindowsCompatibility -Scope CurrentUser

PowerShell Today

Today, Powershell is a powerful tool for admins/engineers running nearly any technology stack. The PowerShell team continues to remain committed to cross platform and open source. The PowerShell community is also thriving and growing.

WindowsLinuxHyper-VVMWareAWSAzure
Windows Icon LogoLinux Icon LogoMicrosoft Hyper-V Icon LogoVMware Icon LogoAWS Icon LogoAzure Icon Logo
SupportedSupportedSupportedSupportedSupportedSupported

At the time of this writing (mid 2019) Linux adoption of PowerShell 6+ is soaring. The majority of Windows environments continue to stay on 5.1 where it will likely continue to serve Windows admins for some time. PowerShell 6+ continues to see improvements and will catch up. In the interim, the WindowsCompatibility Module can help Windows admins transition easily to 6+.

PowerShell Tomorrow

PowerShell continues to evolve in exciting new ways! Recently PowerShell program manager Steve Lee announced the next release will be PowerShell 7! He followed up shortly with the PowerShell 7 roadmap.

The PowerShell 7 release is set to align around .NET Core 3 and aims to become a viable replacement on Windows for 5.1. That means we can likely expect a lot of Windows improvements in PowerShell 7.

There are also many RFCs (Request for Comments) open regarding the future of PowerShell. These threads are where people discuss proposed changes. You could join in on the conversation and help shape the future of PowerShell!

Other ways to stay current with the world of PowerShell:

  • Make sure to also check out the PowerShell blog for updated announcements.
  • Stop by /r/PowerShell to see what the community is currently discussing related to PowerShell!

PowerShell Version Information

VersionRelease DateReleased ToWindowsLinux
7TBDTBDTBDTBD
6.2May 2019Standalone InstallerServer 2019
Server 2016
Windows 10
Server 2012R2
Windows 8.1
Server 2012
Windows 7 SP1
Server 2008R2 SP1
Ubuntu 14.04
Ubuntu 16.04
Ubuntu 18.04
Ubuntu 18.10
Debian 9
CentOS 7
RHEL 7
openSUSE 42.3
openSUSE Leap 15
Fedora 27
Fedora 28
Arch Linux
6.1Nov 2018Standalone InstallerServer 2019
Server 2016
Windows 10
Server 2012R2
Windows 8.1
Server 2012
Windows 7 SP1
Server 2008R2 SP1
Ubuntu 14.04
Ubuntu 16.04
Ubuntu 18.04
Ubuntu 18.10
Debian 9
CentOS 7
RHEL 7
openSUSE 42.3
openSUSE Leap 15
Fedora 27
Fedora 28
Arch Linux
6.0Jan 2018Standalone InstallerServer 2016
Windows 10
Server 2012R2
Windows 8.1
Server 2012
Windows 7 SP1
Server 2008R2 SP1
macOS 10.12+
RHEL 7+
CentOS 7+
Fedora 25, 26
Debian 8.7+
Ubuntu 14.04, 16.04, 17.04
openSUSE 42.2+
5.1Jan 2017Windows 10 Anniversary
Server 2016
Windows 10
Server 2016
Windows 8.1
Server 2012R2
Server 2012
Server 2008R2 SP1
Windows 7 SP1
N/A
5.0Feb 2016Windows 10Windows 10
Windows 8.1
Server 2012R2
Server 2012
Windows 7 SP1
N/A
4.0Oct 2013Windows 8.1
Server 2012R2
Windows 8.1
Server 2012R2
Server 2012
Windows 7 SP1
Server 2008R2 SP1
N/A
3.0Sep 2012Windows 8
Server 2012
Windows 8
Server 2012
Windows 7 SP1
Server 2008 SP1
Server 2008R2 SP1
N/A
2.0Oct 2009Windows 7
Server 2008R2
Windows 7
Server 2008R2
XP SP3
Server 2003 SP2
Vista SP1
N/A
1.0Nov 2006XP SP2
Server 2003 SP1
Vista
XP SP2
XP SP3
Server 2003 SP1
Server 2003 SP2
Server 2003R2
Vista
Vista SP2
Server 2008
N/A
Series Navigation<< Working with the PowerShell PipelineGetting setup for PowerShell Development >>

Leave a Reply

Your email address will not be published. Required fields are marked *