Я пытаюсь разработать эффективный способ асинхронного вызова командлета Powershell для 20-30 файлов. Хотя приведенный ниже код работает, шаг Import-Module выполняется для каждого обрабатываемого файла. К сожалению, импорт этого модуля занимает от 3 до 4 секунд.
При поиске в Интернете я могу найти ссылки на RunspacePools и InitialSessionState, но у меня возникли проблемы с попыткой создать объект PSHost, который требуется в перегрузке CreateRunspacePool.
Любая помощь будет оценена по достоинству.
Спасибо
Гэвин
.
.
Пример кода из моего приложения:
Я использую Parallel ForEach для распределения файлов между потоками.
Parallel.ForEach(files, (currentFile) =>
{
ProcessFile(currentfile);
});
private void ProcessFile(string filepath)
{
//
// Some non powershell related code removed for simplicity
//
// Start PS Session, Import-Module and Process file
using (PowerShell PowerShellInstance = PowerShell.Create())
{
PowerShellInstance.AddScript("param($path) Import-Module MyModule; Process-File -Path $path");
PowerShellInstance.AddParameter("path", filepath);
PowerShellInstance.Invoke();
}
}
CreateRunspacePool($minRunspaces, $maxRunspaces, $iss, $Host)
, и я до сих пор не знаю, как создать переменную $Host для применения. - person Gavin   schedule 12.06.2016$Host
— это TypeName: System.Management.Automation.Internal.Host.InternalHost, который создается при открытии консоли Powershell. Вы хотите создать пул RunSpaces, на каждом из которых загружен нужный модуль? - person user4317867   schedule 12.06.2016