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

martes, diciembre 28, 2010

Azul Azul!!!!

Esa famosa pantallita que se ha hecho famosa y se asocia a Microsoft, pero según lo que me ha tocado ver, la gran mayoría de los casos se debe a otros culpables, tales como drivers o productos de terceros, pero el tema es lograr identificar quien fue el responsable de la caída inesperada y con ese dato, poder realizar las acciones necesarias para resolver la causa raíz.

Cuando ocurre la caída, el sistema guarda un DUMP de lo que estaba ocurriendo en ese momento, si es que la caída corresponde a un tema de software, en caso de un corte de energía el código de error es distinto y no queda DUMP.

Primero que nada debemos asegurarnos que estamos escribiendo un dump, si no lo tenemos difícilmente podremos realizar un análisis. Para validar esto vamos a My Computer, click con el botón derecho, Properties, en el tab Advanced, sección Startup and Recovery, click en el botón Settings. En la sección Write Debugging Information, asegurese que este seleccionado algun dump, ya sea el de Kernel o small y se encuentre el directorio donde será escrito el dump. También es buena practica que escriba un registro en el Log de Eventos, el cual será algo como lo siguiente:

Event Type:    Error
Event Source:    System Error
Event Category:    (102)
Event ID:    1003
Date:        12/20/2010
Time:        11:49:21 AM
User:        N/A
Computer:    SERVER

Description:
Error code 0000000a, parameter1 00000000, parameter2 d0000002, parameter3 00000001, parameter4 80828230.

NOTA: que para que pueda escribir el dump, es necesario que al menos una parte del archivo de paginación resida en la partición del sistema

Esto no nos dice mucho, el Error code nos ayudara a identificar si es problema de energía o de software, pero en el caso de software, nos queda el dump.

ok, ya tenemos el dump, como lo analizamos ahora??

Existe un juguetito llamado Windbg, el cual es parte de “Microsoft Debugging Tools”, el cual puede ser bajado desde Aquí. Al menos a mi me hizo también instalar el Framework .Net 4.0

Una vez instalado ejecutamos Windbg, antes de comenzar, debemos cargar los símbolos, esto es para ayudar al programa a identificar los distintos componentes que forman parte del dump. Para ello ir a File, Simbol File Path y agregar lo siguiente:

SRV*c:\symbols*http://msdl.microsoft.com/download/symbols

Click en OK.

Ahora estamos listos para leer nuestro dump, vamos a file, Open Crash Dump, seleccionamos el archivo de dump a analizar (Memory.dmp), nos pregunta si deseamos guardar la información en un workspace, le damos Yes, nos abre una pantalla blanca con información respecto al dump recién leído, esto es algo similar a lo siguiente:

Loading Dump File [C:\Users\xxxxx\Documents\dump\MEMORY.DMP]
Kernel Summary Dump File: Only kernel address space is available

WARNING: Whitespace at end of path element
Symbol search path is: SRV*c:\symbols*
http://msdl.microsoft.com/download/symbols

Executable search path is:
Windows Server 2003 Kernel Version 3790 (Service Pack 2) UP Free x86 compatible
Product: Server, suite: Enterprise TerminalServer SingleUserTS
Built by:
3790.srv03_sp2_gdr.100216-1301
Machine Name:
Kernel base = 0x80800000 PsLoadedModuleList = 0x8089ffa8
Debug session time: Sun Dec 19 14:41:05.155 2010 (UTC - 3:00)
System Uptime: 2 days 23:37:22.861
Loading Kernel Symbols
...............................................................
...............................................
Loading User Symbols
PEB is paged out (Peb.Ldr = 7ffd500c).  Type ".hh dbgerr001" for details
Loading unloaded module list
...
*********************************************
*                                                                             *
*                        Bugcheck Analysis                             *
*                                                                             *
*********************************************

Use !analyze -v to get detailed debugging information.

BugCheck A, {0, d0000002, 1, 80828230}

*** ERROR: Module load completed but symbols could not be loaded for fortimon2.sys
Probably caused by : fortimon2.sys ( fortimon2+4295 )

Followup: MachineOwner
---------

En BugCheck tenemos el error code entregado en el log de eventos y sus parámetros, y en Probably caused by: tenemos al sospechoso de la caída. Si queremos obtener mas detalles del problemas ejecutamos el siguiente comando en esa consola:

!analyze

**********************************************
*                                                                                        *
*                        Bugcheck Analysis                                    *
*                                                                                        *
**********************************************

