问题的核心:我正在尝试填充 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}
我已经尝试了两种将引号字符放入字符串的方法,因此它将获得正确的属性。String 对象将test
正确获取 PSObject 的所需成员。
是否有我遗漏的东西,或者如果没有自行定义一个单独传输 PSObject 成员的数组,就没有办法有效地做到这一点?
更新:经过更多测试,似乎数据源,更具体地说,值/显示成员只接受最后一个参数。至于给定的:"Members[\"DistinguishedName\"].Value.ToString()"
它只实际使用该ToString()
部分。
这是值/显示成员属性的预期行为吗?有没有办法让它使用完整的定义?