Team Ai
Datasetpublic

MegaBites-AI/Windows-powershell

sourceHugging Facemitupdated 6mo agoView on Hugging Face
0likes372downloads
RunspaceInvoke.cs164 linesDownload Raw Back to hostifaces
1// Copyright (c) Microsoft Corporation.2// Licensed under the MIT License.3 4namespace System.Management.Automation5{6    using System;7    using System.Collections;8    using System.Collections.ObjectModel;9    using System.Management.Automation.Runspaces;10 11    /// <summary>12    /// Defines a class which allows simple execution of commands from CLR languages.13    /// </summary>14    public class RunspaceInvoke : IDisposable15    {16        #region constructors17 18        /// <summary>19        /// Runspace on which commands are invoked.20        /// </summary>21        private Runspace _runspace;22 23        /// <summary>24        /// Create a RunspaceInvoke for invoking commands. This uses25        /// a runspace with default PSSnapins.26        /// </summary>27        public RunspaceInvoke()28        {29            _runspace = RunspaceFactory.CreateRunspace();30            _runspace.Open();31            if (Runspace.DefaultRunspace == null)32            {33                Runspace.DefaultRunspace = _runspace;34            }35        }36 37        /// <summary>38        /// Create RunspaceInvoke for invoking command in specified39        /// runspace.40        /// </summary>41        /// <param name="runspace"></param>42        /// <remarks>Runspace must be opened state</remarks>43        public RunspaceInvoke(Runspace runspace)44        {45            if (runspace == null)46            {47                throw PSTraceSource.NewArgumentNullException("runspace");48            }49 50            _runspace = runspace;51            if (Runspace.DefaultRunspace == null)52            {53                Runspace.DefaultRunspace = _runspace;54            }55        }56 57        #endregion constructors58 59        #region invoke60 61        /// <summary>62        /// Invoke the specified script.63        /// </summary>64        /// <param name="script">PowerShell script to invoke.</param>65        /// <returns>Output of invocation.</returns>66        public Collection<PSObject> Invoke(string script)67        {68            return Invoke(script, null);69        }70 71        /// <summary>72        /// Invoke the specified script and passes specified input to the script.73        /// </summary>74        /// <param name="script">PowerShell script to invoke.</param>75        /// <param name="input">Input to script.</param>76        /// <returns>Output of invocation.</returns>77        public Collection<PSObject> Invoke(string script, IEnumerable input)78        {79            if (_disposed == true)80            {81                throw PSTraceSource.NewObjectDisposedException("runspace");82            }83 84            if (script == null)85            {86                throw PSTraceSource.NewArgumentNullException("script");87            }88 89            Pipeline p = _runspace.CreatePipeline(script);90            return p.Invoke(input);91        }92 93        /// <summary>94        /// Invoke the specified script and passes specified input to the script.95        /// </summary>96        /// <param name="script">PowerShell script to invoke.</param>97        /// <param name="input">Input to script.</param>98        /// <param name="errors">This gets errors from script.</param>99        /// <returns>Output of invocation.</returns>100        /// <remarks>101        /// <paramref name="errors"/> is the non-terminating error stream102        /// from the command.103        /// In this release, the objects read from this PipelineReader104        /// are PSObjects wrapping ErrorRecords.105        /// </remarks>106        public Collection<PSObject> Invoke(string script, IEnumerable input, out IList errors)107        {108            if (_disposed == true)109            {110                throw PSTraceSource.NewObjectDisposedException("runspace");111            }112 113            if (script == null)114            {115                throw PSTraceSource.NewArgumentNullException("script");116            }117 118            Pipeline p = _runspace.CreatePipeline(script);119            Collection<PSObject> output = p.Invoke(input);120            // 2004/06/30-JonN was ReadAll() which was non-blocking121            errors = p.Error.NonBlockingRead();122            return output;123        }124 125        #endregion invoke126 127        #region IDisposable Members128 129        /// <summary>130        /// Set to true when object is disposed.131        /// </summary>132        private bool _disposed;133 134        /// <summary>135        /// Dispose underlying Runspace.136        /// </summary>137        public void Dispose()138        {139            Dispose(true);140            GC.SuppressFinalize(this);141        }142 143        /// <summary>144        /// Protected dispose which can be overridden by derived classes.145        /// </summary>146        /// <param name="disposing"></param>147        protected virtual void Dispose(bool disposing)148        {149            if (_disposed == false)150            {151                if (disposing)152                {153                    _runspace.Close();154                    _runspace = null;155                }156            }157 158            _disposed = true;159        }160 161        #endregion IDisposable Members162    }163}164