En esta ocasión, vamos a ver cómo podemos monitorizar una posible degradación de un disco de un RAID ICHxR de Intel. En nuestra empresa hay delegaciones pequeñas en las que hay un servidor con los roles de servidor de ficheros, impresoras y poco más. Por lo general son servidores pequeños y no disponen de un sistema de alertas propio. Normalmente monitorizamos todo centralizadamente, pero en este caso se nos había pasado integrar un sistema que nos notificase de posibles errores en el RAID. Normalmente nos fiamos de que nos avisen, puesto que la degradación suele ser algo “escandoloso”, el usuario normalmente nos da aviso de que el servidor está “pitando como loco” y con eso nos ponemos en marcha. La primera acción, lógicamente, es apagar ese pitido, puesto que es algo que normalmente permite hacer el software de gestión del fabricante.

El OS de este servidor en concreto es Windows Server 2008 R2 y el SW del que dispone para la gestión del RAID es “Intel Matrix Storage Manager“, es una versión obsoleta puesto que Intel ha sustituido este producto por “Intel Rapid Storage“, este último es mucho más potente y se pueden hacer cosas que su predecesor no permitía, como por ejemplo notificaciones por medio del correo electrónico. Nosotros tenemos el antiguo por lo que vamos a realizar un proceso que nos notifique estos fallos.

Cuando un RAID de Intel ICHxR se degrada o uno de los discos cambia de estado, se graban al menos dos eventos en el registro de Aplicación de Windows. Ambos tienen como origen “IAANTmon”. El Id de evento 7003 nos informa de un cambio de estado en uno de los discos y el Id de evento 7202 nos indica que el RAID se ha degradado. Vamos a usar este último evento como “disparador” de nuestra alerta. (Cómo veréis, las fechas son recientes).

02-08-2016 18-52-11 evento01 7202 

Continúa leyendo

Hoy quiero hablaros de Kanban, un método para “organizar tu trabajo o el de tu equipo“. Es algo que hemos adoptado hace poco en nuestro departamento de Sistemas, como parte de un proyecto más amplio de adopción de buenas prácticas ITIL y todavía estamos aprendiendo. ¿Qué tipo de trabajo podemos organizar? Pues originalmente fue creado por los japoneses de Toyota para organizar cadenas de producción, pero con el tiempo se ha ido adoptando por equipos de trabajo de tecnología. Básicamente, mediante un sistema de tarjetas en un tablero vamos colocando unos “post-it” con tareas. El objetivo final es gestionar de qué forma se van completando las tareas. Lo vemos un poco más en detalle:


hierarchical-kanban-boards-in-action-ignite-talk-at-lean-kanban-north-america-2013-2-638


Como ya hemos comentado, surgió como método de organización de la cadena de producción de coches de Toyota, a partir de aquí David J. Anderson ideó el método Kanban en sí, adaptando el método original al desarrollo de software. Vio las similitudes entre estos dos conceptos: fases diferenciadas, control de calidad de las piezas, grupos de trabajo (colaboración), etc. Esta adaptación ha sido usado por Microsoft y Google entre otros, para muchos de sus proyectos.

Continúa leyendo

Hace poco tuvimos que cambiar las passwords de todos los usuarios con permisos administrativos del Directorio Activo. Antes se hizo una auditoria de servicios, tareas programadas y demás que podrían fallar por el cambio, este es un proceso interesante que podría ser parte de otro artículo. Todo fue bien, sin embargo esto de la tecnología no sería lo mismo, si al cabo de unos días y unos reinicios no empezasen a surgir pequeños problemas con los que no se contaba. Este en concreto surgió al reiniciar, como parte de un mantenimiento programado, servidores miembros de una granja de Citrix XenApp 6.5. Aparecieron las siguientes alertas en los servidores:

