为用户设置标志(Active Directory)

时间:2013-11-18 11:16:13

标签: c# active-directory

目前我正在尝试编写一些代码来帮助我们提供支持并遇到一些问题。我在OU中创建了一个用户,设置了所有需要的属性,并且无法设置标记。

string ADPath1 = "LDAP://127.0.0.1/OU=TEST,DC=abc,DC=def,DC=local";
string ADUser = "admin";
string ADPassword = "somepw";
DirectoryEntry de = new DirectoryEntry(ADPath1, ADUser, ADPassword, AuthenticationTypes.Secure);

我正在连接,并设置一切

DirectoryEntries users = de.Children;
DirectoryEntry newuser = users.Add("CN=" + "Artemij Voskobojnikov", "user");
newuser.Properties["property"].Add("XXX");

现在我想设置userAccountControl-propery并尝试执行以下操作:

const int UF_PASSWD_CANT_CHANGE = 0x0040;
const int UF_DONT_EXPIRE_PASSWD = 0x10000;
int user_flags = UF_PASSWD_CANT_CHANGE + UF_DONT_EXPIRE_PASSWD;

newuser.Properties["userAccountControl"].Value = user_flags

我收到错误,例如"服务器无法执行操作"。有没有办法做到这一点,还是我必须使用UserPrincipal?

亲切的问候

1 个答案:

答案 0 :(得分:1)

如果您使用的是.NET 3.5及更高版本,则应查看System.DirectoryServices.AccountManagement(S.DS.AM)命名空间。在这里阅读所有相关内容:

基本上,您可以定义域上下文并轻松在AD中查找用户和/或组:

// set up domain context and bind to the OU=Test container
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN", "OU=TEST"))
{
    // create a new user
    UserPrincipal user = new UserPrincipal(ctx);

    // set first name, last name, display name, SAM Account Name and other properties easily
    user.DisplayName = "Artemij Voskobojnikov";
    user.GivenName = "Artemij";
    user.Surname = "Voskobojnikov";
    user.SamAccountName = "AVoskobojnikov";

    // set some flags as appropriate for your use
    user.UserCannotChangePassword = true;
    user.PasswordNeverExpires = true;

    // save user
    user.Save();
}

新的S.DS.AM让您可以轻松地与AD中的用户和群组一起玩!