Fixes #8919 Preserve user shortcuts pinned to Taskbar during MSI upgrade by not removing shortcuts in this case (assuming the user has not changed the installation directory), see https://stackoverflow.com/a/33402698/1810304 This also requires the Guid to not always be re-generated, which PR #7701 originally added to ensure shortcuts get removed when RTM and preview are installed, the underlying problem was rather that RTM and preview shared the same GUIDs, therefore the GUIDs are hard-coded again but different for RTM and preview, therefore the shortcuts will still always get removed on uninstall. But this also means those GUIDs should change when the default installation directory changes, i.e. in PowerShell 7. Should we write the code to already take this into account that it does not get forgotten? Tested by first reproducing the issue by building installers locally (and bumping the patch version. Then the fix was applied to verify the solution, it. For this to take effect the version from which an MSI is being upgraded must have this fix already, i.e. if this fix got shipped in `6.2.1`, then on upgrading to it, the issue would still occur but when upgrading `6.2.1` to `6.2.2` the shortcut would start being preserved. I am wondering if we could maybe improve this to show effect earlier by trying to extract the used (auto-generated) GUIDs in the `6.2.0` and `6.2.0-rc` packages out and use them... Please not that we probably need to take this out for `7.0` because the base installation directory will change. This also assumes that the user has not specified a different installation directory on upgrade but this is a bit of an edge case where I think other things might break as well.
PowerShell
Welcome to the PowerShell GitHub Community! PowerShell Core is a cross-platform (Windows, Linux, and macOS) automation and configuration tool/framework that works well with your existing tools and is optimized for dealing with structured data (e.g. JSON, CSV, XML, etc.), REST APIs, and object models. It includes a command-line shell, an associated scripting language and a framework for processing cmdlets.
Windows PowerShell vs. PowerShell Core
Although this repository started as a fork of the Windows PowerShell code base, changes made in this repository do not make their way back to Windows PowerShell 5.1 automatically. This also means that issues tracked here are only for PowerShell Core 6. Windows PowerShell specific issues should be opened on UserVoice.
New to PowerShell?
If you are new to PowerShell and would like to learn more, we recommend reviewing the getting started documentation.
Get PowerShell
You can download and install a PowerShell package for any of the following platforms.
| Supported Platform | Downloads (stable) | Downloads (preview) | How to Install |
|---|---|---|---|
| Windows (x64) | .msi | .msi | Instructions |
| Windows (x86) | .msi | .msi | Instructions |
| Ubuntu 18.04 | .deb | .deb | Instructions |
| Ubuntu 16.04 | .deb | .deb | Instructions |
| Ubuntu 14.04 | .deb | .deb | Instructions |
| Debian 9 | .deb | .deb | Instructions |
| CentOS 7 | .rpm | .rpm | Instructions |
| Red Hat Enterprise Linux 7 | .rpm | .rpm | Instructions |
| openSUSE 42.3 | .rpm | .rpm | Instructions |
| Fedora 27, Fedora 28 | .rpm | .rpm | Instructions |
| macOS 10.12+ | .pkg | .pkg | Instructions |
| Docker | Instructions |
You can download and install a PowerShell package for any of the following platforms, which are supported by the community.
| Platform | Downloads (stable) | Downloads (preview) | How to Install |
|---|---|---|---|
| Arch Linux | Instructions | ||
| Kali Linux | .deb | .deb | Instructions |
| Many Linux distributions | Snapcraft | Snapcraft |
You can also download the PowerShell binary archives for Windows, macOS and Linux.
| Platform | Downloads (stable) | Downloads (preview) | How to Install |
|---|---|---|---|
| Windows | 32-bit/64-bit | 32-bit/64-bit | Instructions |
| macOS | 64-bit | 64-bit | Instructions |
| Linux | 64-bit | 64-bit | Instructions |
| Windows (arm) Experimental | 32-bit/64-bit | 32-bit/64-bit | Instructions |
| Raspbian (Stretch) Experimental | .tgz | 32-bit/64-bit | Instructions |
To install a specific version, visit releases.
Community Dashboard
Dashboard with visualizations for community contributions and project status using PowerShell, Azure, and PowerBI.
For more information on how and why we built this dashboard, check out this blog post.
Chat Room
Want to chat with other members of the PowerShell community?
We have a Gitter Room which you can join below.
There is also the community driven PowerShell Slack Team which you can sign up for at Slack.
Add-ons and libraries
Awesome PowerShell has a great curated list of add-ons and resources.
Building the Repository
| Linux | Windows | macOS |
|---|---|---|
| Instructions | Instructions | Instructions |
If you have any problems building, please consult the developer FAQ.
Build status of nightly builds
| Azure CI (Windows) | Azure CI (Linux) | Azure CI (macOS) | Code Coverage Status | CodeFactor Grade |
|---|---|---|---|---|
Downloading the Source Code
You can just clone the repository:
git clone https://github.com/PowerShell/PowerShell.git
See working with the PowerShell repository for more information.
Developing and Contributing
Please see the Contribution Guide for how to develop and contribute. If you are developing .NET Core C# applications targeting PowerShell Core, please check out our FAQ to learn more about the PowerShell SDK NuGet package.
Also, make sure to check out our PowerShell-RFC repository for request-for-comments (RFC) documents to submit and give comments on proposed and future designs.
Support
For support, please see the Support Section.
Legal and Licensing
PowerShell is licensed under the MIT license.
Windows Docker Files and Images
License: By requesting and using the Container OS Image for Windows containers, you acknowledge, understand, and consent to the Supplemental License Terms available on Docker Hub:
Telemetry
By default, PowerShell collects the OS description and the version of PowerShell (equivalent to $PSVersionTable.OS and $PSVersionTable.GitCommitId) using Application Insights.
To opt-out of sending telemetry, create an environment variable called POWERSHELL_TELEMETRY_OPTOUT set to a value of 1 before starting PowerShell from the installed location.
The telemetry we collect fall under the Microsoft Privacy Statement.
Governance
Governance policy for PowerShell project is described here.
Code of Conduct
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.