Una nueva visión sobre cómo informar las estadísticas de los buzones de Exchange
Una pregunta suscita nuevas ideas sobre la mejor manera de informar las estadísticas de los buzones de Exchange
Las raíces de Practical365.com se encuentran en ExchangeServerPro.com, un sitio dedicado a todos los aspectos de la administración de Exchange Server. Esto significa que el sitio aún admite cientos de publicaciones escritas en el período 2010-2015. Todavía surgen preguntas sobre los temas tratados en esas publicaciones y hacemos todo lo posible para responderlas, incluso si las preguntas cubren problemas de servidores obsoletos hace mucho tiempo.
Una pregunta reciente sobre un artículo que cubre las estadísticas de las carpetas de informes para buzones de correo de Exchange preguntaba cómo encontrar la carpeta con un elemento con la fecha de recepción más antigua para buzones de más de 50 GB. El código de PowerShell escrito por el interrogador es un buen ejemplo de cuán complejo puede llegar a ser un conjunto de comandos canalizados. Los comandos canalizados de una línea pueden ser una excelente manera de hacer las cosas, pero también son difíciles de leer y de mantener, como señaló Michel de Rooij en su columna Practical PowerShell. En cualquier caso, intenté ayudar con una versión del código que funcionó para mí. Al menos funciona para Exchange Online.
Esta experiencia me hizo pensar en los numerosos scripts escritos para informar las estadísticas de los buzones de Exchange. Este es uno de los scripts clásicos de Exchange PowerShell y la mayoría de los administradores de Exchange probablemente tengan su propia versión. Mi última ejecución del tema utilizó datos de uso del buzón de Graph en lugar de cmdlets de Exchange para ganar algo de velocidad. ¿Le vendría bien al mundo otra versión más? Bueno, tal vez sea así.
Una nueva versión de un guión clásico
Mi nueva versión de este script clásico está disponible en GitHub. El script no es rápido porque utiliza los cmdlets Get-ExoMailboxStatistics y Get-ExoMailboxFolderStatistics, ninguno de los cuales es famoso por su prontitud. Ejecutar el cmdlet Get-ExoMailbox para recuperar grandes cantidades de buzones de correo para procesar también lleva tiempo. En organizaciones más grandes, sería mejor aplicar un filtro con el cmdlet Get-ExoMailbox para buscar diferentes conjuntos de buzones, como todos los buzones de un departamento u oficina.
El esquema básico del guión es:
- Ejecute Get-ExoMailbox para encontrar los buzones de correo que desea procesar.
- Para cada buzón, ejecute Get-ExoMailboxStatistics para obtener estadísticas del buzón. Si el buzón tiene un archivo, el script ejecuta Get-ExoMailboxStatistics para obtener estadísticas para el buzón de archivo.
- Ejecute Get-ExoMailboxFolderStatistics para obtener detalles de la carpeta del buzón. Como antes, si el buzón está habilitado para archivar, el script ejecuta el cmdlet nuevamente para recuperar detalles de las carpetas en el buzón de archivo. Los comandos incluyen un filtro para evitar el procesamiento de carpetas utilizadas para diferentes operaciones en segundo plano que están presentes en los buzones de correo pero a las que los usuarios no suelen acceder, como Registro de calendario, Conflictos, PersonMetaData y Auditorías.
- El script captura detalles de cada carpeta, incluidos los elementos más antiguos y más nuevos de la carpeta.
- El script también captura estadísticas generales para los buzones de correo principal y de archivo.
- Debido a que el cmdlet Get-ExoMailbox no devuelve detalles como la ciudad, el departamento, la oficina o el título del usuario, el script ejecuta el cmdlet Get-User para recuperar esta información. La ejecución de Get-User aumenta el tiempo necesario para procesar cada buzón, por lo que debes comentar esta línea fuera del script si no deseas utilizar esta información. En general, creo que la información obtenida por Get-User es útil y por eso está en el script.
- Después de procesar todos los buzones, el script genera un informe HTML. La Figura 1 muestra un ejemplo típico de los datos reportados para un buzón. El script también genera un archivo CSV que contiene detalles de las estadísticas del buzón.
Como puede ver, el informe enumera:
- Estadísticas generales de buzones de correo.
- Carpetas en el buzón principal.
- Carpetas de elementos recuperables para el buzón principal (a veces es bueno saber si estas carpetas se están acercando a su límite de cuota).
- Si el buzón está habilitado para archivar, el informe enumera las carpetas y las carpetas de Elementos recuperables en el buzón de archivo.
Otras formas de utilizar los datos del informe
Los datos registrados en las dos listas de PowerShell capturadas por el script se pueden dividir y dividir para generar otros informes. Por ejemplo, para enumerar los buzones de correo en orden de tamaño, ejecute este comando (el resultado se muestra en la Figura 2):
$MbxReport | Sort-Object {$_.'Primary mailbox size bytes' -as [float]} -Descending | Format-Table Mailbox, 'Primary Mailbox Size GB', 'Primary Mailbox total items', 'Archive mailbox size GB' -AutoSizeDebido a que la lista $MbxReport incluye detalles de usuarios como ciudad, departamento y oficina, puede ordenar e interrogar la fecha según estas propiedades. Por ejemplo:
$MbxReport | Where-Object City -match 'Dublin' | Format-Table Mailbox, 'Primary Mailbox Size GB', 'Primary Mailbox total items', 'Archive mailbox size GB' -AutoSizeEl script solo informa los buzones de correo de los usuarios. A algunos les gustaría incluir buzones de correo compartidos. Si es así, puede modificar el comando Get-ExoMailbox para:
[array]$Mailboxes = Get-ExoMailbox -RecipientTypeDetails UserMailbox, SharedMailbox -ResultSize Unlimited `
-PropertySets Archive -Properties DisplayName, RecipientTypeDetails | Sort-Object DisplayName
El script captura el tipo de buzón en la lista $MbxReport, por lo que si agrega buzones compartidos, es para filtrar los buzones de usuario y compartidos e informar cada tipo por separado. Por ejemplo, este comando busca todos los buzones de correo de los usuarios en el informe:
$MbxReport | Where-Object 'Mailbox type' -match 'Usermailbox'No he probado el código en un servidor Exchange local, pero creo que funcionará si reemplazas Get-ExoMailbox con Get-Mailbox, Get -ExoMailboxStatistics con Get-MailboxStatistics y Get-ExoMailboxFolderStatistics con Get-MailboxFolderStatistics. Sin embargo, no puedo dar garantía porque no tengo un servidor local para ejecutar el script.
Quizás este guión se convierta en un clásico
Como siempre, este script ilustra principios y podría mejorarse de muchas maneras, en particular mediante un mejor manejo de errores. Supongo que estoy esperando que Michel de Rooij describa las mejores formas de lidiar con los errores en una futura columna de Practical PowerShell. Mientras tanto, me divertí un poco pensando en cómo abordar un guión que tanta gente ha escrito desde 2006. Puede que este guión nunca sea un clásico, pero creo que tiene algunos elementos nuevos que son valiosos. Pero supongo que diría eso después de escribir unas 240 líneas de PowerShell.

