예제 #1
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);
            }
        }
예제 #2
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>");
        }