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

Wil*_*Wil 1 c# powershell cmdlets

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

从在 google 和命名空间中环顾四周,似乎没有这样做的正确方法。

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

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

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

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

Pat*_*cke 5

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

using System.Management.Automation;

namespace MyModule
{
    public class MyModuleAssemblyInitializer : IModuleAssemblyInitializer
    {
        public void OnImport()
        {
            // Initialization code here.
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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