8

我有一台机器(v3,互联网,无管理员访问权限),用于下载 WMF 5.0 并设置另一台机器(v5,无互联网,管理员访问权限)。现在,我想在运行 v5 但没有互联网连接的机器上使用 PowerShellGet 中的一些模块。

我需要一个选项来下载 *.psm1 文件,然后我可以复制并使用它。就像我们可以选择从 GitHub 下载一样。

任何有类似问题和任何解决方法的人?

4

2 回答 2

8

在您的 PowerShell 3 机器上安装包管理模块,然后使用 Save-Module ...

或者在网络“边缘”的某个地方设置ProGet ,并让它从公共PowerShellGallery镜像您想要的模块,供您的内部客户端使用。

如果做不到这一点,只需建立自己的下载 URL:

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

您甚至可以生成 OData 代理模块,或者只使用 invoke-restmethod 进行搜索:

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
}

所以现在你可以像官方模块一样做:

Find-Module Pester | Save-Module -Path ~\Downloads
于 2016-06-24T02:52:29.897 回答
2

通过 Internet 访问 PowerShell 5.0 更新您的计算机,并用于Save-Module从 PowerShellGet 保存模块。前任:

Find-Module psreadline | Save-Module -Path c:\users\frode\Desktop

这会将模块(例如 PSReadLine)保存到一个文件夹中,您可以将其复制到另一台机器并像普通模块一样安装(请参阅安装 PowerShell 模块

于 2016-05-27T16:18:52.047 回答