PowerShell Modules are an important resource for scripting, and the ability to share PowerShell modules is easy with online repositories like the PowerShell Gallery. We added the ability to publish PowerShell modules to the latest service release of PowerShell ModuleManager (v1.1.1). You’re welcome!
Some Background on Publishing Modules
The Publish-Module command—from the PowerShellGet module—allows you to share modules from your local computer to online or local galleries.
To run the Publish-Module command, you can either specify the name or the path of the folder containing the module. If publishing by name, the first module found in the paths of the PSModulePath environment variable ($env:PSModulePath) will be published—so it is important to specify a minimum version if you have multiple versions.
When publishing modules to a NuGet-based online repository like the PowerShell Gallery, an API key is required. To get an API key for the PowerShell Gallery, you will need to create an account on the PowerShell Gallery and generate a new key for this module package. Local repositories do not need a key.
By default, Windows 10 ships with an old version of PowerShellGet, which provides the Publish-Module command, so this module must be updated to recognize the API key from the latest gallery site.
Publishing a module requires metadata, most of which is taken from the module manifest (.psd1). The minimum required data is:
- Name: Unique name of module that does not already exist on the repository attempting to publish to.
- Version: Current version of the module that must be higher than any existing versions of the module present on the repository.
- Description: A short description of the module.
- Author: Creator of the module.
There should be no output if the Publish-Module command runs successfully.
Publishing Modules just got Easier
Select the registered repository in the Publish to field, specify the NuGetAPI Key if you are publishing to an online repository like the PowerShell Gallery, then select the Version of the module. This is the minimum information needed to publish your module.
Optional information that can be specified when publishing:
- Tags: Keywords used to search for modules in PowerShell repositories.
- License Uri: The URL of licensing terms for the module.
- Icon Uri: The URL of an icon for the module.
- Project Uri: The URL of a website for this project.
- Release Notes: Comments about this version of the module.
If this information already exists in the module manifest, you do not need to enter it in the Publish dialog. Specifying this information will not automatically update the local module’s manifest. To update the local module manifest without opening and editing the psd1 file, you must check the Update the module manifest (.psd1) file checkbox:
After filling in the dialog, select Publish to publish the module.
Important Note About Repositories
Any repository you are attempting to publish to must be a registered repository in PowerShell. Repositories can be added or edited by selecting Registered Repositories on the ribbon (Home->Repository):
When registering a repository, specify where modules should be published by entering the repository URL or file path in the Publish Location field:
Note: The default registered repository is the PowerShell Gallery (PSGallery).
A .nupkg file is created when a module is published to a registered repository, which allows you to find the published module when performing a search.
If you write a PowerShell module, chances are you’ll want to publish it. Creating excellent PowerShell modules is one thing, but sharing them with others takes them to a whole new level! We hope you find this new PowerShell ModuleManager feature useful.
You will need PowerShell ModuleManager 2019 1.1.1 or later to use the new publish functionality. You can view the complete service build log here.
Please continue providing your feedback. Many of the new features included in the service builds are suggestions from users like you. Submit your suggestions or feature requests on the Wish List and Feature Requests forum or the new Feature Requests page.