Я планирую построить консоль администратора Active Directory/Exchange
, используя C#
, говоря powershell
- DC
и серверам Exchange.Сохранение рабочей среды powershell в C# WPF?
Я хочу, чтобы при запуске приложения установили подключения к этим серверам, а затем сохранили их, чтобы я мог выполнять запросы или сценарии или что-то еще, потому что для установления удаленного подключения требуется несколько секунд, и он просто не будет работать иметь такую задержку во всем, что вы делаете.
В настоящее время я просто тестирую локальную область powershell
, но каждый раз, когда я посылаю ей команду, она закрывается, и я не могу ее повторно использовать после начальной команды.
Как я могу предотвратить закрытие runspace
, чтобы я мог использовать его снова и снова?
Редактировать: code Очень простой, просто создавая пространство, планируя возможность включения модулей позже, когда у меня есть базовая функциональность. Идея заключалась в создании рабочей области и при вызове функции, выполняющей код powershell, присваивать этому пробелу другую переменную, чтобы я мог ее повторно использовать, но я, вероятно, глуп. В настоящее время у меня просто есть фиктивный «Get-Process», который отправляется при нажатии кнопки и текстовом поле, которое отображает вывод.
public partial class MainWindow : Window
{
Runspace powerShellRunspace = RunspaceFactory.CreateRunspace();
public MainWindow()
{
InitializeComponent();
powerShellRunspace.Open();
string[] modules;
scriptOutput.Text = "test";
modules = new string[5];
modules[0] = "john";
//string result = powerShellRun("Get-Process");
//powerShellInitialize(modules);
}
public static void powerShellInitialize(string[] modules)
{
Runspace powerShellRunspace = RunspaceFactory.CreateRunspace();
powerShellRunspace.Open();
}
public string powerShellRun(string commands, Runspace powerShellRunspace)
{
Runspace powerShellRunspace2 = powerShellRunspace;
Pipeline powerShellPipeline = powerShellRunspace2.CreatePipeline();
powerShellPipeline.Commands.Add(commands);
Collection<PSObject> powerShellResult = powerShellPipeline.Invoke();
//string result="temp";
//return result;
StringBuilder stringBuilder = new StringBuilder();
foreach (PSObject obj in powerShellResult)
{
stringBuilder.AppendLine(obj.ToString());
}
return stringBuilder.ToString();
}
}
Что делает ваш текущий код выглядит? – Trondh