public override Dictionary Prompt()

in dotNet/PsEdge/PsHostUI.cs [117:195]


        public override Dictionary<string, PSObject> Prompt(string caption, string message, Collection<FieldDescription> descriptions)
        {
            // Maintain the list of all secure strings. These will have to be converted later.
            var secureStrings = new HashSet<string>();

            var promptInput = new EdgePromptInput()
            {
                Caption = caption,
                Message = message,
                FieldDescriptions = new List<EdgeFieldDescription>()
            };

            var result = new Dictionary<string, PSObject>();

            for(int i = 0; i < descriptions.Count; i++)
            {
                // Handle credential types. Add a dummy result for these fields without prompting the user in this call.
                // The PS engine will later call one of the PromptForCredentials callbacks.
                if (descriptions[i].ParameterTypeFullName.Equals("System.Management.Automation.PSCredential", StringComparison.OrdinalIgnoreCase))
                {
                    result[descriptions[i].Name] = "";
                    continue;
                }

                var isSecureString = descriptions[i].ParameterTypeFullName.Contains("System.Security.SecureString");

                promptInput.FieldDescriptions.Add(new EdgeFieldDescription()
                    {
                        Name = descriptions[i].Name,
                        Type = descriptions[i].ParameterTypeName,
                        IsArray = descriptions[i].ParameterTypeName.EndsWith("[]"), // TODO: This approach is fast, but may not work for arrays containing generics.
                        IsSecureString = isSecureString
                    });

                if (isSecureString)
                {
                    secureStrings.Add((descriptions[i].Name));
                }
            }

            if (promptInput.FieldDescriptions.Count > 0)
            {
                var output = this.promptHandler(promptInput).Result;

                var outputDict = (IDictionary<string, object>) output;

                foreach (var entry in (object[]) outputDict["Results"])
                {
                    var entryDict = (IDictionary<string, object>) entry;

                    var fieldName = (string) entryDict["Name"];
                    var fieldValue = entryDict["Value"];

                    if (secureStrings.Contains(fieldName))
                    {
                        var singleStr = fieldValue as string;
                        if (singleStr != null)
                        {
                            fieldValue = ToSecureString(singleStr);
                        }

                        var arrayStr = fieldValue as object[];
                        if (arrayStr != null)
                        {
                            fieldValue = new SecureString[arrayStr.Length];
                            for (int i = 0; i < arrayStr.Length; i++)
                            {
                                ((SecureString[])fieldValue)[i] = ToSecureString((string)arrayStr[i]);
                            }
                        }
                    }

                    result[fieldName] = PSObject.AsPSObject(fieldValue);
                }

            }

            return result;
        }