2 {
3 DirectoryEntry de=new DirectoryEntry("LDAP://"+path, username, password, AuthenticationTypes.Secure);
4 return de;
5 }
其中path是 DirectoryEntry的路徑,username是在對客戶端進行身份驗證時使用的用戶名,password是在對客戶端進行身份驗證時使用的密碼,AuthenticationTypes是我們請求安全身份認證的方式。path說明一下,就是你所在的域的域名,如cnblogs.com。這樣我們可以通過域名得到一個DirectoryEntry 對象。
接下來我們需要做的工作是建立組織單位,用到Children屬性,使用此屬性在層次結構中查找、檢索或創建目錄項。此屬性是一個集合,它與通常的迭代功能一起,提供Add方法,通過該方法將節點直接添加到當前綁定到的父節點之下的集合。當向集合中添加節點時,必須指定新節點的名稱以及要與該節點相關聯的架構模板的名稱。例如,您可能需要使用標題爲“Computer”的架構在層次結構中添加新的計算機。Add.這個方法很簡單,只需要注意一下參數,name是我們建立的組織單位的名稱前面的OU=是必須的,後一個參數Add 方法,通過該方法將節點直接添加到當前綁定到的父節點之下的集合。當向集合中添加節點時,必須指定新節點的名稱以及要與該節點相關聯的架構模板的名稱。例如,您可能需要使用標題爲“Computer”的架構在層次結構中添加新的計算機。Add.這個方法很簡單,只需要注意一下參數,name是我們建立的組織單位的名稱前面的OU=是必須的,後一個參數Add 方法,通過該方法將節點直接添加到當前綁定到的父節點之下的集合。當向集合中添加節點時,必須指定新節點的名稱以及要與該節點相關聯的架構模板的名稱。例如,您可能需要使用標題爲“Computer”的架構在層次結構中添加新的計算機。Add.這個方法很簡單,只需要注意一下參數,name是我們建立的組織單位的名稱前面的OU=是必須的,後一個參數organizationalUnit也是固定了,代表了要增加的DirectoryEntry的架構名稱,organizationalUnit表示是增加的是組織單位。最後需要用CommitChanges方法提交一下。代碼如下:
1public DirectoryEntry GreateOU(string ouname)
2 {
3 DirectoryEntry entry = GetDirectoryObject(path,username,password);
4 DirectoryEntry OU = entry.Children.Add("OU="+ouname, "organizationalUnit");
5 OU.CommitChanges();
6 return OU;
7
8 }
2 ude.Properties["sAMAccountName"].Value=name;
3 ude.CommitChanges();
4 ude.Close();
通過上面的方法我們建立了組織單位和組織單位下的用戶,但是這樣還沒有完。當我建好用戶後發現用戶並沒有啓用,所以我們還要想辦法讓建好的用戶處於啓用狀態。查了相關資料和userAccountControl這個屬性有關係。我在程序裏設置斷點跟蹤了一下得到起用的值,重新獲得用戶DirectoryEntry對象後對其進行更改,用戶被啓用。我想因該還有其他方法,這是目前我能想到的。如果有更好的方法歡迎留言給我。代碼如下。
2 {
3 DirectoryEntry ude=GetDirectoryEntry(user);
4 ude.Properties["userAccountControl"].Value=544;
5 ude.CommitChanges();
6 ude.Close();
7
8 }
如果需要禁用該用戶只需要將這個值設置爲546就行了。
最後需要做的是對改用戶設置密碼,這一步必要好做,同樣找到改用戶DirectoryEntry對象對其進行設置
2 {
3 DirectoryEntry ude=GetDirectoryEntry(name);
4 ude.Invoke("SetPassword",new object[]{password});
5 ude.CommitChanges();
6 ude.Close();
7 }