Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Running PowerShell from .NET Core

Is there a way to run PowerShell scripts from .net-core ?

I'm trying to run a PowerShell script in a new .net core 'website\api'. From what I can tell in order to run PowerShell on .net we need to add the

System.Management.Automation namespace.

This isn't possible for .net core ( or I haven't found the appropriate way to add it). There are a couple of NuGet packages which are also aimed at adding this DLL to project but those aren't compatible with .net core either. Is there a way to do this on .net core ? Here are some links I've tried but none of them are .net core specific:

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/

like image 207
JanivZ Avatar asked Aug 25 '16 09:08

JanivZ


People also ask

Does PowerShell use .NET core?

PowerShell on Linux and macOS uses . NET core, which is a subset of the full . NET Framework on Microsoft Windows. This is significant because PowerShell provides direct access to the underlying framework types and methods.

Can you use .NET in PowerShell?

Windows PowerShell provides syntax that allows you to create . NET objects and then explore the members of those . NET objects. You have seen many examples in earlier chapters of using the get-member cmdlet to explore the members of objects.


1 Answers

Looks like it is well supported as of .NET Core 2.0 and PowerShell 6 Beta 3 (although it was supported in Beta 1 and 2 also but not as easily), here is a link to the Host PowerShell documentation in the GitHub repo

And they give a good sample application showing it running with .NET Core 2.0 and PowerShell Core v6.0.0-beta.3 and Later:

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

In order to get the correct packages into my NuGet package list I did need to add powershell-core as a new NuGet repository location which was:

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

I could then install the NuGet packages:

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 

All three of these dependencies were required and then I could execute the following simple PowerShell command in my asp.net core MVC Web Application:

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());             }         }     } } 
like image 160
James Eby Avatar answered Sep 30 '22 01:09

James Eby