Как я могу установить пространство выполнения кода PowerShell, который я запускаю из C#?

У меня есть приложение, которое запускает несколько скриптов Powershell. (Это в основном приложение-оболочка, которое извлекает некоторые сценарии PS, хранящиеся в базе данных SQL, а затем запускает их.)

Один из сценариев Powershell, который я добавил, сейчас не работает, и у меня есть ощущение, что он должен работать в состоянии квартиры STA. Тем не менее, я не знаю, как установить квартиру в C#.

Я использую следующую функцию:

public bool RunSomePowershell(string script)
{
 using (PowerShell PowerShellInstance = PowerShell.Create())
 {
  PowerShellInstance.AddScript(script);
  var result = PowerShellInstance.Invoke();
  return Convert.ToBoolean(result[result.Count -1].ToString()); // Result should be last output from script (true or false)
 }  
}

Как я могу установить это для запуска сценариев в режиме STA?

1 ответ

Решение

Сначала создайте пространство выполнения и установите ApartmentState имущество:

using System.Threading;
using System.Management.Automation.Runspaces;
// ...

Runspace rs = RunspaceFactory.CreateRunspace();
rs.ApartmentState = ApartmentState.STA;

Затем установите Runspace собственность PowerShell Например, использовать вышеупомянутое пространство выполнения:

PowerShellInstance.Runspace = rs;
Другие вопросы по тегам