【问题标题】:How to run startup code in a c# powershell module如何在 c# powershell 模块中运行启动代码
【发布时间】:2019-01-08 12:25:06
【问题描述】:

我在 c# 中创建了一个简单的 PowerShell 模块,它实现了一些 cmdlet,我希望能够在导入模块时运行代码。

在 google 和命名空间中环顾四周,似乎没有合适的方法来做到这一点。

到目前为止,我想出的解决方法是创建一个 psm1 或 ps1 文件,该文件在加载模块并执行启动操作时运行(宁愿不使用它,因为脚本在某些将运行的环境中被阻止开)。

其他选项是我已经能够通过创建一个有效的 CmdletProvider 来做到这一点,但是在使用 new-psdrive 时它会在提供程序列表中创建一个垃圾条目。

[CmdletProvider("junkprovider", ProviderCapabilities.None)]
public class Startup : CmdletProvider
{
    Public Startup()
    {
      // Startup code here
    }
}

有没有办法正确地做到这一点,或者我将不得不使用黑客?

【问题讨论】:

    标签: c# powershell cmdlets


    【解决方案1】:

    你可以实现System.Management.Automation.IModuleAssemblyInitializer接口。

    using System.Management.Automation;
    
    namespace MyModule
    {
        public class MyModuleAssemblyInitializer : IModuleAssemblyInitializer
        {
            public void OnImport()
            {
                // Initialization code here.
            }
        }
    }
    

    当程序集作为模块导入时,Import-Module 命令将调用OnImport

    【讨论】:

    • 完美,正是我所追求的。谢谢你
    猜你喜欢
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 2014-09-16
    • 1970-01-01
    • 2011-01-12
    • 2023-02-06
    • 1970-01-01
    相关资源
    最近更新 更多