Запуск 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());
}
}
}
}