2012-04-02 23 views
0

departmentNumberプロパティのDirectoryEntryオブジェクトをC#で読み取って設定しようとしていましたが、ADSI Editを使用するとこのエントリの内容が変更されていることがわかりません。私がこれまで試したC#を使用してActive Directory内のdepartmentNumberプロパティを正しく設定/取得する方法は?

アプローチは、次のとおりです。

directoryEntry.Properties["departmentNumber"].Value = new object[]{ "SomeContent" }; 

directoryEntry.InvokeSet("departmentNumber", new object[]{ "SomeContent" }; 

directoryEntry.Invoke("PutEx", new object[]{ 2, "departmentNumber", new object[]{"SomeContent"}}); 

directoryEntry.Invoke("Put", new object[]{ "departmentNumber", "SomeContent" }); 

更新 上記のすべてに続いてdirectoryEntry.CommitChanges();

私が試しても(上の例では)、対応するコードを使用して値を再度読み取ることができますが、ADSI-Editorを使用してユーザー、私はそのdepartmentNumberが任意のデータを含んでいるのを見ることができません。

私はADSI-エディタを使用して、特定の値にプロパティを設定した場合、私はまた、C#のを経由してその特定の値を照会することはできませんが、何私にできることは以下のように非常に単純なVBスクリプトを使用することです:

Set objUser = GetObject("LDAP://CN=........") 
objUser.GetInfo 
objUser.PutEx 2, "departmentNumber", Array("SomeContent") 
は、

これは、ADSIエディタで見ることができるプロパティの値を変更しますが、C#を使用して読み取ることができません。

ここで問題は何ですか?また、2つの異なる「departmentNumber」プロパティがあるように見えるのはなぜですか。同じ問題を抱えている人を見つけようとしたにもかかわらず、私は正しい答えを出すこともポインタを出すこともなかったので、どんな助けでも大歓迎です。さらに詳しい情報が必要な場合はお問い合わせください。

答えて

2

変更を適用するのを忘れました。それはADSIに必要です。ここでは、ユーザーのクレヨンと修正の例です:

static void Main(string[] args) 
{ 
    /* Connection to Active Directory 
    */ 
    DirectoryEntry deBase = new DirectoryEntry("LDAP://192.168.225.100:389/OU=SousMonou,OU=MonOu,DC=dom,DC=fr", "jpb", "pwd"); 

    /* User creation 
    */ 
    DirectoryEntry auser = deBase.Children.Add("cn=a User", "user"); 
    auser.CommitChanges(); 

    auser.Properties["samaccountname"].Value = "AUser"; 
    auser.Properties["givenName"].Value = "A"; 
    auser.Properties["sn"].Value = "User"; 
    auser.Properties["displayName"].Value = "AUser"; 
    auser.Properties["userPrincipalName"].Value = "[email protected]"; 
    auser.Properties["pwdLastSet"].Value = 0; 
    auser.Properties["userAccountControl"].Value = 544; 

    auser.CommitChanges(); 

    /* Retreiving the user 
    */ 
    DirectorySearcher dsLookForDomain = new DirectorySearcher(deBase); 
    dsLookForDomain.Filter = "(&(cn=a User))"; 
    dsLookForDomain.SearchScope = SearchScope.Subtree; 

    SearchResult srUser = dsLookForDomain.FindOne(); 
    if (srUser != null) 
    { 
    DirectoryEntry deUser = srUser.GetDirectoryEntry(); 
    deUser.Properties["departmentNumber"].Value = "Test Department"; 
    deUser.CommitChanges(); 
    } 
} 
+0

これは機能しません - 私は自分のコードでは、元の質問に投稿することを忘れて、今すぐ更新されます。テスト用に使用している特定のサーバー上のADが乱れている可能性があります。今日は別のマシンを使用していることを確認しようとします。 – Gorgsenegger

+0

これは、私のすべてのサーバー(W2K3からW2K8R2まで)のOUにuseを作成することを許可されているユーザーとだけで動作します。いくつかのエラーが出ますか? – JPBlanc

+0

いいえ、間違いはありませんでした。その特定のマシンのAD構造が乱れていたため(私たちは今日しかわかっていませんでした)、私は私の元の質問で上記のような振る舞いをしました。あなたの提案が実際の例を提供しているので、私はこれを答えとして受け入れます。 – Gorgsenegger

関連する問題