The ability to find and install PowerShell modules from online sources like Nuget makes life for a Windows admin a smidge nicer. On the flipside, arbitrary trust of online package repositories and granting servers outbound internet access can be a nightmare for those tasked with protecting a network.
You might find yourself needing to install a PowerShell module (as a nupkg file) on a system with restricted (or no) internet access, as one of our security consultants found himself needing to do.
Here’s a quick guide on how to achieve this. If only it were as simple as an Install-Package .\module.nupkg!
Offline .nupkg installation
Install-PackageProvider -Name NuGet -RequiredVersion 18.104.22.168 -Forceto install the provider from a computer with an internet connection.
- After the install, you can find the provider installed in C:\Program Files\PackageManagement\ProviderAssemblies – copy the Nuget folder to external media or otherwise find a way to get it to your target system.
- Place the nuget folder in C:\Program Files\PackageManagement\ProviderAssemblies on your target computer.
- Start a new PowerShell session on the target computer to auto-load the package provider.
- Create a new folder in C:\ named Packages
- Copy your nupkg file(s) into C:\Packages
- In PowerShell run
Register-PSRepository -Name Local -SourceLocation C:\Packages -InstallationPolicy Trusted
- You can list the packages available with
Find-Module -Repository Local
Install-Module -Name <YourModuleName>where
<YourModuleName>is the name of your package as returned by the command in step 8.
I put this together with information from trebleCode and Nova Sys Eng in this StackOverflow thread. Thanks go out to those fine people.