Перейти к содержимому

Как сделать автоматическую очистку почты exchange при заполнении больше 90 процентов ящика.

Задача чистить почту при заполнении почты у пользователей больше 90%. Удаляются самые старые письма.

<# .SYNOPSIS
    Очистка почты операторов
.DESCRIPTION
    Скрипт проверяет все ящики в базах Op01/02, при заполнении почты более чем на 90% от квоты удаляет самые старые письма в папке Входящие и её подкаталогах.
    Удаление идёт до тех пор пока размер заполнености ящика не станет равен 90%.
#>
#╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗#
$Host.UI.RawUI.WindowTitle = "Очистка почты операторов"
#╚════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝#
 
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn
$watch = [System.Diagnostics.Stopwatch]::StartNew()
$watch.Start()
[system.gc]::Collect()
#------ Logging section ------#
 
$fileLocation = (gi $MyInvocation.InvocationName) | ForEach-Object {
    $fileDirectory = "$($_.DirectoryName)\$($_.BaseName)";
    "$fileDirectory\$($_.BaseName)_$('{0:yyyy-MM-dd}'-f(date))";
    if (!(Test-Path "$fileDirectory")) {
        ni "$fileDirectory" -ItemType "directory" | Out-Null
    }
}
Start-Transcript "${fileLocation}.log" -append
#------ Variables ------#
 
#$Oper = get-mailboxdatabase -Identity "Oper*" | Get-MailboxStatistics | select displayname | sort-object DisplayName #-Descending
$Oper = get-mailboxdatabase -Identity "Oper*" | Get-Mailbox -ResultSize unlimited | select Alias | sort-object Alias
#$Oper = Get-MailboxStatistics -Database Oper01 | select displayname | sort-object DisplayName #-Descending
#$Oper = 'serveradmins'
 
#------ Establishing a connection ------#
 
#$UserCredential = Get-Credential
#$UserCredential = Import-CliXML -Path 'D:\Programs\Scripts\******\mycredentials_adminbd.xml'
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://MXS01.adminbd.ru/PowerShell/ -Authentication Kerberos #-Credential $UserCredential
Import-PSSession $Session -DisableNameChecking -AllowClobber
 
#------ Execution ------#
 
foreach ($Name in $Oper) {
    $TIS = (Get-MailboxStatistics -Identity $Name.Alias |select TotalItemSize).TotalItemSize.Value -replace "\sMB (.+ bytes.+)",""
    $TIS = [float]$TIS
    $Quota = (Get-MailboxStatistics -Identity $Name.Alias |select DatabaseProhibitSendReceiveQuota).DatabaseProhibitSendReceiveQuota -replace "\sMB (.+ bytes.+)","" #"\sGB (.+ bytes.+)",""
    $Quota = ([INT]$Quota* 1024)*0.9
 
    while ($TIS -ge $Quota) {
        try {
            $OldI = Get-Mailbox  $Name.Alias | Get-MailboxFolderStatistics -IncludeOldestAndNewestItems -FolderScope Inbox | Where-Object {$_.OldestItemReceivedDate -ne $null } | Sort-Object OldestItemReceivedDate | Select -Property OldestItemReceivedDate -First 1
            $OldI = $OldI.OldestItemReceivedDate.ToString("MM/dd/yyyy")
            #New-ComplianceSearch -Name 'ClearOldMail' -ExchangeLocation $Name -ContentMatchQuery "sent:$C"
            Set-ComplianceSearch -Identity 'ClearOldMail' -ExchangeLocation  $Name.Alias -ContentMatchQuery "sent:$OldI"
            start-ComplianceSearch -Identity 'ClearOldMail'
            Start-Sleep -s 3
            New-ComplianceSearchAction -SearchName 'ClearOldMail' -Purge -PurgeType SoftDelete -Confirm:$false -Force | Out-Null
            $TIS = (Get-MailboxStatistics -Identity $Name.Alias |select TotalItemSize).TotalItemSize.Value -replace "\sMB (.+ bytes.+)",""
            $TIS = [float]$TIS
            if ($Error[0] -ne $Null) {break}
            #$kk += 1
            #write-host "Prohod $kk"
       } catch {break}
    }
}
 
Remove-PSSession $Session
$watch.Stop()
'Время выполнения ' + [string]$watch.Elapsed  #Остановка таймера  #Время выполнения
Get-ChildItem $fileDirectory -Recurse -filter *.log | where {$_.LastWriteTime -lt (Get-Date).AddDays(-15)} | Remove-Item -force
Stop-Transcript

 

Similar Posts:

Метки:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *