【问题标题】:search by samaccountname with wildcards使用通配符按 samaccountname 搜索
【发布时间】:2012-03-09 13:52:15
【问题描述】:

我有这个代码:

 public static DataTable ExecutesAMAccountNameQuery(string sAMAccountName)
        {
            string filter = "(&(objectCategory=person)(objectClass=user)(sAMAccountName=" + sAMAccountName + "))";
            return ExecuteADQuery("GC:", filter);
        }

它只适用于完整的用户名,我不知道使它适用于通配符的语法,比如 sql 中的 LIKE?

谢谢

【问题讨论】:

    标签: c# active-directory


    【解决方案1】:

    如果您使用的是 .NET 3.5 或更高版本,则可以使用 PrincipalSearcher 和“按示例查询”主体进行搜索:

    // create your domain context
    PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
    
    // define a "query-by-example" principal - here, we search for a UserPrincipal 
    UserPrincipal qbeUser = new UserPrincipal(ctx);
    qbeUser.SamAccountName = "Esteban*";
    
    // create your principal searcher passing in the QBE principal    
    PrincipalSearcher srch = new PrincipalSearcher(qbeUser);
    
    // find all matches
    foreach(var found in srch.FindAll())
    {
        // do whatever here - "found" is of type "Principal" - it could be user, group, computer.....          
    }
    

    如果您还没有 - 一定要阅读 MSDN 文章 Managing Directory Security Principals in the .NET Framework 3.5,它很好地展示了如何充分利用 System.DirectoryServices.AccountManagement 中的新功能。或查看MSDN documentation on the System.DirectoryServices.AccountManagement 命名空间。

    当然,根据您的需要,您可能希望在您创建的“示例查询”用户主体上指定其他属性:

    • DisplayName(通常:名字 + 空格 + 姓氏)
    • SAM Account Name - 您的 Windows/AD 帐户名称
    • User Principal Name - 您的“username@yourcompany.com”样式名称

    您可以在UserPrincipal 上指定任何属性并将其用作PrincipalSearcher 的“示例查询”。

    【讨论】:

    • 我只是在维护一些现有的代码,所以我不想把你发给我的代码搞得一团糟,但是我想我可以把 * 放在开头和结尾,它应该可以工作也。
    • 像这样:sAMAccountName=*" + sAMAccountName + "*)
    • @EstebanV.: according to this 看来应该可以了,是的。
    • 这个答案显示 .vbs 脚本通过 sAMAccountName 进行通配符查询。 stackoverflow.com/a/17025882/185565
    猜你喜欢
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多