1

问题的核心:我正在尝试填充 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>有成员DistinguishedNameSamAccountName.

使用此处显示的代码,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()部分。

这是值/显示成员属性的预期行为吗?有没有办法让它使用完整的定义?

4

0 回答 0