MegaBites-AI/Windows-powershell
0372
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 