【发布时间】:2020-12-04 08:36:04
【问题描述】:
虽然已经有很多关于 PowerShell 模块导入的问题和博客,但我没有找到任何可以回答我的问题。
我正在尝试导入分组在子文件夹中的模块,而不将所有这些子文件夹添加到$env:PSModulePath。文件夹结构示例:
...\WindowsPowerShell\Modules\
...\WindowsPowerShell\Modules\Avengers
...\WindowsPowerShell\Modules\Avengers\ModuleHulk\ModuleHulk.psd1
...\WindowsPowerShell\Modules\Avengers\ModuleThor\ModuleThor.psd1
...\WindowsPowerShell\Modules\X-Men
...\WindowsPowerShell\Modules\X-Men\ModuleProfX\ModuleProfX.psd1
...\WindowsPowerShell\Modules\X-Men\ModuleMagneto\ModuleMagneto.psd1
...\WindowsPowerShell\Modules\FantasticFour
...\WindowsPowerShell\Modules\FantasticFour\ModuleMisterFantastic\ModuleMisterFantastic.psd1
...\WindowsPowerShell\Modules\FantasticFour\ModuleInvisibleWoman\ModuleInvisibleWoman.psd1
根据 Microsoft Docs,模块 .psd1 文件名必须与模块文件夹名称相同。以上满足。模块必须在$env:PSModulePath 的位置内,都很好。
很遗憾,PowerShell 无法导入这些模块:
PS> Import-Module ModuleHulk
Import-Module : The specified module 'ModuleHulk' was not loaded because no valid module file was found in any module directory.
At line:1 char:1
+ Import-Module ModuleHulk
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ResourceUnavailable: (ModuleHulk:String) [Import-Module], FileNotFoundException
+ FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand
PS>
但是,最近我发现还可以使用相当新的 using module 语句(从 PowerShell 版本 5 开始)导入模块。为此,我可以在脚本的开头添加以下代码,或者甚至在控制台中执行:
#Requires -Version 5
using module ModuleHulk
PS> using module ModuleHulk
PS>
没问题,一切都很好,所以模块本身很好,可以照常导入。但是,这似乎是一个 hacky 解决方案,它至少需要 PowerShell 5。现在的问题是:
有没有办法使用通常的Import-Module cmdlet 来实现这一点,而无需将所有子文件夹添加到$env:PSModulePath?
【问题讨论】:
-
是的 - 不要将它们放在子文件夹中,将它们放在根目录中
-
是的,这可能是一种可行的方法,但是,我将这些模块放在 Git 存储库中,如果我克隆它,它将(并且必须)创建一个子文件夹(例如
MarvelGit)。你现在可以说你可以直接将它克隆到文件夹Modules,但是如果你想克隆另一个 Git 存储库怎么办? -
Import-Module (($Env:PSModulePath -split ';') | gci -R -Fi ModuleHulk -At Directory).FullName?
标签: powershell import