我遇到了从另一个模块中的函数全局导入cmdlet的问题。
情况就是这样。假设我试图在dll中调用Test-Method
。
当我运行Import-Module <dll path>
时,情况正常,我可以毫无问题地致电Test-Method
。
然后我将命令放入函数中以简化使用。现在我有类似的东西:
function Import-Cmdlets
{
Import-Module "<dll path>" -Scope Global -Force
}
现在在Powershell中,我致电Import-Cmdlets
,然后我可以毫无问题地致电Test-Method
。
但是,当我将该函数放入psm1文件并在psm1文件上导入模块时,我再也找不到Test-Method
。
现在我有一个mymodule.psm1
文件,内容如下:
function Import-Cmdlets
{
Import-Module "<dll path>" -Scope Global -Force
}
然后在PowerShell中运行:
Import-Module mymodule.psm1 -Force
Import-Cmdlets
现在我再也找不到Test-Method
了。当我运行Get-Module
时,dll会显示,我可以从ExportedCommands中看到Test-Method
。但我无法访问它。
这仅适用于dll导入。我试图使用psm1文件来替换dll路径,但没有遇到这个问题。
这个问题有什么好处或解决方案?
答案 0 :(得分:1)
我遇到了同样的问题并添加了参数-Scope Global修复它
将您的行更改为Import-Module <path to your module> **-Scope Global**
答案 1 :(得分:0)
在执行Import-Module“script.psm1”时仍然没有在其他脚本中导入函数的原因 是因为您的“Import-Cmdlet”未导出。 导出函数,或任何其他模块成员是这样完成的:
Export-ModuleMember -Function "Import-Cmdlets"
现在您的Import-Cmdlet将可供使用。
答案 2 :(得分:0)
导入 Cmdlet dll 时遇到同样的问题。
使用
New-ModuleManifest "...ManifestName.psd1"
编辑 RootModule 条目以指定 Cmdlet dll。
然后导入此清单文件,所有 Cmdlet 将被导出(如果您在清单中列出了它们,则将导出一个子集)
在了解清单之前,我所做的另一种选择是创建一个 psm1 包装模块,该模块导入 cmdlet dll,然后使用 export-modulemember...清单更清晰,但无论哪种方式,您都必须创建一个附加文件