powershellpowershell-5.0powershellget

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 ?


Solution

  • 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