使用PowerShell 2.0
根据我在网上看到的内容,用户创建的powershell模块必须各自驻留在它们自己的目录中。例如,如果我创建一个名为MyModule.psm1
的模块,它必须位于名为MyModule
的文件夹中,并驻留在$env:PSModulePath
中列出的任何目录中。
如果我有一个项目的模块,我必须为每个模块创建一个单独的文件夹,这似乎很愚蠢。这真的是否必要?为什么?有什么优雅的方式吗?
答案 0 :(得分:4)
如果您想拥有.psm1文件,可以通过提供文件本身的路径而不仅仅是模块的名称来导入它。
例如:
import-module c:\mymodules\folder\themodule.psm1
使用此技术,您可以在同一文件夹中拥有任意数量的模块。我不知道我会推荐这个,但确实有用。
答案 1 :(得分:1)
PowerShell模块可以包含多个文件,例如提供multi-language help或splitting the functionality into several files。是的,这是必要的。
答案 2 :(得分:1)
这不理想,但您可以使用MSDN创建联结(Sysinternals junction.exe)。这将允许您将所有实际数据存储在一个文件夹中,但使用不同的路径引用它。
[MSDN] Hard Links and Junctions
假设您的.psm1
目录中名为Modules
的文件夹中有三(3)个独立$env:UserProfile\Documents\WindowsPowerShell\Modules
模块文件。
您可以使用多个junction.exe
命令创建指向文件系统上“真实”Modules
文件夹的联结(链接)。
$ModulePath = '{0}\Modules' -f (Split-Path -Path $Profile.CurrentUserCurrentHost -Parent);
junction.exe $ModulePath\Foo $ModulePath\Modules;
junction.exe $ModulePath\Bar $ModulePath\Modules;
junction.exe $ModulePath\Trevor $ModulePath\Modules;
以下是导航到其中一个交叉点时的样子,例如Foo
。
就Windows PowerShell而言,您位于Foo
目录中,该目录与Foo.psm1
文件名匹配。它应该忽略该文件夹中的其余文件。
现在,您可以运行Get-Module -ListAvailable
,您应该会看到用户模块目录中的模块列表。