Solved

Find users who have the same contacts from ADS

Posted on 2007-12-01
9
258 Views
Last Modified: 2010-07-27
We have many users and many contacts that we have the same.Is there a way a script can get only users and contacts that has the same names from the ADS.With the descriptions to a file.

Regards
Sharath
0
Comment
Question by:bsharath
  • 5
  • 2
  • 2
9 Comments
 
LVL 11

Expert Comment

by:cup
ID: 20390609
Please correct me if I'm wrong: I'm not sure about what you're asking or saying.

1) You have many users
2) You have many contacts
3) Some of the users and contacts are the same
4) There is something called the ADS which presumably has some details about the users and contacts.
5) You want to get the users and contacts that have the same name, look them up in the ADS and dump them into a file.

Is that a fair analysis of what you're trying to achieve?  If not, could you please explain what you really want.

Is ADS the Automated Deployment Service for Windows 2003 or is it something completely different?
0
 
LVL 11

Author Comment

by:bsharath
ID: 20390639
You are right but i just want to find users and contacts that have the same Fullname (Displayname)
Any way to get just the users that have contacts and user names the same.
0
 
LVL 11

Expert Comment

by:cup
ID: 20392367
Where are the users and contacts stored?  Is it somewhere in a file or database or do they just login into the system and their id is on some global server.

What is ADS?
0
3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

 
LVL 11

Author Comment

by:bsharath
ID: 20393421
The users and contacts are stored in ADS (Active Directory)
0
 
LVL 65

Expert Comment

by:RobSampson
ID: 20562246
Sharath, try this script:

