【问题标题】:PowerShell Add-PSSnapIn from an advanced (cmdlet) function来自高级 (cmdlet) 函数的 PowerShell Add-PSSnapIn
【发布时间】:2013-04-03 01:19:33
【问题描述】:

我想创建一个带有 cmdlet 函数的高级模块,该函数执行一些逻辑并添加一些 pssnapin。这是代码:

function Add-DefaultSnapIns
{
    [CmdletBinding()]
    param()
    begin {}
    process {
        # ...
        Add-PsSnapIn SnapInName
    }
    end {}
}

export-module -function Add-DefaultSnapIns

如果我从任何点(例如,powershell 提示符)调用该函数,则操作成功,但管理单元在函数范围之外不可用。管理单元显示为已注册,但其功能均未导出到全局范围。我该如何解决?

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:

    这个想法是模块是自包含的,除了它们导出的 cmdlet、函数和别名之外,不会将太多的“东西”溢出到全局会话空间中。最好在模块初始化过程中自己添加管理单元,然后通过 Export-ModuleMember 导出这些管理单元的 cmdlet。

    【讨论】:

    • 谢谢。我在哪里可以获得有关初始化的参考?我将代码放入脚本的开头部分,然后是 export-modulemember,但它还不起作用。
    • 有几种方法可以做到这一点。查看有关 New-ModuleManifest 的文档(get-help new-modulemanifest -full)。如果您使用清单文件,则感兴趣的两个属性是 ModuleToProcess 和 NestedModules。如果您不使用清单,请在处理 PSM1 文件的早期执行 Add-PSSnapin,然后 Export-ModuleMember -Cmdlet 来自该管理单元的适当 cmdlet。
    猜你喜欢
    • 2015-07-15
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2016-12-12
    相关资源
    最近更新 更多