Archivo

Entradas Etiquetadas ‘Active Directory’

[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

Migración de GPOs entre Bosques

miércoles, 2 de octubre de 2013 Sin comentarios

Hola a todos,

No sé si alguno de vosotros se ha encontrado con la necesidad de migrar GPOs desde un dominio “A” a un dominio “B”.

El caso es que yo sí.

Buscando y buscando por Internet hay mil y una soluciones como hacer un export desde A para hacer un import a B. Muchas veces, esta opción no funciona o conlleva problemas asociados.

Después de darle muchas vueltas el tema y no encontrar nada que me gustase opté por lo que me pareció más obvio: Copiar y pegar. Sí, sí, repito COPIAR y PEGAR.

La única premisa es que entre los bosques debe existir una relación de confianza.

Pero cómo se hace? Desde la Group Policy Management Console misma. Tan sencillo como esto.

Veamos el proceso.

Abrimos la GPMC, nos situamos en la raíz de la consola y

image

 

Tecleamos el nombre del bosque y, si tenemos los permisos adecuados, nos la agregará.

image

Una vez aquí, desplegamos el árbol de cada bosque y vamos a

image

en el dominio origen, seleccionamos todas las GPOs que queramos mover, marcamos en Copiar

image

Vamos al dominio destino, a

image

Y Pegar

image

Esta acción nos generará el lanzamiento de un Wizard que deberemos seguir

image

Avanzamos y dejamos marcada la opción por defecto “Usaer permisos predeterminados para nuevos GPO (ole con la traducción, por cierto Winking smile)

image

Después de un breve análisis de las GPOs a migrar, nos puede salir un mensaje como el siguiente donde deberemos crear una tabla de migración donde convertiremos los usuarios del dominio A a usuarios del dominio B

image

image

Creamos una nueva Tabla y ponemos los datos siguiente (cada caso el suyo, que esto es un ejemplo)

image

Una vez todo listo, procedemos con el asistente que finalizará e iniciará la migración en sí

image

 

Después de finalizar la copia de GPOs, deberemos revisar que los permisos de cuentas se hayan trasladado correctamente y… aplicarlas en las OUs correspondientes.

Enjoy!!

 

Saludos,

Marc

“Downgrade” del nivel funcional del bosque/dominio

jueves, 15 de noviembre de 2012 Sin comentarios

Hola,

Ha raíz de una consulta en los foros del TechNet de Microsoft sobre la posibilidad de añadir un DC 2008 a un dominio 2008 R2 cuyo nivel funcional tanto del bosque como del dominio en sí es 2008 R2, un usuario, Javier Zas, ha respondido que es posible, con matices.

Qué cosas!!! Toda mi vida pensando que no era posible y parece que sí. Se establecen varias condiciones pero si se cumplen, parece que la cosa puede funcionar.

Os paso los enlaces donde se indican los procedimientos y os “pego” por aquí los recuadros con los warnings o condiciones a cumplir.

Consideraciones para el bosque

Importante

Después de establecer el nivel funcional del bosque en un determinado valor, no puede revertir ni bajar el nivel funcional del bosque, excepto cuando: al elevar el nivel funcional del bosque a Windows Server 2008 R2, si la papelera de reciclaje de Active Directory no está habilitada, tiene la opción de revertir el nivel funcional del bosque a Windows Server 2008. Solo puede bajar el nivel funcional del bosque de Windows Server 2008 R2 a Windows Server 2008. Si el nivel funcional de bosque está establecido en Windows Server 2008 R2, no puede revertirse, por ejemplo, a Windows Server 2003.

Consideraciones para el dominio

Importante

Después de establecer el nivel funcional del dominio en un determinado valor, no puede revertir ni bajar el nivel funcional del dominio, excepto cuando: si eleva el nivel funcional del dominio a Windows Server 2008 R2 y el nivel funcional del bosque es Windows Server 2008 o inferior, tiene la opción de revertir el nivel funcional del dominio a Windows Server 2008. Sólo puede bajar el nivel funcional del dominio de Windows Server 2008 R2 a Windows Server 2008. Si el nivel funcional de dominio está establecido en Windows Server 2008 R2, no puede revertirse, por ejemplo, a Windows Server 2003

 

Ya veis, siempre se aprenden cosas nuevas.  Smile

 

Saludos,

Marc

Categories: Dia a dia, Tips Tags:

Qué estoy pensando escribir

jueves, 19 de julio de 2012 Sin comentarios

Hola a todos

Debido a mi actividad profesional me toca saber un mucho de muchas cosas. A veces – la mayoría – es muy complicado por no decir imposible cumplir con esa premisa así que intento saber mucho de un poco Hot smile.

¿Y de qué sé bastante? Pues de Active Directoy y Exchange. Sé un poco de Lync, SCCM, SCOM, ISA/TMG y poco más.

Por casualidades de la vida, llevo unos días con proyectos de AD, Exchange, ISA/TMG y SCCM cosa que me han dado pie a generar una serie de artículos que compartiré con vosotros.

Para empezar, me centraré en uno de mis favoritos: Exchange, iniciando una serie de 2, 3 o 4 artículos sobre el novísimo Exchange 2013 que tengo medio instalado en Windows Server 2012 RC

La idea es dar una introducción a la nueva arquitectura, apoyándome en la documentación existente en el Technet y pasar a describir una instalación desde cero y detallar un poco la configuración. Quizás no será nuna un escenario real pero la Preview no permite otra opción que instalación desde cero.

Los otros que tengo en mente, y veremos si puedo, son una migración de Exchange 2003 SP2 hacia Exchange 2010 SP2 publicando servicios en un TMG 2010 SP2 (actualmente no está así) y otro similar, partiendo de otro Exchange 2007 SP3 “todo-en-uno” con un ISA 2006 para publicar servicios hacia un entorno Exchange 2010 SP2 con 2 HT/CAS + un MBX en DAG publicando servicios en un TGM 2010 que sustituye al ISA

Interesante, no?

 

Saludos,

Marc

Windows Server 8: Domain Controller (y II)

viernes, 9 de marzo de 2012 Sin comentarios

Si el otro día dejábamos preparado un Windows Server 8 para convertirlo en Domain Controller de un nuevo bosque, hoy rematamos la tarea.

El proceso, realmente, no difiere de versiones anteriores excepto en un par de puntos de comprobación que realiza el asistente, por lo que no entraré en excesivos detalles.

Dejábamos el equipo con un warning  de procesos pendientes así que lo retomamos en ese punto.

DCPromo10

Pulsamos sobre “Promote this server to a domain controller” que nos lanzara el conocido asistente para generar la instalación de la infraestructura.

Recordemos que montamos un nuevo forest. El nombre, en honor al blog donde publico estos artículos (y con todo el morro Smile with tongue out) será itpro.demo.

DCPromo11

Entre cada una de las fases y quizás porque el producto está en fase Beta, el tiempo que se toma el asistente es algo más del que me gustaría. Pero de momento, se lo perdono.

Como tipo de forest  y Domain optamos directamente por el modo nativo dle producto. Introducimos el password del modo DSRM y continuamos.

DCPromo12

Validamos el nombre NetBIOS (no veo motivo para cambiarlo) y procedemos.

DCPromo13

Los paths de instalación, los que nos sugiera el sistema y pasamos a revisar las opciones de instalación.

En este punto, si pulsamos sobre “View script”, veremos qué secuencia de comandos en PowerShell ejecutará el Asistente para generar un nuevo bosque (segunda captura de pantalla)

DCPromo14a

DCPromo14b

NOTA: Es probable que algunas variables como la de “ForestMode” cambien en la versión final si Microsoft decide renombrar el producto. O no.

Si lo tenemos todo listo, el Asistente realizará un último check y podremos tener nuestro nuevo y flamante bosque Windows Server 8.

DCPromo15

Así que “Install” Hot smile

DCPromo16a

Después de la promoción, el reinicio obligado del sistema…

DCPromo16b

Hacemos login en el sistema, se nos abrirá el Server Manager donde deberemos ver todo en Verde

DCPromo17

Y esto es todo?

Eh… umm… sí. Qué más esperábais? Bueno, va…. abrimos la consola de Active Directory Users and Computers (ADUC) y… y nada. Es como la de toda la vida Smile with tongue out.

DCPromo19

Si buscamos a nuestro “nuevo” DC y miramos las propiedades veremos que tampoco cambian respecto a las mostradas por Windows Server 2008 R2

DCPromo20

Lo mismo ocurre con el DNS. Nada nuevo en la superfície.

DCPromo21

Como se puede ver, el proceso de generación de nun DC en Windows Server 8 conserva gran parte de los movimientos que ya teníamos en Windows 2000 Server y que Microsoft ha ido evolucionando con el tiempo.

En breve, espero poder ir añadiendo más entradas sobre lo realmente nuevo del producto e ir aprendiendo a trabajar con él.

 

Saludos,

Marc