Creating a PowerShellGet repository

In this post – – I showed how to use PowerShellGet, which is a feature new to PowerShell 5.0 to install PowerShell modules. By default PowerShelget uses the PowerShell gallery at as its source.

I don’t feel comfortable installing modules direct from a public gallery so I want my own.  I suspect that many organizations will want to use their own module repository rather than something on the Internet over which they have no control.

There are a number of options for setting up your own gallery.

You could create an online nuget feed. This is described in this post from the PowerShell team:

You could create your own nuget repository – an example of doing this can be found here –

After reading I decided to start with ProGet ( as it seemed simple and was installed locally so I could take it with me to do demos.

To keep things even simpler I went with the free version and used the download that also  installs SQL Express. The installer also can create a service INEDOPROGETSVC to host the web service ProGet will use. Set the Service to use the LocalSystem account so that it can access the location to which the modules will be published.

The ProGet default feed is nuget but you want your own for this game.  Its not obvious how to do this but open Proget administration page – http://localhost:81/administration

I’m using port 81 as this is running on my DSC server.

Click manage feeds and you’ll find a button labelled Create New Feed. Press the button.

You have 3 choices

A nuget feed

A chocolately feed

a npm feed (private registry)

Lets go with nuget.

After supplying a name and description I went with the defaults to complete the feed creation.

At this point PowerShellget can’t see the new repository so you need to register it.

£> Register-PSRepository -Name PowerShellModules -SourceLocation http://localhost:81/nuget/PowerShellModules -Installati
onPolicy Trusted

And it now shows in my list of PowerShell repositories

£> Get-PSRepository | fl Name, SourceLocation

Name           : PSGallery
SourceLocation :

Name           : MSPSGallery
SourceLocation :

Name           : PowerShellModules
SourceLocation : http://localhost:81/nuget/PowerShellModules

You need to set a location to which modules will be published

Set-PSRepository -Name PowerShellModules -PublishLocation ‘http://localhost:81/nuget/PowerShellModules’

Now to try and publish a module.

I’m going to use the Pester module I downloaded in the previous article:

£> Publish-Module -Name Pester -NuGetApiKey “Admin:Admin” -Repository PowerShellModules -Verbose
VERBOSE: Repository details, Name = ‘PowerShellModules’, Location = ‘http://localhost:81/nuget/PowerShellModules’;
IsTrusted = ‘True’; IsRegistered = ‘True’.
VERBOSE: Repository details, Name = ‘PowerShellModules’, Location = ‘http://localhost:81/nuget/PowerShellModules’;
IsTrusted = ‘True’; IsRegistered = ‘True’.
VERBOSE: Repository details, Name = ‘PowerShellModules’, Location = ‘http://localhost:81/nuget/PowerShellModules’;
IsTrusted = ‘True’; IsRegistered = ‘True’.
VERBOSE: Module’Pester’ was found in ‘C:\Program Files\WindowsPowerShell\Modules\Pester’.
VERBOSE: Loading module from path ‘C:\Users\Richard\AppData\Local\Temp\409922302\Pester\Pester.psm1’.
VERBOSE: Repository details, Name = ‘PowerShellModules’, Location = ‘http://localhost:81/nuget/PowerShellModules’;
IsTrusted = ‘True’; IsRegistered = ‘True’.
VERBOSE: Repository details, Name = ‘PowerShellModules’, Location = ‘http://localhost:81/nuget/PowerShellModules’;
IsTrusted = ‘True’; IsRegistered = ‘True’.
VERBOSE: Using the specified source names : ‘PowerShellModules’.
VERBOSE: Getting the provider object for the OneGet Provider ‘NuGet’.
VERBOSE: The specified Location is ‘http://localhost:81/nuget/PowerShellModules’ and OneGetProvider is ‘NuGet’.
VERBOSE: Performing the operation “Publish-Module” on target “Version ‘3.2.0’ of module ‘Pester'”.
VERBOSE: Successfully published module ‘Pester’ to the module publish location

The -NuGetApiKey “Admin:Admin”  is the default and you’d want to change that for a production system.

Finally test the repository contents

£> Find-Module -Repository PowerShellModules

Version    Name                                Repository
——-    —-                                ———-
3.2.0      Pester                              PowerShellModules

This entry was posted in PowerShell v5, PowerShellGet. Bookmark the permalink.

2 Responses to Creating a PowerShellGet repository

  1. Tore Groneng says:

    Thank you for linking to my blog. The link you provided to my powershell get post contains a space. You might want to fix that 🙂

  2. Tom says:

    Great post. One question that I have not been able to get an answer for. Where did you come up with the Publish Location for the ProGet feed? Am I missing something in the configuration of ProGet? I can’t imagine that adding “&#8217” to the source location works for everyone.
    Thanks, Tom

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s