Archivo

Archivo para la categoría ‘Exchange’

[Reverse proxy] Sustituir Microsoft TMG por Wep Application Proxy (WAP)

lunes, 22 de febrero de 2016 Sin comentarios

Hola a todos,

En un proyecto de migración de Exchange 2010 a 2013 + Office 365 en el que llevo unas tres semanas, se nos presentó la disyuntiva de seguir publicando los nuevos servicios de Exchange 2013 a través de un TMG existente en la arquitectura o si de mover esos servicios a un Web Application Proxy que se montó para federar el entorno.

En un primer momento, se optó por seguir com TMG pero después de bastantes problemas para hacer funcionar Outlook Anywhere, se decidió dar un salto y migrarlo todo hacia WAP.

He de decir que la documentación en Technet que explique cómo publicar los servicios de Exchang en WAP se reduce a un mísero artículo por lo que el cambio se ha hecho un poco a ciegas.

El artículo en cuestión es:

Using Application Proxy to Provide Access to SharePoint Server and Exchange Server https://technet.microsoft.com/en-us/library/dn528827.aspx

Y como veréis, es escueto.

Qué necesitamos:

  • Un certificado SAN o wildcard para publicar los servicios
  • Un servidor en DMZ con el rol de Remote Acces y Wep Application Proxy. Este equipo puede estar o no en dominio. Como se usa para la federación con Office 365, estará fuera.
  • Tener claras las URLs de los servicios de Exchange
  • Una zona “split DNS” para hacer coincidir los nombres públicos con los internos de Exchange
  • Autenticación Pass-through (se puede usa Claims pero no es el objeto de esta entrada)

No explicaré como publicar una web en un servidor WAP puesto que no tiene secreto pero sí indicaré los nombres de los servicios. El dominio a usar será “dominio.com” (original donde los haya) y las URLs, tanto internas como externas serán las mismas.

Notad que al final de cada URL hay una barra inclinada /. Es obligatoria.

Y ya está. Así de sencillo.

image

Podemos ver que, por ejemplo, el OWA funciona

image

Así que hasta otra

 

Marc

[Exchange] – Revisar errores de los calendarios de los usuarios

jueves, 19 de noviembre de 2015 Sin comentarios

Hola a todos,

Estoy en un cliente con unos pocos buzones de Exchange, sobre los 16.000, cuyos usuarios hacen experimentos con las convocatorias de Exchange como borrarlas sin avisar a los convocados, moverlas, no aceptarlas…. cosa que produce errores en el subsistema de Calendar Repair de Exchange en forma de bastantes avisos.

El caso es que el cliente quiere que se cree un script de PowerShell que busque una sèrie de errores y los vuelque en ficheros. Así que, después de experimentar un poco dado que no soy un experto en teclear me ha salido esto:

 

#############################################################################################

# PowerShell Script to check errors in Exchange calendars in recursion

Author: Marc Salvador

Version 1.0 – Versión inicial con control de errores y logs de salida

# Version 1.1 – Versión con descarte por fechas 

# Version 1.2 – Eliminación de los logs de anteriores ejecuciones. NO PREGUNTA!!!

################################################################################################

 

# Definición de variables

$path «D:\PowerShell\Calendar Repair Assistant»

$pathLog «D:\PowerShell\Log»

# Se usan arrays para almacenar los datos de los ficheros y los errores en las citas

$filesInPath @()

$CitesErronies @()

#
———————————————————————-

# Control de errores: Existencia  de la carpeta con los ficheros a tratar

#

if (!(Test-Path -Path $path))

{

    Write-Host «No se encuentra la ruta de los archivos de ‘Calendar Repair Assistant’ en $path« -ForegroundColor Red

    Break

}

#  ———————————————————————-

# Control de errores: Creamos un  directorio para guardar los logs del

# resultado del tratamiento de ficheros LOG/XML

if (!(Test-Path -Path $pathLog))

{

    Write-Host «No se encuentra la ruta de los archivos de log en $pathlog»  -ForegroundColor Red

    New-Item -ItemType Directory  -Path $pathLog  -ErrorAction Stop

    Write-Host «Directorio Log creado correctamente en $pathLog»  -ForegroundColor Green

}

else

{

    $directoryInfo  = Get-ChildItem  $pathLog Measure-Object

    # Contamos el número  de elementos del directorio.

    $ficherosTotales  = $directoryInfo.count

    # Si no es cero, es que no está vacío y se puede borrar

    If ($directoryInfo.count  -ne 0)

        {

        Remove-Item  $pathLog\*.txt -Recurse -ErrorAction  SilentlyContinue

        Write-Host  «$ficherosTotales ficheros de logs antiguos borrados en $pathlog» -ForegroundColor Yellow

        }

}

#########################################################################

# Cuerpo principal del programa

#########################################################################

 

# Capturamos la fecha/hora del  sistema.

$Date Get-Date

# Fechas de inicio y finalización  de la ejecución

$DateScriptH Get-Date -Format t

