Выполнение сценариев Powershell асинхронно в C # - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь переделать существующий инструмент C # Winforms.Идея состоит в том, чтобы использовать Powershell для определенных команд компьютерам.

У меня есть BindingList, который будет заполнен объектами ADComputer при нажатии кнопки, эти машины будут пинговаться асинхронно.Когда каждый отдельный компьютер возвращает свой пинг, код ранее запускал WMI-запрос с использованием ManagementOperationObserver.В ObjectReady будет возвращено зарегистрированное имя пользователя.

По соображениям производительности и обслуживания я хотел бы использовать Powershell для части кода WMI.

Я думал о классе автоматизации Powershell,но мне понадобится событие, когда скрипт будет готов отчитаться перед GUI.Поскольку это будет асинхронная операция, код не должен блокировать выполнение кода другими машинами.Хотя я не знаю, является ли это лучшим вариантом.

Это кодовая установка:

private BindingList<ADComputer> ADComputers = new BindingList<ADComputer>();

private void SearchADButton_Click(object sender, EventArgs e) {
            ADComputers.Clear();

            //Code to fill ADComputers...

            for (int i = 0; i < ADComputers.Count; i++) {
                int index = i;
                Ping ping = new Ping();
                ping.PingCompleted += (sender2, e2) => Ping_PingCompleted(sender2, e2, index);
                ping.SendPingAsync(ADComputers[i].Name);
            }
        }

private void Ping_PingCompleted(object sender, PingCompletedEventArgs e, int index) {
            if(e.Error == null && e.Reply.Status.Equals(IPStatus.Success)) {
                ADComputers[index].Online = "Online";
                PClist.InvalidateRow(index);

                //Powershell goes here!!!
            }
            else {
                ADComputers[index].Online = "Offline";
                ADComputers[index].LoggedIn = "/";
                PClist.InvalidateRow(index);
            }
        }

Может кто-нибудь объяснить и / или привести пример лучших практик, как это сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...