lunes, 21 de diciembre de 2015

Exchange Quota Notification

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

#Parametros a usar
$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

#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 {
            $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"
                    }
                }
            }
        }

$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>"
# Envia Email
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 
}
}

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.

miércoles, 25 de noviembre de 2015

Evento de VLans & Network en el MUG

El Miércoles 16 de diciembre de 2015, de 18:30 a 21:00 hs, en el Auditorio del MUG, Rivadavia 1479  Primer Piso "A", Buenos Aires. Vamos a estar con Rodrigo De Los Santos para ver administración de redes separadas dentro de VLANs, especialmente como configurar un switch para poder utilizar múltiples segmentos en conjunto con Windows Server sin que entren en conflicto.

El evento es gratuito y puede registrarse en este link.

miércoles, 11 de noviembre de 2015

Copiar Quotas de FSRM a otro server

En un Windows Server podemos definir límites de capacidad de almacenamiento por directorio con Quota Management. Los límites pueden ser informativos o estrictos. Cuando un límite es alcanzado se puede registrar un evento, enviar un mail al usuario, al administrador, o prohibir la ejecución de la operación.  

Todas las configuraciones son locales del servidor. Pero en algunos casos necesitaremos pasar las configuraciones a un nuevo equipo, como en el caso de una migración, o a otro servidor que está replicado, como es el caso de un ambiente con DFS-R. No hay posibilidad nativa de exportar/importar las Quotas, pero podemos realizar una operación similar con PowerShell.

Primero guardamos la información de qué directorio o directorios queremos controlar (Figura 1), el limite, y si la cuota definida es informativa (Soft Quota) o restrictiva (Hard Quota).

Figura 1
 
 Get-FSRMQouta | Select Path, Size, SoftLimit | Export-Csv "Directorio\Archivo" -NoTypeInformation  
 
Luego, en el servidor de destino creamos un Template (Figura 2), en el cual configuramos las notificaciones que queremos recibir. No importa el límite que especifiquemos (en este caso 1000 TB), porque los limites que se aplicarán serán los que importemos del equipo original.

Figura 2

 
Una vez  creado el Template, en el servidor de destino importamos el archivo que exportamos desde el servidor de origen y lo guardamos en una variable ($a en este caso). Por último, para cada entrada guardada en la variable creamos una entrada de Quota según lo definido en el archivo en donde indicamos el directorio, el limite y en qué Template está basado (Figura 3)
 
Figura 3
 
 

jueves, 24 de septiembre de 2015

Dude... where's my .nk2 ?

En la ubicación "C:\Users\NOMBREDEUSUARIO\AppData\Roaming\Microsoft\Outlook", Outlook guardaba un listado de las direcciones de email que habíamos utilizado recientemente en un archivo con extensión .nk2.

Cuando se realizaba un cambio de PC, el archivo .nk2 podía moverse a otro equipo para conservar ese listado de direcciones, y algunas veces debíamos borrarlo para reparar ciertos errores o conductas no deseadas de Outlook (por ejemplo, cuando migrábamos el dominio de mails y no queríamos ver las direcciones antiguas).

En Outlook 2013, este archivo ya no existe, pero igualmente podemos trabajar con esta lista de direcciones de email.

Si se desea importar un archivo .nk2 desde una versión anterior a Outlook 2013 debemos:

1-Copiar el archivo .nk2 en la ruta "%appdata%\Microsoft\Outlook".
2-Asegurarse de que el archivo coincida con el nombre del perfil.
3-Ejecutar Outlook desde la línea de comando con el parámetro correspondiente "outlook.exe /importnk2".

Si queremos borrar completamente la información de direcciones recientes:

1-Ir al Menú: File-->Options-->Mail
2-Seleccionar "Empty Auto-Complete List" (Figura 1)


Figura 1

viernes, 24 de julio de 2015

Evento en el MUG - AD DS de Cero hasta la Nube

Junto con Javier Schamber vamos a realizar un evento en el MUG de Buenos Aires en donde mostraremos Active Directory Domain Services desde cero hasta mostrar como instalar Domain Controles en Azure.

Además vamos a contar con la paticipación especial uno de los IT Pros más reconocido en el país, Rodrigo De Los Santos.
 
