예제 #1
0
 protected virtual void ImmediateWindow(ClientPipelineArgs args)
 {
     if (ScriptSessionManager.SessionExists(Monitor.SessionID))
     {
         Context.ClientPage.Start(this, nameof(ImmediateWindowPipeline));
     }
 }
예제 #2
0
 protected void PrintOutput(ClientPipelineArgs args)
 {
     if (ScriptSessionManager.SessionExists(Monitor.SessionID))
     {
         var session = ScriptSessionManager.GetSession(Monitor.SessionID);
         var result  = session.Output.GetHtmlUpdate();
         PrintSessionUpdate(result);
     }
 }
예제 #3
0
        public object KeepAlive(string guid)
        {
            if (!IsLoggedInUserAuthorized)
            {
                return(string.Empty);
            }
            var sessionExists = ScriptSessionManager.SessionExists(guid);

            return(sessionExists ? "alive" : "session-not-found");
        }
예제 #4
0
 protected virtual void BreakpointAction(ClientPipelineArgs args)
 {
     if (ScriptSessionManager.SessionExists(Monitor.SessionID))
     {
         var session = ScriptSessionManager.GetSession(Monitor.SessionID);
         session.TryInvokeInRunningSession(args.Parameters["action"]);
         SheerResponse.Eval("$ise(function() { cognifide.powershell.breakpointHandled(); });");
         InBreakpoint = false;
     }
 }
예제 #5
0
        // Methods
        protected override bool Execute(T ruleContext)
        {
            Assert.ArgumentNotNull(ruleContext, "ruleContext");

            if (string.IsNullOrEmpty(PersistentSessionId))
            {
                return(true);
            }
            return(ScriptSessionManager.SessionExists(PersistentSessionId));
        }
예제 #6
0
        public object KeepAlive(string guid)
        {
            if (!WebServiceSettings.ServiceEnabledClient || !Sitecore.Context.IsLoggedIn)
            {
                return(string.Empty);
            }
            var sessionExists = ScriptSessionManager.SessionExists(guid);

            return(sessionExists ? "alive" : "session-not-found");
        }
        // Methods
        protected override bool Execute(T ruleContext)
        {
            Assert.ArgumentNotNull(ruleContext, "ruleContext");

            if (string.IsNullOrEmpty(PersistentSessionId) || string.IsNullOrEmpty(VariableName) ||
                !ScriptSessionManager.SessionExists(PersistentSessionId))
            {
                return(false);
            }
            var session = ScriptSessionManager.GetSession(PersistentSessionId);

            return(session.GetVariable(VariableName) != null);
        }
예제 #8
0
        protected virtual void ToggleRuntimeBreakpoint(ClientPipelineArgs args)
        {
            var line  = Int32.Parse(args.Parameters["Line"]) + 1;
            var state = args.Parameters["State"] == "true";

            if (ScriptSessionManager.SessionExists(Monitor.SessionID))
            {
                var session      = ScriptSessionManager.GetSession(Monitor.SessionID);
                var bPointScript = state
                    ? $"Set-PSBreakpoint -Script {session.DebugFile} -Line {line}"
                    : $"Get-PSBreakpoint -Script {session.DebugFile} | ? {{ $_.Line -eq {line}}} | Remove-PSBreakpoint";
                bPointScript += " | Out-Null";
                session.TryInvokeInRunningSession(bPointScript);
                InBreakpoint = false;
            }
        }
예제 #9
0
        protected virtual void JobAbort(ClientPipelineArgs args)
        {
            if (ScriptSessionManager.SessionExists(Monitor.SessionID))
            {
                var currentSession = ScriptSessionManager.GetSession(Monitor.SessionID);

                currentSession.Abort();

                if (currentSession.AutoDispose)
                {
                    currentSession.Dispose();
                }
            }
            ScriptRunning = false;
            UpdateResults(args);
        }