IRQL_NOT_LESS_OR_EQUAL (a)
An attempt was made to access a pageable (or completely invalid) address at an
interrupt request level (IRQL) that is too high.  This is usually
caused by drivers using improper addresses.
If a kernel debugger is available get the stack backtrace.
Arguments:
Arg1: 00000000, memory referenced
Arg2: d0000002, IRQL
Arg3: 00000001, bitfield :
    bit 0 : value 0 = read operation, 1 = write operation
    bit 3 : value 0 = not an execute operation, 1 = execute operation (only on chips which support this level of status)
Arg4: 80828230, address which referenced memory

Debugging Details:
------------------
WRITE_ADDRESS:  00000000

CURRENT_IRQL:  2

FAULTING_IP:
nt!KeWaitForMultipleObjects+280
80828230 8902            mov     dword ptr [edx],eax

DEFAULT_BUCKET_ID:  DRIVER_FAULT

BUGCHECK_STR:  0xA

PROCESS_NAME:  cidaemon.exe

TRAP_FRAME:  b8b00814 -- (.trap 0xffffffffb8b00814)
ErrCode = 00000002
eax=8a9c75b0 ebx=00000003 ecx=8721a3dc edx=00000000 esi=8a9c7508 edi=8a9c7580
eip=80828230 esp=b8b00888 ebp=b8b008b4 iopl=0         nv up ei ng nz na po nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010282
nt!KeWaitForMultipleObjects+0x280:
80828230 8902            mov     dword ptr [edx],eax  ds:0023:00000000=????????
Resetting default scope

LAST_CONTROL_TRANSFER:  from 80828230 to 80886ad1

STACK_TEXT: 
b8b00814 80828230 badb0d00 00000000 f760f69c nt!KiTrap0E+0x2a1
b8b008b4 f760b295 00000003 b8b008e8 00000001 nt!KeWaitForMultipleObjects+0x280
WARNING: Stack unwind information not available. Following frames may be wrong.
b8b008fc f76084c0 8b1a55f0 810443e2 e404c298 fortimon2+0x4295
b8b00950 f723bb73 88ce4a14 00b00974 8a9b7720 fortimon2+0x14c0
b8b009b8 f723dfc2 00ce49b8 00000000 88ce49b8 fltmgr!FltpPerformPostCallbacks+0x1c5
b8b009cc f723e4f1 88ce49b8 87e5b008 b8b00a0c fltmgr!FltpProcessIoCompletion+0x10
b8b009dc f723eb83 8ae64c80 87e5b008 88ce49b8 fltmgr!FltpPassThroughCompletion+0x89
b8b00a0c f724c5de b8b00a2c 00000000 00000000 fltmgr!FltpLegacyProcessingAfterPreCallbacksCompleted+0x269
b8b00a48 8081d5c3 8ae64c80 87e5b008 87e5b008 fltmgr!FltpCreate+0x26a
b8b00a5c 808f100b b8b00c04 8b139de8 00000000 nt!IofCallDriver+0x45
b8b00b44 8092f806 8b139e00 00000000 848ec4b0 nt!IopParseDevice+0xa35
b8b00bc4 8092b946 00000000 b8b00c04 00000040 nt!ObpLookupObjectName+0x5b0
b8b00c18 808e2ed7 00000000 00000000 79654b01 nt!ObOpenObjectByName+0xea
b8b00c94 808e4171 0007dda8 00120089 0007dd6c nt!IopCreateFile+0x447
b8b00cf0 808e6c00 0007dda8 00120089 0007dd6c nt!IoCreateFile+0xa3
b8b00d30 80883948 0007dda8 00120089 0007dd6c nt!NtCreateFile+0x30
b8b00d30 7c82860c 0007dda8 00120089 0007dd6c nt!KiFastCallEntry+0xf8
0007dd9c 00000000 00000000 00000000 00000000 0x7c82860c


STACK_COMMAND:  kb

FOLLOWUP_IP:
fortimon2+4295
f760b295 2bc7            sub     eax,edi

SYMBOL_STACK_INDEX:  2

SYMBOL_NAME:  fortimon2+4295

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: fortimon2

IMAGE_NAME:  fortimon2.sys

DEBUG_FLR_IMAGE_TIMESTAMP:  4be9ce76

FAILURE_BUCKET_ID:  0xA_fortimon2+4295

BUCKET_ID:  0xA_fortimon2+4295

Followup: MachineOwner
---------

Con esto ya podemos ver cual fue la causa y el modulo que la provoco, en nuestro caso fue un acceso a una dirección de memoria que no correspondía, el detalle se puede observar en el stack text y el resto de la información.

Espero que les sirva como me sirvió a mi.

Saludos!!

Isa

lunes, diciembre 20, 2010

Problemas de Memoria 2

Aun existen muchas máquinas que están trabajando con 32 bits, ya vimos en artículos anteriores el como optimizar el uso de memoria en estas versiones para servidores de Bases de Datos (SQL Server y Exchange) a través del uso de los parámetros /3GB y /PAE en el archivo boot.ini

 

