Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PowerShell v5 - How to install modules to a computer having no internet connection?

I've a machine (v3, internet, no admin access) which I used to download WMF 5.0 and set up another machine(v5, no internet, admin access). Now, I want to use some modules from PowerShellGet on the machine running v5 but no internet connection.

I need an option to download *.psm1 file which I can then copy over and use. Just like we have options to download from GitHub.

Anyone with a similar issue and any workarounds ?

like image 202
zerocool18 Avatar asked May 27 '16 14:05

zerocool18


People also ask

How do I install PowerShell modules without Internet?

If you want the module to be accessed only by a particular user, this must be copied into “C:\Users\THEUSERNAME\Documents\WindowsPowerShell\Modules”. Because all the necessary files are already located in the “Modules” folder, PowerShell will install it from there, not requiring an internet connection.

How do I manually install PowerShell modules?

To install PowerShell modules manually, you first need to determine your current PowerShell module directory path, download your new module to that path, and invoke the import-module command to let windows know it's there.


1 Answers

Install the Package Management Module on your PowerShell 3 machine, and then use Save-Module ...

Or set up ProGet somewhere "on the edge" of your network, and have it mirror the modules you want from the public PowerShellGallery for your internal-only clients.

Failing that, just build your own download URL:

https://www.powershellgallery.com/api/v2/package/$Name/$Version

You can even generate an OData proxy module, or just use invoke-restmethod to search:

function Find-Module {
    param($Name)
    invoke-restmethod "https://www.powershellgallery.com/api/v2/Packages?`$filter=Id eq '$name' and IsLatestVersion" | 
    select-Object @{n='Name';ex={$_.title.'#text'}},
                  @{n='Version';ex={$_.properties.version}},
                  @{n='Uri';ex={$_.Content.src}}
}
function Save-Module {
    param(
        [Parameter(ValueFromPipelineByPropertyName=$true,Mandatory=$true)]
        $Name,
        [Parameter(ValueFromPipelineByPropertyName=$true,Mandatory=$true)]$Uri,
        [Parameter(ValueFromPipelineByPropertyName=$true)]$Version="",
        [string]$Path = $pwd
    )
    $Path = (Join-Path $Path "$Name.$Version.nupkg")
    Invoke-WebRequest $Uri -OutFile $Path
    Get-Item $Path
}

So now you can just do the same as with the official module:

Find-Module Pester | Save-Module -Path ~\Downloads
like image 86
Jaykul Avatar answered Sep 21 '22 13:09

Jaykul