2009-11-25 29 views

回答

1

像這樣的東西可能指向你在正確的方向,使用的System.DirectoryServices和System.DirectoryServices.ActiveDirectory:

Private Function GetDomainUsers(ByVal domainDirectoryEntry As DirectoryEntry, ByRef userList As IList) As Integer 
Try 
    userList = New ArrayList() 

    Using domainDirectoryEntry 
     Dim ds As New DirectorySearcher(domainDirectoryEntry, "(&(objectCategory=person)(objectClass=user))", New String() {"distinguishedName"}) 

     Using src As SearchResultCollection = ds.FindAll() 
      For Each sr As SearchResult In src 
       userList.Add(sr.Properties("distinguishedName")(0)) 
      Next 
     End Using 
    End Using 

    Return userList.Count 
Catch generatedExceptionName As Exception 
    userList = Nothing 
    Return -1 
Finally 
    domainDirectoryEntry = Nothing 
End Try 

端功能

+0

我剛剛嘗試過,VS不認可DirectorEntry作爲參數類型。 – 2009-11-25 19:07:29

+0

我應該添加該即時試圖在.net 2.0中執行此操作。 – 2009-11-25 19:13:32

+0

您是否在代碼中爲System.DirectoryServices命名空間添加了Imports語句,並且已將對System.DirectoryServices.dll的引用添加到項目中? – 2009-11-25 19:32:31

0

另一種辦法是探索System.ManagementSystem.Management.Instrumentation。這裏是這是您如何使用這些命名空間提取特定域的用戶的簡短片段。

Imports System.Management 
Imports System.Management.Instrumentation 

Sub PrintDomainUsers() 

     Dim domainName As String = System.Environment.UserDomainName.ToString 
     Dim userQuery As SelectQuery = New SelectQuery("Win32_UserAccount", "Domain='" & domainName & "'") 
     Try 
      Dim userSearch As ManagementObjectSearcher = New ManagementObjectSearcher(userQuery) 
      For Each domainUser In userSearch.Get 
       Console.WriteLine(domainUser("Name")) 
      Next 

     Catch ex As Exception 
      Throw ex 
     End Try 

End Sub 
+0

通過WMI使用'System.DirectoryServices'用於Active Directory任何一天。強大的打字只是使用託管類別的一大收穫。 – 2009-11-25 20:54:26

0
Imports System.Management 
Imports System.Management.Instrumentation 

Sub PrintDomainUsers() 

     Dim domainName As String = System.Environment.UserDomainName.ToString 
     Dim userQuery As SelectQuery = New SelectQuery("Win32_UserAccount", "Domain='" & domainName & "'") 
     Try 
      Dim userSearch As ManagementObjectSearcher = New ManagementObjectSearcher(userQuery) 
      For Each domainUser In userSearch.Get 
       Console.WriteLine(domainUser("Name")) 
      Next 

     Catch ex As Exception 
      Throw ex 
     End Try 

End Sub 

這工作,但我如何通過一定的組過濾器。我得到千分之一的收據

+0

我知道我需要添加到條件語句,但我不知道要添加什麼。幫幫我!?!? – 2009-11-26 01:35:47

3

它可能會在選擇查詢中引發錯誤。

請檢查:

你到你的項目添加到System.Management程序集的引用?如果你沒有,這樣做:

在VS中,單擊項目菜單>添加引用。
在.Net選項卡上,向下滾動,直到看到System.Management。點擊它選擇,然後點擊確定。
現在回到你的代碼中,在你的班級的最頂層,放入「Imports System.Management」,你應該全部設置好。

來源:

http://www.vbforums.com/showthread.php?t=560422

它的工作對我來說沒有任何問題。我能夠獲得域的所有用戶名。