如何从模块公开子模块功能

克里斯·G

如何从子模块中公开模块的功能和别名

profile.ps1

Import-Module module_one.psm1

module_one.psm1

Import-Module module_two.psm1:

module_two.psm1

Set-Alias readme -Value "Read-Me"
function Read-Me() {
    Write-Host "Hello..."
}
Export-ModuleMember -Function Read-Me, readme

我希望能够从pwsh终端,函数名称或别名调用此函数?

我得到(readmeRead-Me):

自述文件:术语“自述文件”不被视为cmdlet,
函数,脚本文件或可运行程序的名称。检查名称的拼写,
或者是否包含路径,请验证路径是否正确,然后重试。
在第1行:char:1 
+ co 
+ ~~ 
    + CategoryInfo:ObjectNotFound:(co:String)[],CommandNotFoundException 
    + FullyQualifiedErrorId:CommandNotFoundException

注意:它适用于中的功能module_one.psm1

mklement0

假设你打电话Import-Module module_one.psm1,后来readme/Read-Me在同一范围内结构域(外线模块或从相同的(其他)模块),你的代码的工作原理:

间接导入的模块的导出的元素也将(也)导入到调用者的作用域的顶级作用域中。

您的问题是您试图将别名 导出readme函数您需要改为使用单独的
-Alias参数

Export-ModuleMember -Function Read-Me -Alias readme # Note the -Alias parameter

还要注意的是,在没有一个的Export-ModuleMember调用是所有(顶级)函数和别名(但不变量是出口)默认情况下,所以你的具体情况省略简单地调用也将有固定的问题。

不过,总的来说,最好是明确说明要导出的元素,最好是通过完整的模块完成,该模块不仅是单个*.psm1文件,而且是为该模块命名的整个目录,并在*.psm1其中包含文件。关联模块清单,这是一个*.psd1描述模块文件,尤其是在其导出方面。
如果将这样的模块放置在中列出的目录之一中,则甚至可以在导入模块之前通过称为自动加载的功能$env:PSModulePath来发现其导出的命令(例如,带有Get-Command或制表符补全)(请参见about_Modules)


请注意,这Import-Module -Global是很少需要的,通常应避免,因为它也使模块的导出元素也可用于所有已加载的模块,这可能会产生意想不到的副作用(模块应明确声明其依赖项)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章