Задача чистить почту при заполнении почты у пользователей больше 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:
- Как мигрировать почтовый архив exchange в другую базу топ 10 по размеру архивного ящика
- Как вывести квоту и размер ящика через exchange management shell
- Как создать переадресацию с одного ящика на другой в exchange. Переезд в другой домен.
- Как создать контакты в exchange из другого домена.
- Как узнать кто давно не подключался к почтовому ящику в exchange.