2016-08-25 24 views
12

Czy istnieje sposób uruchamiania skryptów PowerShell z .net-core?Uruchamianie PowerShell z .NET Core

Próbuję uruchomić skrypt PowerShell w nowej "witrynie głównej \" aplikacji .net. Z tego, co wiem, aby uruchomić PowerShell na .net, musimy dodać obszar nazw System.Management.Automation o nazwie

.

Nie jest to możliwe dla rdzenia .net (lub nie znalazłem odpowiedniego sposobu dodania go). Istnieje kilka pakietów NuGet, które mają również na celu dodanie tej biblioteki DLL do projektu, ale nie są one również kompatybilne z rdzeniem .net. Czy można to zrobić na rdzeniu .net? Oto kilka linków próbowałem, ale żaden z nich są specyficzne dla .net rdzeń:

http://www.powershellmagazine.com/2014/03/18/writing-a-powershell-module-in-c-part-1-the-basics/

Referencing system.management.automation.dll in Visual Studio

https://www.nuget.org/packages/System.Management.Automation/

+0

hun, tek frist link jest 2014 –

+0

pierwsze łącze jest tam, aby pokazać kod (i przestrzeń nazw) niezbędne do uruchomienia powłoki za pomocą kodu .... – JanivZ

+0

Co powiesz na net-core? –

Odpowiedz

6

The official answer jest to, że działa PowerShell Rdzeń z własnej aplikacji jest obecnie Nieobsługiwany. Prawdopodobnie największym problemem jest brak rdzenia .Net Core AppDomain.GetAssemblies(), który można naprawić w .Net Core 1.2.

+0

AppDomain.GetAssemblies() jest dostępny w .NET Core 2.0. Nie wiem, czy to rozwiązuje zadane tu pytanie. https://docs.microsoft.com/en-gb/dotnet/api/system.appdomain.getassemblies?view=netcore-2.0 –

3

Wygląda na to, że jest dobrze obsługiwany od Rdzenia .NET 2.0 i PowerShell 6 Beta 3 (choć był wspierany w wersji Beta 1 i 2, również, ale nie tak łatwo), tu jest link do Host PowerShell documentation in the GitHub repo

I dają dobre przykładową aplikację pokazując to działa z .NET 2.0 i PowerShell Rdzeń Rdzeń V6.0.0-beta.3 i nowsze:

https://github.com/PowerShell/PowerShell/tree/master/docs/host-powershell/sample-dotnet2.0-powershell.beta.3/MyApp

W celu uzyskania poprawnych pakietów do mojego Nuget liście pakietów zrobiłem trzeba dodać powershell-core jako ne W Nuget lokalizacji składowiska, które brzmiało:

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

mogłem potem zainstalować pakiety 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 

Wszystkie te trzy zależnościami były potrzebne i wtedy będę mógł wykonać następujące proste Polecenie PowerShell w mojej aplikacji asp.net core MVC:

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()); 
      } 
     } 
    } 
} 
+1

Tak, dodano obsługę! Dziękujemy za dodanie informacji! – JanivZ

+2

Nie ma problemu, dzięki svick za skierowanie mnie we właściwym kierunku i za zadawanie pytań. –

Powiązane problemy