如何从另一个模块中的函数全局导入Powershell cmdlet?

时间:2016-05-24 23:11:48

标签: powershell

我遇到了从另一个模块中的函数全局导入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路径,但没有遇到这个问题。

这个问题有什么好处或解决方案?

3 个答案:

答案 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...清单更清晰,但无论哪种方式,您都必须创建一个附加文件