mepack
asked on
How can I list all smtp addresses for a user including group smtp addresses?
How can I list all smtp addresses for a user including group smtp addresses?
I have Exchange 2003 on a Windows 2003 server within a Windows 2003 Active Directory environment.
I need a script if possible as I need to run this for every user in the domain. Approx 100 users.
Thanks
I have Exchange 2003 on a Windows 2003 server within a Windows 2003 Active Directory environment.
I need a script if possible as I need to run this for every user in the domain. Approx 100 users.
Thanks
ASKER
I need to return the Group SMTP addresses for the user as well as the primary and secondary SMTP addresses.
Thanks
Thanks
The below script would do what you need. Call it via cscript and you can pipe to a text file, e.g.
cscript list_smtp.vbs > results.txt
It'll go through every user in the domain, list all the smtp addresses, then all the smtp addresses associated with groups the user is a member of. It's going to give you a lot of output but it gives you what you asked for. Let me know if you need me to modify to make more user friendly. I've knocked it together quickly so it's a bit basic at the moment....
You shouldn't need to change any of the code.
cscript list_smtp.vbs > results.txt
It'll go through every user in the domain, list all the smtp addresses, then all the smtp addresses associated with groups the user is a member of. It's going to give you a lot of output but it gives you what you asked for. Let me know if you need me to modify to make more user friendly. I've knocked it together quickly so it's a bit basic at the moment....
You shouldn't need to change any of the code.
Set oRootDSE = GetObject("LDAP://RootDSE")
strBase = "<LDAP://" & oRootDSE.get("defaultNamingContext") & ">;"
strFilter = "(&(objectclass=user)(objectcategory=person));"
strAttrs = "distinguishedName;"
strScope = "subtree"
Set objConn = CreateObject("ADODB.Connection")
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
Set objRS = objConn.Execute(strBase & strFilter & strAttrs & strScope)
objRS.MoveFirst
While Not objRS.EOF
Set objUser = GetObject("LDAP://" & objRS.Fields(0).Value)
WScript.Echo "Listing Email Addresses For " & objUser.cn & "................................................"
listEmail objUser.distinguishedName
'Get group membership and list emails...
If IsEmpty(objUser.memberOf) Then
'Do nothing...
ElseIf (TypeName(objUser.memberOf) = "String") Then
WScript.Echo objUser.cn & " is a member of " & objUser.memberOf
listEmail objUser.memberOf
Else
For Each groupDN In objUser.memberOf
WScript.Echo objUser.cn & " is a member of " & groupDN
listEmail groupDN
Next
End If
objRS.MoveNext
Wend
Sub listEmail(objDN)
Set obj = GetObject("LDAP://" & objDN)
If IsEmpty(obj.proxyAddresses) Then
'Member of no groups.
ElseIf (TypeName(obj.proxyAddresses) = "String") Then
'Member of 1 group
If UCase(Left(obj.proxyAddresses,4)) = "SMTP" Then WScript.Echo obj.proxyAddresses
Else
'Member of >1 groups
For Each proxyAdd In obj.proxyAddresses
If UCase(Left(proxyAdd,4)) = "SMTP" Then WScript.Echo proxyAdd
Next
End If
End Sub
ASKER
Thanks Tony..
Is there anyway you can get the script to select only Mail enabled groups?
Thanks
Is there anyway you can get the script to select only Mail enabled groups?
Thanks
Try this....
(should only output the groups with 1 or more email addresses...)
(should only output the groups with 1 or more email addresses...)
Set oRootDSE = GetObject("LDAP://RootDSE")
strBase = "<LDAP://" & oRootDSE.get("defaultNamingContext") & ">;"
strFilter = "(&(objectclass=user)(objectcategory=person));"
strAttrs = "distinguishedName;"
strScope = "subtree"
Set objConn = CreateObject("ADODB.Connection")
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
Set objRS = objConn.Execute(strBase & strFilter & strAttrs & strScope)
objRS.MoveFirst
While Not objRS.EOF
Set objUser = GetObject("LDAP://" & objRS.Fields(0).Value)
WScript.Echo "Listing Email Addresses For " & objUser.cn & "................................................"
listEmail objUser.distinguishedName
'Get group membership and list emails...
If IsEmpty(objUser.memberOf) Then
'Do nothing...
ElseIf (TypeName(objUser.memberOf) = "String") Then
listEmail objUser.memberOf
Else
For Each groupDN In objUser.memberOf
listEmail groupDN
Next
End If
objRS.MoveNext
Wend
Sub listEmail(objDN)
Set obj = GetObject("LDAP://" & objDN)
If IsEmpty(obj.proxyAddresses) Then
'Member of no groups.
ElseIf (TypeName(obj.proxyAddresses) = "String") Then
WScript.Echo objUser.cn & " is a member of " & objDN
If UCase(Left(obj.proxyAddresses,4)) = "SMTP" Then WScript.Echo obj.proxyAddresses
Else
'Member of >1 groups
WScript.Echo objUser.cn & " is a member of " & objDN
For Each proxyAdd In obj.proxyAddresses
If UCase(Left(proxyAdd,4)) = "SMTP" Then WScript.Echo proxyAdd
Next
End If
End Sub
ASKER
Tony..
Script is returning the correct values except it errors on a particular user everytime with the following message..
list_smtp.vbs(14, 2) (null): 0x80005000
Thanks
Script is returning the correct values except it errors on a particular user everytime with the following message..
list_smtp.vbs(14, 2) (null): 0x80005000
Thanks
What is the name (CN) of the user it is failing on (as it is displayed in AD Users & Computers)? Does it have any special characters in it?
ASKER
cn=RedhatPrint
Seems strange that it would fail on one particular user. What sort of account is this? It's like the distinguishedName attribute is null or malformed?
Whats the actual distinguishedName attribute? Check in ADSIEDIT.msc and let us know. I'm leaving the office now but I'll check tomorrow.
Tony
Whats the actual distinguishedName attribute? Check in ADSIEDIT.msc and let us know. I'm leaving the office now but I'll check tomorrow.
Tony
ASKER
Tony..
distinguishedName attribute =
CN=RedhatPrint,OU=System Accounts,OU=Users,OU=MELDO M,DC=domai n,DC=com
Thanks
distinguishedName attribute =
CN=RedhatPrint,OU=System Accounts,OU=Users,OU=MELDO
Thanks
Actually it can't be this user it's failing on. It must be the next one after this, as the echo statement is after the LDAP connection. I've added some error trapping to the code it will enable the script to continue in the event of a failed connection, and will return any error codes, and the offending DN.
Let me know what the error generated is.
Thanks,
Tony
Let me know what the error generated is.
Thanks,
Tony
Set oRootDSE = GetObject("LDAP://RootDSE")
strBase = "<LDAP://" & oRootDSE.get("defaultNamingContext") & ">;"
strFilter = "(&(objectclass=user)(objectcategory=person));"
strAttrs = "distinguishedName;"
strScope = "subtree"
Set objConn = CreateObject("ADODB.Connection")
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
Set objRS = objConn.Execute(strBase & strFilter & strAttrs & strScope)
objRS.MoveFirst
While Not objRS.EOF
If objRS.Fields(0).Value <> "" Then
On Error Resume Next
Set objUser = GetObject("LDAP://" & objRS.Fields(0).Value)
If Err.Number <> 0 Then
WScript.Echo "!!!!ERROR binding to object with the DN : " & objRS.Fields(0).Value
WScript.Echo "Error : " & Err.Number & " - " & Err.Description
Err.Clear
End If
On Error Goto 0
WScript.Echo ""
WScript.Echo "Listing Email Addresses For " & objUser.cn & "................................................"
listEmail objUser.distinguishedName
'Get group membership and list emails...
If IsEmpty(objUser.memberOf) Then
'Do nothing...
ElseIf (TypeName(objUser.memberOf) = "String") Then
listEmail objUser.memberOf
Else
For Each groupDN In objUser.memberOf
listEmail groupDN
Next
End If
objRS.MoveNext
Else
WScript.Echo "!!!!ERROR Query result with no DN!!"
End if
Wend
Sub listEmail(objDN)
Set obj = GetObject("LDAP://" & objDN)
If IsEmpty(obj.proxyAddresses) Then
'Member of no groups.
ElseIf (TypeName(obj.proxyAddresses) = "String") Then
WScript.Echo objUser.cn & " is a member of " & objDN
If UCase(Left(obj.proxyAddresses,4)) = "SMTP" Then WScript.Echo obj.proxyAddresses
Else
'Member of >1 groups
WScript.Echo objUser.cn & " is a member of " & objDN
For Each proxyAdd In obj.proxyAddresses
If UCase(Left(proxyAdd,4)) = "SMTP" Then WScript.Echo proxyAdd
Next
End If
End Sub
Actually, scrub that - use this code (bad day!)
Set oRootDSE = GetObject("LDAP://RootDSE")
strBase = "<LDAP://" & oRootDSE.get("defaultNamingContext") & ">;"
strFilter = "(&(objectclass=user)(objectcategory=person));"
strAttrs = "distinguishedName;"
strScope = "subtree"
Set objConn = CreateObject("ADODB.Connection")
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
Set objRS = objConn.Execute(strBase & strFilter & strAttrs & strScope)
objRS.MoveFirst
While Not objRS.EOF
If objRS.Fields(0).Value <> "" Then
On Error Resume Next
Set objUser = GetObject("LDAP://" & objRS.Fields(0).Value)
If Err.Number <> 0 Then
WScript.Echo "!!!!ERROR binding to object with the DN : " & objRS.Fields(0).Value
WScript.Echo "Error : " & Err.Number & " - " & Err.Description
Err.Clear
Else
On Error Goto 0
WScript.Echo ""
WScript.Echo "Listing Email Addresses For " & objUser.cn & "................................................"
listEmail objUser.distinguishedName
'Get group membership and list emails...
If IsEmpty(objUser.memberOf) Then
'Do nothing...
ElseIf (TypeName(objUser.memberOf) = "String") Then
listEmail objUser.memberOf
Else
For Each groupDN In objUser.memberOf
listEmail groupDN
Next
End If
objRS.MoveNext
End If
Else
WScript.Echo "!!!!ERROR Query result with no DN!!"
End if
Wend
Sub listEmail(objDN)
Set obj = GetObject("LDAP://" & objDN)
If IsEmpty(obj.proxyAddresses) Then
'Member of no groups.
ElseIf (TypeName(obj.proxyAddresses) = "String") Then
WScript.Echo objUser.cn & " is a member of " & objDN
If UCase(Left(obj.proxyAddresses,4)) = "SMTP" Then WScript.Echo obj.proxyAddresses
Else
'Member of >1 groups
WScript.Echo objUser.cn & " is a member of " & objDN
For Each proxyAdd In obj.proxyAddresses
If UCase(Left(proxyAdd,4)) = "SMTP" Then WScript.Echo proxyAdd
Next
End If
End Sub
ASKER
Tony,
!!!!ERROR binding to object with the DN : CN=Burning / Feedback,OU=System Accounts,OU=Users,OU=MELDO M,DC=domai n,DC=com
Thanks
!!!!ERROR binding to object with the DN : CN=Burning / Feedback,OU=System Accounts,OU=Users,OU=MELDO
Thanks
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Tony.
Many Thanks for the script..
I've awarded the points.
Many Thanks for the script..
I've awarded the points.
http://support.microsoft.c
https://www.experts-exchange.com/questions/21728007/Export-Extract-All-SMTP-Address-from-Windows-2003-Active-Directory.html