Спасибо за поддержку - народ капризничает - все не так, все не то... Ранее было настроено независимо (6-7 ящиков в одном профиле Outlook через MAPI), что стало приводить к перегрузкам Outlook - постоянно сваливалась авторизация.
Вы знаете, это почти то, что нужно, но не совсем - в таком виде сразу открывается диалог сохранения, а мне нужно на форму набросить даже не кнопку, а кнопку с полем ввода рядом, чтобы при нажатии на кнопку уже открывалось это диалоговое окно. Вот так пытаюсь:
Add-Type -AssemblyName System.Windows.Forms
# Создание диалогового окна сохранения файла
$saveFileDialog.InitialDirectory = [System.Environment]::GetFolderPath('Desktop') # Стартовый каталог
$saveFileDialog.Filter = "Текстовые файлы (*.pst)|*.pst|Все файлы (*.*)|*.*" # Фильтр типов файлов
$saveFileDialog.Title = "Выберите место для сохранения файла"
$saveFileDialog.DefaultExt = "pst" # Расширение по умолчанию
Указываю область отрисовки элемента управления и потом добавляю все это на форму (диалог пока что закомментировал), но не отображается почему-то. Вот для сравнения обычная кнопка с обработкой нажатия:
$btnGet.DataBindings.DefaultDataSourceUpdateMode = 0
Роман Безруков, а это не удалось - выдает ошибку:
Remove-ComplianceSearchAction : The term 'Remove-ComplianceSearchAction' is not recognized as the name of a cmdlet, function, script file,
or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
Причем Get-ComplianceSearchAction нормально работает.
Порядок, в конечном итоге все же по частям удаляю при помощи Search-Mailbox:
Search-Mailbox -Identity form -SearchQuery 'Received:01/01/2024..01/31/2024' -deletecontent -force
...
Search-Mailbox -Identity form -SearchQuery 'Received:03/01/2024..03/31/2024' -deletecontent -force
В среднем по каждому месяцу около 9000 сообщений, нормально все проходит. В любом случае спасибо за помощь, напишу скрипты с GUI, чтобы нормальные люди тоже могли спокойно все это делать, не ломая голову в консоли. Достаточно поля со списком, в котором будет искомый ящик и даты интервала, который нужно удалить. Все должно упрощаться, а не усложняться, по-моему.
Роман Безруков, извините, ничего не понимаю уже. Задача вроде бы проста - есть дата, есть сообщения, полученные и отправленные ранее этой даты, все они должны быть удалены. И тут выясняется, что команда в консоли работает в несколько приемов, при этом почему-то удаляет только 10 сообщений за раз. Это издевательство от Microsoft такое? 10 сообщений я могу и так удалить руками когда угодно. Вариант с MFCMAPI вообще уносит куда-то в другие Вселенные - это низкоуровневая работа с ящиком, малейший чих и ящик будет поврежден. Я не лично Вам это высказываю, просто накипело уже, честно сказать. Чтобы удалить чертовы сообщения, нужно 7 кругов ада пройти как будто.
Роман Безруков, правильно ли уловил - можно прямо на рабочую станцию поставить MFCMAPI (x64 в моем случае), указать на нужный профиль Outlook и руками удалить старые сообщения? Для этого не нужно полностью выкачивать ящик? Потому что там 170 Гб уже и из-за этого вся эта дискуссия и началась...
Роман Безруков, а как повторить процедуру удаления - просто еще раз выполнить New-ComplianceSearchAction -SearchName "ContentSearch_240724" -Purge -PurgeType SoftDelete? И понять, какие именно сообщения были удалены, невозможно? То есть никакого отчета в консоли не предусмотрено?
Роман Безруков, проделал все заново, назвал иначе, вроде бы прошло удаление:
New-ComplianceSearchAction -SearchName "ContentSearch_240724" -Purge -PurgeType SoftDelete
Смотрю теперь так:
Get-ComplianceSearchAction -Identity "ContentSearch_240724_Purge" | Format-List
То есть были удалены только 10 сообщений, получается? А чтобы за весь период с момента создания ящика и до 24 июля 2024 удалить - несколько раз запускать ComplianceSearchAction?
Роман Безруков, ну а логику я правильно здесь вывел?
$EndTime = "07/24/2024"
New-ComplianceSearch -Name "ContentSearch_for_user12" -ExchangeLocation user12@company.ru -ContentMatchQuery "sent<=$($EndTime)"
То есть должны удалиться все сообщения (Во Входящих, Отправленных) старше 24 июля 2024, правильно?
Роман Безруков, а как понять, что процесс прошел и успешно ли прошел? И нужно ли потом закрыть ComplianceSearchAction, потому что я же его создал и по логике нужно уничтожить потом?
Name : ContentSearch_for_user12
Items : 516
JobProgress : 100
Status : Completed
А вот дальше не понял:
New-ComplianceSearchAction -SearchName ContentSearch_for_user12 -Purge
Confirm
Are you sure you want to perform this action?
This operation will make message items meeting the criteria of the compliance search "ContentSearch_for_user12" completely
inaccessible to users. There is no automatic method to undo the removal of these message items.
[Y] Yes [A] Yes to All [N] No [L] No to All [?] Help (default is "Y"):
Роман Безруков, если честно - не нравится метод с удалением ящика - он у очень многих сотрудников в разных регионах настроен. Но вообще странная ситуация - неужели так редко приходится удалять старые сообщения, чтобы прибегать к удалению ящика вообще? Должна ведь быть процедура элементарная - задать диапазон дат и вперед...
Роман Безруков, Вы знаете, что-то не получилось пока:
Search-Mailbox -identity user12 -searchquery {received<'07/24/2024 00:00:00'} -deletecon
tent
WARNING: The Search-Mailbox cmdlet returns up to 10000 results per mailbox if a search query is specified. To return
more than 10000 results, use the New-MailboxSearch cmdlet or the In-Place eDiscovery & Hold console in the Exchange
Administration Center.
Confirm
Deleting content from mailboxes user12
[Y] Yes [A] Yes to All [N] No [L] No to All [?] Help (default is "Y"):
The KQL parser threw an exception.
+ CategoryInfo : InvalidArgument: (:) [], ParserException
+ FullyQualifiedErrorId : [Server=MAIL,RequestId=d84551ee-ead4-464c-b190-5362731c46d2,TimeStamp=2/3/2025 2:57:09 P
M] [FailureCategory=Cmdlet-ParserException] D8CBE603
+ PSComputerName : mail.company.ru
Пробовал и без указания времени, то есть:
Search-Mailbox -identity user12 -searchquery {received<'07/24/2024'} -deletecon
tent
Выдается та же ошибка - где я тут ошибся? - подскажите, пожалуйста.
Фух, получилось частями - примерно по 50 Гб. Напомните, пожалуйста, как теперь удалить то, что удалось экспортировать? Например,
New-MailboxExportRequest -Mailbox form -FilePath \\mail.company.ru\mailpst\form311223@company.ru.pst -ContentFilter "Received -lt '12/31/2023'"
Как удалить теперь сообщениия за период с момента создания ящика до 31 декабря 2023, как в моем примере? Заранее признателен.
Зашел щас в ECP - сразу высветились alerts. Ничего не пойму - вчера доходило до 84% вечером, сегодня опять все сначала, что ли? При этом объем файла уже 176 Гб. Вообще не пониимаю логику работы экспорта - никогда такого не видел. Обычно без проблем ящик экспортируется, причем за адекватное время.
Роман Безруков, еще уточню - а можно не по дате тогда разрезать экспорт, а по объему? Ну то есть разбить принудительно на архивы по 50 Гб, допустим, а даты уже как получатся внутри. Потому что по датам объемы могут получиться непредсказуемые.
Роман Безруков, решил все-таки еще раз полную выгрузку сделать, при достижении 150 Гб стало дико замедляться, но теперь диск отдельный подключен с запасом по объему. Но вообще странно - там какой-то тоже лимит есть на Exchange, что ли? Хотя вот тут делились опытом, что по 460 Гб были ящики и ничего.
Роман Безруков, а можете пример написать, если не затруднит? Скажем, как экспортировать часть от момента создания ящика до, допустим, 31.12.23 включительно, используя ContentFilter?