Parámetro /PAE

Este parámetro lo que hace es permitir al sistema operativo reconocer la memoria por sobre los 4GB de RAM, a continuación una tabla de las versiones de sistema operativo y la cantidad de RAM soportada.

Windows y PAE

Versión de Windows Soporte
Windows 2000 Profesional
Windows XP
AWE API y 4GB de RAM Física
Windows XP SP2 y Posterior AWE API y 4GB de Espacio de Direccionamiento Físico
Windows 2000 Server
Windows Server 2003, Standard Edition
AWE API y 4GB de RAM Física
Windows Server 2003 SP1, Standard Edition AWE API y 4GB de Espacio de Direccionamiento Físico
Windows Server 2003, Enterprise Edition 8 procesadores y 32GB de RAM
Windows Server 2003 SP1, Enterprise Edition 8 procesadores y 64GB de RAM
Windows 2000 Advanced Server 8 procesadores y 8GB de RAM
Windows 2000 Datacenter Server 32 Procesadores y 32GB de RAM
Windows Server 2003, Datacenter Edition 32 Procesadores y 64GB de RAM
Windows Server 2003 SP1, Datacenter Edition 32 Procesadores y 128GB de RAM

Fuente: http://www.microsoft.com/whdc/system/platform/server/PAE/pae_os.mspx

 

Parámetro /3GB

En circunstancias típicas y para cada proceso se asignan 2 GB de espacio de direcciones virtuales para el proceso de modo de usuario y se asignan otros 2 GB de espacio de direcciones virtuales para el sistema operativo. Cuando utiliza el modificador /3GB en Windows Server 2003, se asignan 3 GB de espacio de direcciones virtuales para el proceso de modo de usuario y sólo se asigna 1 GB de espacio de direcciones virtuales para el sistema operativo.

Este parámetro debe usarse con cuidado, ya que al cambiar la forma de direccionar la memoria puede obtenerse un efecto inverso al que se espera, en servidores por ejemplo que tienen el rol de Active Directory, Terminal Server (Remote Desktop) o Application Server los cuales hacen uso de memoria kernel, se ven estrangulados y su capacidad de direccionamiento disminuye, en Servidores como Exchange o SQL Server se puede apreciar su beneficio.

El problema.

Se tenían servidores con distintos roles los cuales necesitaban ser actualizados de 4GB a 32GB de RAM, eran 2 grupos de servidores, los primeros, Application servers los cuales trabajaban con IIS y los otros, Cluster SQL Server 2005.

Al realizarse el upgrade de memoria física, los servidores de Aplicación no tuvieron problemas, sin embargo los servidores de SQL Server comenzaron con un comportamiento extraño.

No se observaron errores en el log de eventos que nos indicara algún problema o la causa del problema, si aparecía un error pero al parecer era la consecuencia, este error es el Event ID 1053

Revisando mas, se observa que las tarjetas de red no presentan trafico, bytes enviados o recibidos estaban en cero.

Nada que nos indicara que podría estar ocurriendo y menos como resolverlo. El único cambio que se había realizado era agregar la memoria al servidor. Se vuelve atrás.

Se programa nuevamente la actividad pero esta vez se realiza una actualización completa del sistema operativo y los drivers correspondientes al hardware, muchos de los problemas se resuelven de esta forma, un sistema operativo actualizado tiene menor probabilidad de tener problemas relacionados con issues conocidos y con parches liberados.

Nuevamente se realiza la actualización y presenta el mismo efecto.

Que configuraciones relacionadas con la memoria tenemos en el servidor?? Pues /PAE y /3GB en el archivo boot.ini

Vamos a la configuración de booteo y duplicamos la línea donde están estos parámetros cambiándole a una de ellas la descripción y sacándole ambos.

Se reinicia el servidor y se valida la configuración de memoria. Solo reconoce 3.4Gb de los 32Gb.

Se repone el parámetro /PAE en archivo boot.ini, este parámetro esta presente en las maquinas de aplicación.

Se reinicia el servidor y se valida configuración de memoria, reconoce los 32Gb y los servicios funcionan bien.

El culpable era el parámetro /3GB, revisemos el siguiente articulo donde se explica con mas detalle que es 4GT y como funciona.

http://technet.microsoft.com/en-us/library/cc786709(WS.10).aspx

Quiero destacar de acá las siguientes líneas que describen nuestro escenario:

4GT should not be used if either of the following is true:

  • Greater than 16 GB of physical memory are available and PAE X86 is enabled on the server.

Nuestra situación era exactamente esa, mas de 16Gb y PAE habilitado.

Saludos!

Isa

pd: No olvidar cambiar los tamaños en el archivo de paginación cuando se realicen aumentos de memoria!!!!!