lunes, noviembre 28, 2011

Cambio Masivo en AD con PowerShell

Holas!!

Hace tiempo que no escribia un articulo, andaba poco creativa, pero aprovechando que ando en unas mini vacaciones en Concepcion aprovechare de compartir un poco de Scripts.

Hace unos dias me pidieron crear un script para modificar la informacion de los usuarios en forma masiva, eran cerca de 800 usuarios a modificar y la informacion estaba en un excel.

Estuve buscando en el Script Center de Microsoft pero los que alli estan no me dejaban satisfechas, algunos campos podian ser modificados pero otros multivalor no podian hacerlo, ademas que se queria agregar la fotografia del usuario en el campo jpegPhoto.

En la consola PowerShell de Active Directory puedes encontrar el cmdlet Set-ADUser con el cual puedes modificar el usuario, identificas al usuario en forma unica con la cuenta, este es el atributo sAMAccountName, asi que colocamos -identity "usuario" a nuestro comando.

A continuacion identificamos que atributos necesitamos modificar, para el caso en que sea multiatributo y deseamos agregar, reemplazar o eliminar algun valor tambien lo podemos hacer usando add, replace, o remove indicando el atributo a modificar, por ejemplo -add @{Description = "Descripcion Agregada"}

Tambien, necesitamos cambiar el nombre del objeto en si (atributo cn) para lo cual usamos el cmdlet Rename-ADObject indicandole el usuario que deseamos renombrar.

Como queremos hacerlo para muchos usuarios, necesitamos generar un  archivo csv, separados por comas, en que los nombres de las columnas indiquen los campos que queremos modificar, como ya vimos anteriormente, para parsear el archivo usamos en cmdlet import-csv y lo colocamos en una variable.

Otro problema que se nos presento es la fecha de expiracion de la cuenta, la cual al mirar el objeto nos percatamos que era el dia anterior, para eso hicimos el sucio truco de sumarle un dia (New-TimeSpan -Days 1) a la fecha entregada en el archivo.

Como ultimo desafio, nos quedo el cargar la foto, como el archivo es jpg, no hay un upload foto, asi que hubo que realizar una conversion del archivo a un formato binario ([Byte[]]$(Get-Content -Path "E:\usuario.jpg" -Encoding Byte -ReadCount 0) )

Con todos los ingredientes listos, nuestro script quedo asi:

$data = import-csv $args[0]
$fecha2 = New-TimeSpan -Days 1

foreach ($i in $data)
{

# Se le suma 1 dia a la fecha de expiracion para que lo cargue bien
$fecha = Get-Date $i.accountExpires
$fechaExpira = $fecha + $fecha2

# Renombra la cuenta al nuevo nombre
Get-ADUser -Identity $i.sAMAccountName | Rename-ADObject -NewName $i.DisplayName

# Actualiza los datos de la cuenta
Set-ADUser -identity $i.sAMAccountName -AccountExpirationDate $fechaExpira -Description "Descripcion" -Manager $i.manager -GivenName $i.givenName -Surname $i.sn -DisplayName $i.DisplayName -Company $i.Company -MobilePhone $i.mobile -Department $i.department  -HomePhone $i.HomePhone -Title $i.title

#Agrega la Foto del Usuario

Set-ADUser  -Identity $i.sAMAccountName  -replace @{jpegPhoto = ([Byte[]]$(Get-Content -Path "E:\$i.sAMAccountName.jpg" -Encoding Byte -ReadCount 0) ) }

}

Saludos!!

martes, septiembre 06, 2011

Algo que vale la pena compartir...

Felipe Cubillos, empresario, navegante chileno, patrón del desafío Cabo de Hornos que terminó en segundo lugar en la regata Vuelta al Mundo, fallecido en el accidente aereo de Juan Fernandez el 2 de Septiembre del 2011, escribió:

Lo que aprendí en la regata de la vuelta al mundo

Hola a todos,

