如何将模块安装到自定义目录中?

mit*_*mit 8 powershell powershell-module powershellget

目前我们正在使用下面的命令安装一些模块,但它在C:\Program Files\WindowsPowerShell\Modules.

Install-Module -Name XXX -RequiredVersion XXX -Repository XXX -Scope AllUsers
Run Code Online (Sandbox Code Playgroud)

我们的要求是在E:\Modules文件夹中安装这个模块。为此,我更新了PSModulePath环境变量,如下所示。( https://msdn.microsoft.com/en-us/library/dd878350(v=vs.85).aspx )

$p = [Environment]::GetEnvironmentVariable("PSModulePath")
$p += ";E:\Modules"
[Environment]::SetEnvironmentVariable("PSModulePath",$p)
Run Code Online (Sandbox Code Playgroud)

但它仍然安装在C:\Program Files\WindowsPowerShell\Modules.

如何更新PSModulePathE:\Modules安装模块之前?

Har*_*son 10

您可以使用该Save-Module命令手动下载模块 zip 。

Find-Module -Name 'XXX' -Repository 'PSGallery' | Save-Module -Path 'E:\Modules'
Run Code Online (Sandbox Code Playgroud)

从这里您可以使用完全限定名称导入模块,如下所示:

Import-Module -FullyQualifiedName 'E:\Modules\XXX'
Run Code Online (Sandbox Code Playgroud)

或者PSModulePath像以前一样将目标文件夹添加到。

$modulePath = [Environment]::GetEnvironmentVariable('PSModulePath')
$modulePath += ';E:\Modules'
[Environment]::SetEnvironmentVariable('PSModulePath', $modulePath)
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用Get-Modulecmdlet检查模块是否已导入。


如果您正在使用该Import-Module命令,它可能会有点痛苦,尤其是当您有很多模块时。因此,您可以将这种方法包装在这样的函数中:

function Install-ModuleToDirectory {
    [CmdletBinding()]
    [OutputType('System.Management.Automation.PSModuleInfo')]
    param(
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        $Name,

        [Parameter(Mandatory = $true)]
        [ValidateScript({ Test-Path $_ })]
        [ValidateNotNullOrEmpty()]
        $Destination
    )

    # Is the module already installed?
    if (-not (Test-Path (Join-Path $Destination $Name))) {
        # Install the module to the custom destination.
        Find-Module -Name $Name -Repository 'PSGallery' | Save-Module -Path $Destination
    }

    # Import the module from the custom directory.
    Import-Module -FullyQualifiedName (Join-Path $Destination $Name)

    return (Get-Module)
}

Install-ModuleToDirectory -Name 'XXX' -Destination 'E:\Modules'
Run Code Online (Sandbox Code Playgroud)


Pra*_*n V -1

$env:PSModulePath 是一个环境变量,用于搜索模块Import-Module,以及从 PS V3 开始自动加载模块。

如果您查看 的帮助文件Install-Module,我看不到提供模块安装路径的选项。

因此,作为解决方法,您可以根据模块名称(每个模块的文件夹名称相同)将作业复制到自定义路径。

问候,

奎巴顺