使用单独的名称和值将PowerShell查询返回到下拉列表

时间:2018-08-07 11:15:35

标签: c# asp.net powershell

我正在创建一个ASP.Net Web应用程序,其中的一部分使用PowerShell查询的结果填充了一个下拉列表。我可以做到这一点,但是我理想地希望PS查询为每个对象返回两个属性,其中一个显示在下拉列表中,另一个显示为if值。

研究表明,我可以使用DataTable来执行此操作,但是我在下面的工作没有用。我没有在下拉列表中获取DisplayName值,而是获得了两个属性名称(DisplayName和SipAddress)以及“长度”,并针对每个返回的结果重复执行。如果我检查列表中各个DisplayName和SipAddress项的值,它们包含正确的数据,但是我希望将DisplayName的值作为列表,并将SipAddress的值作为相应的值。

DataTable dt = new DataTable();
dt.Columns.Add("DisplayName");
dt.Columns.Add("SipAddress");

var shell = PowerShell.Create();
shell.Commands.AddScript("Get-CsCommonAreaPhone | Select-Object DisplayName, SipAddress -ExpandProperty DisplayName | Sort-Object DisplayName");
var results = shell.Invoke();

foreach (var psObject in results)
{
    foreach (PSPropertyInfo prop in psObject.Properties)
    {
        var Name = prop.Name;
        var sip = prop.Value;
        dt.Rows.Add(Name, sip);
    }
}

capdroplist.DataSource = dt;
capdroplist.DataTextField = "DisplayName";
capdroplist.DataValueField = "SipAddress";
capdroplist.DataBind();

1 个答案:

答案 0 :(得分:0)

非常感谢@jdweng,因为这是他的答案(有些小修改),但是正如评论中的那样,我似乎无法将其标记为这样。下面的工作代码。

DataTable dt = new DataTable();
            dt.Columns.Add("DisplayName");
            dt.Columns.Add("SipAddress");

            var shell = PowerShell.Create();
            shell.Commands.AddScript("Get-CsCommonAreaPhone -filter {DisplayName -like '*vdiv*'} | Select-Object DisplayName, SipAddress | Sort-Object DisplayName");
            var results = shell.Invoke();

            foreach (var psObject in results)
            {

                dt.Rows.Add(new object[] {psObject.Members["DisplayName"].Value,psObject.Members["SipAddress"].Value});

            }

            capdroplist.DataSource = dt;
            capdroplist.DataTextField = "DisplayName";
            capdroplist.DataValueField = "SipAddress";
            capdroplist.DataBind();