如何 运行 在 c# powershell 模块中启动代码

How to run startup code in a c# powershell module

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

环顾四周 google 并在命名空间中似乎没有正确的方法。

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

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

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

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

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

using System.Management.Automation;

namespace MyModule
{
    public class MyModuleAssemblyInitializer : IModuleAssemblyInitializer
    {
        public void OnImport()
        {
            // Initialization code here.
        }
    }
}

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