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 Install-Package .\module.nupkg!
Steps Link to heading
- Run
Install-PackageProvider -Name NuGet -RequiredVersion 2.8.5.201 -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\ProviderAssemblieson your target computer. - Start a new PowerShell session on the target computer to auto-load the package provider.
- Create a new folder in
C:\namedPackages - 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 - Run
Install-Module -Name <YourModuleName>where<YourModuleName>is the name of your package as returned by the command in step 8.
Thanks Link to heading
I put this together with information from trebleCode and Nova Sys Eng on StackOverflow. Thanks go out to those fine people.