PowerShell:Import-Module,但没有“ExportedCommands”可用

时间:2015-10-12 13:24:37

标签: powershell cmdlet import-module

当我使用

Import-Module -Name <path_to_local_dll> -Verbose

不会导出DLL文件中包含的cmdlet。

因此,当我键入Get-Module时,列出了导入的模块,但没有任何ExportedCommands。为什么呢?

ModuleType Name                      ExportedCommands
---------- ----                      ----------------
Binary     MyModule

在具有相同软件(PowerShell,.NET Framework,...)的第二台PC上,相同的导入DLL文件正常工作。我得到了ExportedCommands。

这种行为取决于什么?

不幸的是,Import-Module cmdlet没有表明它无法导入cmdlet。有没有办法得到它失败的原因?

5 个答案:

答案 0 :(得分:5)

两件事:

  1. 确保您使用的是模块清单文件(.psd1文件)。可以在 How to Write a Module Manifest

  2. 中找到更多信息
  3. 最重要的是,编辑清单文件并确保它引用您的根模块,如下所示:

    RootModule =&#39;您模块的名称&#39;

  4. 我刚刚完成了几个小时的战斗,我无法弄清楚我的其他模块中缺少了什么。这肯定是诀窍!

答案 1 :(得分:1)

可能是psd1文件(模块清单)不包含命令。

This page has a tutorial关于如何创建模块清单。

答案 2 :(得分:0)

从PowerShell模块中明确导出函数对我有用:

function New-CmdLetNameHere
{
    ...
}
Export-ModuleMember -Function New-CmdLetNameHere

答案 3 :(得分:0)

另一个要求:确保cmdlet类是 public 。对于example,我的.cs文件最初有:

[Cmdlet(VerbsCommon.Get, "Proc")]
class GetProcCommand : Cmdlet
{ ...

即使添加了设置了RootModule的清单文件之后,Get-Module仍然没有显示ExportedCommands之后的Import-Module。为了解决这个问题,我只是将该类标记为public并重建了我的.dll程序集:

[Cmdlet(VerbsCommon.Get, "Proc")]
public class GetProcCommand : Cmdlet
{ ...

我在使用ildasm检查.dll时发现了这一点-我注意到我的某些类是公共的,但我的cmdlet类是私有的。

答案 4 :(得分:-2)

这对我有用:

  1. 以管理员权限运行PowerShell。

  2. 现在运行命令Set-ExecutionPolicy Restricted

  3. 现在试试这个:

    Import-Module -Name YourModuleName
    
    Get-Command -Module YourModuleName