3

我有一个搜索本地定义的 Windows 用户的代码片段:

using (PrincipalContext context = new PrincipalContext(ContextType.Machine)) {
    using (Principal queryFilter = new UserPrincipal(context) { Name = accountName }) {
        using (PrincipalSearcher searcher = new PrincipalSearcher(queryFilter)) {
            var principal = searcher.FindOne();
            ...
        }
    }
}

如果accountName包含正常的字母数字(例如“testuser”),则代码可以正常工作。但是,如果名称包含美元符号(例如“test$user”),FindOne()则不返回任何内容。

我怀疑 $ 被解释为某种元字符。有没有办法防止这种情况发生,以便按字面解释?

4

2 回答 2

2

如果您只寻找一个条目 - 试试这个:

UserPrincipal user = UserPrincipal.FindByIdentity(context, "test$user"); 

也许这行得通?

于 2013-09-03T20:47:44.063 回答
0

我认为这是一个泄漏抽象的例子。您不能在 WinNT 提供程序上进行 LDAP 搜索,这是 Machine ContextType 正在使用的。

于 2013-09-03T23:28:50.320 回答