Остановить выполнение конвейера Powershell

1

Я выполняю команду powershell синхронно. Связывает обработчик событий, который успешно выполняется, когда данные испускаются конвейером. Когда какое-то условие выполнено, я хочу прекратить выполнение команды powershell, но когда я вызываю pipeLine.Stop(), программа просто зависает бесконечно. Могу ли я знать, что происходит не так?

Command shellCommand = new Command("Get-MsolUser");
Pipeline pipeLine = powerShellRunspace.CreatePipeline();
pipeLine.Commands.Add(shellCommand);
pipeLine.Input.Close();
pipeLine.Output.DataReady += delegate(object sender,EventArgs args) {
    try {
        PipelineReader<PSObject> output = sender as PipelineReader<PSObject>;
        if (output != null) {
            bool isCompleted = false;
            while (output.Count > 0 && !isCompleted) {
                PSObject pso = (PSObject)output.Read();
                isCompleted = addDataDelegate(pso);
            }
            if (isCompleted) {
                pipeLine.Stop();                //HANGS HERE
                log("JUST STOPPED PIPELINE..");
            }
        }
    } catch(Exception ex) {
        log(ex.ToString());
    }
    };
pipeLine.Invoke();
Теги:
powershell

1 ответ

0

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

Возможно, метод Pipeline.StopAsync будет работать лучше в этом коде.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню