CLI tool
PowerShell/PowerShell avatar
PowerShell/PowerShell

PowerShell 7: What the Cross-Platform Shell Actually Does and Who Should Install It

PowerShell is a cross-platform automation framework for Windows, Linux, and macOS, combining a shell and scripting language designed for structured data and REST APIs.

55,550 stars8,468 forksC#MIT

At a glance

What is it?
PowerShell 7 is Microsoft's cross-platform shell and scripting language, MIT licensed and shipped for Windows, macOS and Linux. It is a fork of the Windows PowerShell codebase that no longer flows back, which is the single fact most adopters get wrong.
Who is it for?
Adopt PowerShell 7 if you already live in .NET, Azure or Microsoft 365 tooling, or if you need a shell that treats JSON and CSV as objects rather than text; the MIT licence and the three parallel release lines make the upgrade path predictable. Do not adopt it expecting Windows PowerShell 5.1 fixes to arrive, and do not treat it as a drop-in replacement for modules that ship inside Windows.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly C#, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What PowerShell 7 Is For, and Why the 5.1 Fork Matters

The README describes PowerShell as a cross-platform automation and configuration tool and framework, available on Windows, Linux and macOS, and explicitly optimized for structured data such as JSON, CSV and XML, REST APIs and object models. That sentence is the whole pitch, and it is a more precise claim than the usual "better command prompt" framing. The shell does not pipe text between commands. It pipes objects, which is why the framework, the cmdlet model and the scripting language are shipped as one unit rather than as a shell plus a separate scripting runtime.

The repository states plainly that although it began as a fork of the Windows PowerShell codebase, changes made here are not ported back to Windows PowerShell 5.1, and that issues tracked in this repository cover PowerShell 7.x and higher only. That is a hard boundary, not a marketing note. If your environment depends on a module that only exists inside the Windows-bundled 5.1 installation, this repository will not fix it, and Windows PowerShell specific problems belong in the Feedback Hub app under Apps > PowerShell rather than in this issue tracker.

The audience follows from that. Administrators automating Microsoft 365, Azure or Exchange Online; developers who want the same script to run in a Linux container and on a Windows build agent; and anyone whose data arrives as JSON from an API rather than as columns of text. If your work is a handful of interactive commands on one Windows machine, the shell already present on that machine is a smaller commitment.

Objects, Cmdlets and the Pipeline: How the Mechanism Actually Works

Three pieces fit together. The command-line shell is the interactive surface. The scripting language is what you write files in. The framework for processing cmdlets is the part that most distinguishes it from a POSIX shell, because cmdlets are .NET classes that emit structured output rather than formatted strings.

That design has a visible consequence in day-to-day use. When a command returns a JSON document, the result is an object with named properties you can select, filter and re-serialize, instead of a blob you have to parse with a text tool. The README frames the project as optimized for exactly this, alongside REST APIs and object models. The trade-off is that the pipeline is typed end to end, so a command that emits objects and a command that expects plain text do not always compose the way they would in bash.

The repository layout reflects the scope. The top level carries src/ for the engine, test/ for the test suite, docs/ for building instructions per platform, dsc/ for the desired state configuration work, and Localize/ for translations. There is a PowerShell.sln solution file and a global.json pinning the .NET SDK, which tells you the engine is built as a .NET application rather than as a native binary per platform. Release engineering is visible too: .pipelines/, .vsts-ci/ and .devcontainer/ sit alongside experimental-feature-linux.json and experimental-feature-windows.json, so experimental switches are declared per platform as data files rather than being hidden behind flags.

One architecture detail worth noticing before you plan a deployment: the README states that the PowerShell container images are now maintained by the .NET team, and that the containers at mcr.microsoft.com/powershell are currently not maintained. Anyone whose deployment story is "run it in a container" needs to read that line twice, because it moves container maintenance outside this repository.

Installing PowerShell 7 and Getting a Working Copy

The README does not embed install commands. It points to the Installing PowerShell documentation at learn.microsoft.com, and states that PowerShell is supported on Windows, macOS and a variety of Linux platforms. So the honest first step is to open that page and follow the method for your platform, because the repository deliberately does not duplicate it. What the README does give is the source clone, which is the route for building from source rather than installing a release:

sh
git clone https://github.com/PowerShell/PowerShell.git

That produces a working copy of the repository. It is not an installation, and the README directs anyone building it to the per-platform instructions in docs/building/linux.md, docs/building/windows-core.md and docs/building/macos.md, with the developer FAQ in docs/FAQ.md as the first place to look when a build fails. Expect the build to require the .NET SDK version pinned by global.json.

Once you have a shell to work in, the first genuinely useful thing to try is the structured-data behaviour the project is built around. The README lists JSON, CSV and XML as the formats the tool is optimized for, and the repository's own FAQ points developers at the PowerShell SDK NuGet package when they are writing .NET Core C# applications against PowerShell Core. That SDK route is the documented path when your goal is embedding the engine rather than typing at it.

The repository also documents how to get involved rather than just run it. The README points contributors at the Contribution Guide, at the PowerShell-RFC repository for design proposals, and at GitHub Discussions for topics that are not code issues, with the explicit note that there is no expectation the PowerShell team participates regularly in discussions. For anyone evaluating the project's health, that is a more useful signal than a popularity metric.

Where PowerShell 7 Is the Wrong Choice

The clearest failure case is written into the README itself: changes in this repository are not ported back to Windows PowerShell 5.1. If your scripts depend on modules that ship inside Windows and have no 7.x equivalent, installing PowerShell 7 does not upgrade them, it gives you a second shell beside them. You now maintain two environments and two sets of assumptions about which one a scheduled task invokes.

