Was ist der beste Weg, um eine c # -Klasse für die Verwendung von Powershell-Skript zu wickeln

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

  •  19-09-2019
  •  | 
  •  

Frage

Ich habe eine Maschine, die ausgeführt wird Skripte PowerShell- und wenn sie ausgeführt werden, müssen in einigen xml den Anrufer zu. Der Motor nimmt nur i / o als IDMEF XML-Nachricht. So muss das Skript eine ähnlich formatierte XML-Nachricht zurückzukehren. Ich habe eine Klasse, die meine für mich tut Formatierung und es würde die Drehbuchautoren wie es zu benutzen.

So Frage ist, ich möchte eine c # -Klasse wickeln, damit es von Powershell verwendet werden.

Ich sehe etwas etwas, wo Sie c # -Klasse mit der eckigen Klammer Mob beziehen können, zum Beispiel.

Wie Sie die c # zur Verfügung stellen, wie diese verwendet werden. Ich denke, es muss in der Klasse lib gemacht werden und irgendwie in die Powershell-Laufzeit geladen, sondern wie. Auch als ich die Powershell von c # ausgeführt wird, wie kann ich es in die Umwelt hinzuzufügen an diesem Punkt.

Jede mögliche Hilfe würde geschätzt. Bob.

War es hilfreich?

Lösung

Wenn haben eine Baugruppe (exe oder DLL) mit der Klasse in ihm können Powershell laden Sie es über [System.Reflection.Assembly]::LoadFile("PathToYourAssembly") oder in V2

Add-Type -Path "PathToYourAsembly"

Wenn Sie eine Runspace in Ihrer Anwendung erstellen und mögen eine Anordnung zur Verfügung stellen, können Sie das mit einem 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();

Andere Tipps

Ich glaube nicht, alles notwendig ist. Sie können so ziemlich die gesamte .NET Framework von Powershell zuzugreifen. Ich bin sicher, haben sie keinen Wrapper erstellen, um es zu tun.

Der Umgang mit Schnittstellen in Powershell ist sehr schwierig, wenn nicht unmöglich, zumindest in V1, so vermeiden Sie diese in Ihrer Klasse. In Powershell ein einfaches [reflection.assembly] :: Load oder Loadfile ist alles was man braucht.

würde ich eine Cmdlets in C # schreiben, die eine Reihe von Parametern und spucken die XML nimmt, die Sie wollen. Dann können Sie diese Cmdlets von Powershell verwenden, indem Sie Dinge in sie kochend. Ich hoffe, das hilft!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top