2010-04-16 3 views
7

Ich möchte einige Powershell-Skripts über die Automatisierung ausführen. Etwas wie:So führen Sie PowerShell-Skripts über die Automatisierung aus, ohne auf Probleme mit dem Host zuzugreifen

IList errors; 
Collection<PSObject> res = null; 
using (RunspaceInvoke rsi = new RunspaceInvoke()) 
{ 
    try 
    { 
     res = rsi.Invoke(commandline, null, out errors); 
    } 
    catch (Exception ex) 
    { 
     LastErrorMessage = ex.ToString(); 
     Debug.WriteLine(LastErrorMessage); 
     return 1; 
    } 
} 

das Problem, das ich mit Blick auf bin, ist, dass, wenn mein Skript-Cmdlets wie write-host verwendet die oben ein wirft System.Management.Automation.CmdletInvocationException -

Kann diese Funktion nicht aufrufen, weil der aktuellen Host nicht nicht implementiert es.

Was sind einige gute Möglichkeiten, um dieses Problem zu umgehen?

+0

Scott, ich habe das gleiche Problem. Könnten Sie eine Anleitung oder einen Code dazu geben, wie Sie die Implementierung durchgeführt haben? –

+0

Ok, habe die Antwort selbst gefunden: Erben Sie einfach PSHost, PSHostUserInterface und PSHostRawUserInterface und lassen Sie die Methoden nichts/null zurückgeben. Um zu verfolgen, was normalerweise passieren würde, könnten Nachrichten/Texte, die sonst in der cmd-Zeile gedruckt würden, protokolliert werden. –

Antwort

11

Eine Option besteht darin, eine Write-Host-Funktion zu erstellen und diese in Ihren Runspace zu injizieren. Die Funktion hat Vorrang vor einem Cmdlet mit demselben Namen. In dieser Funktion können Sie nichts tun oder vielleicht [console] :: writeline() verwenden, wenn Ihre App eine Konsolenanwendung ist oder wenn Ihre Anwendung eine GUI-Anwendung ist, ein Objekt in die PowerShell-Sitzung einspeisen, in das die Funktion die Ausgabe schreiben kann (siehe Runspace.SessionStateProxy.SetVariable).

Eine weitere (etwas kompliziertere) Option ist die Implementierung des PowerShell hosting interfaces in your app.

+0

Ich ging mit dem Hosting-Schnittstellen-Ansatz. Schade, es gibt keine standardmäßige NonInteractive UI für das Hosting. –

Verwandte Themen