Estamos ya a menos de 24 horas de terminar la Regata de la Vuelta al Mundo y cuando Uds. abran sus computadores posiblemente tengamos una ventaja cercana a las 150 millas y muchos de Uds pensarán que ya ganamos esta etapa, de punta a cabo. Nos encantaría que fuera así, pero la experiencia nos enseña que hay que esperar y que las regatas se ganan y se pierden en la meta.

Y aquí va un corto resumen de lo que yo aprendí o reafirmé, durante todo este tiempo; lo hago en primera persona pues no puedo involucrar al Negro en todo lo que a continuación van a leer.

1.. acerca de los hijos, definitivamente no son tuyos, solo quiérelos y ámalos y trata de educarlos con el ejemplo y si puedes, transmíteles que busquen sus propios sueños, no los tuyos. Y no esperes que te agradezcan todo lo que haces por ello; ese agradecimiento vendrá muchos años después, quizás cuando tu ya te hayas convertido en abuelo/a (ahí sabrán recién lo que es ser padre/madre). Pero si en el intertanto, te llegan a decir que están orgullosos de ser tu hijo/a, date por recompensado con creces. Y si alguno de ellos debe partir antes que tú, que al menos te quede el consuelo que le dijiste muchas veces cuanto lo querías.

2.. acerca de tus padres, no dejes nunca de agradecerles el hecho de que te hayan traído a este mundo maravilloso y te hayan dado tan solo la posibilidad de vivir, solo eso, ¡¡¡ vivir !!!

3.. acerca del mar, el viento y la naturaleza, admírala y cuídala, es única y no tenemos otra. Y al mar y el viento, nunca trates de vencerlos ni menos desafiarlos. Llevan todas las de ganar. Si quieres ser un navegante, acostúmbrate a vivir en crisis permanente.

4.. acerca de los límites, ellos no existen o están mucho mas allá de lo que te imaginas. ¿Cuanto más allá? Ese es la pregunta, tienes que llevarte al extremo y ahí lo descubrirás.

5.. acerca del talento, no sirve para nada si no va acompañado de determinación, planificación, disciplina y perseverancia. El talento es efímero, la determinación, eterna.

6.. acerca del amor, da las gracias al Universo si te despiertan cada mañana con un beso y una sonrisa. Y haz como las abejas y las mariposas, ellas no buscan la flor más linda del jardín, sino aquella que tiene el mayor contenido.

7.. acerca de la sociedad, ayuda a los que son igual o más capaces que tú, pero que no han tenido tus mismas oportunidades. Son ellos los más olvidados de la sociedad pues siempre se ayuda a los que piden y vociferan, pero a los que me refiero, no piden ayuda, solo necesitan una oportunidad. Sueño todavía con una sociedad más justa y más humana.

8..acerca del liderazgo, echo de menos en el mundo actual esos líderes que hacían lo que se debe hacer y decían lo que se debe decir, sin esperar resultados inmediatos en las encuestas. Me refiero a los que marcan un camino, no los que siguen a las masas.

9.. acerca de la riqueza, una vez que hayas financiado tu flujo de caja, trata de comprar más tiempo que dinero, más libertad que esclavitud.

10.. acerca de la angustia y la amargura, cuando creas que algo no es posible, que los problemas te agobian, que ya no puedes, date un tiempo para ver las estrellas y espera despierto el amanecer, ahí descubrirás que siempre sale el sol, ¡¡¡ siempre !!!

11.. acerca del triunfo, si quieres triunfar debes de estar dispuesto a fracasar mil veces y dispuesto a perder todo lo que has conseguido. Y no temas perderlo todo, pues si te lo has ganado bien, de seguro lo recuperas con creces.

12.. acerca del presente, vívelo intensamente, es el único instante que realmente importa; los que viven aferrados al pasado ya murieron y los que viven soñando con el futuro, aún no han nacido.

13.. acerca del éxito y el fracaso, reconócelos como dos impostores, pero aprende sobretodo de los fracasos, los propios y los de los demás, ahí hay demasiado conocimiento que generalmente no usamos.

