我有一个简单的问题,但我找不到任何答案。
我正在使用 powershell 5,我在封闭环境中工作,无法连接到互联网,我想在我的机器上手动安装模块,基本上是任何可下载的模块,例如 posh-ssh。
能做到吗?可以说在这里保存模块并安装吗?
由于 @jyao 要求提供一些示例,这里是我的示例/示例代码的答案:
在封闭网络(或离线计算机)中安装/使 PowerShell 模块可用的最简单方法是使用在线计算机首先下载所需的模块,然后将这些模块保存/复制到可从以下位置访问的位置:封闭网络内。
STEPS:
注意:我正在使用“SQL服务器以下示例中的“模块:
- 登录到在线计算机(并且下载未被防火墙阻止)。
- 保存所需的模块(在本地文件夹中),例如:
Save-Module -Name "SQLServer" -Path C:\SavedPSModules
- 现在,将模块复制到离线计算机中(在 PowerShell 查找模块的模块文件夹之一中),例如:
Copy-Item "C:\SavedPSModules\SQLServer" -Destination "C:\User\{usr_name}\Documents\WindowsPowerShell\Modules" -Recurse -ToSession $session;
#假设目标计算机位于可访问的域/网络内,您需要为其创建一个会话(此处存储在 $session 变量中)。
#Check if module is installed & imported, do it if not:
$module = "SQLServer"
if((Get-Module -Name $module) -eq $null) {
#Check if module is installed:
if (Get-Module -ListAvailable -Name $module) {
Write-Output "$module module is already installed";
#Check if module is imported:
if((Get-Module -Name $module) -ne $null) {
Write-Output " and is already imported (i.e. its cmdlets are ready/available to be used.)";
Write-Output "Installation Path: `n`t" (Get-Module -Name $module).Path;
} else {
Write-Output ", however, it is NOT imported yet - importing it now";
Import-Module $module;
}
}else{
Write-Output "$module module is NOT installed - installing it now"
try {
Install-Module -Name $module -AllowClobber -Confirm:$False -Force #suppressed prompt.
}
catch [Exception] {
$_.message
exit
}
Write-Output "$module installed successfully - importing it now";
Import-Module $module;
}
}
Notes:
- The $env:PSModulePath变量保存 PowerShell 查找已安装模块的位置,如果要将模块保留在共享网络文件夹中,只需将其位置附加到该变量即可。要列出当前设置的模块文件夹,请使用以下命令:
$env:PSModulePath -split ';'
- 如果“Modules”文件夹不存在,您可能需要创建它,例如:
Mkdir C:\Users\{user_name}\Documents\WindowsPowerShell\Modules;
- 记住:查找模块cmdlet(及其同级 cmdlet,例如保存模块 & 安装模块)仅在您的服务器启用下载时才有效(即您的计算机已连接到互联网并且下载未被防火墙阻止。)
HTH
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)