PowerShell Core 6.0: Generally Available (GA) and Supported!

PowerShell Core 6.0 is a new edition of PowerShell that is cross-platform (Windows, macOS, and Linux), open-source, and built for heterogeneous environments and the hybrid cloud.

First and foremost, thank you to all of our amazing community, especially our open-source contributors (the most recent of which you can find on our community dashboard at https://aka.ms/PSGitHubBI) for donating your time and energy to PowerShell Core. Whether you contributed code, tests, documentation, issues, or even just your feedback and opinions, we are extremely grateful for the sweat and tears that you’ve invested in PowerShell. (For those interested in contributing, hop and over to our Contribution Guide on GitHub. You don’t have to be a guru to help out!)

FAQ

Where do I get PowerShell Core 6.0?

I already had PowerShell Core on my Linux machine, and it’s not updating. How do I get the latest version?

We’re currently working through a known issue where powershell-6.0.0 is viewed by package managers as a lower version than powershell-6.0.0-rc2.

In the meantime, a clean install will get you the latest version:

sudo apt remove powershell && sudo apt-get install powershell

sudo yum remove powershell && sudo yum install powershell

What’s the difference between Windows PowerShell and PowerShell Core?

There are now two editions of PowerShell:

Windows PowerShell is the edition of PowerShell built on top of .NET Framework
(sometimes referred to as “FullCLR”):

This is the PowerShell that has been in widespread use for the last ~10 years.

Because of it’s dependency on the .NET Framework, Windows PowerShell is only available on Windows (hence the name).

The released versions of Windows PowerShell include 1.0, 2.0, 3.0, 4.0, 5.0, and 5.1.

Windows PowerShell is available as a built-in component in Windows client and Windows Server.

Windows PowerShell is launched as powershell.exe.

On Windows PowerShell 5.0/5.1, $PSVersionTable.PSEdition is set to Desktop.

Any usage of .NET-based functionality (e.g. C# cmdlets, Add-Type, and the invocation of static .NET Methods), relies on the .NET Framework runtime. This means Windows PowerShell’s .NET usage is limited to the functionality exposed by the .NET Framework and .NET Standard.

Continues to be supported via critical bug fixes in the newest releases of Windows and Windows Server

PowerShell Core is the edition of PowerShell built on top of .NET Core
(sometimes simplified to “CoreCLR”).

PowerShell Core is cross-platform, available on Windows, macOS, and Linux, thanks to the cross-platform nature of .NET Core.

PowerShell Core is launched as pwsh.exe on Windows and pwsh on macOS and Linux

On PowerShell Core, $PSVersionTable.PSEdition is set to Core.
Note: while PowerShell Core 6.0 is cross-platform, there is also a PowerShell Core 5.0/5.1 released exclusively as part of Microsoft Nano Server.

Any usage of .NET-based functionality (e.g. C# cmdlets, Add-Type, and the invocation of static .NET Methods), relies on the .NET Core runtime. This means PowerShell Core is limited to the functionality exposed by .NET Core and .NET Standard.

What’s new in PowerShell Core? Why should I use it?

Does PowerShell Core affect my Windows PowerShell installation?

Nope! PowerShell Core is completely side-by-side with Windows PowerShell. In fact, an awesome feature of PowerShell Core is that you can test new versions without affecting existing workloads. Whether it’s installed via an MSI or installed portably from the ZIP package, your Windows PowerShell installation is not affected by PowerShell Core.

What modules work with PowerShell Core?

Today, we ship the following set of “built-in” modules as part of PowerShell Core:

CimCmdlets

Microsoft.PowerShell.Archive

Microsoft.PowerShell.Diagnostics

Microsoft.PowerShell.Host

Microsoft.PowerShell.Management

Microsoft.PowerShell.Security

Microsoft.PowerShell.Utility

Microsoft.WSMan.Management

PackageManagement

PowerShellGet

PSDesiredStateConfiguration

PSDiagnostics

PSReadLine

You can browse the reference for these modules via the PowerShell Module Browser. To see the commands available in these modules you can run Get-Command:

Get-Command-Module Microsoft.PowerShell.Management

Some cmdlets that shipped as part of these modules in Windows PowerShell are not available today in PowerShell Core. For a complete list of these cmdlets, the most up-to-date list is currently maintained in this cmdlet discovery test.

What about other 1st-party Microsoft modules?

1st-party Microsoft modules are generally in one of three categories:

Modules that ship as part of Windows client or Windows Server:
these are the modules you see after installing Windows and running Get-Module -ListAvailable (less the modules that in the “built-in” list above).

Modules that ship as a part of a Microsoft product. For example, System Center applications include PowerShell modules as part of their installation.

Modules that ship on the PowerShell Gallery. For example, Azure PowerShell is delivered via the Gallery.

For all of these categories, unless a module is explicitly supported in PowerShell Core by Windows or by the product group, there is no guarantee that it will work with PowerShell Core.

However, because of the guarantees of .NET Standard and CDXML,
many modules designed for Windows PowerShell are highly compatible with PowerShell Core. For more information on how to add Windows PowerShell modules to your PSModulePath for usage in PowerShell Core,
see Backwards compatibility with Windows PowerShell.

How do I know which modules on the PowerShell Gallery work with PowerShell Core?

Note: PowerShell Standard is currently in preview with a 3.0 version for PowerShell versions 3 through 6. We will soon have a version 5.0 that supports a wider set of APIs included PowerShell versions 5 through 6.

If you’re building a PowerShell-based cmdlet or script, you should make sure you’re using .NET types/assemblies, and that you’re using cmdlets and modules available on the platform you’re targeting. We’ll be adding PSScriptAnalyzer rules soon that will help you target sets of operating systems and PowerShell editions/versions.

Can I host PowerShell Core in a .NET Core application?

Does PowerShell Core support remoting?

Yes! PowerShell Core supports remoting over the PowerShell Remoting Protocol (PSRP) via both WSMan and SSH, and is interoperable with Windows PowerShell over WSMan. However, some authentication types are not supported for WSMan-based remoting clients on non-Windows platforms. Also, hosting a WSMan-based server on non-Windows platforms is still currently an experimental scenario.

How is PowerShell Core supported?

In general, Microsoft support agreements cover support for PowerShell Core. You can read more about the specifics of this policy and how it applies to PowerShell Core at https://aka.ms/pslifecycle.

What’s missing from PowerShell Core?

As part of the move to .NET Core and other operating systems,
we were forced to leave behind some technologies that were being used by Windows PowerShell.

In other cases, we took the opportunity of PowerShell being refactored to stop supporting lesser used technologies. Some of these technologies may eventually return to PowerShell Core, but many will not.

At a high-level, these include:

PowerShell Workflows

PowerShell Snap-ins

WMIv1 cmdlets (Get-WmiObject, Invoke-WmiMethod, etc.)

We recommend using the CIM/WMIv2 cmdlets (Get-CimInstance, Invoke-CimMethod, etc.)

However, there are currently no plans to introduce new functionality to Windows PowerShell. This means that the risk of regression will be very low for Windows PowerShell, so you can count on it as a stable platform for your existing workloads. There are also no plans to provide a new Windows Management Framework (WMF) package for downlevel operating systems.

Where can I provide feedback?

First, we’re having an “Ask Me Anything” (AMA) with Jeffrey Snover and the PowerShell Team at https://aka.ms/powershellama on Microsoft Tech Communities on Thursday, January 11th at 9:00 AM PST (GMT-8).

You can also file issues on GitHub where we track, prioritize, and discus all our work on PowerShell Core. We’re usually very good about responding to issues there, as are many of the contributors outside Microsoft that help out in our repository.

Thanks!

Thanks again to everyone for all the contributions and support. I hope you enjoy PowerShell Core 6.0 as much as we do.

Join the conversation

I will immediately download it and give it a try. I will assure you, I will bravely bear the wave of disappointment that is about to come. 😉

Joke aside, I am expecting disappointment. A lot is changing, apparently for no reason that I can fathom. I must try hard to push back my curiosity and focus on the task at hand: PowerShell Core needs to be deployed. I probably need a pilot environment and a pilot period. But before all these, I probably need a reason for doing them. Upgrading PowerShell 4 to 5 is a no-brainer. But moving from Windows PowerShell to PowerShell Core is a migration, not upgrade. Proverbially speaking, my cheese has not moved; I just have found new cheese. (And my cheese isn’t going anywhere until 2025.)

There is one thing I crave though: A package that installs Visual Studio Code and its PowerShell extension on a system-wide basis.