Запуск PowerShell из .NET Core

Есть ли способ запускать сценарии PowerShell из .net-core?

Я пытаюсь запустить PowerShell script в новом ядре .net 'website\api'. Из того, что я могу сказать, чтобы запустить PowerShell на .net, нам нужно добавить

Пространство имен 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/

Ссылка на system.management.automation.dll в Visual Studio

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

Ответ 1

Официальный ответ заключается в том, что запуск PowerShell Core из вашего собственного приложения в настоящее время не поддерживается. Вероятно, самая большая проблема заключается в том, что .Net Core отсутствует AppDomain.GetAssemblies(), который может быть исправлен в .Net Core 1.2.

Ответ 2

Похоже, что он хорошо поддерживается как .NET Core 2.0 и PowerShell 6 Beta 3 (хотя он был поддержан и в Beta 1 и 2, но не так легко), вот ссылка на Документация Host PowerShell в репозитории GitHub

И они дают хорошее примерное приложение, показывающее, что он работает с .NET Core 2.0 и PowerShell Core v6.0.0-beta.3 и более поздними версиями:

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

Чтобы получить правильные пакеты в списке пакетов NuGet, мне нужно было добавить powerhell-core в качестве нового местоположения репозитория 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 в моем основном веб-приложении MVC asp.net:

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