Windows7でADLDSを使用しており、adaminstallユーティリティを使用して新しいアプリケーションパーティションでローカルインスタンスを作成しました。
このパーティションのReadersロールに既存のローカルWindowsグループを追加するにはどうすればよいですか?
次の手動手順で得られるのと同じ結果をプログラムで(C#で)達成したいと思います。
- ADSI Editを開始し、ADLDSインスタンスとパーティションに接続します。
- パーティションルートノードの下のCN=Readersに移動します。
- CN=Readersエントリをダブルクリックします。
- 「メンバー」属性をダブルクリックします。
- 既存のローカルWindowsグループを選択して追加します。
私はすでに次のC#コードを持っています:
public void AddReader(string partitionName, string accountName)
{
var ntAccount = new NTAccount(accountName);
var securityIdentifer = ntAccount.Translate(typeof(SecurityIdentifier));
var accountNameDN = string.Format("CN={0},CN=ForeignSecurityPrincipals,{1}", securityIdentifer.Value, partitionName);
var rootPath = string.Format("LDAP://localhost:389/CN=Readers,CN=Roles,{0}", partitionName)
var directoryEntry = new DirectoryEntry(RootPath);
directoryEntry.Properties["member"].Add(accountNameDN);
directoryEntry.CommitChanges();
}
このコードは、ローカルグループが上記の手動手順を使用してReadersロールに少なくとも1回追加されている場合にのみ機能します。グループを手動で追加してから手動で削除すると、上記のコードを使用してグループを再度追加できます。
しかし、新しいローカルWindowsグループを追加しようとすると、CommitChanges()
上記のコードを呼び出すと、DirectoryServicesCOMException
エラーコード0x8007002F
とメッセージが表示されますA constraint violation occurred
。
明らかに、手動の手順では、既存のローカルWindowsグループにいくつかの変更を加えて、ADLDSリーダーの役割に追加するのに適したものにします。しかし、私は何が欠けていますか?
ActiveDirectorySecurity
とクラスを使用する私のアプローチよりも良い方法があるはずだと思いますが、ActiveDirectoryAccessRule
それらの使用方法を理解することはできません。