NOTE: This post has important information for publishers in the “Accounts and publishing” section.
The PowerShell Gallery is the place to find PowerShell code that is shared by the community, Microsoft, and other companies. The site has averaged over 21 million downloads per month for the past 6 months, and has more than 3,800 unique packages available for use. It’s amazing when we consider we were handling just under 4 million downloads in July 2017. We clearly needed to invest in the PowerShell Gallery to support that kind of growth.
We have been working for some time to improve the performance of the PowerShell Gallery. The result is now available to everyone, and includes new features, performance enhancements, security improvements to accounts and publishing keys, and better alignment with the NuGet.org codebase that we rely on for our service and cmdlets.
New features and performance enhancements
Most users should see an improvement in package download speeds from the PowerShell Gallery. The new release takes advantage of CDN to provide faster downloads, particularly for those outside the United States. This should be most noticeable when installing a module with many dependencies.
The new updates include things users have requested for a long time, including:
- A manual download option from the PowerShell Gallery. It cannot replace install-module / install-script, but does solve some specific issues for those with private repositories or older versions of PowerShell.
- A change to Install-Module and Install-Script to simply install to the current user scope when not running in an elevated PowerShell session.
The new user experience is more than just a face-lift, as providing a modern UI also improves the performance. The PowerShell Gallery pages now display only the most critical information initially, and move the details to expanding sections in the UI. This makes the pages faster and easier for users to find the content they want to see.
Accounts and publishing improvements
The changes with the most immediate impact in this release are for publishers and users with PowerShell Gallery accounts.
Most important: Publishers must update to PowerShellGet module version 1.6.8 or higher to publish to the PowerShell Gallery. Older versions of PowerShellGet are fine for find, save, install, and update functions, but not for publishing.
The PowerShell Gallery implemented several security best practices:
- New API keys you create will have an expiration that ranges from 1 to 365 days.
- We will not show the value of an API key in the UI, and the value must be copied immediately after creating or regenerating it.
- Multiple API keys can be created, and defined for specific uses – such as only being available to publish packages with specific names.
- Your existing API key will still work, and will be listed as a “Full access API key”. However, you will not be able to view the current API key value or refresh it. If you lose the key value, you will need to create a new key that has an expiration date.
These changes are explained in more detail in the PowerShell Gallery documentation, and are the most significant changes included in this release.
Account management in the Powershell Gallery is also improved, and adds support for
- Two factor authentication for accessing the PowerShell Gallery account. This is a security best practice and is highly recommended.
- Changing the email address or login account associated with their PowerShell Gallery ID
You can find out more about the new Account settings features here.
Aligning with NuGet
The previous versions of PowerShell Gallery and PowerShellGet were based on older versions of NuGet. With this change we are aligning much more closely with the current state of the NuGet server and client. Many of the changes listed above – including the account and API key management – came directly from the NuGet updates. Another feature NuGet implemented is the ability to delete a package they have published accidentally, within the first hour after publishing.
As we move closer to alignment with how NuGet.org works, we expect to provide new features that are available from the NuGet team. Other changes we are considering that are available today at NuGet.org include support for namespaces and organizational accounts.
Let us know what you think
If you have any feedback on the changes we have made, or future changes we should consider, please do let us know. Visit https://aka.ms/PowerShellGalleryIssues to review what others are saying, or to let us know of other things we should be looking into.