Quelle est la meilleure façon d'envelopper un c # classe pour une utilisation par script Powershell

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

  •  19-09-2019
  •  | 
  •  

Question

J'ai un moteur qui exécute des scripts PowerShell, et quand ils exécutent, besoin pour renvoyer en XML à l'appelant. Le moteur ne prend i / o comme un message XML IDMEF. Ainsi, le script a besoin de retourner un message XML formaté de façon similaire. J'ai une classe qui fait ma mise en forme pour moi et voudrais que les scénaristes à l'utiliser.

Alors question est que je veux envelopper un c # classe pour lui permettre d'être utilisé par Powershell.

J'ai vu quelque chose où certains vous pouvez vous référer à c # classe en utilisant la foule de crochets, par exemple.

Comment vous faire le c # disponible pour être utilisé comme celui-ci. Je pense qu'il doit être fait en classe lib et chargé en quelque sorte dans l'exécution Powershell mais comment. De plus comme je suis en cours d'exécution du powershell de c #, comment puis-je l'ajouter dans l'environnement à ce moment-là.

Toute aide serait appréciée. Bob.

Était-ce utile?

La solution

Si avoir un ensemble (ou dll exe) avec la classe en elle, PowerShell peut le charger via [System.Reflection.Assembly]::LoadFile("PathToYourAssembly") ou V2

Add-Type -Path "PathToYourAsembly"

Si vous créez une instance d'exécution dans votre application et souhaitez faire un montage disponible, vous pouvez le faire avec 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();

Autres conseils

Je ne pense pas que tout est nécessaire. Vous pouvez accéder à peu près l'ensemble de .NET Framework de PowerShell. Je suis sûr qu'ils ne créaient aucun wrappers pour le faire.

Traitement des interfaces dans PowerShell est très difficile, voire impossible, au moins en V1, afin d'éviter ces derniers dans votre classe. Dans PowerShell simple [reflection.assembly] :: Load ou LoadFile est tout ce qu'il faut.

Je voudrais écrire une applet de commande en C # qui prend un tas de paramètres et recrache le XML que vous voulez. Ensuite, vous pouvez utiliser cette applet de commande de Powershell par les choses tuyauterie en elle. J'espère que cela aide!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top