PowerShell v5 - 如何在没有互联网连接的计算机上安装模块?
PowerShell v5 - How to install modules to a computer having no internet connection?
我有一台机器(v3,互联网,无管理员权限),我用它下载 WMF 5.0 并设置另一台机器(v5,无互联网,管理员权限)。现在,我想在 运行 v5 机器上使用 PowerShellGet 中的一些模块,但没有互联网连接。
我需要一个选项来下载 *.psm1 文件,然后我可以复制并使用它。
就像我们可以选择从 GitHub.
下载
是否有人遇到过类似问题并有任何解决方法?
通过互联网访问 PowerShell 5.0 更新您的计算机,并使用 Save-Module
从 PowerShellGet 保存模块。例如:
Find-Module psreadline | Save-Module -Path c:\users\frode\Desktop
这会将模块(例如 PSReadLine)保存到一个文件夹,您可以将该文件夹复制到您的其他计算机并像普通模块一样安装(参见 Installing a PowerShell Module)
在您的 PowerShell 3 计算机上安装 Package Management Module,然后使用 Save-Module ...
或者为您的内部客户设置ProGet somewhere "on the edge" of your network, and have it mirror the modules you want from the public 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
我有一台机器(v3,互联网,无管理员权限),我用它下载 WMF 5.0 并设置另一台机器(v5,无互联网,管理员权限)。现在,我想在 运行 v5 机器上使用 PowerShellGet 中的一些模块,但没有互联网连接。
我需要一个选项来下载 *.psm1 文件,然后我可以复制并使用它。 就像我们可以选择从 GitHub.
下载是否有人遇到过类似问题并有任何解决方法?
通过互联网访问 PowerShell 5.0 更新您的计算机,并使用 Save-Module
从 PowerShellGet 保存模块。例如:
Find-Module psreadline | Save-Module -Path c:\users\frode\Desktop
这会将模块(例如 PSReadLine)保存到一个文件夹,您可以将该文件夹复制到您的其他计算机并像普通模块一样安装(参见 Installing a PowerShell Module)
在您的 PowerShell 3 计算机上安装 Package Management Module,然后使用 Save-Module ...
或者为您的内部客户设置ProGet somewhere "on the edge" of your network, and have it mirror the modules you want from the public 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