Почтовый ящик

Как узнать какому почтовому ящику принадлежит определенный электронный адрес?

Эта задачка довольно простая и если Вы считаете, что хорошо знаете PowerShell, то она не вызовет у вас затруднений.

Мне сегодня потребовалось найти учетную запись, которой соответствует адрес st@exchangefaq.ru. На этот адрес приходит спам из Интернета для проведения экспериментов.

У меня в тестовой лаборатории довольно много сгенеренных учетных записей и определить визуально принадлежность емейла тому или иному почтовому ящику довольно сложно, поэтому я набрал в EMS вот такой кусок кода: 

get-mailbox -resultsize unlimited | where-object{$_.Emailaddresses -like "*st@*"} | format-list name,emailaddresses,database,servername


Name : postmaster_EFAQ
EmailAddresses : {smtp:hr@exchangefaq.ru, smtp:manager@exchangefaq.ru, smtp:administrator@exchangefaq.ru,
smtp:admin@exchangefaq.ru, smtp:resume@exchangefaq.ru, smtp:spam@exchangefaq.ru, smtp:info@exchangefaq.ru, smtp:st@exchangefaq.ru,
SMTP:postmaster@exchangefaq.ru, smtp:postmaster_EFAQ@z365.ru}
Database : db05
ServerName : z365-ex01

В полученном результате видно, что адрес st@exchangefaq.ru принадлежит почтовому ящику postmaster_EFAQ в базе db05 на сервере z365-ex01. То, что нужно.

Немного поясню этот кусок кода:

  1.  get-mailbox -ResultSize unlimited — получаем список всех почтовых ящиков в организации. Опция -ResultSize unlimited позволяет обойти ограничение по умолчанию в 1000 записей.
  2. where-object{$_.Emailaddresses -like «*st@*»} — ограничиваем поиск только для свойства Emailaddresses, которое в свою очередь является списком и выше видно, что в нем содержится. Кстати, адрес, начинающийся на слова SMTP заглавными буквами является основным. В качестве оператора отбора можно было использовать и -eq, -contains, но я выбрал -like, т.к. бывает, что известна только часть адреса.
  3. format-list name,emailaddresses,database,servername — команда отображения только нужных нам полей.

Изначально мой кусок кода выглядел так, но в примерах на сайте лучше использовать полные команды, а не алиасы и сокращения.

get-mailbox | ?{$_.Emailaddresses -like "*st@*"} | fl na*,ema*s, data*,se*e,u*N*e

 

p.s. если у вас есть предложения, по улучшению этой команды или использованию других методов, напишите пожалуйста в комментариях.

Связанные записи:


, , ,

  • Kazun

    А почему не воспользоваться параметром -Filter:

    get-mailbox -filter {Emailaddresses -like «*st@*»} -resultsize unlimited

  • Pavel Nagaev

    Дельное замечание.

    Я использую filter, только если проблема с производительностью. Не люблю его за то, что не по всем свойствам можно фильтровать, плюс не все коммандлеты его поддерживают. ? — привычнее. 🙂

  • Kazun

    Зато,Павел,можно написать следующий пост,про Filter и какие свойства он может принимать,так сказать Best Practices,при сравнении Filter c Where-Object(тут по гибкости явно не переплюнешь)).

  • Pavel Nagaev

    Можно конечно, но не совсем в формате этого блога. Это про Exchange, а отличие filter и where нужно писать в блогах про PowerShell.  Тем более, вот по ссылке уже написано. 🙂

  • 234

    tert

  • Stan82

    Добавлю второй достаточно быстрый способ, для GUI:
    попробуйте добавить искомый SMTP адрес любому существующему ящику, EMC скажет что такой уже есть и укажет у КОГО именно.

  • Ivan Bobov

    а почему нельзя просто get-mailbox? 
    у меня нормально возвращает, когда я ввожу get-mailbox алиас@домен.ру
     
     

  • http://www.facebook.com/profile.php?id=1386655156 Павел Нагаев

    а добавьте второй smtp адрес и попробуйте найти.

  • http://www.facebook.com/profile.php?id=1369621605 Ivan Bobov

    Павел, именно так я и сделал ) перед тем, как написать…

  • http://www.facebook.com/profile.php?id=1386655156 Павел Нагаев

    О, а это похоже тупка с моей стороны. Это уже называется горе от ума, когда простые задачи решаются сложным путем. 

    В моей практике был случай, еще в Е2003, когда вот так просто найти адрес нельзя было и тогда тоже какими-то ldap запросами искал. Возможно осталось с того времени, что адрес найти не просто.  Ну значит то, что я написал слишком сложное решение.

      

  • http://www.facebook.com/profile.php?id=1386655156 Павел Нагаев

    О, а это похоже тупка с моей стороны. Это уже называется горе от ума, когда простые задачи решаются сложным путем. 

    В моей практике был случай, еще в Е2003, когда вот так просто найти адрес нельзя было и тогда тоже какими-то ldap запросами искал. Возможно осталось с того времени, что адрес найти не просто.  Ну значит то, что я написал слишком сложное решение.

    А вообще нужно искать всех получателей, т.к. адрес может быть не только у почтового ящика. а у группы, контакта и т.д.
       

       

  • Мерзавец

    А разве не удобнее воспользоватья командлетом Get-Recipient?

  • Pavel Nagaev

    Удобство то в чём?

  • Игорь

    Глупо отвечать на прошлогодний вопрос,  но тем не менее 🙂
    Get-Receipient хорош тем,  что находит любого получателя в организации (контакт, юзера, общую папку с почтовым адресом, группу рассылки, почтовый ящик)

  • Игорь

    А если запросом через AD — proxyaddresses=smtp:user@domain.com ?

  • http://vk.com/id37579487 Павел Нагаев

    Get-Recipient | ?{$_.emailaddresses -like «*Часть емейла*»} Найдет и в почтовых ящиках и в группах.