PowerShell History and Current State

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

January 2018 saw the release of PowerShell 6.0. 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 Higher Versions of PowerShell

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

With the release of PowerShell 6.0 PowerShell moved to .NET Core. This refactor was actually a bit of a step backwards in that there were actually less cmdlets, and less functionality in 6.0 then there had been in previous versions. It took the PowerShell team until the release of PowerShell 7 before full cross-platform functionality with original levels of functionality were realized.

For Linux and MacOS users, there is only choice: PowerShell 6 or higher is a requirement. For Windows users 5.1 still ships native with Windows today. While it lacks modern features, many Windows users find it “good enough” for many use cases. This has led to an interesting situation where modern versions of PowerShell often see higher adoption rates with Linux users. Many Windows environments still leverage 5.1 “because it’s there”.

PowerShell 5.1 will receive security fixes only moving forward. This means you can’t take advantages of new capabilities in modern version of PowerShell. Parallel actions, improved web cmdlets, new operators, and improved error investigation are just some of the enhancements that you’ll be able to engage with higher versions.

Running 5.1 and new PowerShell versions 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 latest PowerShell 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\X\pwsh.exe
      • X represents the version number of PowerShell. For instance, if you install PowerShell 7, this will be a 7.

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

Even More PowerShell History

If you want to learn even more about PowerShell history I’d suggest checking out Shell of an Idea: The Untold History of PowerShell:

PowerShell Today

Today, PowerShell is a powerful tool for admins/engineers/developers 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-VVMWareAWSAzureOracle
Windows Icon LogoLinux Icon LogoMicrosoft Hyper-V Icon LogoVMware Icon LogoAWS Icon LogoAzure Icon LogoOracle Cloud Logo
Windows SupportedLinux SupportedHyper-V SupportedVMWare SupportedAWS SupportedAzure SupportedOracle Supported

At the time of this writing 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. The PowerShell team continues to enhance and provide additional value which should drive environments to upgrade past 5.1.

PowerShell Tomorrow

PowerShell continues to evolve in exciting new ways! Recently PowerShell program manager Steve Lee announced the PowerShell and OpenSSH team investments for 2022.

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:

PowerShell Version Information

VersionRelease DateReleased ToWindowsLinuxCmdlets
7March 2020Standalone InstallerServer 2019
Server 2016
Server 2012R2
Server 2012
Windows 10
Windows 8.1
Ubuntu LTS 16.04+
Alpine Linux 3.8+
Debian 9
Fedora 30+
CentOS 7
RHEL 7
macOS 10.13+
1507
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/A1,300
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/A1,000
2.0Oct 2009Windows 7
Server 2008R2
Windows 7
Server 2008R2
XP SP3
Server 2003 SP2
Vista SP1
N/A632
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/A129
Series Navigation<< Working with the PowerShell PipelineGetting setup for PowerShell Development >>

1 Response

  1. Chaminda Prasad says:

    thank you

Leave a Reply

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