creo que el uso de espacio de ejecución va a resolver su problema. Una buena explicación y ejemplos sobre ellos se pueden encontrar en el siguiente enlace: http://www.codeproject.com/Articles/18229/How-to-run-PowerShell-scripts-from-C.
Solo una idea genérica de cómo usarlos.
si tiene guión:
param($logger2)
$logger2.Write("logger2 Write was called");
$logger.Write("logger Write was called");
y desea subsitute logger2 y el registrador de uso siguiente código:
String scriptContent = // get script content
Logger logger = new Logger();
Logger2 logger2 = new Logger2();
// create ps runspace
using (Runspace runspace = RunspaceFactory.CreateRunspace())
{
// start session
runspace.Open();
// set variables
runspace.SessionStateProxy.SetVariable("logger", logger);
// supply commands
using (Pipeline pipeline = runspace.CreatePipeline())
{
// create ps representation of the script
Command script = new Command(scriptContent, true, false);
// suppy parameters to the script
script.Parameters.Add(new CommandParameter("logger2", logger2));
// send script to pipeline
pipeline.Commands.Add(script);
// execute it
Collection<PSObject> results = pipeline.Invoke();
// close runspace
runspace.Close();
}
}
¿Es sólo tiene que pasar la clase o una instancia? – JNK
Una instancia de registro. – naspras