Running PowerShell from .NET Core
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-rcinstall-package microsoft.powershell.commands.diagnostics -version 6.0.0-rcinstall-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()); } } }}
The official answer is that running PowerShell Core from your own application is currently not supported. Probably the biggest issue is that .Net Core is missing AppDomain.GetAssemblies()
, which might be fixed in .Net Core 1.2.
Thx for @Roman and @JamesEby.
If we can not use dotnet core 2.0 or later and we can use Process
to run the PowerShell.exe in Windows.
The path is C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
and we can use Process
in this code.
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();
The script value is the PowerShell Script and the reader.ReadToEnd()
return the power shell output text.