【问题标题】:How do I import a Powershell cmdlet globally from a function in another module?如何从另一个模块中的函数全局导入 Powershell cmdlet?
【发布时间】:2016-05-24 23:11:47
【问题描述】:

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

对于这个问题有什么好的解决方法或解决方案?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    我遇到了同样的问题,添加参数 -Scope Global 修复了它

    将您的线路改为Import-Module &lt;path to your module&gt; **-Scope Global**

    【讨论】:

      【解决方案2】:

      执行 Import-Module "script.psm1" 时仍然没有在其他脚本中导入函数的原因 是因为您的“Import-Cmdlets”没有被导出。 导出函数,或者任何其他模块成员都是这样完成的:

      Export-ModuleMember -Function "Import-Cmdlets"
      

      现在您的 Import-Cmdlet 将可供使用。

      【讨论】:

        【解决方案3】:

        在导入 Cmdlet dll 时遇到同样的问题。

        使用

        New-ModuleManifest "...ManifestName.psd1"
        

        编辑 RootModule 条目以指定 Cmdlet dll。

        然后导入此清单文件,所有 Cmdlet 将被导出(或者如果您在清单中列出它们,则为子集)

        我在了解清单之前所做的替代方法是创建一个 psm1 包装模块,该模块导入 cmdlet dll,然后使用 export-modulemember...清单更干净,但无论哪种方式,您都必须创建一个附加文件

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-04-23
          • 2011-12-20
          • 1970-01-01
          • 1970-01-01
          • 2013-04-02
          • 2016-12-15
          相关资源
          最近更新 更多