Поиск писем в почтовых ящиках с помощью Powershell в Exchange 2010. Search-mailbox

Командлет Search-Mailbox используется для поиска по почтовым ящикам и копирования результатов в указанный целевой почтовый ящик, удаления сообщений из исходного почтового ящика или обеих задач сразу.

Чтобы воспользоваться в полной мере коммандлетом Search-mailbox, нужно добавить свою учётную запись в две группы Exchange:

Add-RoleGroupMember -Identity "Discovery Management" -Member admin
Add-RoleGroupMember -Identity "Mailbox Import Export Group" -Member admin

Стоит отметить, что если у вас стоит русский Exchange, то параметры SearchQuery нужно указывать тоже на русском - получено, отправлено, откого, кому, тема и т.д., иначе можно получить ошибку "Ключевое слово property не поддерживается"
Чтобы просмотреть журнал сообщений в результатах поиска перед их удалением, выполните командлет Search-Mailbox с параметром LogOnly.

1. Поиск по ящику d.adrianovskiy от "Бизнес-школа СКОЛКОВО", полученного с 18 по 19 ноября 2016, копирование найденных писем в ящик admin и папку test:

Search-mailbox -Identity "d.adrianovskiy" -SearchQuery {from:"Бизнес-школа СКОЛКОВО" Received: 18/11/2016..19/11/2016 } -TargetMailbox "admin" -LogLevel full -TargetFolder test

2. Параметр EstimateResultOnly позволяет показать только результат поиска:

Search-mailbox -Identity "mailboxuser"  -SearchQuery  отправлено:"1/01/2017..27/01/2017", получено:"1/01/2017..27/01/2017" -EstimateResultOnly

3. Поиск по всем ящикам:

Get-Mailbox -resultsize unlimited | Search-mailbox -SearchQuery 'subject:"Mail delivery failed" ... 

4. Поиск писем на конкретном сервере во всех ящиках:

Get-Mailbox –Server "Servername" –ResultSize unlimited | Search-Mailbox -SearchQuery ...

5. Поиск во всех почтовых ящиках компании с любыми типами вложений, содержащих слово Virus в названии. При этом сообщение журнала отправляется в почтовый ящик администратора.

Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery attachment:virus* -TargetMailbox admin -TargetFolder "SearchAndDeleteLog" -LogOnly -LogLevel Full

Ещё примеры поиска:

Search-mailbox -Identity "mailboxuser" -SearchQuery кому:"mail@mail.ru", отправлено:"1/13/2017..8/11/2016" -TargetMailbox "mail" -TargetFolder "Archive" -LogLevel Full
Search-mailbox -Identity "mailboxuser"  -SearchQuery  получено:"7/2/2017..9/2/2017", тема:"RE: Tema"  -TargetMailbox "mailbox" -TargetFolder "Archive" -LogLevel Full  
Search-mailbox -Identity "user"  -SearchQuery  получено:"3/02/2017", откого:"vasya@yandex.ru"  -TargetMailbox "admin" -TargetFolder "Archive" -LogLevel Full 

 

Поиск и удаление сообщений в Exchange из почтовых ящиков.

При использовании командлета Search-Mailbox с параметром DeleteContent сообщения окончательно удаляются из исходного почтового ящика. Перед окончательным удалением сообщений рекомендуется использовать параметр LogOnly для создания журнала сообщений, найденных в результатах поиска, или скопировать эти сообщения в другой почтовый ящик перед их удалением из исходного почтового ящика.

1. Поиск в ящике v.yurov по теме письма и удаление найденных писем:

Search-mailbox -Identity "v.yurov" -SearchQuery 'subject:"Mail delivery failed"' -DeleteContent -confirm:$false

2. В этом примере во всех почтовых ящиках организации выполняется поиск сообщений, содержащих строчку "User Audit" в теме, после чего журнал сообщений попадает администратору в ящик:

Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery 'Subject:"User Audit"' -TargetMailbox admin -TargetFolder "SearchLog" -LogOnly -LogLevel Full

3. Поиск во всех ящиках компании писем с адреса test@test.ru и удаление найденных писем без подтверждения:

Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery 'from:test@test.ru' -DeleteContent -confirm:$false

Установка фотографии пользователя с помощью Powershell

Установить фото для одного пользователя Active Directory:

Set-ADUser vyurov -Replace @{thumbnailPhoto=([byte[]](Get-Content "C:\users\photo.jpg" -Encoding byte))}

Удалить фотографию пользователя в Active Directory:

Set-Aduser "d.ivanov" -clear thumbnailphoto

Пакетный импорт фото для пользователей:

Import-Csv "C:\фото\users.csv" -Delimiter ";" -Encoding Default | %{Set-ADUser -Identity $_.samaccountname -Replace @{thumbnailPhoto=([byte[]](Get-Content $_.Photo -Encoding byte))}}

В файле csv соответственно колонки samaccountname и photo (полный путь к файлу с фото)

Выгрузить фото одного юзера из Active Directory с помощью Powershell:

$User = Get-ADUser vyurov -Properties thumbnailPhoto
$User.thumbnailPhoto | Set-Content "c:\users\vyurov.jpg" -Encoding byte

Выгрузить фото всех пользователей из определенного контейнера в файл:

$Users= Get-ADUser -Filter * -SearchBase "OU=Users,DC=test,DC=ru" -Properties thumbnailPhoto  | ? {$_.thumbnailPhoto}
foreach ($ADuser in $Users) {
$name = $ADuser.SamAccountName + ".jpg"
$ADuser.thumbnailPhoto | Set-Content $name -Encoding byte
}

Выборка всех пользователей, у которых есть фото в AD:

Get-ADUser -Filter * -properties thumbnailPhoto | ? {$_.thumbnailPhoto} | select Name

Выбрать всех пользователей без фотографии:

Get-ADUser -Filter * -properties thumbnailPhoto | ? {(-not($_.thumbnailPhoto))} | select Name

Отслеживание сообщений в Microsoft Exchange 2010. Get-MessageTrackingLog

Журнал отслеживания сообщений содержит подробные сведения об обмене сообщениями с компьютером с сервером Microsoft Exchange Server 2010 и установленной ролью транспортного сервера-концентратора, сервера почтовых ящиков или пограничного транспортного сервера. Журналы отслеживания сообщений используются для исследования сообщений, анализа потока почты, создания отчетов и устранения неполадок.

Для выполнения всех задач настройки отслеживания сообщений на транспортном сервере-концентраторе или пограничном транспортном сервере можно использовать командлет Set-TransportServer. Для выполнения всех задач настройки отслеживания сообщений на сервере почтовых ящиков можно использовать командлет Set-MailboxServer. Для серверов, на которых установлена роль транспортного сервера-концентратора или сервера почтовых ящиков, можно использовать командлет Set-TransportServer или Set-MailboxServer.

По умолчанию файлы журналов отслеживания сообщений хранятся в каталоге C:\Program Files\Microsoft\Exchange Server\V14\TransportRoles\Logs\MessageTracking
Подробнее тут - https://technet.microsoft.com/ru-ru/library/bb124375(v=exchg.141)

Найти полученные сообщения пользователем vasya@daun.ru с адреса admin@vasiliy.ru с 12.12.2016 по 13.12.2016:

Get-MessageTrackingLog -EventId "Receive" -ResultSize Unlimited -Sender "admin@vasiliy.ru" -Recipient "vasya@daun.ru" -start "12/12/2016" -end "13/12/2016"

| Format-List в конце выдаст полную информацию по каждому найденному сообщению.

Where-Object позволяет искать по маске:

Get-MessageTrackingLog -EventId "Receive" -ResultSize Unlimited | Where-Object {$_.sender -like "*@.sobaka.com"} | Format-Table -AutoSize

Поиск по отправителю и получателю:

Get-MessageTrackingLog -Start "3/15/2017" -End "3/17/2017" -ResultSize Unlimited -Recipients "test1@domain.ru" -Sender "test2@domain12.ru" |  select-object timestamp, eventid, messageid, sender, recipients, messagesubject | Out-GridView

Поиск писем и экспорт в CSV-файл:

Get-MessageTrackingLog -Start "7/22/2017" -End "7/26/2017" -ResultSize Unlimited -Recipients "test@domain.ru" |  select-object timestamp,eventid,sender,recipients,messagesubject | Export-Csv -Path "C:\scripts\Exchange\test.csv" -Encoding Default -Delimiter ";"

Как добавить нескольким пользователям несколько групп Active Directory с помощью Powershell

Задача - добавить одному пользователю Active Directory несколько групп из файла.
Если пользователь уже добавлен в какие то группы из списка(вылезет ошибка в процессе) - скрипт продолжит выполнение дальше.

Get-Content "C:\scripts\groups.txt" | Add-ADGroupMember -Members "vasiliy"

Задача - добавить нескольким пользователям из списка несколько групп с помощью Powershell.
Решение 1:
Если хоть один пользователь уже будет добавляемой группе, скрипт остановится. Запускать только если в добавляемых группах точно нет этих пользователей!

$users = Get-Content "C:\scripts\users.txt"
get-content "C:\scripts\groups.txt" | Add-ADGroupMember -Members $users

Читать далее