MCSA: Windows Server 2016

martes, 7 de noviembre de 2017 Sin comentarios

Buenas,

No podía dejar pasar la ocasión así que, como ya va siendo tradición, antes de acabar el año nos examinamos de nuevo

Esta vez, el 70-743 que actualiza la certificación de MCSA 2012 a la 2016, que ya tocaba

image

A ver cuál hacemos en 2018… Exchange Server 2016? Quizás

Saludos,

Marc

MCTS: 70-534 Architecting Microsoft Azure Solutions

viernes, 24 de marzo de 2017 1 comentario

Bien, bien…

Han sido varios meses de estudio y muchos labs para poder presentarme al examen 70-534 sobre Arquitectura de Azure.

Sinceramente, uno de los exámenes más difíciles y, porqué no decirlo, raros de todos los que he realizado en mi vida.

Y cuando digo raros, es raaaarrrroooossss. Tanto, que a los 10’ de iniciarlo estaba dudando si era el examen que me había preparado o un quiz de Saber y Ganar y que optaba al bote del programa.

¡Total, que después de pasar un mal rato (son 150 minutos de examen) y no mirarme mucho las 3-4 últimas preguntas porque pensando un Si no lo voy a pasar, le he dado a “End” y… anda la osa, lo he pasado!!! (justo, eso sí Confused smile)

 

Nada, otro a la saca pues Embarrassed smile

 

Saludos,

Marc

Categories: Certificaciones Tags: , ,

MCTS: 70-533 Implementing Microsoft Azure Infrastructure Solutions

viernes, 23 de diciembre de 2016 Sin comentarios

Buenas,

Sí, ya sé que desde febrero no escribo muy poco (por no decir nada) pero uno tiene más vida fuera de los 64 bits de mi Windows 10.

La cosa es que he preparado y pasado el examen 70-533 de Microsoft sobre Azure. El primero sobre tecnologías cloud de Microsoft si obviamos los de Office 365.

El siguiente, será – espero – el 70-534 que pinta un poco más difícil que este pero… ya veremos Hot smile.

 

Saludos,

Marc

Categories: Certificaciones Tags: , ,

