首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将.net模块加载到PowerShell中

将.net模块加载到PowerShell中
EN

Stack Overflow用户
提问于 2016-07-11 19:35:00
回答 1查看 1.4K关注 0票数 0

我有一个.NET程序集,该程序集将由Powershell会话使用以下方法导入:

代码语言:javascript
复制
Import-Module MyAssemblyFirst.dll

我需要的是自动加载另一个自定义程序集(MyAssemblySecond.dll),我知道何时导入MyAssemblyFirst.dll

我要寻找的场景是:

代码语言:javascript
复制
Import-Module MyAssemblyFirst.dll
Import-Module MyAssemblySecond.dll

但我宁愿只有一个Import-Module电话:

代码语言:javascript
复制
Import-Module MyAssemblyFirst.dll

...and以某种方式触发第二个程序集的加载。

这两个程序集不相互引用,但我是两个程序集的所有者。我只是试图通过只导入一个程序集来简化多个程序集的导入。

因此,在一个更广泛的例子中,我希望简化如下的PS脚本:

代码语言:javascript
复制
Import-Module MyAssemblyFirst.dll
Import-Module MyAssemblySecond.dll
Import-Module MyAssemblyThird.dll

..。

代码语言:javascript
复制
Import-Module MyAssemblyNth.dll

单行:

代码语言:javascript
复制
Import-Module MyAssemblyFirst.dll

编辑:,其目的是基于位于MyAssemblyFirst.dll中的某个逻辑,我可能希望自动导入一些其他程序集,这些程序集公开了一些新的特定PS命令。

EN

回答 1

Stack Overflow用户

发布于 2016-07-11 21:23:59

您可以实现IModuleAssemblyInitializer接口来提供模块初始化代码:

代码语言:javascript
复制
Add-Type -TypeDefinition @‘
    using System;
    using System.Management.Automation;
    [Cmdlet(VerbsLifecycle.Invoke, "Command1")]
    public class Command1 : Cmdlet {
        protected override void ProcessRecord() {
            WriteObject("Command 1");
        }
    }
    public class ModuleInitializer : IModuleAssemblyInitializer {
        public void OnImport() {
            using(PowerShell ps = PowerShell.Create(RunspaceMode.CurrentRunspace)) {
                ps.AddCommand("Write-Host").AddArgument("Before submodule import").AddStatement().
                   AddCommand("Import-Module").AddArgument(".\\Assembly2.dll").AddStatement().
                   AddCommand("Write-Host").AddArgument("After submodule import").Invoke();
            }
        }
    }
’@ -OutputAssembly .\Assembly1.dll

Add-Type -TypeDefinition @‘
    using System;
    using System.Management.Automation;
    [Cmdlet(VerbsLifecycle.Invoke, "Command2")]
    public class Command2 : Cmdlet {
        protected override void ProcessRecord() {
            WriteObject("Command 2");
        }
    }
    public class ModuleInitializer : IModuleAssemblyInitializer {
        public void OnImport() {
            using(PowerShell ps = PowerShell.Create(RunspaceMode.CurrentRunspace)) {
                ps.AddCommand("Write-Host").AddArgument("Importing submodule").Invoke();
            }
        }
    }
’@ -OutputAssembly .\Assembly2.dll

Write-Host 'Before module import'
Import-Module .\Assembly1.dll
Write-Host 'After module import'

Invoke-Command2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38314803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档