$DateScriptD Get-Date -Format  d/M/y

 

# Obtenemos los nombres de los ficheros a analizar

$filesInPath Get-ChildItem -Path  $path -ErrorAction Stop

Try

{

    Write-Host «Inicio de la ejecución del script a las $DateScriptH del día  $DateScriptD« -ForegroundColor cyan

    ForEach ($logs in $filesInPath)

    {

        # Obtenemos  los nombres de los ficheros a analizar junto con el path donde se encuentran

        $filesInPath  = $path  + «\»  + $logs

        #  Convertimos los datos a XML

        $xml  = [xml](Get-Content $filesInPath  -ErrorAction Stop)

         # Seleccionamos los datos del XML que queremos tratar

        $meetings  = $xml.SelectNodes(«/CalendarRepairLog/Meetings/Meeting»| Where-Object  {([DateTime]$_.StartTime) -ge  $Date}

         #  Tratatamos los datos seleccionados

        foreach  ($meeting in  $meetings)

        {

              # Buscamos los usuarios convocados en las citas

              $attendees  = $meeting.Attendees.Attendee

              foreach  ($attendee in  $attendees)

              {

                    # Buscamos los errores de en los calendarios de cada usuarios

                    $ConsistencyChecks  = $attendee.ConsistencyChecks.ConsistencyCheck  | Where-Object  {$_.Result -eq «Failed»}

                    foreach  ($ConsistencyCheck in $ConsistencyChecks)

                    {

                          # Guardamos los datos de error de cada cita de cada usuario en un array y

                          # lo guardamos en un fichero para cada usuario

                          $CitesErronies += ,($meeting.Subject, $meeting.StartTime, $meeting.Organizer, $attendee.EmailAddress, $ConsistencyCheck.Description) Out-File -FilePath $pathLog\$logs-Resultado.txt  -Force -ErrorAction  SilentlyContinue

                    }

              }

        }

    }

}

Catch [System.exception]

{

    $ErrorMessage  = $_.Exception.Message

    $FailedItem  = $_.Exception.ItemName

    Write-host «Se ha producido un error de ejecución $FailedItem en el  entorno $ErrorMessage « -ForegroundColor  Red

    Break

}

Catch

{

    $ErrorMessage  = $_.Exception.Message

    $FailedItem = $_.Exception.ItemName

    Write-host «Se ha producido un error de ejecución $FailedItem en el entorno $ErrorMessage « -ForegroundColor Red

    Break

}

Finally

{

    # Fechas de inicio y finalización de la ejecución

    $DateScriptH  = Get-Date -Format t

    $DateScriptD  = Get-Date -Format d/M/y

    Write-Host «Finalización de la ejecución del script a las $DateScriptH del día  $DateScriptD« -ForegroundColor cyan

    write-host «Los logs de ejecución están en $pathLog»  -ForegroundColor Green

}

 

 

 

Acepto comentarios de mejora como, por ejemplo, que genere un HTML por cada usuario y se lo envíe por correo…

Saludos,

Marc

 

 

Categories: Dia a dia, Exchange Tags:

MCP: Advanced Solutions of Microsoft Exchange Server 2013

viernes, 25 de septiembre de 2015 Sin comentarios

Hola,

Si hace un mes ponía por aquí que obtuve el MCP de Exchange (el  70-341 Core Solutions of Microsoft Exchange Server 2013) y puedo poner que me he sacado el 70-342 Advanced Solutions of Microsoft Exchange Server 2013

Así que… ya tengo el MCSE: Messaging!!!

 

Saludos,

Marc

Categories: Certificaciones, Exchange Tags:

Migración de Exchange 2010 SP3 Híbrido a Exchange 2013 SP1 Híbrido (y VII)

viernes, 13 de marzo de 2015 Sin comentarios

Aquí estamos de nuevo.

Y sí, ya tenemos respuesta oficial de Microsoft sobre el tema de la hibridación. No voy a opinar Don't tell anyone smile, sólo mostraros el enlace que nos han hecho llegar.

 

Decommissioning your Exchange 2010 servers in a Hybrid Deployment

http://blogs.technet.com/b/exchange/archive/2012/12/05/decommissioning-your-exchange-2010-servers-in-a-hybrid-deployment.aspx

Juzgad vosotros

 

Saludos,

Marc

Migración de Exchange 2010 SP3 Híbrido a Exchange 2013 SP1 Híbrido (VI)

martes, 10 de marzo de 2015 Sin comentarios

Hola,

Ya tenemos respuesta oficial de Microsoft para el tema de la migración y actualización de la hibridación en un entorno Exchange 2013 heredado de un Exchange 2010.

Hay que BORRARLO TODO y EMPEZAR desde cero.

Así, tal cual.

Perfecto.

Bravo.

Estoy esperando un procedimiento detallado, que compartiré por aquí, sobre cómo realizar todo el proceso y, esperemos, cerrar este capítulo interminable de la implementación.

 

Saludos,

Marc