Каков наилучший способ обернуть класс c # для использования сценарием powershell

StackOverflow https://stackoverflow.com/questions/1185868

  •  19-09-2019
  •  | 
  •  

Вопрос

У меня есть движок, который выполняет сценарии powershell, и когда они выполняются, мне нужно передать некоторый xml вызывающему объекту.Движок принимает ввод-вывод только в виде XML-сообщения idmef.Таким образом, скрипт должен вернуть аналогично отформатированное XML-сообщение.У меня есть класс, который выполняет мое форматирование за меня, и я хотел бы, чтобы сценаристы использовали его.

Итак, вопрос в том, что я хочу обернуть класс c #, чтобы он мог использоваться powershell.

Я видел кое-что, где вы можете ссылаться на класс c #, используя квадратную скобку mob, например.

Как сделать c # доступным для использования таким образом?Я считаю, что это нужно сделать в классе lib и каким-то образом загрузить в среду выполнения powershell, но как?Кроме того, поскольку я запускаю powershell с c #, как мне добавить его в среду на этом этапе?

Будем признательны за любую помощь.Боб.

Это было полезно?

Решение

Если у вас есть сборка (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();

Другие советы

Я не думаю, что в этом есть необходимость.Вы можете получить доступ практически ко всей платформе .NET Framework из PowerShell.Я уверен, что они не создавали для этого никаких оберток.

Работа с интерфейсами в PowerShell очень сложна, если не невозможна, по крайней мере, в версии V1, поэтому избегайте их в своем классе.В PowerShell достаточно простого [reflection.assembly]::Load или LoadFile.

Я бы написал командлет на C #, который принимает кучу параметров и выдает нужный вам XML.Затем вы можете использовать этот командлет из Powershell, вставив в него необходимые данные.Я надеюсь, что это поможет!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top