Error Id 3989Origen IMA Service – El servidor Citrix XenApp no pudo conectarse con el almacén de datos. Error ODBC al conectarse a la base de datos: 28000 -> [Microsoft][ODBC SQL Server Driver][SQL Server]Error de inicio de sesión. El inicio de sesión se realiza desde un dominio que no es de confianza y no se puede utilizar con autenticación de Windows.

18-07-2016 16-56-11_IMA SERVICE ERROR

Este error no provoca ningún fallo aparente a los usuarios de Citrix que están trabajando en la Granja, pero si intentamos entrar en la configuración de XenApp veremos que el descubrimiento falla y no podemos realizar ningún cambio en el almacén. 

En nuestro caso tenemos la DB del almacén de XenApp en Microsoft SQL Server. Este error de IMA puede deberse a numerosas causas (IMA Service Fails with Events: 3989, 3634, 3614) pero el hecho de haber cambiado hace poco la password de los Administradores, era la causa más probable, por lo que usamos DSMAINT para cambiar los parámetros de configuración que se usan para conectar con el almacén de datos:

DSMAINT CONFIG /user:DOMAIN\username /pwd:password

18-07-2016 16-51-31_DSMAINT

Después de este cambio, sólo hubo que reiniciar IMA (Citrix Independent Management Architecture) para que todo volviese a la normalidad.  .

Otro de los procedimientos que realizamos en la empresa, y que espero poder cambiar en breve para deshacerme de los pst’s, es exportar a pst el contenido de más de 5 años de los buzones de nuestros servidores Exchange 2010 on-premise, para borrando después ese contenido, descargar las bases de datos de archivo y evitar que se vuelvan demasiado grandes (actualmente cada una de ellas tiene aprox 200GB). Al final la idea es ir migrando a Azure/Office 365, pero con una buena planificación y tiempo suficiente, ya que el correo electrónico es un servicio demasiado crítico en mi organización. Estos psts los distribuimos localmente a cada una de las delegaciones para que se pueden consultar desde Outlook.

El script es básico, como parámetro opcional tiene la ruta a un fichero CSV que contiene los IDs de los buzones que quiero exportar. En otros post os mostraré como hacer lo mismo pero con filtros sin necesidad de CSV, pero en esta ocasión lo que nos interesa es controlar la exportación para no colapsar los recursos de los servidores, así que programamos las exportaciones por la noche, y pasamos el CSV como parámetro. Si lo hacemos durante el día para corregir errores que hayan podido producirse o repetir alguna exportación, simplemente lanzamos el script y nos pedirá el CSV donde leer los IDs a exportar. Todo el contenido que se va a exportar está en las bases de datos de archivo, ya que en las de almacenamiento sólo permitimos los dos últimos años de correo.

Continúa leyendo

Un tema que últimamente nos solicitan mucho, sobre todo cada vez que un nuevo responsable entra en alguna delegación, es que quieren un pequeño informe de cómo están las listas de distribución de su empresa. Por lo que buscamos la forma de automatizar esta información. El siguiente script nos pide un string al que se añade por  delante un comodín “*”, de tal forma que si buscamos un reporte de todos los miembros de todos los grupos de distribución del dominio “domino.es”, ese es el valor que tendremos escribir al lanzar el script. El código busca todos los grupos de distribución cuya dirección SMTP coincida con la expresión generada y recorre cada uno de ellos listando el nombre de los usuarios que pertenecen a ese grupo.

Esto mismo se puede cambiar fácilmente para exportarlo a un CSV, Excel o lo que queráis, pero yo, por regla general, prefiero tenerlo en pantalla para hacer un copy/paste a un ticket de soporte abierto o a un email en respuesta a una petición.

Probado en Exchange Server 2010.

No sólo podemos dar permisos sobre las carpetas a usuarios, grupos o similares, si no que también podemos establecer los permisos para otro tipo de objetos, como por ejemplo un servicio de Windows.

