Wie erfasse ich die ausführliche Ausgabe von Powershell CmdLet, wenn CmdLet programmgesteuert von C # aufgerufen wird?

8

HINTERGRUND

  • Ich verwende Powershell 2.0 unter Windows 7.
  • Ich schreibe ein Cmdlet in einem Powershell-Modul ("Modul" ist neu in Powershell 2.0).
  • Um das Cmdlet zu testen, schreibe ich Komponententests in Visual Studio 2008, die das Cmdlet programmgesteuert aufrufen.

REFERENZ

  • Dieser Artikel auf MSDN aufgerufen "Wie ein Cmdlet aus einem Cmdlet aufgerufen wird" zeigt, wie ein Cmdlet von C # aufgerufen wird.

DER QUELLENCODE

  • Dies ist eine gebrandmarkte Version meines eigentlichen Codes - ich habe ihn so klein wie möglich gemacht, damit Sie das Problem, das ich deutlich habe, sehen können:

    %Vor%

KOMMENTAR

  • Ich verstehe, wie ausführliche Ausgabe von der Powershell-Befehlszeile aktiviert und erfasst wird. Das ist nicht das Problem.
  • In diesem Fall führe ich das Cmdlet programmgesteuert von C # aus.
  • Nichts, was ich gefunden habe, adressiert mein spezifisches Szenario. Einige Artikel schlagen vor, dass ich meinen eigenen PSHost implementieren sollte, aber es scheint teuer zu sein und es scheint auch so, als müsste ich das Cmdlet als Text bezeichnen, was ich gerne vermeiden würde, weil das nicht so stark typisiert ist.

UPDATE AM 2009-07-20

Hier ist der Quellcode basierend auf der Antwort unten.

Einige Dinge sind mir immer noch nicht klar: * Wie man das Cmdlet "Get-Colors" aufruft (idealerweise ohne es als String an das ps objet übergeben zu müssen) * So erhalten Sie die ausführliche Ausgabe , wie sie generiert wird , anstatt am Ende eine Sammlung von ihnen zu erhalten.

%Vor%

Der obige Code generiert diese Ausgabe:

%Vor%

UPDATE AM 2010-01-16

Verwenden Sie die Powershell-Klasse (in System.Management.Automation, aber nur in der Version der Assembly, die mit dem Powershell 2.0 SDK geliefert wird, nicht unter Windows 7). Ich kann programmgesteuert aufrufen das Cmdlet und die ausführliche Ausgabe abrufen. Der verbleibende Teil besteht darin, der Powershell-Instanz tatsächlich ein benutzerdefiniertes Cmdlet hinzuzufügen - weil das mein ursprüngliches Ziel war -, meine Cmdlets nicht mit denen zu testen, die mit Powershell ausgeliefert werden.

%Vor%     
namenlos 18.07.2009, 02:54
quelle

2 Antworten

10
  • Verbose Ausgabe wird nicht wirklich ausgegeben, wenn $VerbosePreference mindestens auf "Continue" gesetzt ist.
  • Verwenden Sie den PowerShell-Typ, um cmdlet auszuführen, und lesen Sie VerboseRecord instances aus Streams.Verbose propery

Beispiel im Powershell-Skript:

%Vor%

Dies sollte leicht in C # zu übersetzen sein.

    
x0n 18.07.2009 03:44
quelle
0
%Vor%

Wichtige Zeilen sind Zeile 5 und 6. Dies setzt im Grunde die verbosepreference $ für die Sitzung und für bevorstehende neue Befehle und Skripte.

    
Varun 25.03.2014 20:14
quelle