Как заполнить несколько значений, возвращаемых скриптом powershell, в раскрывающийся список HTML? - PullRequest
0 голосов
/ 31 мая 2019

Я получаю список доменов в лесу через мой скрипт powershell, я хочу заполнить эти значения в выпадающем списке. Исходя из выбранного домена, я хочу загрузить группы AD в другой выпадающий список. У меня есть готовые сценарии, но я не могу найти способ заполнить выпадающие списки.

Я использую библиотеку System.Automation.Management для управления сценариями PowerShell. Вот моя функция и сценарий.

private string PowerShellExecutor(string script) {
    string outString = "";
    var shell = PowerShell.Create();
    shell.Commands.AddScript(script);
    var results = shell.Invoke();
    if (results.Count>0)
    {
        var builder = new StringBuilder();
        foreach (var psObj in results)
        {
            builder.Append(psObj.BaseObject.ToString() + "\r\n");

        }
        outString = Server.HtmlEncode(builder.ToString());
    }
    return outString;
}

<div class="col-md-12">
            @Html.DropDownList("ddlDirectory", new SelectList(PowerShellExecutor(AppDomain.CurrentDomain.BaseDirectory + "Shell\\Get\\ADDomain.ps1")), "Select Domain", new { @class = "form-control"})
</div>

Мой скрипт имеет этот код: Get-ADForest | Выберите -ExpandProperty Domains Который возвращает список доменов.

В раскрывающемся списке необходимо указать значения: Domain1 Domain2 ..

1 Ответ

0 голосов
/ 06 июня 2019

Обновленная функция, которая работает:

public List<SelectListItem> PowerShellExecutorLst(string scriptPath)
    {
        string outString = "";
        var shell = PowerShell.Create();
        shell.Commands.AddCommand(scriptPath);
        var results = shell.Invoke();
        if (results.Count > 0)
        {
            var builder = new StringBuilder();
            foreach (var psObj in results)
            {
                builder.Append(psObj.BaseObject.ToString() + "\r\n");

            }
            outString = Server.HtmlEncode(builder.ToString());
        }
        List<string> result = outString.Split(new char[] { '\n' }).ToList();
        List<SelectListItem> listItems = result.Select(s => new SelectListItem { Value = s, Text=s }).ToList();
        shell.Dispose();
        return listItems;
    }
...