2016-08-25 46 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指引我朝着正确的方向,并提出问题。 –