Saltar al contenido

Ejecutar PowerShell desde .NET Core

Solución:

Parece que tiene un buen soporte a partir de .NET Core 2.0 y PowerShell 6 Beta 3 (aunque también fue compatible con Beta 1 y 2, pero no tan fácilmente), aquí hay un enlace a la documentación de Host PowerShell en el repositorio de GitHub

Y ofrecen una buena aplicación de muestra que la muestra ejecutándose con .NET Core 2.0 y PowerShell Core v6.0.0-beta.3 y posteriores:

https://github.com/PowerShell/PowerShell/tree/master/docs/host-powershell

Para obtener los paquetes correctos en mi lista de paquetes NuGet, necesitaba agregar powershell-core como una nueva ubicación del repositorio de NuGet que era:

https://powershell.myget.org/F/powershell-core/api/v3/index.json

Luego podría instalar los paquetes NuGet:

install-package microsoft.powershell.sdk -version 6.0.0-rc
install-package microsoft.powershell.commands.diagnostics -version 6.0.0-rc
install-package microsoft.wsman.management -version 6.0.0-rc

Las tres de estas dependencias eran necesarias y luego pude ejecutar el siguiente comando simple de PowerShell en mi aplicación web MVC principal de asp.net:

public class PowerShellHelper
{
    public void Execute(string command)
    {
        using (var ps = PowerShell.Create())
        {
            var results = ps.AddScript(command).Invoke();
            foreach (var result in results)
            {
                Debug.Write(result.ToString());
            }
        }
    }
}

La respuesta oficial es que actualmente no se admite la ejecución de PowerShell Core desde su propia aplicación. Probablemente el mayor problema es que falta .Net Core AppDomain.GetAssemblies(), que podría estar corregido en .Net Core 1.2.

Gracias por @Roman y @JamesEby.

Si no podemos usar dotnet core 2.0 o posterior y podemos usar Process para ejecutar PowerShell.exe en Windows.

El camino es C:WindowsSystem32WindowsPowerShellv1.0powershell.exe y podemos usar Process en este código.

        var process = new Process
        {
            StartInfo = new ProcessStartInfo(@"C:WindowsSystem32WindowsPowerShellv1.0powershell.exe",
                script)
            {
                WorkingDirectory = Environment.CurrentDirectory,
                RedirectStandardOutput = true,
                CreateNoWindow = true,
            }
        };
        process.Start();

        var reader = process.StandardOutput;
        return reader.ReadToEnd();

El valor de la secuencia de comandos es la secuencia de comandos de PowerShell y la reader.ReadToEnd() Devuelve el texto de salida de Power Shell.

Ver: https://stackoverflow.com/a/30846513/6116637

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *