Я пытался запустить скрипт powershell из веб-приложения .Net Core (не обсуждая здесь лучшие практики;)) со следующим кодом:
string command = @"& """c:\\my Folder\\myScript.ps1""";
using (var ps = PowerShell.Create())
{
var results = ps.AddScript(command).Invoke();
}
Он хорошо работает на моей машине разработчика,но в производственном процессе происходит сбой при попытке выполнить эту функцию:
ps.AddScript(command).Invoke()
Я получаю следующее исключение:
System.IO.FileNotFoundException: Не удалось загрузить файл или сборку 'Microsoft.Management.Infrastructure, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 '.Система не может найти указанный файл.Имя файла: «Microsoft.Management.Infrastructure, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35» в System.Reflection.RuntimeAssembly.GetExportedTypes (сборка RuntimeAssembly, ObjectHandleOnStack retTypes) в System.RefseyTime.RuSystem.Management.Automation.Runspaces.PSSnapInHelpers.GetAssemblyTypes (сборка сборки, имя строки) в System.Management.Automation.Runspaces.PSSnapInHelpers.AnalyzeModuleAssemblyWithReflection (сборка сборки, имя * строки, словарь_интерфейса_интерфейса)2 & псевдонимы, Словарь 2& providers, String helpFile, Type&
randomCmdletToCheckLinkDemand, Type& randomProviderToCheckLinkDemand)
at
System.Management.Automation.Runspaces.PSSnapInHelpers.AnalyzePSSnapInAssembly(Assembly
assembly, String name, PSSnapInInfo psSnapInInfo, PSModuleInfo
moduleInfo, Boolean isModuleLoad, Dictionary
2 & командлеты, Словарь 2&
aliases, Dictionary
2 & провайдеры, String & helpFile) в System.Management.Automation.Runspaces.InitialSessionState.ImportPSSnapIn (PSSnapInInfo psSnapInInfo, PSSnapInException.CreateDefault () в System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace (хост PSHost) в System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace () в System.Management.Automation.PowerShell.Worker.CreateRunspaceIfNeededAndDoWork (Runspace rsToUse, логическое значение isSync *).1 вывод, настройки PSInvocationSettings) в System.Management.Automation.PowerShell.CoreInvoke [TInput, TOutput] (PSDataCollection 1
input, PSDataCollection
1 выход, настройки PSInvocationSettings) в System.Management.Automation.PowerShell.CoreInvoke [вход для IE] [TOutput]`1 вывод, настройки PSInvocationSettings) в System.Management.Automation.PowerShell.Invoke (вход IEnumerable, настройки PSInvocationSettings)
Я не знаю, какой фреймворк / пакет я должен установить, чтобы сделать егозапустить.Целевой платформой является .Net Core 2.1, которая установлена, следовательно, приложение работает нормально, за исключением строки, упомянутой выше.
Файл deps.json содержит следующее:
"Microsoft.Management.Infrastructure/1.0.0": {
"dependencies": {
"NETStandard.Library": "2.0.3",
"System.Runtime.CompilerServices.VisualC": "4.3.0",
"System.Runtime.Serialization.Xml": "4.3.0",
"System.Security.SecureString": "4.3.0",
"System.Threading.ThreadPool": "4.3.0"
},
"compile": {
"ref/netstandard1.6/Microsoft.Management.Infrastructure.Native.dll": {},
"ref/netstandard1.6/Microsoft.Management.Infrastructure.dll": {}
}
}
Установленные пакеты Nuget:
Microsoft.AspNetCore.App (2.1.1)
Microsoft.PowerShell.Commands.Diagnostics (6.0.5)
Microsoft.PowerShell.SDK (6.0.5)
Microsoft.PowerShell.WSMan.Management (6.0.5)
Редактировать Я также добавил Microsoft.Management.Infrastructure (1.0.0), но это не устранило проблему
Редактировать2 Dev isWindows 10 Pro и Prod - это Windows Server 2016 Standard
Edit3 Скрипт отлично работает на prod при прямом запуске через PowerShell.Ошибка отображается, когда веб-приложение пытается запустить PowerShell.
Edit4 Учетная запись пула приложений имеет права администратора и является той же учетной записью, которую я использовал для запуска сценария вручную (не рекомендуется, нона данный момент я просто пытаюсь сделать этот запуск).
Edit5 Я попытался поместить dll в папку приложения на сервере и перезапустить сайт + перезапустить пул приложений,Я пытался с каждой версией, которую я мог найти на машине разработчика, и ничего не работало: /
Edit6 Обновлены пакеты nuget с 6.0.5 до последней версии 6.2.1, та же проблема