什么是包装c#类以供powershell脚本使用的最佳方法

时间:2009-07-26 23:24:39

标签: c# powershell powershell-v2.0

我有一个执行powershell脚本的引擎,当它们执行时,需要 将一些xml反馈给调用者。该引擎仅将i / o作为idmef xml消息。因此脚本需要返回类似格式的xml消息。我有一个类为我做格式化,它希望脚本编写者使用它。

所以问题是我想包装一个c#类以使它能够被powershell使用。

我看到了一些你可以使用方括号mob引用c#类的东西,例如

如何使c#可以像这样使用。我认为它需要被制作成类lib并以某种方式加载到powershell运行时但是如何。此外,当我从c#运行powershell时,如何将其添加到环境中。

任何帮助将不胜感激。 鲍勃。

4 个答案:

答案 0 :(得分:3)

如果包含类中的程序集(exe或dll),PowerShell可以通过[System.Reflection.Assembly]::LoadFile("PathToYourAssembly")加载它 或在V2

Add-Type -Path "PathToYourAsembly"

如果您要在应用程序中创建一个运行空间并希望使程序集可用,则可以使用RunspaceConfiguration来执行此操作。

RunspaceConfiguration rsConfig = RunspaceConfiguration.Create();
AssemblyConfigurationEntry myAssembly = new AssemblyConfigurationEntry("strong name for my assembly", "optional path to my assembly");
rsConfig.Assemblies.Append(myAssembly);
Runspace myRunSpace = RunspaceFactory.CreateRunspace(rsConfig);
myRunSpace.Open();

答案 1 :(得分:2)

我认为没有必要。您可以从PowerShell访问几乎整个.NET Framework。我敢肯定他们没有创造任何包装来做它。

答案 2 :(得分:1)

至少在V1中处理PowerShell中的接口是非常困难的,所以请在课堂上避免这些。在PowerShell中,只需要一个简单的[reflection.assembly] :: Load或LoadFile。

答案 3 :(得分:0)

我会在C#中编写一个Cmdlet,它接受一堆参数并吐出你想要的XML。然后你就可以使用Powershell中的Cmdlet来管理它。 我希望这有帮助!