Drew Wutka
DWUTKA at Marlow.com
Tue Jun 23 11:12:50 CDT 2009
Sorry for the long delay in finishing this subject, been swamped! So, the last tutorial had us connecting a client to our domain. And now it's time to see what you can do with Active Directory programmatically. That was a big reason of posting this to AccessD, because as developers, you can use the information in AD (Active Directory) inside your apps. First up, computer information: (Please watch for linewrap) Function ListADComputers() On Error GoTo ErrorHandler Dim Comm As ADODB.Command Dim rs As ADODB.Recordset Dim strSQL As String Dim strCurrentDomain As String Dim cnn As ADODB.Connection Dim strResult As String Set cnn = New ADODB.Connection cnn.Provider = "ADsDSOObject" cnn.Open "Active Directory Provider" Set Comm = New Command Comm.ActiveConnection = cnn Comm.Properties("Page Size") = 100 Comm.Properties("Timeout") = 60 Comm.Properties("Sort On") = "Name" Comm.Properties("Cache Results") = False strCurrentDomain = GetObject("LDAP://RootDSE").Get("defaultNamingContext") strSQL = "<LDAP://" & strCurrentDomain & _ ">;(objectClass=computer);Name,operatingSystem;subtree" Comm.CommandText = strSQL Set rs = Comm.Execute If rs.EOF = False Then rs.MoveFirst Do Until rs.EOF = True If Not IsNull(rs.Fields("Name").Value) Then strResult = rs.Fields("Name").Value If Not IsNull(rs.Fields("operatingSystem").Value) Then strResult = strResult & " - OS: " & rs.Fields("operatingSystem").Value Else strResult = strResult & " - OS: UNKNOWN" End If Debug.Print strResult End If rs.MoveNext Loop End If rs.Close Set rs = Nothing Set Comm = Nothing cnn.Close Set cnn = Nothing Exit Function ErrorHandler: If Err.Number = -2147023541 Then Err.Clear Else If Err.Number = 457 Then Resume Next Else MsgBox Err.Number & " - " & Err.Description End If End If End Function As you can see, you can use ADO and LDAP to query Active Directory. In the query structure, you are telling LDAP that you are querying for the object class 'computer'. Here is a link to show you what else is available for that class: http://msdn.microsoft.com/en-us/library/ms680987(VS.85).aspx A little explanation, on the 'derived from' column, that is telling you where that information is coming from, so 'Address' is coming from a Person class, so it's not native to a computer class. How to use this, let's say we want the service packs, the query would be: strSQL = "<LDAP://" & strCurrentDomain & _ ">;(objectClass=computer);Name,operatingSystem,operatingSystemServicePac k;subtree" Note that on the page from the link, it doesn't show 'operatingSystemServicePack', there are spaces or dashes, clicking on that property will give you the LDAP display name, which is what you need to use in the query. Then, in our sample function, just add this part after the first If Not Isnull, else, end if: (Watch for line wrap) If Not IsNull(rs.Fields("operatingSystemServicePack").Value) Then strResult = strResult & " - Role: " & rs.Fields("operatingSystemServicePack").Value Else strResult = strResult & " - Role: UNKNOWN" End If You can use a list of computers for all sorts of things. For general customer info, remote installation, etc. Next up, User Information! Drew The information contained in this transmission is intended only for the person or entity to which it is addressed and may contain II-VI Proprietary and/or II-VI Business Sensitive material. If you are not the intended recipient, please contact the sender immediately and destroy the material in its entirety, whether electronic or hard copy. You are notified that any review, retransmission, copying, disclosure, dissemination, or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited.