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?
}
3 Réponses :
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);
}
La solution que j'ai fini par utiliser consistait à mettre en œuvre notre propre Pshost pour gérer la sortie de PowerShell. Les informations initiales pour cela sont venues de http://community.bartdesmet.net/blogs/bart/archive/2008/07/06/windows-powershell-through-iruruby-pshost.aspx a > Dans la section "Construction d'une Hôte PS personnalisée". Dans mon cas, il avait besoin d'utiliser un pshostrawuserinterface personnalisé également. P> Voici le aperçu rapide de ce qui a été fait. J'ai répertorié seulement la fonction que j'ai réellement implémentée, mais il y a beaucoup de choses qui ne contiennent que de lancer une nouvelle notimplementeException (); p>
Nice, exactement ce que je cherchais. Merci.
J'ai le même problème. Le moyen le plus simple d'obtenir une sortie lorsque le tuyau.invoke () jette une exception consiste à utiliser invoquer (entrée iEnumerable, sortie iliste)
Exemple montre comment obtenir toutes les sorties, l'erreur, la liaison, etc. dans le bon ordre p>
c # strong> p>