예제 #10
0
        public string DisposeScriptSession(string userName, string password, string sessionId)
        {
            if (!WebServiceSettings.ServiceEnabledRemoting)
            {
                return(string.Empty);
            }

            Login(userName, password);

            if (ScriptSessionManager.SessionExists(sessionId))
            {
                var session = ScriptSessionManager.GetSession(sessionId, ApplicationNames.RemoteAutomation, false);
                ScriptSessionManager.RemoveSession(session);
                return("removed");
            }

            return("not found");
        }
        protected virtual void OkClick()
        {
            var sessionId = PersistentId;

            if (ScriptSessionManager.SessionExists(sessionId))
            {
                var currentSession = ScriptSessionManager.GetSession(sessionId);
                if (currentSession.AutoDispose)
                {
                    currentSession.Dispose();
                }
            }
            if (AppMode)
            {
                SheerResponse.Eval("window.parent.scWin.closeWindow()");
            }
            else
            {
                SheerResponse.CloseWindow();
            }
        }
예제 #12
0
        public object GetVariableValue(string guid, string variableName)
        {
            if (!IsLoggedInUserAuthorized)
            {
                return(string.Empty);
            }

            var sessionExists = ScriptSessionManager.SessionExists(guid);

            if (!sessionExists)
            {
                return("<div class='undefinedVariableType'>Session not found</div>" +
                       "<div class='variableLine'>A script needs to be executed in the session<br/>before the variable value can be inspected.</div>");
            }

            var session = ScriptSessionManager.GetSession(guid);

            try
            {
                variableName = variableName.TrimStart('$');
                var debugVariable = session.GetDebugVariable(variableName);
                if (debugVariable == null)
                {
                    return("<div class='undefinedVariableType'>undefined</div>" +
                           $"<div class='variableLine'><span class='varName'>${variableName}</span> : <span class='varValue'>$null</span></div>");
                }

                var defaultProps = new string[0];
                if (debugVariable is PSObject)
                {
                    var script =
                        $"${variableName}.PSStandardMembers.DefaultDisplayPropertySet.ReferencedPropertyNames";
                    session.Output.SilenceOutput = true;
                    try
                    {
                        if (session.TryInvokeInRunningSession(script, out List <object> results) && results != null)
                        {
                            defaultProps = session.IsRunning
                                ? (session.Output.SilencedOutput?.ToString()
                                   .Split('\n')
                                   .Select(line => line.Trim())
                                   .ToArray() ?? new string[0])
                                : results.Cast <string>().ToArray();
                            session.Output.SilencedOutput?.Clear();
                        }
                    }
                    finally
                    {
                        session.Output.SilenceOutput = false;
                    }
                }
                var variable = debugVariable.BaseObject();
                if (variable is PSCustomObject)
                {
                    variable = debugVariable;
                }
                var details  = new VariableDetails("$" + variableName, variable);
                var varValue = $"<div class='variableType'>{variable.GetType().FullName}</div>";
                varValue +=
                    $"<div class='variableLine'><span class='varName'>${variableName}</span> : <span class='varValue'>{details.HtmlEncodedValueString}</span></div>";

                if (!details.IsExpandable)
                {
                    return(varValue);
                }

                // sort only if the object is not an array otherwise the indexes will get scrambled.
                var children = details.ShowDotNetProperties
                    ? details.GetChildren().OrderBy(d => d.Name).ToArray()
                    : details.GetChildren();

                foreach (var child in children)
                {
                    if (!child.IsExpandable ||
                        defaultProps.Contains(child.Name, StringComparer.OrdinalIgnoreCase) ||
                        ImportantProperties.Contains(child.Name, StringComparer.OrdinalIgnoreCase))
                    {
                        varValue +=
                            $"<span class='varChild'><span class='childName'>{child.Name}</span> : <span class='childValue'>{child.HtmlEncodedValueString}</span></span>";
                    }
                    else
                    {
                        if (details.ShowDotNetProperties)
                        {
                            continue;
                        }
                        varValue +=
                            $"<span class='varChild'><span class='childName'>{child.Name}</span> : <span class='childValue'>{{";
                        foreach (var subChild in child.GetChildren())
                        {
                            if (!subChild.IsExpandable)
                            {
                                varValue +=
                                    $"<span class='childName'>{subChild.Name}</span> : {subChild.HtmlEncodedValueString}, ";
                            }
                        }
                        varValue  = varValue.TrimEnd(' ', ',');
                        varValue += "}</span></span>";
                    }
                }
                if (details.MaxArrayParseSizeExceeded)
                {
                    varValue +=
                        $"<span class='varChild'><span class='varName'>... first {VariableDetails.MaxArrayParseSize} items shown.</span></span>";
                }
                return(varValue);
            }
            catch (Exception ex)
            {
                return(ex.Message);
            }
        }
