问题的骨头: 我正在尝试填充ComboBox,甚至是用于Windows窗体的ListBox以及标准数组和类定义,它使用DataSources和相关的ValueMember和DisplayMember工作得很好。
当我尝试使用返回的PSObjects集合(powershell对象)时出现问题。
以下是我尝试过的代码部分:
private void PopulateGroups()
{
// DistributionGroups is a Collection<PSObject>
DistributionGroups.Clear();
DistributionGroups = GroupADConnection.GroupsInOU("OU=Distribution Groups,OU=Resources,OU=Groups,DC=Domain,DC=MadeUp");
cmbDistributionGroups.DataSource = DistributionGroups;
string test = DistributionGroups[5].Members["DistinguishedName"].Value.ToString();
cmbDistributionGroups.DisplayMember = @"Members[""SamAccountName""].Value.ToString()";
cmbDistributionGroups.ValueMember = "Members[\"DistinguishedName\"].Value.ToString()";
}
基本背景是DistributionGroups
是Collection<PSObject>
,其成员为DistinguishedName
和SamAccountName
。
使用此处显示的代码,DisplayMember
将通过ToString方法显示整个PSObject值,为我提供:@{SamAccountName=AA_ Officer; DistinguishedName=CN=AA\+ Officer,OU=Administration,OU=Distribution Groups,OU=Resources,OU=Groups,DC=Domain,DC=MadeUp}
我已经尝试了两种方法将引号字符放入字符串中,以便获得正确的属性。 test
String对象将正确获取PSObject所需的成员。
有没有我缺少的东西,或者没有办法有效地做这个没有自我定义一个单独转移PSObject成员的数组?
更新:
经过一些测试后,似乎DataSource,更具体地说是Value / Display成员只接受LAST参数。与给定的"Members[\"DistinguishedName\"].Value.ToString()"
一样,它实际上只使用ToString()
部分。
这是Value / Display Member属性的预期行为吗?有没有办法让我使用完整的定义?