2

我正在使用这段代码来输出我网络上所有计算机的列表(语言是 jscript.net,但这只是对 C# 的一个小操作)。

    var parentEntry = new DirectoryEntry();

    parentEntry.Path = "WinNT:";
    for(var childEntry in parentEntry.Children) {
        if(childEntry.SchemaClassName == "Domain") {
            var parentDomain = new TreeNode(childEntry.Name); 
            this.treeView1.Nodes.Add(parentDomain);

            var subChildEntry : DirectoryEntry;
            var subParentEntry = new DirectoryEntry();
            subParentEntry.Path = "WinNT://" + childEntry.Name;
            for(subChildEntry in subParentEntry.Children) {
                var newNode1 = new TreeNode(subChildEntry.Name);
                if(subChildEntry.SchemaClassName == "Computer") {
                    parentDomain.Nodes.Add(newNode1);
                }
            }
        }

    }

我有两个问题:

1)它非常慢。显示大约 100 台计算机,加载大约需要 1 分钟。

2) 我只想获取当前在线的计算机列表。

这是可以做到的,因为我已经看到其他程序这样做了,而且它们的速度要快得多,而且它们只能在线显示那些程序。

我错过了什么吗?

4

2 回答 2

3

我知道它有点旧,但对其他人来说......这个片段将在 2-3 秒内使用 AD 从域中返回 760 个计算机名称......一个显着的改进......享受!

    Friend Shared Function DomainComputers() As Generic.List(Of String)

    ' Add a Reference to System.DirectoryServices

    Dim Result As New Generic.List(Of String)

    Dim ComputerName As String = Nothing
    Dim SRC As SearchResultCollection = Nothing
    Dim Searcher As DirectorySearcher = Nothing

    Try

        Searcher = New DirectorySearcher("(objectCategory=computer)", {"Name"})

        Searcher.Sort = New SortOption("Name", SortDirection.Ascending)
        Searcher.Tombstone = False

        SRC = Searcher.FindAll

        For Each Item As SearchResult In SRC
            ComputerName = Item.Properties("Name")(0)
            Result.Add(ComputerName)
        Next

    Catch ex As Exception

    End Try

    Return Result

End Function
于 2011-12-01T13:26:00.233 回答
0

我会查看在CodePlex 上找到的Linq To Active Directory

您还必须定义“我的网络”。你的子网?您的组织单位?你的域名?你的森林?

还要考虑您要查询的 LDAP 服务器在哪里。它是关闭的还是在远程链接的另一端?

另外,您认为“在线”是什么?您希望能够 ping 通它吗?您是否希望能够连接到它并执行操作?

这里有很多事情需要考虑。此外,如果您有其他基础架构组件,例如 SCCM/SMS 服务器,则通常可以更快地查询它们,因为所有发现数据都已流入数据仓库。

于 2010-09-23T13:35:09.293 回答