The second limitation is the container story. The README states that the container images are maintained by the .NET team and that the images at mcr.microsoft.com/powershell are currently not maintained. Teams that standardized on those images should treat that as an open question to resolve with the .NET team's guidance, not as a detail to discover during an incident.

The third is upgrade discipline. The README says that for best results when upgrading you should use the same install method you used originally, because the update method differs per platform and per install method. That is a real constraint on mixed environments: a fleet installed partly from a package repository and partly from a manual download will not have one upgrade procedure. Nothing in the README documents a rollback path, so if you need one, it is on you to design it before you upgrade.

Finally, consider whether you need it at all. For short interactive sessions on a single Windows machine, or for shell scripts that are fundamentally text processing, a POSIX shell or the shell already present is less to install and less to explain. PowerShell 7 earns its place when objects, structured data or .NET integration are the point.

PowerShell 7 Against cmd.exe and bash

The comparison people actually search for is PowerShell against cmd.exe. The difference is not cosmetic. cmd.exe is a command interpreter that passes text, and it exists only on Windows. PowerShell 7 runs on Windows, Linux and macOS from the same source tree and passes objects through the pipeline, with the scripting language and cmdlet framework included. If you have ever parsed command output with a text utility to extract a field, that is the work the object model removes.

Against bash the split is narrower and more honest. bash is everywhere, starts instantly and its text pipeline is a well-understood model; for gluing together existing Unix tools it is hard to beat. PowerShell 7's advantage appears when the data is structured or the target is a Microsoft API surface. Its disadvantage is the runtime: it is a .NET application, so it carries a larger footprint and a dependency on the .NET SDK if you build from source. Choosing between them is mostly a question of what your data looks like, not which shell is newer.

There is also an internal comparison worth stating. Windows PowerShell 5.1 and PowerShell 7 are separate products with separate issue trackers, and the README is explicit that this repository serves 7.x and higher. Anyone comparing "PowerShell" versions should start from that line rather than from version numbers alone.

Release Lines, Licence and What Upgrades Cost

Three release lines are visible in the repository: v7.4.19, v7.5.10 and v7.6.5, all published on 2026-08-14. The last push to the default branch was on 2026-08-14 as well. Three maintained lines mean three upgrade paths to track, and the README's advice to reuse your original install method applies to each of them. It does not describe a supported downgrade procedure.

The licence is MIT, stated in the README and present as LICENSE.txt at the repository root. MIT is permissive: it allows use, modification and redistribution with the licence and copyright notice retained. That is a summary of the licence text, not legal advice, and anything you redistribute should be checked against LICENSE.txt and, where relevant, ThirdPartyNotices.txt.

Two other legal-adjacent items are documented. First, telemetry: the README points to the about_Telemetry topic for details on data gathered by PowerShell, which is the page to read before deploying into an environment with data-handling rules. Second, containers: the README states that requesting and using the Container OS Image for Windows containers means you acknowledge and consent to the Supplemental License Terms on Microsoft Artifact Registry. Those terms are separate from MIT and apply only to that image.

On governance and support, the repository carries a governance document under docs/community/, a code of conduct, a security policy in .github/SECURITY.md, and a SUPPORT.md file that the README names as the place to start for support. The practical upgrade cost is therefore not licence risk; it is the coordination cost of three release lines, per-platform install methods, and a module ecosystem that may or may not have followed you from 5.1.

Editorial conclusion

Adopt PowerShell 7 if you already live in .NET, Azure or Microsoft 365 tooling, or if you need a shell that treats JSON and CSV as objects rather than text; the MIT licence and the three parallel release lines make the upgrade path predictable. Do not adopt it expecting Windows PowerShell 5.1 fixes to arrive, and do not treat it as a drop-in replacement for modules that ship inside Windows. Before rolling it out, verify which of the v7.4, v7.5 and v7.6 lines your existing modules support, and confirm how your platform's package source handles side-by-side installs, because the README states that upgrading works best when you reuse the install method you started with.

Frequently asked questions

What exactly does PowerShell do?

The README describes it as a cross-platform automation and configuration tool and framework for Windows, Linux and macOS, containing a command-line shell, a scripting language, and a framework for processing cmdlets. It is optimized for structured data such as JSON, CSV and XML, REST APIs and object models.

How do I install PowerShell 7?

The README does not list install commands; it points to the Installing PowerShell documentation at learn.microsoft.com, which covers Windows, macOS and a variety of Linux platforms. Building from source instead starts with cloning the repository and following the per-platform instructions under docs/building/.

How do I use PowerShell commands?

The README describes the tool as optimized for structured data such as JSON, CSV and XML, REST APIs and object models, and the shell passes objects rather than text through its pipeline. The getting started documentation the README links to is the place it sends new users for the command model.

How do I use PowerShell on a Mac?

The README states that PowerShell is supported on macOS and points to the Installing PowerShell documentation for the method. If you build from source instead, docs/building/macos.md holds the instructions and docs/FAQ.md is the developer FAQ the README recommends consulting first when a build fails.

How do I run PowerShell?

The README points new users to the getting started documentation at learn.microsoft.com, and states that PowerShell is supported on Windows, macOS and a variety of Linux platforms. Installation method is per platform, so the getting started and installing pages are the two the README names.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
For maintainers

Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/powershell-powershell.svg)](https://hysenlabs.com/projects/powershell-powershell)
Community notes

Community notes