在封闭网络中安装powershell模块

在封闭网络中安装powershell模块,powershell,Powershell,我有一个简单的问题,但却找不到答案 我使用的是powershell 5,我在封闭环境中工作,无法连接到internet,我想在我的机器上手动安装模块,基本上是可以下载的任何模块,例如posh ssh 能做到吗?假设将模块保存在此处并安装?在这种情况下,让我给出两种方法 您可以从图库中下载所需的所有模块 并将其保存在某个系统的共享框中。那就 从该共享文件夹安装模块。因此,它将充当一个 为您提供单独的存储库 您可以创建一个内部FTP,并将其保存在那里。然后 使用powershell,您可以轻松下载所

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

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


能做到吗?假设将模块保存在此处并安装?

在这种情况下,让我给出两种方法

  • 您可以从图库中下载所需的所有模块 并将其保存在某个系统的共享框中。那就 从该共享文件夹安装模块。因此,它将充当一个 为您提供单独的存储库
  • 您可以创建一个内部FTP,并将其保存在那里。然后 使用powershell,您可以轻松下载所有这些文件,而且会非常方便 也可在封闭网络中访问
    希望能有所帮助。

    当@jyao询问一些示例时,以下是我的示例/示例代码回答:

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

    步骤:

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

    • 登录到联机计算机(并且在该计算机中下载未被防火墙阻止。)
    • 保存所需模块(在本地文件夹中),例如:
    Save模块-名称为“SQLServer”-路径C:\SavedPSModules

    • 现在,将模块复制到脱机计算机中(在PowerShell查找模块的其中一个模块文件夹中),例如:
    复制项目“C:\SavedPSModules\SQLServer”-目标“C:\User\{usr\u name}\Documents\WindowsPowerShell\Modules”-递归-到会话$session#假设目标计算机位于可访问域/网络内,您需要为其创建会话(此处存储在$Session变量中)

    • 最后安装+导入模块:
    注意事项:

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

    • 如果“模块”文件夹不存在,您可能需要创建它,例如:
    Mkdir C:\Users\{user\u name}\Documents\WindowsPowerShell\Modules

    • 请记住:查找模块cmdlet(及其同级cmdlet,如Save Module&Install Module)仅在您的服务器中启用下载(即,您的计算机连接到internet且下载未被防火墙阻止)的情况下才能工作

    HTH

    它的字面意思是
    保存模块
    。如果您能给出一个示例,那就更好了,因为目前我们使用install module来安装PS模块,因此如果您在共享文件夹中有一个模块,我如何使用install module来访问该共享文件夹?您需要在
    install module
    命令中给出
    .psm1
    (模块)文件的完整路径。此外,您可以使用
    Save Module
    在本地保存模块。参考链接。。。
    #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;
        }
    }