【问题标题】:Scripted cmdlets and compiled cmdlets in a single module?在单个模块中编写脚本 cmdlet 和编译 cmdlet?
【发布时间】:2014-03-26 00:51:46
【问题描述】:

我已经编写了编译模块(即用 C# 编写的 PS 模块),其中一个将 DLL 指定为清单中的 RootModule,并且我已经编写了脚本模块(用 PowerShell 编写的 PS 模块),其中将 .psm1 文件指定为 RootModule,但是否可以在 single 模块中包含 both 类型的 cmdlet ?

作为一项临时措施(在我开发一些新代码时),我将我的 DLL 指定为 RootModule,并将我的脚本化 cmdlet 列在 ScriptsToProcess 中。这使得所有 cmdlet 都可以访问,但不能正确访问,因为 Get-Command -module MyModule 只列出了来自 RootModule 的那些 cmdlet,正如人们所期望的那样。

【问题讨论】:

    标签: powershell powershell-cmdlet


    【解决方案1】:

    当然,我们在 PowerShell 社区扩展上这样做:

    RootModule         = 'Pscx.psm1'
    NestedModules      = 'Pscx.dll'    
    

    【讨论】:

    • 这是有道理的...... Keith 有一个问题:是否有理由更喜欢将 .psm1 作为根,而将 .dll 作为嵌套?
    • 除非您想在导入时进行一些处理,否则我认为这并不重要。我们在导入时在 pscx.psm1 中进行一些处理。我们检查配置文件以确定用户想要加载哪些嵌套模块,然后对这些 psm1 文件执行导入模块。
    • 实际上我发现它确实对我的用例很重要:需要加载一些编译的 cmdlet(来自 dll)和一些脚本化的 cmdlet(来自 psm1)。如果我将RootModule 设置为dll 并将NestedModules 设置为psm1,那么gcm -module MyModule 将列出所有 cmdlet、一些指定的Function 和一些指定的CommandType 的Cmdlet,如预期的那样。如果我只是交换两个属性分配并重新加载模块,则 加载脚本化的 cmdlet (Function CommandType)。您在 PSCX 清单中没有这种情况,因此您不会看到该问题。不过,感谢您让我继续前进!
    • 我认为当在 NestedModules 中指定 DLL 时,您可能必须通过清单的 CmdletsToExport 字段显式导出已编译的 cmdlet。
    • 好主意,Keith...刚刚尝试过,但是,不,它没有帮助。
    猜你喜欢
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 2020-06-27
    • 2015-06-20
    • 1970-01-01
    • 2014-02-28
    相关资源
    最近更新 更多