Uważam go za pomocą runspace rozwiąże Twój problem. Dobre wyjaśnienie i przykłady na nich można znaleźć w następujący link: http://www.codeproject.com/Articles/18229/How-to-run-PowerShell-scripts-from-C.
Tylko ogólny pomysł, jak z nich korzystać.
jeśli masz skrypt:
param($logger2)
$logger2.Write("logger2 Write was called");
$logger.Write("logger Write was called");
i chcesz subsitute logger2 i rejestratora użycie następującego kodu:
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();
}
}
Czy wystarczy zdać klasę lub wystąpienie? – JNK
Instancja dziennika. – naspras