导入模块仅在从Get-Module

时间:2018-03-05 21:53:56

标签: powershell powershell-v5.0 import-module

我写了一个简单的PowerShell模块。我需要保留更多版本的模块。 版本的所有路径都添加到$env:PSModulePath我在将模块导入会话时遇到了奇怪的问题。

这失败了:

Import-Module Contoso.PowerShell -RequiredVersion "0.0.2"
Import-Module : The specified module 'Contoso.PowerShell' with version '0.0.2'
was not loaded because no valid module file was found in any module directory.
At line:1 char:1
+ Import-Module Contoso.PowerShell -RequiredVersion "0.0.2"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceUnavailable: (Contoso.PowerShell:String) [Import-Module], FileNotFoundException
    + FullyQualifiedErrorId : Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

现在奇怪的是 - 带有" 0.0.2"的模块。版本存在。我可以成功列出它(使用Get-Module -ListAvailable)。我甚至可以导入它并使用它,但唯一的方法是:

Get-Module Contoso.PowerShell -ListAvailable |
    ? { $_.Version -eq "0.0.2" } |
    Import-Module

一切都像魅力一样。问题是:为什么?我希望能够使用第一个简单的命令导入模块。

修改

以下是我存储模块版本的方法:

 Get-Module Contoso.PowerShell -ListAvailable
    Directory: C:\Program Files\WindowsPowerShell\Modules\Contoso.PowerShell\Contoso.PowerShell.0.0.1


ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Script     0.0.1      Contoso.PowerShell


    Directory: C:\Program Files\WindowsPowerShell\Modules\Contoso.PowerShell\Contoso.PowerShell.0.0.2


ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Script     0.0.2      Contoso.PowerShell

很抱歉混淆 - 我没有PSModulePath环境变量中每个版本的路径。

1 个答案:

答案 0 :(得分:3)

Import-Module的工作原因是因为它使用了不同的参数集;一个接受一个或多个[PSModuleInfo]对象的对象,这是Get-Module返回的对象。

可能,它使用Get-Module已经完成的工作来确定要加载的文件。

接下来的问题是“为什么不Import-ModuleGet-Module的方式查找版本?”答案就是“我不知道。”

虽然它们在任何情况下都应该是一致的,但是可能导致麻烦的是你的直接结构。你是如何存储多个版本的?

在我看来,您的模块路径不正确。

你的结构应该是:

Contoso.PowerShell\0.0.2
Contoso.PowerShell\0.0.3

模块文件直接在版本号文件夹中,并且不应该在其中另外包含名称。

您可以使用Install-Module从存储库安装一个并查看它如何处理它来查看此结构。