¿Por qué? Pues os contaré mi caso. En un post anterior sobre la configuración de un SMTP local para SSRS, expliqué que me encontré un error en producción que no había saltado en las pruebas previas. Los mensajes que generaba Reporting Services para enviar a los suscriptores se quedaban en la cola de Reporting con el mensaje de error “Error al enviar correo. El correo no se enviará de nuevo“. En el post comentado anteriormente hay unos enlaces sobre TroubleShotting Subscriptions, pero en este caso parecía que todo estaba bien. Al final leí un artículo sobre un problema similar, no con Reporting y me dio la solución (esa página, ya no está disponible).

El caso es que el servicio “reportserver” necesitaba permisos sobre la carpeta c:\inetpub\mailrrot\Pickup. ¿Cómo damos permisos a un servicio de Windows sobre una carpeta? Lo primero que necesitamos conocer es el SID del servicio. Para saltarnos la UAC abrimos una consola de comandos como administrador y usamos SC de la siguiente forma:

18-06-2016 12-40-00 sc showid

Una vez conocido el SID del servicio “reportserver” puedo darle permisos “Full Access” sobre la carpeta usando ICACLS de la siguiente forma:

18-06-2016 12-41-00 icacls

Volvemos a probar el envío de las suscripciones y vemos que ahora si funciona correctamente. Si le véis más utilidades, no dudéis en comentarlo.

¿Qué es SSRS? SQL Server Reporting Services es una herramienta de SQL Server para la generación de informes. En esta ocasión voy a suponer qué ya sabes lo que es y lo que voy a hacer es simplemente añadir en el mismo servidor un servicio SMTP local. ¿Por qué? Para que SSRS pueda enviar mediante correo electrónico los informes que soliciten los suscriptores configurados. Lo ideal sería hacerlo mediante Exchange o un servicio de mensajería similar, pero voy a suponer el caso de que por la razón que sea no se puede utilizar o bien queremos separar este tráfico de correo SMTP del resto de tráfico de correo, con un dominio diferente o una IP de origen distinta, etc. y tener de esta forma un mayor control de los correos que se están enviando mediante este servicio de un solo vistazo.

Escenario: Servidor con Windows Server 2012 R2 (versión 6.2 compilación 9600) y Microsoft SQL Server 2012 Service Pack 2 (11.00.5058.00)

Continúa leyendo

Siguiendo con el tema de certificados digitales, firmas y demás, en esta ocasión, en la empresa en que trabajo, hemos desarrollado un WebService para cubrir un servicio de intercambio de datos con un cliente. Este cliente nos exige que la autenticación del WebService debe ser con certificado. La idea de este post era mostrar como podemos generar nosotros mismos certificados para firma de código que pudiésemos usar para firmar por ejemplo macros VBA, pero ya que ha surgido esta oportunidad, haremos algo diferente. El proceso es casi idéntico para ambos casos.
Como siempre en estos casos tenemos dos formas de hacerlo, la de pago y la gratuita. Lo ideal sería usar un certificado de pago de una CA oficial como los que usamos nosotros de Digicert, pero en este post vamos a mostrar la forma de hacerlo sin soltar un duro e igual de efectiva.
Desafío: Desarrollo nos plantea que el acceso al WebService debe ser a través de https, por lo que tendremos que habilitar también un certificado SSL de servidor. El site en el que se instale el servicio se tendrá que configurar para que requiera SSL y forzar así que la conexión desde el Cliente requiera un certificado de cliente. Este certificado de cliente se deberá distribuir a la máquina desde la que se hará la llamada al servicio Web. Distribuiremos también un certificado de CA, para que lo instalen en Raíz de Confianza.
Certificados que vamos a crear:
  • Certificado de CA (Emisora Raíz de Confianza)
  • Certificado SSL de Servidor.
  • Certificado de cliente (autenticación).

