【问题标题】:How does the userAccountControl property work in AD? (C#)userAccountControl 属性在 AD 中如何工作? (C#)
【发布时间】:2016-04-15 08:07:38
【问题描述】:

userAccountControl 属性在 AD 中如何工作?

假设我想创建一个新用户帐户并将其设置为启用(默认情况下禁用),并将“密码永不过期”选项设置为 true。我可以做这样的事情并且它有效:

//newUser is a DirectoryEntry object
newUser.Properties["userAccountControl"].Value = 0x200; // normal account
newUser.Properties["userAccountControl"].Value = 0x10000; //password never expires

通常,我认为第二行会清除第一行,但事实并非如此。这是如何运作的?我可以将它们组合成一行吗?如果我想让他们的密码过期,我将如何取消该值? 谢谢!

【问题讨论】:

    标签: c# active-directory


    【解决方案1】:

    实际上,设置第二个值确实会消除第一个值 - 但第一个值确实有点“不必要”.....

    当然,您可以将它们(实际上是多个)组合成一个值,并使用单个赋值进行设置:

    const int UF_ACCOUNTDISABLE = 0x0002;
    const int UF_PASSWD_NOTREQD = 0x0020;
    const int UF_PASSWD_CANT_CHANGE = 0x0040;
    const int UF_NORMAL_ACCOUNT = 0x0200;
    const int UF_DONT_EXPIRE_PASSWD = 0x10000;
    const int UF_SMARTCARD_REQUIRED = 0x40000;
    const int UF_PASSWORD_EXPIRED = 0x800000;
    
    int userControlFlags = UF_PASSWD_NOTREQD + UF_NORMAL_ACCOUNT + UF_DONT_EXPIRE_PASSWD;
    
    newUser.Properties["userAccountControl"].Value = userControlFlags;
    

    马克

    【讨论】:

      【解决方案2】:

      (Almost) Everything In Active Directory via C#

      如何设置标志:

      int val = (int)newUser.Properties["userAccountControl"].Value; 
      newUser.Properties["userAccountControl"].Value = val | 0x10000; //password never expires
      newUser.CommitChanges();
      

      【讨论】:

        【解决方案3】:

        您可以组合这些标志,因此 0x200 + 0x10000,即 0x10200。有关详细信息,请参阅本文:http://support.microsoft.com/kb/305144

        【讨论】:

        • +1 表示有价值的标志列表,描述了每个标志的含义。
        猜你喜欢
        • 1970-01-01
        • 2022-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-26
        • 1970-01-01
        • 1970-01-01
        • 2017-04-03
        相关资源
        最近更新 更多