Exemple #1
0
 /// <summary>
 /// Creates a clone of the given runspace through which another
 /// runspace was attached.  Sets the IsAttached property of the
 /// resulting RunspaceDetails object to true.
 /// </summary>
 /// <param name="runspaceDetails">
 /// The RunspaceDetails object which the new object based.
 /// </param>
 /// <param name="runspaceContext">
 /// The RunspaceContext of the runspace.
 /// </param>
 /// <param name="sessionDetails">
 /// The SessionDetails for the runspace.
 /// </param>
 /// <returns>
 /// A new RunspaceDetails instance for the attached runspace.
 /// </returns>
 public static RunspaceDetails CreateFromContext(
     RunspaceDetails runspaceDetails,
     RunspaceContext runspaceContext,
     SessionDetails sessionDetails)
 {
     return
         (new RunspaceDetails(
              runspaceDetails.Runspace,
              sessionDetails,
              runspaceDetails.PowerShellVersion,
              runspaceDetails.Location,
              runspaceContext,
              runspaceDetails.ConnectionString));
 }
Exemple #2
0
 /// <summary>
 /// Creates a new instance of the RunspaceDetails class.
 /// </summary>
 /// <param name="runspace">
 /// The runspace for which this instance contains details.
 /// </param>
 /// <param name="sessionDetails">
 /// The SessionDetails for the runspace.
 /// </param>
 /// <param name="powerShellVersion">
 /// The PowerShellVersionDetails of the runspace.
 /// </param>
 /// <param name="runspaceLocation">
 /// The RunspaceLocation of the runspace.
 /// </param>
 /// <param name="runspaceContext">
 /// The RunspaceContext of the runspace.
 /// </param>
 /// <param name="connectionString">
 /// The connection string of the runspace.
 /// </param>
 public RunspaceDetails(
     Runspace runspace,
     SessionDetails sessionDetails,
     PowerShellVersionDetails powerShellVersion,
     RunspaceLocation runspaceLocation,
     RunspaceContext runspaceContext,
     string connectionString)
 {
     this.Runspace          = runspace;
     this.SessionDetails    = sessionDetails;
     this.PowerShellVersion = powerShellVersion;
     this.Location          = runspaceLocation;
     this.Context           = runspaceContext;
     this.ConnectionString  = connectionString;
 }
Exemple #3
0
 /// <summary>
 /// Creates a new RunspaceDetails object from a remote
 /// debugging session.
 /// </summary>
 /// <param name="runspaceDetails">
 /// The RunspaceDetails object which the new object based.
 /// </param>
 /// <param name="runspaceLocation">
 /// The RunspaceLocation of the runspace.
 /// </param>
 /// <param name="runspaceContext">
 /// The RunspaceContext of the runspace.
 /// </param>
 /// <param name="sessionDetails">
 /// The SessionDetails for the runspace.
 /// </param>
 /// <returns>
 /// A new RunspaceDetails instance for the attached runspace.
 /// </returns>
 public static RunspaceDetails CreateFromDebugger(
     RunspaceDetails runspaceDetails,
     RunspaceLocation runspaceLocation,
     RunspaceContext runspaceContext,
     SessionDetails sessionDetails)
 {
     // TODO: Get the PowerShellVersion correctly!
     return
         (new RunspaceDetails(
              runspaceDetails.Runspace,
              sessionDetails,
              runspaceDetails.PowerShellVersion,
              runspaceLocation,
              runspaceContext,
              runspaceDetails.ConnectionString));
 }
Exemple #4
0
        /// <summary>
        /// Creates and populates a new RunspaceDetails instance for the given runspace.
        /// </summary>
        /// <param name="runspace">
        /// The runspace for which details will be gathered.
        /// </param>
        /// <param name="sessionDetails">
        /// The SessionDetails for the runspace.
        /// </param>
        /// <param name="logger">An ILogger implementation used for writing log messages.</param>
        /// <returns>A new RunspaceDetails instance.</returns>
        internal static RunspaceDetails CreateFromRunspace(
            Runspace runspace,
            SessionDetails sessionDetails,
            ILogger logger)
        {
            Validate.IsNotNull(nameof(runspace), runspace);
            Validate.IsNotNull(nameof(sessionDetails), sessionDetails);

            var runspaceLocation = RunspaceLocation.Local;
            var runspaceContext  = RunspaceContext.Original;
            var versionDetails   = PowerShellVersionDetails.GetVersionDetails(runspace, logger);

            string connectionString = null;

            if (runspace.ConnectionInfo != null)
            {
                // Use 'dynamic' to avoid missing NamedPipeRunspaceConnectionInfo
                // on PS v3 and v4
                try
                {
                    dynamic connectionInfo = runspace.ConnectionInfo;
                    if (connectionInfo.ProcessId != null)
                    {
                        connectionString = connectionInfo.ProcessId.ToString();
                        runspaceContext  = RunspaceContext.EnteredProcess;
                    }
                }
                catch (RuntimeBinderException)
                {
                    // ProcessId property isn't on the object, move on.
                }

                // Grab the $host.name which will tell us if we're in a PSRP session or not
                string hostName =
                    PowerShellContextService.ExecuteScriptAndGetItem <string>(
                        "$Host.Name",
                        runspace,
                        defaultValue: string.Empty,
                        useLocalScope: true);

                // hostname is 'ServerRemoteHost' when the user enters a session.
                // ex. Enter-PSSession
                // Attaching to process currently needs to be marked as a local session
                // so we skip this if block if the runspace is from Enter-PSHostProcess
                if (hostName.Equals("ServerRemoteHost", StringComparison.Ordinal) &&
                    runspace.OriginalConnectionInfo?.GetType().ToString() != "System.Management.Automation.Runspaces.NamedPipeConnectionInfo")
                {
                    runspaceLocation = RunspaceLocation.Remote;
                    connectionString =
                        runspace.ConnectionInfo.ComputerName +
                        (connectionString != null ? $"-{connectionString}" : string.Empty);
                }
            }

            return
                (new RunspaceDetails(
                     runspace,
                     sessionDetails,
                     versionDetails,
                     runspaceLocation,
                     runspaceContext,
                     connectionString));
        }