2010-09-23 62 views
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); 
       } 
      } 
     } 

    } 

我有2個問題與此:

1)它是非常緩慢。大約有100臺電腦出現,加載需要大約1分鐘。

2)我想只有那些目前在線的計算機列表。

可以這樣做,因爲我看過其他程序在做它,它們更快,也只能顯示在線的程序。

我錯過了什麼嗎?

回答

2

我知道這有點舊,但對於其他人...這段代碼將在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 
0

我想看看在CodePlex上

你也不得不發現Linq To Active Directory定義「我的網絡」。你的子網?你的組織單位?你的域名?你的森林?

還要考慮您的LDAP服務器在哪裏查詢。它是靠近還是在遠程鏈接的另一端?

另外你認爲「在線」是什麼?你希望能夠ping通它嗎?你希望能夠連接到它並執行操作?

這裏有很多事情要考慮。另外,如果您有其他基礎架構組件(如SCCM/SMS服務器),則由於所有發現數據都已流入數據倉庫,因此通常可以更快地查詢它們。

+0

對於「網絡」我的意思是我的域名。 – 2010-09-24 08:11:57

+0

我認爲他的意思是:就像Windows資源管理器一樣。它不會向您顯示網絡位置,如果您嘗試打開並列出共享,將返回以下錯誤:RPC服務器不可用......我目前也在尋找... – MaxOvrdrv 2014-08-27 17:41:23