12
votes

Capturer la sortie PowerShell en C # après pipeline.Invoke

J'exécute un script de test PowerShell à partir d'une application C #. Le script peut échouer en raison d'une mauvaise cmdlet qui provoque un tuyau.invoke () de jeter une exception.

Je suis capable de capturer toutes les informations dont j'ai besoin sur l'exception, mais j'aimerais pouvoir afficher le la sortie du script jusqu'à ce point. Je n'ai pas eu de chance car les résultats semblent être nuls lorsqu'une exception est lancée. P>

Y a-t-il quelque chose qui me manque? Merci! P>

m_Runspace = RunspaceFactory.CreateRunspace();
m_Runspace.Open();
Pipeline pipe = m_Runspace.CreatePipeline();
pipe.Commands.AddScript(File.ReadAllText(ScriptFile));
pipe.Commands.Add("Out-String");
try {
   results = pipe.Invoke();
}
catch (System.Exception)
{
   m_Runspace.Close();
   // How can I get to the Powershell output that comes before the exception?
}


0 commentaires

3 Réponses :


16
votes

Je ne sais pas si cela est utile. Je suppose que vous courez v1. Cette approche V2 ne jette pas et imprime le résultat:

Hello World
67 errors

string script = @"
  'Hello World'
  ps | % {
    $_.name | out-string1
  }
";

PowerShell powerShell = PowerShell.Create();

powerShell.AddScript(script);
var results = powerShell.Invoke();

foreach (var item in results)
{
  Console.WriteLine(item);
}

if (powerShell.Streams.Error.Count > 0)
{
  Console.WriteLine("{0} errors", powerShell.Streams.Error.Count);
}


0 commentaires


4
votes

0 commentaires