Example #1
0
 /// <summary>
 ///		Trata el fin de la ejecución del proceso
 /// </summary>
 private void TreatEndScript(PowerShellInstance processor, Action endCallBack)
 {
     // Recoge los datos de salida
     foreach (object item in processor.OutputObjects)
     {
         OutputItems.Add(item);
     }
     // Recoge los errores
     foreach (string error in processor.Errors)
     {
         Errors.Add(error);
     }
     // Llama a la acción indicada por el creador y lanza el evento de fin
     endCallBack?.Invoke();
     EndExecute?.Invoke(this, EventArgs.Empty);
 }
        /// <summary>
        ///		Ejecuta un script de PowerShell
        /// </summary>
        internal void Process()
        {
            // Ejecuta el script
            try
            {
                using (PowerShell instance = PowerShell.Create())
                {
                    Collection <PSObject> outputItems;

                    // Añade el script a PowerShell
                    instance.AddScript(Script);
                    // Añade los parámetros de entrada
                    if (InputParameters != null)
                    {
                        foreach (KeyValuePair <string, object> parameter in InputParameters)
                        {
                            instance.AddParameter(parameter.Key, parameter.Value);
                        }
                    }
                    // Llama a la ejecución de PowerShell
                    outputItems = instance.Invoke();
                    // Guarda los valores de salida
                    foreach (PSObject outputItem in outputItems)
                    {
                        OutputObjects.Add(outputItem.BaseObject);
                    }
                    // Guarda los errores
                    if (instance.Streams.Error.Count > 0)
                    {
                        foreach (ErrorRecord error in instance.Streams.Error)
                        {
                            Errors.Add(error.ToString());
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                Errors.Add(exception.Message);
            }
            // Llama al evento de fin de proceso
            EndExecute?.Invoke(this, EventArgs.Empty);
        }
Example #3
0
        /// <summary>
        ///		Ejecuta el script
        /// </summary>
        public void Execute(Action endCallback = null)
        {
            Task task;
            PowerShellInstance processor = new PowerShellInstance(Script, InputParameters);

            // Limpia los datos de salida
            OutputItems.Clear();
            Errors.Clear();
            // Asigna el manejador de eventos
            processor.EndExecute += (sender, args) => TreatEndScript(processor, endCallback);
            // Crea la tarea para la ejecución en otro hilo
            task = new Task(() => processor.Process());
            // Arranca la tarea
            try
            {
                task.Start();
            }
            catch (Exception exception)
            {
                Errors.Add($"Error when execute script {exception.Message}");
                endCallback?.Invoke();
                EndExecute?.Invoke(this, EventArgs.Empty);
            }
        }