14.. acerca de los amigos, elije los que están contigo cuando estás en el suelo, porque cuando estés en la gloria, te van a sobrar.

15.. acerca del equipo, motívalo en los momentos difíciles y nunca dejes que uno te abandone por haberse equivocado, ése es el más importante.

16.. acerca de tu país, ama a la tierra que te vio nacer, trabaja por hacer de tu país un mejor lugar para todos y pasea orgulloso/a tu bandera, cualquiera que ella sea (ya sea que seamos buenos o malos para el fútbol).

17.. acerca del esfuerzo, no te rindas nunca, no te creas el cuento de que cuando algo está costando mucho es porque no debe resultar, es simplemente que el Universo te está poniendo a prueba de si eres o no merecedor del éxito.

18.. acerca del miedo, no le temas, es un gran compañero, pero que no te inmovilice y no temas hacer el loco o el ridículo; la historia nos enseña que las grandes enseñanzas y tremendos descubrimientos son producto de esos instantes.

19.. acerca de Dios y el Cielo, creo que si actuamos haciendo el bien, podremos estar en la lista de espera si el Cielo existe y si no existe, habremos tenido nuestro propio Cielo en esta Tierra. Y a Dios no lo encontré solo en el Mar del Sur, en las nubes, en las tormentas, en las olas, ni en la meta ni en las partidas; estuvo siempre con nosotros, dentro, muy dentro nuestro.

20.. y cuando tengas dudas de qué debes hacer, pregúntate cual es tu Cabo de Hornos, ármate de una pequeña mochila que lleve sólo lo necesario para sobrevivir y comienza a caminar. Y no dejes de mirar al cielo, ahí descubrirás al albatros, que te enseñará a despegar con esfuerzo y a volar en libertad. Y te darás cuenta que no necesitas volar en bandada.

21.. y nunca, nunca renuncies a tus sueños, persíguelos apasionadamente y si no los consigues, no importa, el solo recorrer ese camino habrá valido la pena vivir y ojalá el sueño que persigas sea el sueño imposible.

22.. y si tienes la fortuna de un día competir con rivales del tamaño de los que nos tocó enfrentar en esta Regata, hónralos, admíralos, pero entrega todo lo que tienes por vencerlos en buena lid; ellos se lo merecen.

23.. y si en el día de mi muerte me dan la opción de renacer, elijo ser Albatros y volar el Mar del Sur y mirar a los intrépidos navegantes que arriesgan sus vidas y dejan todo en busca de su sueño, en busca de su sueño imposible.

24.. y nunca te tomes demasiado en serio a un navegante que está terminando una Vuelta al Mundo. Solo sabrá navegar un poco más, ¡¡nada más!!

Felipe

lunes, agosto 15, 2011

Borrando una configuracion IMAP del perfil de Outlook

El desafio era, agregamos el perfil de exchange, pero como sacamos el perfil anterior??

Aca les dejo el script que contruimos, falta depurarlo, seguro se puede hacer en menos lineas, jejjee.

Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_CURRENT_USER = &H80000001


Set Ws = WScript.CreateObject("WScript.Shell")


Dim ww


set ww=wscript.createobject("wscript.network")


nombreusu=ww.UserName
avalor = Array(1,1,1,1,1,1)
strComputer = "."
KeyPath = "Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\"
DefaultProfile="vacio"


