如何从子模块中公开模块的功能和别名
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终端,函数名称或别名调用此函数?
我得到(readme
或Read-Me
):
自述文件:术语“自述文件”不被视为cmdlet, 函数,脚本文件或可运行程序的名称。检查名称的拼写, 或者是否包含路径,请验证路径是否正确,然后重试。 在第1行:char:1 + co + ~~ + CategoryInfo:ObjectNotFound:(co:String)[],CommandNotFoundException + FullyQualifiedErrorId:CommandNotFoundException
注意:它适用于中的功能module_one.psm1
。
假设你打电话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] 删除。
我来说两句