Пример #1
0
        public async Task TestVerboseStream()
        {
            var client      = new Client();
            var parameters  = new Parameters();
            var asyncCmdlet = new AsyncCmdlet();

            await client.RunAsync("subscriptionId", parameters, asyncCmdlet);
        }
Пример #2
0
        /// <summary>
        /// Note: the function must be called in the main PowerShell thread.
        /// </summary>
        /// <param name="cmdlet"></param>
        /// <param name="createAndStartTask"></param>
        public static void StartAndWait(
            this Cmdlet cmdlet, Func <IAsyncCmdlet, Task> createAndStartTask)
        {
            var    asyncCmdlet       = new AsyncCmdlet(cmdlet);
            string previousX         = null;
            string previousOperation = null;

            asyncCmdlet.Scheduler.Wait(
                createAndStartTask(asyncCmdlet),
                () =>
            {
                if (asyncCmdlet.TaskProgressList.Count > 0)
                {
                    var progress    = 0.0;
                    var activeTasks = new List <string>();
                    foreach (var taskProgress in asyncCmdlet.TaskProgressList)
                    {
                        if (!taskProgress.IsDone)
                        {
                            var config = taskProgress.Config;
                            activeTasks.Add(config.GetFullName());
                        }
                        progress += taskProgress.GetProgress();
                    }
                    var percent   = (int)(progress * 100.0);
                    var r         = new[] { "|", "/", "-", "\\" };
                    var x         = r[DateTime.Now.Second % 4];
                    var operation = activeTasks.Count > 0
                            ? "Creating " + string.Join(", ", activeTasks) + "."
                            : null;

                    // write progress only if it's changed.
                    if (x != previousX || operation != previousOperation)
                    {
                        cmdlet.WriteProgress(
                            new ProgressRecord(
                                0,
                                "Creating Azure resources",
                                percent + "% " + x)
                        {
                            CurrentOperation = operation,
                            PercentComplete  = percent,
                        });
                        previousX         = x;
                        previousOperation = operation;
                    }
                }
            });
        }
        internal IEnumerable <string> GetValues(AsyncCmdlet cmdlet)
        {
            if (IsSet && Value != null)
            {
                switch (Options.FirstOrDefault().Type)
                {
                case OptionType.Switch:
                    return(new[] {
                        ((SwitchParameter)Value).IsPresent.ToString()
                    });

                case OptionType.StringArray:
                    return((string[])Value);

                case OptionType.File:
                    return(new[] {
                        cmdlet.ResolveExistingFilePath(Value.ToString())
                    });

                case OptionType.Folder:
                    return(new[] {
                        cmdlet.ResolveExistingFolderPath(Value.ToString())
                    });

                case OptionType.Path:
                    return(new[] {
                        cmdlet.ResolvePath(Value.ToString())
                    });

#if !CORECLR
                case OptionType.SecureString:
                    return(new[] {
                        "SECURESTRING:" + ((SecureString)Value).ToProtectedString("salt")
                    });
#endif
                }
                return(new[] {
                    Value.ToString()
                });
            }
            return(new string[0]);
        }
        /// <summary>
        /// Note: the function must be called in the main PowerShell thread.
        /// </summary>
        /// <param name="cmdlet"></param>
        /// <param name="createAndStartTask"></param>
        public static void StartAndWait(
            this Cmdlet cmdlet, Func <IAsyncCmdlet, Task> createAndStartTask)
        {
            var asyncCmdlet = new AsyncCmdlet(cmdlet);

            asyncCmdlet.Scheduler.Wait(
                createAndStartTask(asyncCmdlet),
                () =>
            {
                if (asyncCmdlet.TaskProgressList.Count > 0)
                {
                    var progress    = 0.0;
                    var activeTasks = new List <string>();
                    foreach (var taskProgress in asyncCmdlet.TaskProgressList)
                    {
                        if (!taskProgress.IsDone)
                        {
                            var config = taskProgress.Config;
                            activeTasks.Add(config.Name + " " + config.Strategy.Type);
                        }
                        progress += taskProgress.GetProgress();
                    }
                    var percent = (int)(progress * 100.0);
                    var r       = new[] { "|", "/", "-", "\\" };
                    var x       = r[DateTime.Now.Second % 4];
                    cmdlet.WriteProgress(
                        new ProgressRecord(
                            0,
                            "Creating Azure resources",
                            percent + "% " + x)
                    {
                        CurrentOperation = activeTasks.Count > 0
                                    ? "Creating " + string.Join(", ", activeTasks) + "."
                                    : null,
                        PercentComplete = percent,
                    });
                }
            });
        }
        internal IEnumerable<string> GetValues(AsyncCmdlet cmdlet) {
            if (IsSet && Value != null) {
                switch (Options.FirstOrDefault().Type) {
                    case OptionType.Switch:
                        return new[] {
                            ((SwitchParameter)Value).IsPresent.ToString()
                        };
                    case OptionType.StringArray:
                        return (string[])Value;

                    case OptionType.File:
                        return new[] {
                            cmdlet.ResolveExistingFilePath(Value.ToString())
                        };

                    case OptionType.Folder:
                        return new[] {
                            cmdlet.ResolveExistingFolderPath(Value.ToString())
                        };

                    case OptionType.Path:
                        return new[] {
                            cmdlet.ResolvePath(Value.ToString())
                        };

#if !CORECLR
                    case OptionType.SecureString:
                        return new[] {
                            "SECURESTRING:" + ((SecureString)Value).ToProtectedString("salt")
                        };
#endif
                }
                return new[] {
                    Value.ToString()
                };
            }
            return new string[0];
        }
Пример #6
0
        /// <summary>
        /// Note: the function must be called in the main PowerShell thread.
        /// </summary>
        /// <param name="cmdlet"></param>
        /// <param name="createAndStartTask"></param>
        public static void StartAndWait(this Cmdlet cmdlet, Func <IAsyncCmdlet, Task> createAndStartTask)
        {
            var asyncCmdlet = new AsyncCmdlet(cmdlet);

            asyncCmdlet.Scheduler.Wait(createAndStartTask(asyncCmdlet));
        }