예제 #13
0
        public object GetVariableValue(string guid, string variableName)
        {
            var sessionExists = ScriptSessionManager.SessionExists(guid);

            if (sessionExists)
            {
                var session = ScriptSessionManager.GetSession(guid);
                try
                {
                    variableName = variableName.TrimStart('$');
                    var debugVariable = session.GetDebugVariable(variableName);
                    if (debugVariable == null)
                    {
                        return($"<div class='undefinedVariableType'>undefined</div>" +
                               $"<div class='variableLine'><span class='varName'>${variableName}</span> : <span class='varValue'>$null</span></div>");
                    }

                    var defaultProps = new List <string>();
                    if (debugVariable is PSObject && !session.IsRunning)
                    {
                        var script =
                            $"${variableName}.PSStandardMembers.DefaultDisplayPropertySet.ReferencedPropertyNames";
                        List <object> results;
                        if (session.TryInvokeInRunningSession(script, out results) && results != null)
                        {
                            defaultProps = results.Cast <string>().ToList();
                        }
                    }
                    var variable = debugVariable.BaseObject();
                    if (variable is PSCustomObject)
                    {
                        variable = debugVariable;
                    }
                    VariableDetails details  = new VariableDetails("$" + variableName, variable);
                    var             varValue = $"<div class='variableType'>{variable.GetType().FullName}</div>";
                    varValue +=
                        $"<div class='variableLine'><span class='varName'>${variableName}</span> : <span class='varValue'>{details.HtmlEncodedValueString}</span></div>";
                    if (details.IsExpandable)
                    {
                        foreach (var child in details.GetChildren().OrderBy(d => d.Name))
                        {
                            if (!child.IsExpandable ||
                                defaultProps.Contains(child.Name, StringComparer.OrdinalIgnoreCase) ||
                                ImportantProperties.Contains(child.Name, StringComparer.OrdinalIgnoreCase))
                            {
                                varValue +=
                                    $"<span class='varChild'><span class='childName'>{child.Name}</span> : <span class='childValue'>{child.HtmlEncodedValueString}</span></span>";
                            }
                            else
                            {
                                if (details.ShowDotNetProperties)
                                {
                                    continue;
                                }
                                varValue +=
                                    $"<span class='varChild'><span class='childName'>{child.Name}</span> : <span class='childValue'>{{";
                                foreach (var subChild in child.GetChildren())
                                {
                                    if (!subChild.IsExpandable)
                                    {
                                        varValue +=
                                            $"<span class='childName'>{subChild.Name}</span> : {subChild.HtmlEncodedValueString}, ";
                                    }
                                }
                                varValue  = varValue.TrimEnd(' ', ',');
                                varValue += "}</span></span>";
                            }
                        }
                    }
                    //var varValue = variable + " - "+ variable.GetType();
                    return(varValue);
                }
                catch (Exception ex)
                {
                    return(ex.Message);
                }
            }
            return($"<div class='undefinedVariableType'>Session not found</div>" +
                   $"<div class='variableLine'>A script needs to be executed in the session<br/>before the variable value can be inspected.</div>");
        }