¿Por qué firmar digitalmente una macro VBA? Básicamente, para evitar posibles problemas con códigos maliciosos. Si nosotros desarrollamos una macro y la distribuimos a nuestro cliente (o incluso en nuestro propio equipo si no lo hemos configurado), siempre saltará una alerta indicando que se ha identificado un posible problema de seguridad, a no ser que hayamos modificado la Seguridad de las macros, indicando que queremos habilitar todas las macros (algo nada recomendable).
¿Cómo podemos añadir una firma digital a nuestro código? Aquí hay dos opciones, la elección dependerá de si somos profesionales que se dedican a desarrollar código y distribuirlo masivamente a clientes o si desarrollamos poco, para pocas personas, simplemente para aumentar nuestro conocimiento o para uso personal.
  • Si somos profesionales conviene hacerse con un certificado de firma de código de una entidad de certificados comercial (CA). Hay muchas, yo personalmente, para otro tipo de proyectos trabajo con Digicert, gran variedad, buen servicio técnico pos-venta y precios competitivos. Aún así, obtener un certificado de este tipo no es barato.
  • La otra opción que tenemos (gratuita) es hacernos un certificado personal de firma de código. Hay varias formas, pero Microsoft Office dispone de su propia herramienta par estos casos: SelfCert.exe. Aunque en el link anterior está explicado todo el proceso, aquí vamos a tratar de simplificarlo y poner un ejemplo. El problema de esta opción es que como el certificado no lo emite ninguna CA oficial, los proyectos que distribuyamos seguirán mostrando una alerta puesto que sólo se permite confiar en este tipo de certificados en el equipo que los crea.
Vamos a ver paso a paso cómo hacerlo con esta última opción:

Continúa leyendo

Desafío: Un cliente necesita automatizar un proceso. El recibe numerosos correos electrónicos y necesita reenviar ciertos correos que el marca manualmente a una aplicación “Inbox by Baltic Spot” que trata la información recibida en esos correos y la adjunta a una base de datos, donde se pueden analizar en conjunto con los ya existentes y representa un valor añadido importante.

Escenario: El buzón del usuario esta albergado en servidores Exchange 2010 y la versión de Outlook usada es Microsoft Outlook 2016 (aunque servirá igualmente en 2013). El OS del equipo no es relevante.

Solución: Como solución le propongo una macro ex Outlook 2016, ya que es el software que utiliza habitualmente que “procese” los mensajes que se mueven a una determinada carpeta.

Macro: El objetivo de esta macro es “inspeccionar” los correos electrónicos de una carpeta determinada y realizar con ellos dos acciones: Por una parte reenviarlos a una dirección de correo preestablecida y posteriormente moverlos a una carpeta de “Items Procesados”.

Problemas encontrados: Hacer una macro que realice el anterior proceso es relativamente sencillo (dejaré una muestra al final del post). El problema viene dado cuando se intenta realizar lo mismo pero el usuario selecciona y mueve de una sola vez varios correos a esa carpeta. Realmente hay dos problemas:

  1. Por una parte el Evento Items.ItemAdd “literalmente” no se ejecuta cuando se agregan un gran número de elementos a la carpeta. ¿Cuántos? No sé sabe. Yo he probado la macro con 20 o 25 correos y funciona sin problema.
  2. El segundo problema es que este evento se vuelve “un poco loco” al combinarlo con el método MailItem.Send y además mover (“eliminar”) correos en la carpeta inspeccionada y el resultado es que si se realiza un bucle dentro de Items.ItemAdd para enviar varios elementos, algunos correos aleatoriamente se envían repetidos (Supongo que Outlook no tiene tiempo para todo). Para este segundo problema no he encontrado solución, aunque si he visto que algunas personas lo comentaban en foros, no he localizado una solución “Buena” y la mía es un poco, digamos… “chapucera“, pero funciona que es lo que importa.Si alguien encuentra un solución “más digna”, estaré encantado de probarla. ¿Cual ha sido mi solución?, pues después de varios prueba/error meter una pequeña pausa dentro del bucle que procesa cada correo electrónico y mover la declaración del objeto mensaje dentro del bucle.
La macro, que deberemos meter en “ThisOutlookSession” es la siguiente: