/// <summary> /// Create temporary remote runspace. /// </summary> private RemoteRunspace CreateTemporaryRemoteRunspace(PSHost host, WSManConnectionInfo connectionInfo) { // Create and open the runspace. int rsId; string rsName = PSSession.GenerateRunspaceName(out rsId); RemoteRunspace remoteRunspace = new RemoteRunspace( Utils.GetTypeTableFromExecutionContextTLS(), connectionInfo, host, this.SessionOption.ApplicationArguments, rsName, rsId); Dbg.Assert(remoteRunspace != null, "Expected remoteRunspace != null"); remoteRunspace.URIRedirectionReported += HandleURIDirectionReported; _stream = new ObjectStream(); try { remoteRunspace.Open(); // Mark this temporary runspace so that it closes on pop. remoteRunspace.ShouldCloseOnPop = true; } finally { // unregister uri redirection handler remoteRunspace.URIRedirectionReported -= HandleURIDirectionReported; // close the internal object stream after runspace is opened // Runspace.Open() might throw exceptions..this will make sure // the stream is always closed. _stream.ObjectWriter.Close(); // make sure we dispose the temporary runspace if something bad happens if (remoteRunspace.RunspaceStateInfo.State != RunspaceState.Opened) { remoteRunspace.Dispose(); remoteRunspace = null; } } return remoteRunspace; }
private RemoteRunspace CreateTemporaryRemoteRunspace(PSHost host, WSManConnectionInfo connectionInfo) { int num; string name = PSSession.GenerateRunspaceName(out num); RemoteRunspace runspace = new RemoteRunspace(Utils.GetTypeTableFromExecutionContextTLS(), connectionInfo, host, this.SessionOption.ApplicationArguments, name, num); runspace.URIRedirectionReported += new EventHandler<RemoteDataEventArgs<Uri>>(this.HandleURIDirectionReported); this.stream = new ObjectStream(); try { runspace.Open(); runspace.ShouldCloseOnPop = true; } finally { runspace.URIRedirectionReported -= new EventHandler<RemoteDataEventArgs<Uri>>(this.HandleURIDirectionReported); this.stream.ObjectWriter.Close(); if (runspace.RunspaceStateInfo.State != RunspaceState.Opened) { runspace.Dispose(); runspace = null; } } return runspace; }