Exemplo n.º 1
0
        // Module defining this command


        // Optional custom code for this activity


        /// <summary>
        /// Returns a configured instance of System.Management.Automation.PowerShell, pre-populated with the command to run.
        /// </summary>
        /// <param name="context">The NativeActivityContext for the currently running activity.</param>
        /// <returns>A populated instance of Sytem.Management.Automation.PowerShell</returns>
        /// <remarks>The infrastructure takes responsibility for closing and disposing the PowerShell instance returned.</remarks>
        protected override ActivityImplementationContext GetPowerShell(NativeActivityContext context)
        {
            System.Management.Automation.PowerShell invoker       = global::System.Management.Automation.PowerShell.Create();
            System.Management.Automation.PowerShell targetCommand = invoker.AddCommand(PSCommandName);

            // Initialize the arguments

            if (Activity.Expression != null)
            {
                targetCommand.AddParameter("Activity", Activity.Get(context));
            }

            if (Status.Expression != null)
            {
                targetCommand.AddParameter("Status", Status.Get(context));
            }

            if (ProgressId.Expression != null)
            {
                targetCommand.AddParameter("Id", ProgressId.Get(context));
            }

            if (PercentComplete.Expression != null)
            {
                targetCommand.AddParameter("PercentComplete", PercentComplete.Get(context));
            }

            if (SecondsRemaining.Expression != null)
            {
                targetCommand.AddParameter("SecondsRemaining", SecondsRemaining.Get(context));
            }

            if (CurrentOperation.Expression != null)
            {
                targetCommand.AddParameter("CurrentOperation", CurrentOperation.Get(context));
            }

            if (ParentId.Expression != null)
            {
                targetCommand.AddParameter("ParentId", ParentId.Get(context));
            }

            if (Completed.Expression != null)
            {
                targetCommand.AddParameter("Completed", Completed.Get(context));
            }

            if (SourceId.Expression != null)
            {
                targetCommand.AddParameter("SourceId", SourceId.Get(context));
            }


            return(new ActivityImplementationContext()
            {
                PowerShellInstance = invoker
            });
        }
Exemplo n.º 2
0
        RenderAnsi(ArrayList strCollection, int indentation, int maxWidth)
        {
            string indent    = StringUtil.Padding(indentation);
            string secRemain = string.Empty;

            if (SecondsRemaining >= 0)
            {
                secRemain = SecondsRemaining.ToString() + "s";
            }

            int secRemainLength = secRemain.Length + 1;

            // limit progress bar to 120 chars as no need to render full width
            if (PSStyle.Instance.Progress.MaxWidth > 0 && maxWidth > PSStyle.Instance.Progress.MaxWidth)
            {
                maxWidth = PSStyle.Instance.Progress.MaxWidth;
            }

            // if the activity is really long, only use up to half the width
            string activity;

            if (Activity.Length > maxWidth / 2)
            {
                activity = Activity.Substring(0, maxWidth / 2) + PSObjectHelper.Ellipsis;
            }
            else
            {
                activity = Activity;
            }

            // 4 is for the extra space and square brackets below and one extra space
            int barWidth = maxWidth - activity.Length - indentation - 4;

            var sb      = new StringBuilder();
            int padding = maxWidth + PSStyle.Instance.Progress.Style.Length + PSStyle.Instance.Reverse.Length + PSStyle.Instance.ReverseOff.Length;

            sb.Append(PSStyle.Instance.Reverse);

            int maxStatusLength = barWidth - secRemainLength - 1;

            if (maxStatusLength > 0 && StatusDescription.Length > barWidth - secRemainLength)
            {
                sb.Append(StatusDescription.AsSpan(0, barWidth - secRemainLength - 1));
                sb.Append(PSObjectHelper.Ellipsis);
            }
            else
            {
                sb.Append(StatusDescription);
            }

            int emptyPadLength = barWidth + PSStyle.Instance.Reverse.Length - sb.Length - secRemainLength;

            if (emptyPadLength > 0)
            {
                sb.Append(string.Empty.PadRight(emptyPadLength));
            }

            sb.Append(secRemain);

            if (PercentComplete > 0 && PercentComplete < 100 && barWidth > 0)
            {
                int barLength = PercentComplete * barWidth / 100;
                if (barLength >= barWidth)
                {
                    barLength = barWidth - 1;
                }

                if (barLength < sb.Length)
                {
                    sb.Insert(barLength + PSStyle.Instance.Reverse.Length, PSStyle.Instance.ReverseOff);
                }
            }
            else
            {
                sb.Append(PSStyle.Instance.ReverseOff);
            }

            strCollection.Add(
                StringUtil.Format(
                    "{0}{1}{2} [{3}]{4}",
                    indent,
                    PSStyle.Instance.Progress.Style,
                    activity,
                    sb.ToString(),
                    PSStyle.Instance.Reset)
                .PadRight(padding));
        }