我正在尝试在Windows窗体中将代码从VB调整为C#。我仍然试图掌握DFS的概念,以及如何从Windows窗体中操作它。
VB使用GetObject("LDAP://RootDSE")
函数使用DirectorySearcher
在Active Directory中搜索共享。我已经调整了使用相同对象从用户ID返回UserPrincipal
的其他函数,以及检查组是否已存在(使用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
对象扩展为得到目录或其他东西。
答案 0 :(得分:1)
前两行应该是这样的:
string domain;
using (DirectoryEntry rootDSE = new DirectoryEntry("LDAP://RootDSE"))
{
domain = rootDSE.Properties["defaultNamingContext"].Value.ToString();
}
剩下的代码应该很容易转换。