On Error Resume Next
DefaultProfile = ws.RegRead("HKCU\" & KeyPath & "DefaultProfile")
If DefaultProfile = "vacio" Then
WScript.quit


End if


Call BuscaKey()


WScript.Quit


Sub BuscaKey()
'----------------------


Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676"


oReg.EnumKey HKEY_CURRENT_USER,strKeyPath, arrSubKeys


For Each subkey In arrSubKeys
WScript.Echo subkey


If eslakey(subkey) Then
aborrar = strKeyPath & "\" & subkey
oReg.DeleteKey HKEY_CURRENT_USER, aborrar


End if
Next


End sub






Private Function eslakey(subkey)
'-------------------------------


Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676\" & subkey


oReg.EnumValues HKEY_CURRENT_USER,strKeyPath, arrValueNames


For Each Valor In arrValueNames


If Valor = "IMAP Server" Then
imapserver = 1
End If


Next


eslakey = 0


if imapserver = 1 Then


strValueName = "IMAP Server"
oReg.GetBinaryValue HKEY_CURRENT_USER, strKeyPath, strValueName,strValue
imapsrv=strValue


email= ""


For i = lBound(strValue) to uBound(strValue)
If strvalue(i) <> 0 Then
email=email + Chr(strValue(i))
End If


Next


If LCase(email) = "mailserver.dominio.cl" or LCase(email) = "10.10.10.11" Then
eslakey = 1
End if


End If
End function


WScript.Quit

Saludos!

Isa

miércoles, agosto 10, 2011

Migrando a Exchange

Hace tiempo que no posteaba un articulo para mi blog, mas bien ha sido por que le he dedicado mas tiempo a otro Blog, ya les contare sobre ese proyecto que me ocupa varias de mis horas.

Este ultimo tiempo una de las actividades que mas me ha tocado enfrentar ha sido la migracion de la plataforma de correo de distintos sabores a Exchange 2007/2010, han sido proyectos bastante interesantes y entretenidos, unos mas expeditos que otros, pero el ultimo desafio es mas interesante ya que debiamos practicamente automatizar la migracion usando un grupo de prueba de 5 usuarios y dejar los procedimientos y scripts para migrar los otros 2000 usuarios en forma lo mas trasparente posible.

Interesante.

Primer Desafio: Creación de las cuentas Exchange.

Parecia algo facil, teniendo el archivo csv con los datos de los usuarios el crear la cuenta o asociarles un buzon a cuentas existentes no revertia gran complejidad, sin embargo en este caso las cuentas pertenecian a otro dominio, por lo que se trataba de cuentas linkeadas.

Tomando como base un artículo publicado por Cristian Aguilera y teniendo la línea de comando al crear un usuario me arme del siguiente script.

$Credential = Get-Credential

$data = import-csv $args[0]

foreach ($i in $data)
{
$upn = $i.alias + '@DOMINIO.CORP'

New-Mailbox -Name $i.displayname -Alias $i.Alias -OrganizationalUnit 'DOMINIO.CORP/Usuarios' -UserPrincipalName $upn -SamAccountName $i.sam -FirstName $i.nombre -Initials '' -LastName $i.apellido -Database $i.database -LinkedMasterAccount $i.usuarioad -LinkedDomainController 'DC1.dominio.cl' -LinkedCredential $Credential
}

El script me funciono a la segunda, pues a la primera use el alias como SamAccountName y me reclamo por el largo que era mayor a 20 caracteres, asi que tuve que volver a generar el csv con este dato truncado a 20.

Otro problema que nos surgio fueron los nombres con acentos y eñes, tales como Díaz o Muñoz, al crear el usuario aparecian signos de interrogacion o cuadraditos, estabamos bajando el languaje pack cuando un articulo nos dio la luz, guardar el archivo como unicode, probamos y solucionado.

Segundo Desafio: Transferir los Datos de los Usuarios.

En proyectos anteriores ya habia usado este juguetito, se llama Microsoft Transporter Suite, que sirve para migrar cuentas pop/imap a Exchange 2007 (No esta disponible para Exchange 2010).
Tercer Desafio: Migrar los perfiles Outlook de los Usuarios

En migraciones anteriores esto habia estado a cargo del cliente quien migraba los pst y configuraciones usando a gente de soporte, sin embargo esta vez, debido al volumen de usuarios se queria hacerlo usando alguna GPO a la que se le agregara algun script.

Con la orientacion de mis amigos del GLUE que me recomendaron realizar estos cambios usando archivos prf logre realizar al menos parte de lo que necesitaba.

Tomando el perfil por defecto, llamado Outlook, se le agrego la configuracion de Exchange, se dejo ese perfil como predeterminado, se deja la configuracion exchange como predeterminada configurandola con la informacion del Usuario autenticado, se tomo un archivo de ejemplo y se modificaron las siguientes secciones:

; **************************************************************
; Section 1 - Profile Defaults
; **************************************************************


[General]
ProfileName=Outlook
DefaultProfile=Yes
OverwriteProfile=Append
ModifyDefaultProfileIfPresent=True
DefaultStore=Service1


;***************************************************************
; Section 4 - Default values for each service.
;***************************************************************


[Service1]
OverwriteExistingService=Yes
UniqueService=Yes
MailboxName=%username%
HomeServer=EXMBX0
AccountName=Microsoft Exchange Server
DefaultAccount=TRUE

El resto de las secciones se dejo por defecto, con esto los usuarios quedaron con sus pst y configuraciones que tenian, para aplicar esta modificacion bastaba con ejecutar el outlook con los siguientes parametros:

Outlook.exe /importprf archivo.prf

Queda ahora el desafio de como eliminar la configuración del servidor anterior.

Saludos!

Isa

jueves, enero 13, 2011

Nos Invaden?? :O

Buscando algún tema interesante que publicar y pensando que quizás las sugerencias vendrían mas por el área técnica, me encontré con un amigo que me saco de contexto sorprendiéndome con una sugerencia: que tal sobre los extraterrestres?

Si bien el tema pareciera un poco fuera de lugar con las cosas que he escrito anteriormente, la verdad no esta fuera de lugar con los temas que alguna vez estuve interesada (y quizás aun lo estoy).

En mi época de colegio, me interese mucho en temas misteriosos o inexplicables, entre los libros que adquirí en esa época habían varios relacionados con ovnis y extraterrestres, también otros como sobre las pirámides, los hombres lobos, las brujas, etc. Muchos de esos libros ya no están en mi poder, pero recuerdo algunas cosas que contenían.


Hace unos días salió una noticia que nos pone en sobre aviso respecto a los extraterrestres, piden a la ONU que se cree un plan para el caso de una invasión, en otros medios suavizan el tema y hablan de encuentro mas que invasión.

En el documento se pidió que "la Organización de las Naciones Unidas (ONU) configure un grupo de trabajo dedicado a asuntos extraterrestres, con la capacidad de delinear un plan a seguir ante un eventual contacto alienígena."

Pero, que tan real es este encuentro??

En los libros que leía, habían muchos casos no solo de avistamiento de OVNIs sino que también de encuentros, estos se presentaban como hechos reales, los ONVIs de por si no necesariamente implica extraterrestre, su nombre solo indica No Identificado, perfectamente puede ser de origen terrestre como se ha visto en varias situaciones.

Muchas películas también nos ponen en alerta sobre este hecho y tenemos también el caso de un programa radial de La Guerra de los Mundos que hizo pensar a muchos que estábamos verdaderamente siendo invadidos generando un verdadero pánico en quienes escucharon el programa. Estaremos nuevamente siendo influenciados por los medios??

Hay alguien ahí fuera??

En mi afán de saber mas y de tener una participación en un encuentro me uní a un grupo de chilenos que participaban del proyecto SETI, si bien hace mucho tiempo deje de procesar unidades y no porque me convencieron los que apoyaban el proceso de la búsqueda contra el cáncer, sino por que la cuenta de la luz estaba muy alta (ahora también lo esta pero por distintos motivos).

Este proyecto lo que busca es Inteligencia Extraterrestre, si bien hasta el momento no se ha encontrado alguna prueba de ello, que tan factible es que realmente exista y que estén tan próximos como para invadirnos??

Igual nos deja pensando lo que dijo Hawking hace unos meses atrás: “Si los alienígenas nos visitaran, el resultado sería similar a la llegada de Colón al nuevo mundo, lo que como sabemos no resultó muy positivo para los nativos americanos”.

Bueno, independiente de cual sea la verdad, siguen entreteniéndome programas como Xfiles: La verdad esta ahí fuera, y películas como Encuentros Cercanos del Tercer Tipo.

Saludos!

Isa