2017-08-04 4 views
1

Ich habe nächste Code:Powershell C# Fahrbefehl nicht funktioniert

private void ExecutePowerShellCommand(string command) 
     { 
      try 
      {    
       Runspace rs = RunspaceFactory.CreateRunspace(); 
       rs.Open(); 
       using (PowerShell ps = PowerShell.Create()) 
       { 
        ps.Runspace = rs; 
        ps.AddCommand(command); 
        var psOutput = ps.Invoke(); 
        LogPSHeader(); 
        foreach (var item in psOutput) 
        { 
         if (item == null) continue; 
         LogPS(item.BaseObject.ToString()); 
        } 
        if (ps.Streams.Error.Count > 0) LogPS("ERROR"); 
        LogPSEnding(); 
       } 
       //rs.Close(); 
      } 
      catch (Exception ex) 
      { 
       Log(ex.ToString()); 
      } 
     } 

Als nächstes wird, wie ich versuche, diese Methode zu nennen:

ExecutePowerShellCommand("Get-NetAdapter"); 

Das Problem, dass ein solcher Code nicht funktioniert und i Ich weiß nicht warum. Ich möchte die gleiche Ausgabe wie in der Konsole, aber in meiner App haben. Jedes Mal, wenn ich runnig bin, bekomme ich verschiedene Ausnahmen im Debug-Modus, wie zum Beispiel: - Operation Canceled Exception - Kann 'Event.Format.ps1xml' Datei nicht finden. Wenn ich diese Datei in den Ordner seiner Suche setze, erhalte ich eine Anfrage für die nächste Datei usw. - Als nächstes konnte er keine Datei im Ordner finden (ich erinnere mich nicht an den genauen Namen der Datei) 'C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Module \ Appx'. Wenn ich versuche, C# Programm nicht von VS zu laufen, aber kompilierte exe läuft i nächste Ausgabe bin immer:

MSFT_NetAdapter (Creation = "MSFT_NetAdapter", DeviceID = „{4C67B2DB-572B-4CB8- 9D0F-19AC7FE93B1B} "SystemCreationClassName = "CIM_NetworkPort" Systemname = "w-KerbiczkovYuI.e-lab.icl.kazan.ru")

MSFT_NetAdapter (Creation = "MSFT_NetAdapter" DeviceID = " {CBBC4607- 17BB-4FFB-A93F-A08F17472C8A} ", SystemCreationClassName = " CIM_NetworkPort ", SystemName =" w-KerbiczkovYuI.e-lab.icl.kazan.ru ")

MSFT_NetAdapter (Creation = "MSFT_NetAdapter" DeviceID = "{31950F9C-DF49-49A7-8BF9-CBD36F99D7CB}", SystemCreationClassName = "CIM_NetworkPort" Systemname = „w-KerbiczkovYuI.e-lab.icl.kazan. ru ")

MSFT_NetAdapter (Creation = "MSFT_NetAdapter" DeviceID = "{B03679B3-199A-43D8-9088-E919658424B1}", SystemCreationClassName = "CIM_NetworkPort" Systemname =" w-KerbiczkovYuI.e-lab. icl.kazan.ru "

Ich denke jeder Datensatz in diesem Ausgang ist für die Schnittstelle (ich habe 4 Int Oberflächen).

Wenn ich in PowerShell-Konsole arbeite - nichts schlechtes und alles funktioniert wie erwartet. Wenn ich versuche auszuführen, zum Beispiel: ExecutePowerShellCommand("Get-Process"); - keine Ausnahmen und ich bekomme das Ergebnis. Nicht das gleiche wie in der PS-Konsole, aber ohne Ausnahme in VS.

Was mache ich falsch und wie kann ich erwartetes Ergebnis erhalten und habe die gleiche Ausgabe wie in der PowerShell-Konsole in meiner App?

Antwort

0

Sorry für die dumme Frage. Ich habe eine Antwort gefunden. Ich wollte die Frage schließen, aber ich kann und würde hier nicht antworten. Um eine gute Ausgabe wie in der PS-Konsole zu haben, muss ich Befehl am Ende der Anweisung hinzufügen: ps.AddCommand("Out-String"). Und denken Sie daran, dass Sie die Ausgabe an den Befehl Out-String umleiten müssen. Verwenden Sie nicht AddStatement zwischen diesen beiden Befehlen. Der zweite Teil meiner Frage sind seltsame Ausnahmen. Ich verstehe immer noch nicht vollständig die Natur von ihnen, aber wie ich verstehe, sind sie interne Powershell-Ausnahmen und gefangen von Powershell-Klasse, weil ich keine dieser Ausnahme abfangen. Debugger informiert mich nur über sie.

Verwandte Themen