En versiones de Exchange Server anteriores a 2010 SP1, los usuarios recibían avisos por email cuando se superaba un límite de cuota. Después de Exchange 2010 SP1, el comportamiento del aviso por email cambió y desde Exchange Server 2013 el estado de la cuota no es calculado (Figura 1).
Figura 1
Muchos administradores se encuentran con la necesidad de avisar por email a los usuarios acerca del tamaño de sus buzones.
A continuación les comparto un script que realicé para que se envíe un mail a los usuarios cuando uno de los limites se sobrepasa:
#Coneccion a Server Exchange Cambiar el nombre del server Exchange en -ConnectionUri
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://FQDNServerName/PowerShell/ -Authentication Kerberos
Import-PSSession $Session
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://FQDNServerName/PowerShell/ -Authentication Kerberos
Import-PSSession $Session
#Parametros a usar
$smtpServer="ExchangeServer.com"
$from = "Administrador"
$adminmail ="Admin@dominio.com"
$smtpServer="ExchangeServer.com"
$from = "Administrador
$adminmail ="Admin@dominio.com"
#Buscar todos los usuarios con Mailbox - Aqui se puede definir un subset de usuarios para hacer pruebas
$Users=Get-Mailbox * | Select Alias
$Users=Get-Mailbox * | Select Alias
#Revisa cada usuario y toma acciones
foreach ($User in $Users) {
$UserData= get-Mailbox $User.alias | Select Name,PrimarySmtpAddress,Identity,Database,UseDatabaseQuotaDefaults,ProhibitSendQuota,ProhibitSendReceiveQuota,IssueWarningQuota
$Size= get-mailbox $UserData.Identity | Get-MailboxStatistics |Select TotalItemSize
$BaseData= get-mailboxdatabase $UserData.Database | Select Name,ProhibitSendQuota,ProhibitSendReceiveQuota,IssueWarningQuota
If( $UserData.UseDatabaseQuotaDefaults -like $false) {
$Lim1= $UserData.ProhibitSendReceiveQuota
$Lim2= $UserData.ProhibitSendQuota
$Lim3= $UserData.IssueWarningQuota
}
Else {
$Lim1= $BaseData.ProhibitSendReceiveQuota
$Lim2= $BaseData.ProhibitSendQuota
$Lim3= $BaseData.IssueWarningQuota
}
If( $Lim1.IsUnlimited -and $Lim2.IsUnlimited -and $Lim3.IsUnlimited) {
$res= [Microsoft.Exchange.Data.Mapi.StorageLimitStatus]::NoChecking
}
Else {
$Lim1= $UserData.ProhibitSendReceiveQuota
$Lim2= $UserData.ProhibitSendQuota
$Lim3= $UserData.IssueWarningQuota
}
Else {
$Lim1= $BaseData.ProhibitSendReceiveQuota
$Lim2= $BaseData.ProhibitSendQuota
$Lim3= $BaseData.IssueWarningQuota
}
If( $Lim1.IsUnlimited -and $Lim2.IsUnlimited -and $Lim3.IsUnlimited) {
$res= [Microsoft.Exchange.Data.Mapi.StorageLimitStatus]::NoChecking
}
Else {
$res= $null
If( -not $Lim1.IsUnlimited -and $Size.totalItemSize.Value -gt $Lim1) {
$res= [Microsoft.Exchange.Data.Mapi.StorageLimitStatus]::MailboxDisabled
}
Else {
If( -not $Lim2.IsUnlimited -and $Size.totalItemSize.Value -gt $Lim2) {
$res= [Microsoft.Exchange.Data.Mapi.StorageLimitStatus]::ProhibitSend
$Porce=100*($Size.totalItemSize.Value.toMB()/$Lim2.Value.toMB())
$limite="no poder enviar mas correos."
}
Else {
If( -not $Lim3.IsUnlimited -and $Size.totalItemSize.Value -gt $Lim3) {
$res= [Microsoft.Exchange.Data.Mapi.StorageLimitStatus]::IssueWarning
$Porce=100*($Size.totalItemSize.Value.toMB()/$Lim2.Value.toMB())
$limite="advertencia."
}
Else {
$res= [Microsoft.Exchange.Data.Mapi.StorageLimitStatus]::BelowLimit
$Porce=100*($Size.totalItemSize.Value.toMB()/$Lim1.Value.toMB())
$limite="OK"
}
}
}
}
If( -not $Lim1.IsUnlimited -and $Size.totalItemSize.Value -gt $Lim1) {
$res= [Microsoft.Exchange.Data.Mapi.StorageLimitStatus]::MailboxDisabled
}
Else {
If( -not $Lim2.IsUnlimited -and $Size.totalItemSize.Value -gt $Lim2) {
$res= [Microsoft.Exchange.Data.Mapi.StorageLimitStatus]::ProhibitSend
$Porce=100*($Size.totalItemSize.Value.toMB()/$Lim2.Value.toMB())
$limite="no poder enviar mas correos."
}
Else {
If( -not $Lim3.IsUnlimited -and $Size.totalItemSize.Value -gt $Lim3) {
$res= [Microsoft.Exchange.Data.Mapi.StorageLimitStatus]::IssueWarning
$Porce=100*($Size.totalItemSize.Value.toMB()/$Lim2.Value.toMB())
$limite="advertencia."
}
Else {
$res= [Microsoft.Exchange.Data.Mapi.StorageLimitStatus]::BelowLimit
$Porce=100*($Size.totalItemSize.Value.toMB()/$Lim1.Value.toMB())
$limite="OK"
}
}
}
}
$Usuario=$UserData.Name
$email=$UserData.PrimarySmtpAddress
$Porce=[math]::Round($Porce,2)
#Envio de Email Email
# Email Subject
$subject="Advertencia de espacio de buzon"
# Email body, con formato HTML
$body ="
Estimado $Usuario,
<.p> Su buzon de correo llego al limite de $limite<.br>
El porcentaje actual de ocupacion es de $Porce %, por favor elimine correos innecesarios<.br>
Puede consultar la documentacion en LinkADocumento <.br>
<.p>Gracias, <.br>
<./P>"
$subject="Advertencia de espacio de buzon"
# Email body, con formato HTML
$body ="
Estimado $Usuario,
<.p> Su buzon de correo llego al limite de $limite<.br>
El porcentaje actual de ocupacion es de $Porce %, por favor elimine correos innecesarios<.br>
Puede consultar la documentacion en LinkADocumento <.br>
<.p>Gracias, <.br>
<./P>"
# Envia Email
if ($limite -ne "OK"){
Send-Mailmessage -smtpServer $smtpServer -from $from -to $email -subject $subject -body $body -bodyasHTML -priority High
if ($limite -ne "OK"){
Send-Mailmessage -smtpServer $smtpServer -from $from -to $email -subject $subject -body $body -bodyasHTML -priority High
# Envia Email al administrador para control/test
#Send-Mailmessage -smtpServer $smtpServer -from $from -to $adminmail -subject $subject -body $body -bodyasHTML -priority High
#Send-Mailmessage -smtpServer $smtpServer -from $from -to $adminmail -subject $subject -body $body -bodyasHTML -priority High
}
}
}
Nota: En el script, los Tags HTML que se utilizan dentro de la variable $body, fueron modificados agregándoles un "." para que no se apliquen al formato del articulo y puedan ser vistos por el lector. Todos los "." de los Tags deben ser removidos antes de utilizar el script.