【问题标题】:Whats the best way to wrap a c# class for use by powershell script什么是包装 c# 类以供 powershell 脚本使用的最佳方法
【发布时间】:2010-11-14 05:25:35
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 谢谢伙计们,我正计划将它变成一个 cmdlet,但我确信他们是一种通过框架类而不使用 powershell 细节来实现它的方法。这将使小引擎向前迈出 1 步,并且 1 个大需求几乎完成。谢谢。鲍勃。

标签: c# powershell powershell-2.0


【解决方案1】:

我认为没有什么是必要的。您可以从 PowerShell 访问几乎整个 .NET Framework。我确信他们没有创建任何包装器来做到这一点。

【讨论】:

    【解决方案2】:

    至少在 V1 中,在 PowerShell 中处理接口是非常困难的,如果不是不可能的话,所以在你的类中避免这些。在 PowerShell 中,只需要一个简单的 [reflection.assembly]::Load 或 LoadFile。

    【讨论】:

    • 这个例子是在 powershell 中使用的。无论如何,他们是否可以在创建运行空间、管道等时从 c# 为所有脚本使用程序集。
    【解决方案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();
    

    【讨论】:

    • 这个例子是在 powershell 中使用的。无论如何,他们是否可以在创建运行空间、管道等时从 c# 为所有脚本使用程序集。
    • 我更新了我的答案以展示如何将程序集添加到运行空间配置。
    • 谢谢 Steven,这正是我想要的。关于鲍勃。
    【解决方案4】:

    我会用 C# 编写一个 Cmdlet,它接受一堆参数并输出您想要的 XML。然后,您可以通过管道将内容从 Powershell 中使用该 Cmdlet。 我希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-16
      • 1970-01-01
      • 2011-07-24
      • 2013-08-12
      • 2015-08-08
      • 2011-05-26
      相关资源
      最近更新 更多