[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

[Active Directory]–Subir fotos de usuarios al AD

viernes, 20 de noviembre de 2015 Sin comentarios

Hola a todos,

Como muchos ya sabéis, desde Windows Server 2003 funcionando como Domain Controller y nivel funcional 2003, se pueden almacenar fotos de los usuarios en el entorno.

Bien, pues después de mucho buscar por Internet y no encontrar un script de PowerShell medio decente, me aventuré a hacer el mío propio adaptado de otro.

Este es el código

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

# PowerShell Skript to  upload multiple Photos to Active Directory with

# automatic Logging management and Prechecks  before uploading

Author: Marc Salvador

#

# Version 1.0 – Inicial adaptada  de Internet

# Version 1.1 – Control de  errores con “Try/Catch”

# Versión 1.2 – Control de la existencia de carpetas para trabajar

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

 

$Date $(Get-Date -Uformat “%d.%m.%Y-%H.%M”)

# Variables de ejecución

# Se han de crear las carpetas “UploadPics” y sus subdirectorios o modificar el valor de las

# variables con el dato correcto.

# ——————————————————————

$overwrite =
“false” #Si  es necesario actualizar una foto de usuario, dejad el valor en “true”

$pathToPictures “E:\UploadPics\Pics” #only path to folder

$maxPictureSize “20000” # in byte

$pathToLog = “E:\UploadPics\PicUpload.log” #with name of the file

$maxLogSize = “10000000” #in byte

$backupFolder = “E:\UploadPics\Logs\”  #Ubicación de los backups

$backupDays = “7” #Días antes de borrar un backup

#
——————————————————————

# Existencia de la carpeta con  las fotos

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

{

    Write-Host “No se encuentra la ruta de los archivos con las  fotos” -ForegroundColor Red

    Break

}

#
——————————————————————

# Existencia de la carpeta de  logs

if (Test-Path  -Path $pathToLog)

{

    $log = Get-Item $pathToLog

}

else

{

    Write-Host “No se encuentra la ruta de los archivos de  log” -ForegroundColor Red

    Break

}

# Revisar tamaño del fichero de  logs

if ($log.length -gt $maxLogSize)

{

$backupLog $backupFolder\PicUpload-$Date.log”

Copy-Item $pathToLog $backupLog

Clear-Content $pathToLog

Write-Host “Fichero de logs copiado a $backupLog -ForegroundColor Green

}

#Borrar los backups antiguos

$backupFiles =
Get-ChildItem $backupFolder

 

$old = $backupFiles | ? { $_.CreationTime -lt ((get-date).adddays($backupDays)) }

if ($old -eq $Null)

       {

       Write-Host “No hay backups de más de $backupDays días en ‘$backupFolder‘!” -ForegroundColor Yellow

       }

else

       {

       $old | % { Remove-Item $backupFolder$_ }

       Write-Host “Backups antiguos eliminados!”

       }

 

#Fecha actual

$Date=$(Get-Date -format g) | add-content $pathToLog

 

#Using hashtable for logs.

$errorlist=@{} #Errores de log

 

#
———————————————————————————————————————

# Cargamos el módulo de AD. Si se  ejecuta desde un Windows client,

# hay que bajar primero las RSAT para ese cliente e instalarlas.

# Control de error de carga del módulo

Try {

    Import-Module ActiveDirectory

}

Catch {

    $ErrorMessage = $_.Exception.Message

    $FailedItem = $_.Exception.ItemName

    $wshell = New-Object -ComObject Wscript.Shell   

    $wshell.Popup(“Error en la operación $ErrorMessage $FailedItem,0,“Error de ejecución”,0x0)

    Break

}

 

#Cargamos todas las imágenes desde el directorio donde están almacenadas

$queryPics Get-ChildItem $pathToPictures -ErrorAction Stop

 

foreach ($pic  in $queryPics)

{

    $username = $pic.basename

    $dom = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()

    $root = $dom.GetDirectoryEntry()

    $search = [System.DirectoryServices.DirectorySearcher]$root

    $search.Filter = “(&(objectclass=user)(objectcategory=person)(samAccountName=$username))”

    $result = $search.FindOne()

 

#Check if user exists

if ($result  -ne $null)

       {

       $user = $result.GetDirectoryEntry()

       $thumbnailPhoto = $user.thumbnailPhoto

       #Revisar si tiene o no una imagen en el AD

       if ($thumbnailPhoto.Value -eq $null)

             {

             #Añadir la foto al usuario

             [byte[]]$jpg = Get-Content $pic.FullName -encoding byte

            #Control de errores

            Try

            {

                $user.put(“thumbnailPhoto”,  $jpg )

                $user.setinfo()

            }

 

            Catch

            {

                 $ErrorMessage = $_.Exception.Message

                 $errorlist.Add($username, $ErrorMessage)

            Break

            }

       }

       else #Sobreescribimos la foto existente

             {

             if ($overwrite -eq $true)

                    {

                    #Add picture to user property

                    [byte[]]$jpg = Get-Content $pic.FullName -encoding byte

 

            #Control de errores

            Try

            {

                $user.put(“thumbnailPhoto”,  $jpg )

                $user.setinfo()

            }

 

            Catch

            {

                 $ErrorMessage = $_.Exception.Message

                 $errorlist.Add($username, $ErrorMessage)

                Break

            }

          }

          else

              {

                    Write-Host $user.displayname “ya  tiene una imagen en el AD” -ForegroundColor  Yellow

                    $errorlist.Add($username, “ya tiene una imagen”)

                    }

             }

       }

else

       {

       Write-Host  $username ” no encontrado” -ForegroundColor Red

       $errorlist.Add($username, “no encontrado”)

       }

}

 

#Notificación

$maxLogSize =
$maxLogSize/1000000

Write-Host “#Nota:  el archivos de log se puede encontrar en $pathtopictures y se llama ‘PicUpload.log’. Este archivo se moverá a ‘”$backupFolder“PicUpload-Date-Time.log’ cuando exceda los $maxLogSize MB.`n” -ForegroundColor Cyan

 

#Añadir los errores en el fichero

$errorlist | out-string | add-content $pathToLog

 

Como todo en esta vida, el script es mejorable así que acepto sugerencias

Saludos,

Marc