【问题标题】:Install powershell module in closed network在封闭网络中安装 powershell 模块
【发布时间】:2017-04-28 13:46:24
【问题描述】:

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

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

可以吗?让我们说在这里保存模块并安装?

【问题讨论】:

标签: powershell


【解决方案1】:

正如@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;
    }
}

注意事项:

  • $env:PSModulePath 变量保存 PowerShell 查找已安装模块的位置,如果要将模块保存在共享网络文件夹中,只需附加其这个变量的位置。要列出当前设置的模块文件夹,请使用以下命令:

$env:PSModulePath -split ';'

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

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

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

HTH

【讨论】:

    【解决方案2】:

    让我在这种情况下为您提供两种方法。

    1. 您可以从库中下载所需的所有模块 并将其保存在您系统之一的某个共享框中。然后就 从该共享文件夹安装模块。所以它将作为一个 为您提供单独的存储库。
    2. 您可以创建一个内部 FTP 并将其保存在那里。然后 使用powershell,您可以轻松下载所有这些,它将是 也可以在封闭的网络中访问。

    希望对你有帮助。

    【讨论】:

    • 如果你能举个例子就更好了,因为目前我们使用 install-module 来安装一个 PS 模块,所以如果你在共享文件夹中有一个模块,我该如何使用 install-module访问该共享文件夹?
    • 你需要在Install-Module命令中给出.psm1(module)文件的完整路径。此外,您可以使用Save-Module 将模块保存在本地。参考THIS链接...
    猜你喜欢
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 2021-06-02
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多