'====================
If Right(LCase(WScript.FullName), 11) = "wscript.exe" Then
      Set objShell = CreateObject("WScript.Shell")
      objShell.Run "cmd /k cscript """ & WScript.ScriptFullName & """", 1, False
      Set objShell = Nothing
      WScript.Quit
End If

Set adoCommand = CreateObject("ADODB.Command")
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
adoCommand.ActiveConnection = adoConnection

 ' Search entire Active Directory domain.
Set objRootDSE = GetObject("LDAP://RootDSE")

strDNSDomain = objRootDSE.Get("defaultNamingContext")
'strOUPath = "ou=users,ou=TestOU,"
strOUPath = ""
strBase = "<LDAP://" & strOUPath & strDNSDomain & ">"

strFilter = "(&(objectCategory=person)(objectClass=contact))"
'(profilePath=" & strOldPath & "*)
'strFilter = "(&(objectClass=computer)(cn=" & strComputer & "))"

' Comma delimited list of attribute values to retrieve.
'strAttributes = "sAMAccountName,cn"
strAttributes = "displayName, distinguishedName"

' Construct the LDAP syntax query.
strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
adoCommand.CommandText = strQuery
adoCommand.Properties("Page Size") = 100
adoCommand.Properties("Timeout") = 30
adoCommand.Properties("Cache Results") = False

' Run the query for contacts
Set adoContactsRecordset = adoCommand.Execute

' Enumerate the resulting recordset.
Do Until adoContactsRecordset.EOF
      ' Retrieve values and display.
      strContactName = adoContactsRecordset.Fields("displayName").Value
      strContactDN = adoContactsRecordset.Fields("distinguishedName").Value
      WScript.Echo "Checking Contact: " & strContactName & ": " & strContactDN

      'Change and run the query for user accounts
      strFilter = "(&(objectCategory=person)(objectClass=user)(displayName=" & strContactName & "))"
      strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
      adoCommand.CommandText = strQuery
      Set adoUsersRecordset = adoCommand.Execute

      Do Until adoUsersRecordset.EOF
            strUserName = adoUsersRecordset.Fields("displayName").Value
            strUserDN = adoUsersRecordset.Fields("distinguishedName").Value
            If LCase(strContactName) = LCase(strUserName) Then
                  WScript.Echo
                  WScript.Echo ">>> " & "CONTACT " & strContactName & ": " & strContactDN
                  WScript.Echo ">>> " & "USER    " & strUserName & ": " & strUserDN
                  WScript.Echo
            End If
            adoUsersRecordset.MoveNext
      Loop

      ' Move to the next record in the recordset.
      adoContactsRecordset.MoveNext
Loop

' Clean up.
adoContactsRecordset.Close
Set adoContactsRecordset = Nothing

adoConnection.Close

WScript.Echo
WScript.Echo "Done"
MsgBox "Done"
'====================

Regards,

Rob.
0
 
LVL 11

Author Comment

by:bsharath
ID: 20562313
Thanks Rob this works perfect.
How does the script nmatch the contacts and NTlogins?
Can i get the output to a file.
0
 
LVL 65

Accepted Solution

by:
RobSampson earned 500 total points
ID: 20562342
It takes each full Display Name of each Contact object, then searches for a full Display Name from a User object that matches.

This will also output the same text to a file:

'=================
If Right(LCase(WScript.FullName), 11) = "wscript.exe" Then
      Set objShell = CreateObject("WScript.Shell")
      objShell.Run "cmd /k cscript """ & WScript.ScriptFullName & """", 1, False
      Set objShell = Nothing
      WScript.Quit
End If

Set objFSO = CreateObject("Scripting.FileSystemObject")
strOutputFile = Replace(WScript.ScriptFullName, WScript.ScriptName, "") & "Contacts_With_Same_Display_Name_As_Users.txt"
Set objOutputFile = objFSO.CreateTextFile(strOutputFile, True)

Set adoCommand = CreateObject("ADODB.Command")
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
adoCommand.ActiveConnection = adoConnection

 ' Search entire Active Directory domain.
Set objRootDSE = GetObject("LDAP://RootDSE")

strDNSDomain = objRootDSE.Get("defaultNamingContext")
'strOUPath = "ou=users,ou=TestOU,"
strOUPath = ""
strBase = "<LDAP://" & strOUPath & strDNSDomain & ">"

strFilter = "(&(objectCategory=person)(objectClass=contact))"
'(profilePath=" & strOldPath & "*)
'strFilter = "(&(objectClass=computer)(cn=" & strComputer & "))"

' Comma delimited list of attribute values to retrieve.
'strAttributes = "sAMAccountName,cn"
strAttributes = "displayName, distinguishedName"

' Construct the LDAP syntax query.
strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
adoCommand.CommandText = strQuery
adoCommand.Properties("Page Size") = 100
adoCommand.Properties("Timeout") = 30
adoCommand.Properties("Cache Results") = False

' Run the query for contacts
Set adoContactsRecordset = adoCommand.Execute

' Enumerate the resulting recordset.
Do Until adoContactsRecordset.EOF
      ' Retrieve values and display.
      strContactName = adoContactsRecordset.Fields("displayName").Value
      strContactDN = adoContactsRecordset.Fields("distinguishedName").Value
      WScript.Echo "Checking Contact: " & strContactName & ": " & strContactDN

      'Change and run the query for user accounts
      strFilter = "(&(objectCategory=person)(objectClass=user)(displayName=" & strContactName & "))"
      strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
      adoCommand.CommandText = strQuery
      Set adoUsersRecordset = adoCommand.Execute

      Do Until adoUsersRecordset.EOF
            strUserName = adoUsersRecordset.Fields("displayName").Value
            strUserDN = adoUsersRecordset.Fields("distinguishedName").Value
            If LCase(strContactName) = LCase(strUserName) Then
                  WScript.Echo
                  WScript.Echo ">>> " & "CONTACT " & strContactName & ": " & strContactDN
                  WScript.Echo ">>> " & "USER    " & strUserName & ": " & strUserDN
                  WScript.Echo
                  objOutputFile.WriteLine ""
                  objOutputFile.WriteLine ">>> " & "CONTACT " & strContactName & ": " & strContactDN
                  objOutputFile.WriteLine ">>> " & "USER    " & strUserName & ": " & strUserDN
                  objOutputFile.WriteLine ""
            End If
            adoUsersRecordset.MoveNext
      Loop

      ' Move to the next record in the recordset.
      adoContactsRecordset.MoveNext
Loop

' Clean up.
adoContactsRecordset.Close
Set adoContactsRecordset = Nothing

adoConnection.Close

objOutputFile.Close
Set objOutputFile = Nothing
Set objFSO = Nothing

WScript.Echo
WScript.Echo "Done"
MsgBox "Done"
'=================

Regards,

Rob.
0
 
LVL 11

Author Closing Comment

by:bsharath
ID: 31412102
Excellent Rob....
0
 
LVL 11

Author Comment

by:bsharath
ID: 20562474
0

Featured Post

DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
How To Loop - Python 19 86
Adapting Windows 7 Image for all HDD size 7 84
Powershell Script need assistance to make some changes 4 80
Excel file not created as expected 7 72
Windows Script Host (WSH) has been part of Windows since Windows NT4. Windows Script Host provides architecture for building dynamic scripts that consist of a core object model, scripting hosts, and scripting engines. The key components of Window…
Having just graduated from college and entered the workforce, I don’t find myself always using the tools and programs I grew accustomed to over the past four years. However, there is one program I continually find myself reverting back to…R.   So …
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)

770 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