問題の骨子: 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()
部品を使用するだけです。
これは値/表示メンバー属性の意図した動作ですか? 完全な定義を使用する方法はありますか?