Frage Erhalte Powershell-Fehler von c #


Problem

Ich rufe Powershell-Befehle von c # aber die PowerShell Das Befehlsobjekt scheint nur die Eigenschaft zu haben bool HasErrors was mir nicht hilft zu wissen Was Fehler, den ich erhielt.

So erstelle ich meinen Powershell-Befehl

Bibliothek

public static class PowerSheller
{
    public static Runspace MakeRunspace()
    {
        InitialSessionState session = InitialSessionState.CreateDefault();
        Runspace runspace = RunspaceFactory.CreateRunspace(session);
        runspace.Open();

        return runspace;
    }

    public static PowerShell MakePowershell(Runspace runspace)
    {
        PowerShell command = PowerShell.Create();
        command.Runspace = runspace;

        return command;
    }
}

Aufrufen des Move-Vm-Cmdlets

using (Runspace runspace = PowerSheller.MakeRunspace())
{
    using (PowerShell command = PowerSheller.MakePowershell(runspace))
    {
        command.AddCommand("Move-VM");
        command.AddParameter("Name", arguments.VMName);
        command.AddParameter("ComputerName", arguments.HostName);
        command.AddParameter("DestinationHost", arguments.DestinationHostName);

        if (arguments.MigrateStorage)
        {
            command.AddParameter("IncludeStorage");
            command.AddParameter("DestinationStoragePath", arguments.DestinationStoragePath);
        }

        try
        {
            IEnumerable<PSObject> results = command.Invoke();
            success = command.HasErrors;
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }
}

Ich habe erwartet, dass bei einem Fehler eine Ausnahme ausgelöst wird, stattdessen werden 0 Objekte zurückgegeben. Während HasErrors wird dazu führen zu wissen, ob der Befehl erfolgreich war oder nicht; Ich bin immer noch nicht sicher, wie man den spezifischen Fehler erhält, da keine Ausnahme geworfen wird.

Vielen Dank


5
2017-10-03 18:48


Ursprung


Antworten:


Um die Fehler zu sehen, schauen Sie sich die Sammlung an PowerShell.Streams.Error oder in deinem Code command.Streams.Error.


11
2017-10-04 01:15



Versuche, durch die results Sammlung:

foreach (PSObject psObject in results)
{
   ....do stuff with psObject (output to console, etc... you can use ToString() if you want)
}

Das sollte dir die tatsächliche Ausgabe von der Konsole bringen.


1
2017-10-03 18:55