Maximus
Гость
|
Создано: 16.11.2005 00:20:05
|
чем воспользоваться для создания списка почтовых ящиков все. может воспользоваться скриптом иль прогой подскажите ???
|
Pavel Kozlov
Редактор
Всего сообщений: 1152
Дата регистрации: 07.11.2005
|
Создано: 16.11.2005 22:41:00
|
 |
Доброго дня Maximus
Есть два варианта решения твоей задачи.
1. Если тебя интересует только основной ящик пользователя, то ты обращаешся к AD и запрашиваешь свойство пользователя - mail.
Например (результаты выводятся в текстовый файл, с сортировкой по отделу)
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Const ForAppending = 2
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile _
("C:\username.txt", ForAppending, True)
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.Properties("Sort On") = "department"
objCommand.CommandText = _
";(&(objectClass=user)(department=*)(mail=*));department,name,mail;subtree"
Set objRecordSet = objCommand.Execute
While Not objRecordset.EOF
objTextFile.WriteLine(objRecordset.Fields("department") _
& VbTab &objRecordset.Fields("name") & VbTab & objRecordset.Fields("mail"))
objRecordset.MoveNext
Wend
objTextFile.Close
objConnection.Close
Это самый простой способ.
2. Если тебе требуется вывести список всех почтовых ящиков. Здесь требуется работа с таким свойством как - ProxyAddresses. Единственное что следует учитывать это то, что в результате на выходе будут ВСЕ адреса включая Х400 и требуется дополнительная филтрация.
например:
objConnection.Open "Active Directory Provider"
Const ForAppending = 2
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile _
("C:\username.txt", ForAppending, True)
Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = _
"Select mail, cn, ProxyAddresses from 'GC://DC=ваш,DC=домен' " _
& "where objectClass='user' AND mail='*@*' ORDER BY cn"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Timeout") = 30
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.Properties("Cache Results") = False
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
i = 0
Do Until objRecordSet.EOF
strName = objRecordSet.Fields("cn")
Set regEx = New RegExp
Set regEx1 = New RegExp
regEx.Pattern = "^SMTP:"
regEx1.Pattern = "^SMTP:SystemMailbox{"
regEx.IgnoreCase = True
regEx1.IgnoreCase = True
arrProxylist = objRecordSet.Fields("ProxyAddresses").Value
For each Addy in arrProxylist
retVal = regEx.Test(Addy)
If retVal Then
retVal1 = regEx1.Test(Addy)
If NOT retVal1 Then
i = i + 1
objTextFile.WriteLine (strName & vbTab & Addy)
End If
End If
Next
objRecordSet.MoveNext
Loop
objTextFile.Close
objConnection.Close
Скрипты не "причесаны" поэтому если есть идеи по их оптимизации с удовольствием приму.
--------------------
С уважением,
Павел Козлов
|
alternati
Гость
|
Создано: 26.12.2008 03:05:23
|
Может лучше использовать Query Based Distribution Group?
|
mdanshin
Посетитель
Всего сообщений: 268
Дата регистрации: 21.11.2006
|
Создано: 26.12.2008 03:39:04
|
|
alternati пишет:
Может лучше использовать Query Based Distribution Group? |
Это смотря для каких целей нужен список. Павел привел правильные скрипты. В замен первого варианта могу еще предложить вот такой способ:
http://mdanshin.blogspot.com/2007/10/ad.html
Ну и если вы работаете с GUI и хотите выбрать всех пользователей с п/я то почитайте вот эту статью. http://mdanshin.blogspot.com/2007/12/excange.html Там указан запрос для Custom Query
------
http://danshin.ms
|