zoukankan      html  css  js  c++  java
  • DirectoryEntry 账户启动与停用 以及创建账户等

    启动账户:

    DirectoryEntry usr = new DirectoryEntry("LDAP://CN=New User,CN=users,DC=fabrikam,DC=com");
    int val = (int) usr.Properties["userAccountControl"].Value;
    usr.Properties["userAccountControl"].Value = val & ~(int)ActiveDs.ADS_USER_FLAG.ADS_UF_ACCOUNTDISABLE; //=544
    usr.CommitChanges();

    停用账户:

    DirectoryEntry usr = new DirectoryEntry("LDAP://CN=Old User,CN=users,DC=fabrikam,DC=com");
    int val = (int) usr.Properties["userAccountControl"].Value;
    usr.Properties["userAccountControl"].Value = val | (int)ActiveDs.ADS_USER_FLAG.ADS_UF_ACCOUNTDISABLE; //=546
    usr.CommitChanges();

    ActiveDs.ADS_USER_FLAG.ADS_UF_ACCOUNTDISABLE值需要引用库才可使用;

    引用COM组件:Active DS Type Library

    ---------------------------------------------------

     关于创建用户主要碰到了两个问题:

    一、就是上面的启动/停用的问题

    二、就是密码设置问题

    创建用户,使用usr.Properties["userPassword"].add("m12345.");设置密码,密码一直没有设置成功,原因不详[大概userPassword不是存储密码的吧...]。

    之后改为 usr.Invoke("SetPassword","m12345.");就成功了.

    修改密码使用usr.Invoke("ChangePassword", new object[] { "old", "new" });

    ---------------------------------------------------

    关于.net3.5之后的版本(应该吧)有一个更简洁的方法创建用户修改密码等。

    创建用户:

    using (var context = new PrincipalContext(ContextType.Domain, "cninnovation")) 
    using (var user = new UserPrincipal(context, "Tom", "P@ssw0rd", true) 
    { 
      GivenName = "Tom", 
      EmailAddress = "test@test.com" 
    }) 
    { 
      user.Save(); 
    }
    

    重置密码:

    using (var context = new PrincipalContext(ContextType.Domain, "cninnovation")) 
    using (var user = UserPrincipal.FindByIdentity(context, IdentityType.Name,"Tom")) 
    { 
        user.SetPassword("Pa$$w0rd"); 
        user.Save(); 
    } 

    创建组:

    using (var ctx = new PrincipalContext(ContextType.Domain, "cninnovation")) 
    using (var group = new GroupPrincipal(ctx) 
    { 
        Description = "Sample group", 
        DisplayName = "Wrox Authors", 
        Name = "WroxAuthors" 
    }) 
    { 
        group.Save(); 
    } 

    组中添加用户:

    using (var context = new PrincipalContext(ContextType.Domain)) 
    using (var group = GroupPrincipal.FindByIdentity(context, IdentityType.Name, "WroxAuthors")) 
    using (var user = UserPrincipal.FindByIdentity(context, IdentityType.Name, "Stephanie Nagel")) 
    { 
        group.Members.Add(user); 
        group.Save(); 
    } 

    查找用户:

    using (var context = new PrincipalContext(ContextType.Domain, "explorer")) 
    using (var users = UserPrincipal.FindByPasswordSetTime(context, DateTime.Today-TimeSpan.FromDays(30), MatchType.LessThan)) 
    { 
      foreach (var user in users) 
      { 
        Console.WriteLine("{0}, last logon: {1}, " + 
        "last password change: {2}", user.Name, user.LastLogon, user.LastPasswordSet); 
      } 
    } 
    var context = new PrincipalContext(ContextType.Domain); 
    var userFilter = new UserPrincipal(context); 
    userFilter.Surname = "Nag*"; 
    userFilter.Enabled = true; 
    using (var searcher = new PrincipalSearcher()) 
    { 
        searcher.QueryFilter = userFilter; 
        var searchResult = searcher.FindAll(); 
        foreach (var user in searchResult) 
        { 
            Console.WriteLine(user.Name); 
        } 
    } 

    参考资料:http://msdn.microsoft.com/zh-tw/library/ms180913(v=vs.90).aspx

  • 相关阅读:
    1,300萬像素Xperia TX K.O.相機 東方日報
    信息检索Reading List
    雷军:小米二为何不用1300万像素相机_TechWeb
    1300万像素高清双核旗舰 索尼LT30p评测_手机_科技时代_新浪网
    Darts: DoubleARray Trie System海 的 声音我的搜狐
    说说底层架构之实体类的设计
    不忘本~枚举
    两种底层数据层操作时的架构方式,你喜欢那种?
    说说C#中的global
    JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
  • 原文地址:https://www.cnblogs.com/mqxs/p/3492442.html
Copyright © 2011-2022 走看看