Para inscribirse, pueden visitar el sitio del MUG.

viernes, 10 de julio de 2015

No todo lo que un mailbox necesita es Set-Mailbox

En un entorno Exchange, cuando queremos ver la propiedades de un mailbox, utilizamos el cmdlet Get-Mailbox, y para configurarlo utilizamos Set-Mailbox.
 
Recientemente me consultaron cómo se podrían deshabilitar los protocolos de conexión Imap4 y Pop3 para todos usuarios. La primera opción fue crear una GPO en la cual los servicios relacionados con ambos protocolos se deshabilitaran (Figura 1).

Figura 1

Luego me consultaron por la posibilidad de deshabilitar múltiples usuarios de forma centralizada. La dificultad consiste en que Set-Mailbox no permite habilitar o deshabilitar protocolos de conexión. Esto se debe a que las configuraciones de conexión de acceso de un mailbox se ven y se modifican respectivamente con los cmdlets Get-CASMailbox y Set-CASMailbox.
 
Una vez que sepamos qué cmdlets utilizar, simplemente debemos crear una sentencia que sirva a nuestro propósito.

Get-CASMailbox * | Set-CASMailbox -ImapEnabled $False -PopEnabled $False

Con el cmdlet previo, deshabilitamos Imap y Pop para todos los usuarios, y si reemplazamos el "*" por el filtro que queremos, podemos realizar la misma acción en un sub-set de usuarios.

martes, 30 de junio de 2015

¿Cómo puedo ser "NT Authority"?

Existen algunos momentos en los cuales no basta con ser administrador del equipo. No importa si es por un error al asignar un permiso, un programa que falló, una mala desinstalación, o un equipo que no sabemos por qué manos pasó... La realidad es que aunque creemos que los administradores somos los que tenemos más autoridad sobre el equipo, algunas veces nos encontramos con un "Acceso Negado".
 
Quien verdaderamente tiene todos los permisos sobre las claves de registro, archivos, directorios, etc es la cuenta System (nt authority\system).
 
Esta cuenta existe en todos los equipos Windows, pero no podemos utilizarla  si no tenemos la posibilidad de ingresar el password de la cuenta.

Si utilizamos PSExec (La herramienta de Sysinternals) podemos acceder como System.
 
Figura 1
 
Al ejecutar "PSExec.exe -s \\NombreDelEquipo cmd", accedemos remotamente a una consola de comandos en el equipo remoto, tal como lo muestra la Figura 1. Aquí podemos ver que nos conectamos remotamente a otro equipo con un CMD con permisos de System.
 
Si queremos utilizarlo en el equipo local, debemos ejecutar "PSExec -s -i -d cmd".
 
En cualquiera de los dos casos, debemos ejecutarlo desde una consola con permisos de Administrador (Figura 2).
 
Figura 2
 
 
 

miércoles, 6 de mayo de 2015

Boot a VHD / VHDX con UEFI

Recientemente intentamos virtualizar unas desktop para pasarlas a una infraestructura de VDI. Para aprovechar que el SO era Windows 8.1, creamos los equipos virtuales en Hyper-V como equipos de Generación 2.
 
Esta nueva generación de máquinas virtuales realiza el inicio por UEFI, por lo que nos encontramos con algunos problema a la hora del inicio de los equipos.
 
Primero, el desktop que antes iniciaba por BIOS ahora no iniciaba por UEFI, adicionalmente no podíamos utilizar Bcdedit para manejar las opciones de inicio (Figura 1).

Figura 1

Inicialmente utilizamos Diskpart para formatear la partición de System con sistema de archivo FAT y activarla.

Por último, debimos utilizar Bcdboot, incluido en el directorio System32 de la instalación de Windows y lo ejecutamos con algunos parámetros (Figura 2).

Figura 2
bcdboot.exe :\Windows /s  /f All


Indicamos el disco donde está Windows , el disco de inicio, y especificamos que el SO puede iniciar con BIOS y UEFI "/f ALL".

Siguiendo esos pasos el disco que antes era físico e iniciaba por BIOS, ahora pudo iniciar por UEFI como parte de un equipo virtual.