如何从二进制模块导出PowerShell变量?

问题描述 投票:0回答:1

您可以使用

Export-ModuleMember
cmdlet 从脚本模块轻松做到这一点,但如何从二进制模块(例如 C#)做到这一点?

c# powershell
1个回答
0
投票

使用二进制模块(例如用 C# 编写的模块)时,通常使用与脚本模块不同的机制导出函数和 cmdlet。在 C# 中,您可以将 cmdlet 或函数定义为模块程序集中的公共类和方法,然后使用属性或配置文件将它们注册为导出。

使用系统; 使用系统.管理.自动化;

命名空间 MyModule { [Cmdlet(VerbsCommon.Get,“你好”)] 公共类 GetHelloCommand :Cmdlet { 受保护的重写 void ProcessRecord() { WriteObject("你好,世界!"); } } }

我们定义了一个名为 GetHelloCommand 的 cmdlet 类,它继承自 Cmdlet。 我们应用 [Cmdlet] 属性来指定 cmdlet (Get-Hello) 的动词和名词。 我们重写 ProcessRecord 方法来定义 cmdlet 的逻辑。在本例中,它只是写“Hello, world!”到输出。 要将此代码编译为二进制模块程序集,您可以使用 C# 编译器(例如 csc.exe),然后使用 Import-Module 将生成的程序集加载到 PowerShell 中。

关于您遇到的错误(Export-ModuleMember:只能从模块内部调用 Export-ModuleMember cmdlet),它似乎是因为您尝试在 PowerShell 脚本文件 (.ps1) 中使用 Export-ModuleMember 而出现的。此 cmdlet 通常在脚本模块(.psm1 文件)中使用以导出函数和 cmdlet。

由于您正在使用二进制模块,因此您将不会使用 Export-ModuleMember。相反,您将使用 C# 属性或配置文件定义导出的 cmdlet,如上面的 C# 示例所示。然后,当您将模块导入 PowerShell 时,导出的 cmdlet 将自动可供使用。

© www.soinside.com 2019 - 2024. All rights reserved.