c# - studio - install dot net core on ubuntu
Ejecutando PowerShell desde.NET Core (4)
Aunque la respuesta de James Eby es correcta, ha habido información nueva que me ha resultado útil.
Ahora hay github.com/PowerShell/PowerShell disponible para uso multiplataforma. Y es de código abierto!
Aquí hay algunos puntos útiles del artículo de Microsoft :
PowerShell ahora es oficialmente compatible con macOS y Linux, incluyendo:
- Windows 7, 8.1 y 10
- Windows Server 2008 R2, 2012 R2, 2016
- Canal semestral de Windows Server
- Ubuntu 14.04, 16.04 y 17.04
- Debian 8.7+, y 9
- CentOS 7
- Red Hat Enterprise Linux 7
- OpenSUSE 42.2
- Fedora 25, 26
- macOS 10.12+
Explotación florestal
En macOS, PowerShell utiliza las API de os_log nativas para iniciar sesión en el sistema de registro unificado de Apple. En Linux, PowerShell usa Syslog, una solución de registro ubicua.
Control remoto de PowerShell basado en SSH
El protocolo de control remoto de PowerShell (PSRP) ahora funciona con el protocolo Secure Shell (SSH) además del PSRP tradicional basado en WinRM. Source
link cambios de última hora
¿Hay alguna forma de ejecutar scripts de PowerShell desde .net-core?
Estoy intentando ejecutar un script de PowerShell en un nuevo .net core ''website / api''. Por lo que puedo decir para ejecutar PowerShell en .net, necesitamos agregar el
System.Management.Automation namespace.
Esto no es posible para .net core (o no he encontrado la forma adecuada de agregarlo). Hay un par de paquetes de NuGet que también apuntan a agregar esta DLL al proyecto, pero tampoco son compatibles con .net core. ¿Hay una manera de hacer esto en .net core? Aquí hay algunos enlaces que he intentado, pero ninguno de ellos es específico para .net core:
http://www.powershellmagazine.com/2014/03/18/writing-a-powershell-module-in-c-part-1-the-basics/
Referencia a system.management.automation.dll en Visual Studio
https://www.nuget.org/packages/System.Management.Automation/
Gracias por @Roman y @JamesEby.
Si no podemos usar dotnet core 2.0 o posterior, podemos usar Process
para ejecutar PowerShell.exe en Windows.
La ruta es C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe
y podemos usar el Process
en este código.
var process = new Process
{
StartInfo = new ProcessStartInfo(@"C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe",
script)
{
WorkingDirectory = Environment.CurrentDirectory,
RedirectStandardOutput = true,
CreateNoWindow = true,
}
};
process.Start();
var reader = process.StandardOutput;
return reader.ReadToEnd();
El valor del script es la secuencia de comandos de PowerShell y el reader.ReadToEnd()
devuelve el texto de salida del shell de poder.
Consulte: https://.com/a/30846513/6116637
Parece que está bien soportado desde .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 brindan una buena aplicación de muestra que muestra que se ejecuta 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 incluir los paquetes correctos en mi lista de paquetes de NuGet, tuve que agregar powershell-core como una nueva ubicación de repositorio de NuGet que era:
https://powershell.myget.org/F/powershell-core/api/v3/index.json
Entonces podría instalar los paquetes de 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 dependencias eran necesarias y luego pude ejecutar el siguiente comando simple de PowerShell en mi aplicación web MVC central 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 problema más grande es que falta .Net Core AppDomain.GetAssemblies()
, que podría estar arreglado en .Net Core 1.2.