我正在尝试以 Windows 形式将代码从 VB 改编为 C#。我仍在尝试总体上了解 DFS 的想法,以及如何从 Windows 窗体中操作它。
VB 使用该GetObject("LDAP://RootDSE")
功能在 Active Directory 中搜索使用DirectorySearcher
. 我已经调整了使用相同对象的其他函数UserPrincipal
从用户 id 返回 a ,以及检查 Group 是否已经存在(使用 a GroupPrincipal
)。这些通常是这样的:
public static UserPrincipal GetUserPrincipal(string userId) {
PrincipalContext context = new PrincipalContext(ContextType.Domain);
UserPrincipal user = new UserPrincipal(context);
user.Name = userId;
PrincipalSearcher searcher = new PrincipalSearcher(user);
return searcher.FindOne() as UserPrincipal;
}
但是,我找不到任何包含我正在使用的关键字的文档,但我正在尝试获取 DFS 命名空间的目录列表(我认为)。
这是VB中的(修改后的)代码:
Public Function GetDfsNamespaces() As List(Of String)
Dim objRootDSE = GetObject("LDAP://RootDSE")
Dim domain As String = objRootDSE.Get("DefaultNamingContext")
Dim entry As New DirectoryEntry("LDAP://CN=DFs-Configuration,CN=System," & domain)
Dim searcher As New DirectorySearcher(entry)
searcher.PropertiesToLoad.Add("cn")
searcher.Filter = "(objectClass=msDFS-NamespaceAnchor)"
searcher.SearchScope = SearchScope.Subtree
Dim results As SearchResultCollection = searcher.FindAll()
Dim strResults As New List(Of String)
For Each result In results
strResults.Add(result.Properties("cn")(0))
Next
return strResults
End Function
我尝试查看 的源代码UserPrincipal
,GroupPrincipal
但ComputerPrincipal
无法弄清楚如何扩展Principal
对象以获取目录或其他内容。