如何 运行 在 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
。
我在 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
。