2015-06-21 149 views
0

我試圖將用戶添加到Active Directory,到目前爲止我的代碼是C#將用戶添加到Active Directory

using (DirectoryEntry dirEntry = new DirectoryEntry(ldapPath)) 
    if (dirEntry.SchemaEntry.Name == "container") 
    { 
     using (DirectoryEntry newUser = dirEntry.Children.Add("CN= " + username, "User")) 
     { 
      fullname = fname + " " + lname; 
      newUser.Properties["sAMAccountName"].Value = username; 
      newUser.Properties["First name"].Value = fname; 
      newUser.Properties["Last name"].Value = lname; 
      newUser.Properties["Full name"].Value = fullname; 
      newUser.Properties["password"].Value = password; 
      newUser.CommitChanges(); 
     } 
    } 

當我運行程序出現錯誤

指定的目錄服務屬性或值不存在。

關於如何使這項工作的任何建議?是的,我是新來的Active Directory相關的東西。

+0

你能編輯這個可讀? –

+0

你在哪一行得到錯誤? – Kyborek

+0

我收到「newUser.CommitChanges();」錯誤 – GK28

回答

0

的Active Directory屬性需要通過他們的LDAP名稱解決 - 不是你在GUI中看到....

那麼試試這個:

using (DirectoryEntry dirEntry = new DirectoryEntry(ldapPath)) 
{ 
    if (dirEntry.SchemaEntry.Name == "container") 
    { 
     using (DirectoryEntry newUser = dirEntry.Children.Add("CN=" + username, "User")) 
     { 
      fullname = fname + " " + lname; 
      newUser.Properties["sAMAccountName"].Value = username; 
      newUser.Properties["givenName"].Value = fname; // first name 
      newUser.Properties["sn"].Value = lname; // surname = last name 
      newUser.Properties["displayName"].Value = fullname; 
      newUser.Properties["password"].Value = password; 

      newUser.CommitChanges(); 
     } 
    } 
} 

你可以找到一個偉大的Excel電子表格顯示交互式GUI中使用的名稱以及它們映射到的LDAP名稱,on Richard Mueller's web site here(請查看「所有Active Directory屬性的電子表格」和「Active Directory用戶中的用戶屬性電子表格& Computers MMC」。)

或者如果您使用的是.NET 3.5或更新版本,還可以調查新的System.DirectoryServices.AccountManagement命名空間,該命令空間允許您使用形狀良好的對象來處理常見任務。

您的代碼將是這個樣子:

using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, NULL, ldapPath) 
{ 
    // create a user principal object 
    UserPrincipal user = new UserPrincipal(ctx, username, password, true); 

    // assign some properties to the user principal 
    user.GivenName = fname; 
    user.Surname = lname; 
    user.DisplayName = fullname; 

    // save the user to the directory 
    user.Save(); 
} 

注意:在ldapPath應該是容器的LDAP路徑 - 沒有任何前綴,例如像CN=Users,DC=YourCompany,DC=com - 沒有LDAP://或其他前綴。

好的一面是:UserPrincipal對象類已經包含很好,強類型和更直觀的屬性來處理許多基本任務,如創建一個新用戶並設置其某些屬性。

+1

我嘗試了您的第一個解決方案,它給了我相同的錯誤,我試着你的第二個解決方案,但「UserPrincipal用戶= ...」加下劃線,它說「無效的初始化成員聲明」 – GK28

+0

第二個解決方案,我得到錯誤「未知的錯誤(0x80005000)」 – GK28

+0

@ GK28:什麼你的'ldapPath'和'username'看起來像什麼? 「用戶名」在其容器中是否有效且唯一? –

相關問題