What Exactly is PowerShell Core, Anyway?

June 13, 2019 Security and Compliance, MOVEit

Once upon a time back in 2006, PowerShell was introduced to the world. The scripting language thought up by Jeffrey Snover and distributed by Microsoft with Windows would soon turn into a ubiquitous part of IT automation and scripting, replacing the aging VBScript as the scripting language of choice.

 

A Brief History Lesson

Throughout PowerShell's inception, and up to PowerShell 5.0, PowerShell was technically called Windows PowerShell. It was, as you might have guessed, only available on Windows. Windows PowerShell ran on top of the Windows .NET Framework and was bundled as part of the Windows Management Framework package which set a hard requirement for the language until early 2017 when PowerShell 5.1 came along with the concept of a "Core" version.

Windows PowerShell "Core" 5.1 ran on .NET Core instead of the full .NET Framework and was bundled with Windows Server 2016 Nano Server. After PowerShell 5.1, PowerShell would never be the same. With the release of PowerShell in 2018, Windows PowerShell was no longer actively developed and the new PowerShell, PowerShell Core 6.0 was introduced.

 

What PowerShell Core Changes

PowerShell Core was the new generation of PowerShell and still is. Two major announcements came from the PowerShell Core announcement; PowerShell was now open source and cross-platform meaning it could now run on Linux, MacOS, and Windows! PowerShell was no longer relegated to Windows systems, but developers could now write scripts to run on just about any operating system in their environment.

PowerShell now comes in two forms; Windows PowerShell and PowerShell Core. While admins scramble to figure out how they're going to migrate to PowerShell Core, Microsoft has developed Core to run in parallel with Windows PowerShell making the transition as smooth as possible. However, PowerShell Core doesn't have near feature-parity with Windows PowerShell yet. Many commands available on Windows PowerShell aren't available in PowerShell Core but recently, Jim Birley announced PowerShell Core 7.0 would be up to 90% of where Windows PowerShell is.

Another notable change is that PowerShell's binary powershell.exe is now pwsh.exe, making the ability for side-by-side installations. Also, PowerShell Core has native Docker support. This allows PowerShell to understand Docker containers without the need for add-on modules natively.

SSH Support with PowerShell Core 6.0

A significant change that many administrators were clamoring for was also SSH. Microsoft has been working on their PowerShell/SSH implementation for some time, but now in PowerShell Core 6.0, the familiar PowerShell Remoting Protocol (PSRP) finally supports SSH as well as the traditional WinRm-based implementation. This means that you can use cmdlets like Enter-PSSession and New-PSSession and authenticate using SSH. Remote sessions will work just fine as long as you register PowerShell as a subsystem with the destination OpenSSH-based server.

As of today, PowerShell Core is now on version 6.2 with no major feature upgrades and seems to be on a maintenance cycle. The vision of Jeffrey Snover's Monad Manifesto has been delivered, and since PowerShell is now open source, Microsoft is relying on the community to fix bugs and add new features to PowerShell.

 

Adam Bertram

Adam Bertram is a 25+ year IT veteran and an experienced online business professional. He’s a successful blogger, consultant, 6x Microsoft MVP, trainer, published author and freelance writer for dozens of publications. For how-to tech tutorials, catch up with Adam at adamtheautomator.com, connect on LinkedIn or follow him on X at @adbertram.

Read next The PowerShell Script Orchestrator