在封闭网络中安装 powershell 模块

Woj*_*icz 2 powershell

我有一个简单的问题,但我找不到任何答案。

我正在使用 powershell 5 并且我在封闭环境中工作,无法连接到互联网,我想在我的机器上手动安装模块,基本上是任何可以下载的模块,例如 posh-ssh。

可以做到吗?让我们说在此处保存模块并安装?

Edd*_*mar 6

由于@jyao 要求提供一些示例,以下是我的示例/示例代码答案:

在封闭网络(或离线计算机)中安装/使 PowerShell 模块可用的最简单方法是首先使用在线计算机下载所需的模块,然后将这些模块保存/复制到可从以下位置访问的位置封闭网络内。

脚步:

注意:我在以下示例中使用“ SQLServer ”模块:

  • 登录到在线的计算机(并且在其中下载未被防火墙阻止。)
  • 保存所需的模块(在本地文件夹中),例如:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

笔记:

  • $ ENV:PSModulePath变量保存在那里的PowerShell中查找已安装的模块,如果你想保持你的模块在一个共享的网络文件夹,只需它的位置追加到该变量的位置。要列出当前设置的模块文件夹,请使用以下命令:

$env:PSModulePath -split ';'

  • 如果“模块”文件夹不存在,您可能需要创建它,例如:

Mkdir C:\Users\{user_name}\Documents\WindowsPowerShell\Modules;

  • 请记住:Find-Module cmdlet(及其同级 cmdlet,例如Save-ModuleInstall-Module)仅在您的服务器中启用下载时才有效(即您的计算机已连接到 Internet 并且下载未被防火墙阻止.)

HTH