2016-08-25 146 views
12

有沒有辦法從.net-core運行PowerShell腳本?從.NET Core運行PowerShell

我想在一個新的.net核心'website \ api'中運行一個PowerShell腳本。 從我可以告訴爲了在.net上運行PowerShell我們需要添加

System.Management.Automation命名空間。

這是不可能的.net核心(或我還沒有找到適當的方式來添加它)。 有幾個NuGet包也是爲了將這個DLL添加到項目中,但它們與.net內核不兼容。 有沒有辦法在.net核心上做到這一點? 這裏有一些鏈接我做過嘗試,但他們都不是.NET的核心具體:

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首先鏈接是2014 –

+0

第一個鏈接是顯示通過代碼運行shell所需的代碼(和命名空間).... – JanivZ

+0

net-core怎麼樣? –

回答

6

The official answer是從自己的應用程序中運行PowerShell核心是目前不支持。可能最大的問題是.Net Core缺失AppDomain.GetAssemblies(),這可能會在.Net Core 1.2中修復。

+0

AppDomain.GetAssemblies()在.NET Core 2.0中可用。我不知道這是否解決了這裏提出的問題。 https://docs.microsoft.com/en-gb/dotnet/api/system.appdomain.getassemblies?view=netcore-2.0 –

3

看起來是很好的支持作爲.NET核2.0和PowerShell 6 Beta 3的(雖然它處於Beta 1和2還但不容易支持),這裏是將Host PowerShell documentation in the GitHub repo

一個鏈接的他們給顯示它與.NET 2.0的核心和PowerShell核心V6.0.0-beta.3和更高版本上運行良好的示例應用程序:

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

爲了得到正確的包到我做了我的NuGet軟件包列表需要添加powershell-core作爲一個ne W¯¯的NuGet庫位置這是:

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

我可以再安裝的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 

所有這三個依賴性都必須的,然後我可以執行以下簡單PowerShell命令在我的asp.net核心MVC Web應用程序中:

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

是的,支持被添加!感謝您添加信息! – JanivZ

+2

沒問題,感謝svick指引我朝着正確的方向,並提出問題。 –