【发布时间】:2019-01-14 11:09:22
【问题描述】:
我正在创建一个 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();
【问题讨论】:
-
我想你想要:dt.Columns.Add("DisplayName",typeof(string)); dt.Columns.Add("长度",typeof(int));
-
does not work请详细说明。 -
@jdweng 我只想要 DisplayName 和 SipAddress 这两个都是字符串,由于我对 DataTables 和与 Powershell 的交互的了解不足,所以会出现 Length。我必须声明类型吗?
-
@Reniuz 抱歉我不是很清楚,将编辑澄清
-
问题不在于数据表。您的代码是 find 添加两个值。您不需要两个 for 循环。消除:foreach(psObject.Properties 中的 PSPropertyInfo 道具)。看起来结果的每一行都是一个 psObject,其中包含一个 Name 属性和一个 Value。所以你想要 dt.Rows.Add(new object[] {psObject.Properties[0].Value, psObject.Properties[1].Value});
标签: c# asp.net powershell