Solved

Need to extract some user account information from Active Directory

Posted on 2008-10-27
3
1,174 Views
Last Modified: 2012-06-21
I am needing a VBScript to that will query a txt file of user names, and then create an output csv file containing the follwoing information from Active Directory about the users.

First Name
Last Name
Title
Department
0
Comment
Question by:seaninman
3 Comments
 
LVL 10

Expert Comment

by:Alan_White
ID: 22814227
Are all the users you need to look up in a single OU?
0
 
LVL 4

Author Comment

by:seaninman
ID: 22814250
Sorry forgot to the put that.  No there are mulitiple OU's
0
 
LVL 3

Accepted Solution

by:
Angelized earned 500 total points
ID: 22819875
Here we go, lemme know if you need me to comment this code.
'Option Explicit
Dim oFSO, ForReading, ForWriting, objdialog, Intresult, userfile
Dim Mylist, myarray, username, sUserLDAPName, ts, report
ForReading = 1
ForWriting = 2
Set oFSO=CreateObject("Scripting.FileSystemObject")
Set objDialog = CreateObject("UserAccounts.CommonDialog")
 
objDialog.Filter = "Text Files|*.txt|All Files|*.*"
objDialog.FilterIndex = 1
intResult = objDialog.ShowOpen
If intResult = 0 Then
    Wscript.Quit
Else
    UserFile = objDialog.FileName
End If
 
MyList= ofso.OpenTextFile(UserFile, ForReading).ReadAll
myArray=Split(MyList,vbCrLf, -1, vbtextcompare)
 
For Each username In myarray 
	sUserLDAPName = QueryActiveDirectory(Trim(username))
	If sUserLDAPName <> "Not Found" Then
	   On Error Resume Next
	   Set objUser = GetObject("LDAP://" & sUserLDAPName) 
	   report = report & username
	   report = report & "," & CheckIfEmpty(objUser.Firstname)
	   report = report & "," & CheckIfEmpty(objUser.lastname)
	   report = report & "," & CheckIfEmpty(objUser.description)
	   report = report & "," & CheckIfEmpty(objUser.department)
	   report = report & vbCrLf
	End If  
Next
 
Set ts = oFSO.CreateTextFile ("output.csv", ForWriting)
ts.Write report
MsgBox "Done!"
	 
Function CheckIfEmpty (property)
  If IsEmpty(Property) Then 
     CheckIfEmpty = "N/a"
  Else
     CheckIfEmpty = property
  End if 
End Function
 
Function QueryActiveDirectory(sUsername)
'Function:      QueryActiveDirectory
'Purpose:       Search the Active Directory's Global Catalog for users
'Parameters:    UserName - user to search for
'Return:        The user's distinguished name
 
    Dim oAD 'As IADs
    Dim oGlobalCatalog 'As IADs
    Dim oRecordSet 'As Recordset
    Dim oConnection 'As New Connection
    Dim strADsPath 'As String
    Dim strQuery 'As String
    Dim strUPN 'As String
 
    Set oRecordSet = CreateObject("ADODB.Recordset")
    Set oConnection = CreateObject("ADODB.Connection")
 
    'Determine the global catalog path
    Set oAD = GetObject("GC:")
    For Each oGlobalCatalog In oAD
        strADsPath = oGlobalCatalog.ADsPath
    Next
    'Initialize the ADO object
    oConnection.Provider = "ADsDSOObject"
    'The ADSI OLE-DB provider
    oConnection.connectiontimeout = 15
    oConnection.Open "ADs Provider"
    'Create the search string
    'MsgBox strADsPath
    strQuery = "<" & strADsPath & _
      ">;(&(objectClass=user)(objectCategory=person)(samaccountName=" & _
      sUsername & "));userPrincipalName,cn,distinguishedName;subtree"
        'Execute the query
    'MsgBox strQuery
    Set oRecordSet = oConnection.Execute(strQuery)
    If oRecordSet.EOF And oRecordSet.BOF Then
       'An empty recordset was returned
        QueryActiveDirectory = "Not Found"
    Else    'Records were found; loop through them
        While Not oRecordSet.EOF
            QueryActiveDirectory = oRecordSet.Fields("distinguishedName")
            oRecordSet.MoveNext
        Wend
    End If
    oConnection.Close
    Set oConnection = Nothing
    Set oRecordSet = Nothing
End Function

Open in new window

0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Script to copy or move mouse-selected collection of files plus targets referenced by shortcuts (.lnk) The purpose of this article is to help illuminate the real challenges and options available (where they may exist) for utilizing simple scriptin…
This script will sweep a range of IP addresses (class c only, 255.255.255.0) and report to a log the version of office installed. What it does: 1.)      Creates log file in the directory the script is run from (if it doesn't already exist) 2.)      Sweep…
In a recent question (https://www.experts-exchange.com/questions/28997919/Pagination-in-Adobe-Acrobat.html) here at Experts Exchange, a member asked how to add page numbers to a PDF file using Adobe Acrobat XI Pro. This short video Micro Tutorial sh…
Microsoft Active Directory, the widely used IT infrastructure, is known for its high risk of credential theft. The best way to test your Active Directory’s vulnerabilities to pass-the-ticket, pass-the-hash, privilege escalation, and malware attacks …

773 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question