¿Cuál es la mejor manera de terminar una clase C # para el uso de script de PowerShell

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

  •  19-09-2019
  •  | 
  •  

Pregunta

Tengo un motor que ejecuta scripts de PowerShell, y cuando se ejecutan, necesidad para alimentar de nuevo en algunos xml a la persona que llama. El motor sólo toma i / o como un mensaje XML IDMEF. Así que el guión tiene que devolver un mensaje con formato XML de manera similar. Tengo una clase que hace mi formato para mí y quisiera los guionistas para utilizarlo.

Así que la pregunta es que quiero para envolver una clase C # para que pueda ser utilizado por PowerShell.

vi algo en algún lugar se puede hacer referencia a la clase C # usando la multitud de corchetes, por ejemplo.

Cómo tomar la c # disponible para ser utilizado como este. Creo que tiene que ser hecho en clase y de alguna manera lib cargado en el tiempo de ejecución de PowerShell sino cómo. También como estoy ejecutando el PowerShell desde C #, ¿cómo puedo añadir que en el medio ambiente en ese punto.

Cualquier ayuda sería apreciada. Bob.

¿Fue útil?

Solución

Si tener un conjunto (EXE o DLL) con la clase en ella, PowerShell puede cargar a través de [System.Reflection.Assembly]::LoadFile("PathToYourAssembly") o en V2

Add-Type -Path "PathToYourAsembly"

Si va a crear un espacio de ejecución en la aplicación y desea hacer un montaje disponible, se puede hacer eso con un 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();

Otros consejos

No creo que nada es necesario. Se puede acceder a prácticamente todo el .NET Framework desde PowerShell. Estoy seguro de que no crearon ningún envolturas para hacerlo.

Tratar con interfaces en PowerShell es muy difícil, si no imposible, al menos en V1, así que evite estos en su clase. En PowerShell un simple [reflection.assembly] :: Load o LoadFile es todo lo que necesita.

Me gustaría escribir un cmdlet en C # que toma un montón de parámetros y escupe el XML que desea. A continuación, puede utilizar ese cmdlet de PowerShell mediante la canalización de las cosas en él. Espero que esto ayude!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top