我正在创建一个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();
答案 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();