viernes, 8 de junio de 2018

Cantidad de correos enviados y recibidos Exchange

Esta vez la necesidad es sacar un informe de la cantidad de correos enviados y recibidos en una plataforma Exchange, el cual tiene 3 CAS (Client Access services ), se cuenta con 8 servidores, los cuales se listaran en un archivo que llamaremos servidores.txt

El contenido del archivo quedaria algo parecido a esto:

Servidor1
Servidor2
Servidor3
Servidor4
Servidor5
Servidor6
Servidor7
Servidor8

Se puede utilizar el nombre, el FQDN, o la IP.

Ahora el sencillo Script abajo es una mezcla de VB y powershell
En una primera parte, y la que mas consume lineas de codigo, se crea un calendario GUI para seleccionar la fecha de inicio de la busqueda para realizar el conteo, y en la segunda parte se realiza la captura de datos, organizacion, y almacenamiento.

el resultado sera un archivo con el nombre InformeMensualEXcFECHA.txt



$ErrorActionPreference = "Continue";
 
#Primera parte, calendario
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object Windows.Forms.Form
$form.Text = 'Seleccione la fecha de inicio'
$form.Size = New-Object Drawing.Size @(250,230)
$form.StartPosition = 'CenterScreen'

$calendar = New-Object System.Windows.Forms.MonthCalendar
$calendar.ShowTodayCircle = $false
$calendar.MaxSelectionCount = 1
$form.Controls.Add($calendar)

$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(38,165)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = 'OK'
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)

$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(113,165)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = 'Cancel'
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $CancelButton
$form.Controls.Add($CancelButton)

$form.Topmost = $true
$result = $form.ShowDialog()
$servers= Get-Content servidores.txt;
$reportfile = "InformeMensualEXc_$(get-date -format dd_MM_yyyy).txt";

#Si en el calendario se presiona OK 
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
$date = $calendar.SelectionStart

$fecha= "$($date.ToShortDateString())"
$time = Get-Date
Add-Content $reportfile $time;
 
#Segunda parte, Query y almacenado de datos
foreach ($server in $servers)
{

#Cambiar *@Dominio.com" por el dominio del correo propio
$conteo=get-messagetrackinglog -ResultSize unlimited -server $server -EventID "RECEIVE" -Start "$fecha 00:00:00" | where {$_.Recipients -like "*@Dominio.com" } | Format-table Recipients
$rect=$conteo.Count
$dataRow = "Recibidos en $server $rect";
Add-Content $reportfile $dataRow;

#Cambiar *@Dominio.com" por el dominio del correo propio
 
$conteo1=get-messagetrackinglog -ResultSize unlimited -server $server -EventID "SEND" -Start "$fecha 00:00:00" | where {$_.Sender -like "*@Dominio.com" }  | Format-table Sender
$sendt=$conteo1.Count
$dataRow1 = "Enviados en $server $sendt";
Add-Content $reportfile $dataRow1;
}
}


Espero a alguno le sea util este post
¡Hasta la proxima!


Si te fue útil la información "HAZ CLICK EN LA PUBLICIDAD DE GOOGLE"

 visitando nuestros anunciantes, agradeces nuestro trabajo...