Comandos útiles en Powershell

Me gustaría hablar en este post de algunos comandos que, ya sea por necesidad o simplemente por curiosidad, uno se va encontrando por el camino. Son los siguientes:

Envío de mensajes de correo con archivos adjuntos (solo para Powershell v5)
Una funcionalidad interesante es la posibilidad de que un script pueda enviar un mensaje de correo electrónico con uno o más archivos adjuntos.
Cabe destacar que este cmdlet solo está disponible para Powershell v5. Los parámetros básicos que hay que indicarle son bastante intuitivos:

 

Creación de un trabajo o job en el planificador de tareas
Si bien esto se puede realizar directamente con el interfaz gráfico del propio planificador de tareas, la posibilidad de creación o eliminación dinámica de un job mediante Powershell puede ser bastante útil, sobre todo en el caso de integrarla en un script.
La ejecución de un job requiere de cuatro elementos principales:
a) El elemento que se va a lanzar, que puede ser un ejecutable, un batch o un script.
b) Los argumentos que empleará dicho elemento, separados por comas.
c) El disparador o ‘trigger’, evento que actúa de detonante en la ejecución del job. Por ejemplo, una hora concreta de un dia determinado.
d) Las opciones adicionales del propio job.

Algo a señalar es que, si hay que eliminar un job existente y éste ha sido creado con el anterior comando, es recomendable hacerlo con este otro:

ya que si bien es posible hacerlo con el interfaz gráfico del planificador de tareas, posteriormente al utilizar comandos Powershell relacionados con esto, por ejemplo Get-ScheduledJob, se puede producir un mensaje de error.

Alerta sonora
Un complemento a una alerta visual (como un mensaje o aviso), puede ser la emisión de algún tipo de sonido. Esto puede ser interesante a la hora de introducir algún tipo de alerta sonora para indicar algún evento relevante, como por ejemplo que se ha encontrado algo o la misma finalización de un script.

En su forma más simple, se puede indicar el código de control correspondiente a la alerta, mediante el siguiente comando:

Esto puede servir para indicar un tipo de evento, pero es bastante limitado. Sin embargo, es posible reproducir sonidos del sistema o incluso archivos con extensión .wav. No hace falta decir que esta última forma es que la que gana en versatilidad al resto

 

Uso de un puerto serie
Aunque de por sí el puerto serie en sí puede estar en desuso, sin embargo nunca ha dejado de utilizarse. Así, por ejemplo, se emplea para comunicarse con microcontroladores diversos. La conexión se puede llevar a cabo mediante una conexión física y empleando, al menos, las tres señales mínimas (TxD, RxD, GND) sin control de flujo, o incluso una conexión inalámbrica empleando Bluetooth. Bluetooth suporta múltiples perfiles, y uno de ellos es el SPP (Serial Profile Port), el cual a efectos prácticos lo hace comportarse como un puerto serie estándar.

 

Y esto es todo por ahora. Espero que alguien pueda sacar provecho de alguno de estos cmdlet para dotar de más funcionalidad a algún script de Powershell.

Evento: la Teoría de la Evolución en la nube, novedades de Azure

¡Alberto Marcos y servidor, Carlos Milán- volvemos a la carga en los escenarios de Microsoft Ibérica, donde vamos a participar en una interesante jornada sobre distintas novedades de Microsoft Azure que se han acontecido en los últimos meses. En este caso, hablaremos de lo último de Azure Active Directory, incluyendo su nueva vertiente Bussiness to Consumer (AAD B2C) ¡Registro gratuito, no te lo pierdas!

  • Título: Identificando a los protagonista de la transformación (Azure AD B2B y Azure AD B2C)
  • Fecha: miércoles, 2 de diciembre de 2015
  • Hora:  10:30 – 11:15 (evento total de 9:15 a 14:00)
  • Ubicación: CIFF Universidad de Alcalá – Calle María de Molina, 27, 28006
  • Abstract: La singularidad tecnológica puede suponer una ruptura en el concepto de evolución que tenemos hasta la fecha. Sin embargo, hasta ese momento aún es necesario disponer del mejor equipo de personas a nuestro alrededor. A la hora de gestionar nuestros recursos uno de las necesidades más importantes es contar con una solución completa de gestión de la identidad como Azure Active Directory. Pero no solo eso, nuestro trabajo no solo se limita a nuestra empresa; la colaboración es clave para avanzar. Soluciones como Azure AD Business to Business o Bussiness to Consumers proporcionan el sistema de gestión perfecto para gestionar la identidad entre diferentes empresas o con diferentes proveedores.
  • Registro : Enlace de acceso
  • Ponentes:
    • Alberto Marcos González – Solution Specialist (Microsoft)
    • Carlos Milán Figueredo – Enterprise Team Lead (Plain Concepts)

Un gran terminal para Windows: ConEmu

Para muchos profesionales de infraestructura, la línea de comandos es una herramienta básica que nos permite en muchas ocasiones interactuar con el sistema más rápido que como lo haríamos con una interfaz gráfica. Además la línea de comandos suele tener capacidades muy potentes como por ejemplo hacer pipe entre distintos programas o scripts de automatización de tareas. Para hablar de la línea de comandos en el mundo UNIX nos solemos referir al Terminal, mientras que en Windows acostumbra a llamarse Símbolo del sistema o bien PowerShell en función de cuál ejecutemos; o bien Consola de forma genérica en ambos mundos. Sin embargo, esta comparación poco afortunada…

Cuando hablamos de una Consola debemos distinguir entre dos elementos distintos que trabajan de forma conjunta:

  • El emulador de terminal o consola. Es el programa que nos proporciona interacción con el intérprete. La ventana que rodea al área de la linea de comandos, así como los distintos elementos y controles de la misma son parte del emulador de terminal o consola.
    • Ejemplos de emuladores de consola (Windows): conhost.exe, ConEmu, cmder
    • Ejemplos de emuladores de terminal (Mac): Terminal, iTerm
    • Ejemplos de emuladores de terminal (Linux): xterm, gTerm, konsole, rxvt, Eterm
  • Intérprete de línea de comandos. En la consola constituye la shell, y es el componente que nos relaciona con la máquina. De ella depende la sintaxis de los comandos que escribimos y las facilidades que se dan al usuario, como el autocompletado con el tabulador, coloreado, historial de comandos, etc…
    • Ejemplos de intérpretes para Windows: cmd.exe, PowerShell, 4NT, command.com
    • Ejemplos de intérpretes para UNIX: bash, zsh, csh

Un desconocido que usamos todos los días: conhost.exe

Centrándonos en Windows, si símplemente ejecutas una nueva ventana de PowerShell o Símbolo del sistema, el emulador que estás utilizando es –sin duda- conhost.exe.

image

Lamentablemente, conhost.exe sufre de la misma historia que Notepad: desde Windows NT 3.1 el programa no ha cambiado prácticamente nada y nos ofrece la mismas capacidades incluso en Windows 8.1, que he decir que son bastante pobres con respecto a los modernos terminales que encontramos en GNU/Linux. Sin embargo, PowerShell volvió a traer el foco a la consola en los entornos Microsoft y en Windows 10 / Windows Server 2016 se han introducido finalmente mejoras, tal y como se aprecia en la nueva ventana de Propiedades:

image

Entre las novedades más destacadas encontramos:

  • Selección de texto línea a línea, en lugar de por bloques como iba siendo hasta Windows 8.1 / 2012 R2.
  • Filtrado al pegar texto en la consola.
  • Redimensionar la consola provoca un reajuste del texto para evitar el scroll horizontal.
  • Se puede cambiar la opacidad de la ventana.

Microsoft da un listado completo de todas las nuevas características aquí.

ConEmu

ConEmu es un emulador de terminal o consola para Windows de código abierto que me ha sorprendido muy gratamente por su cantidad de características, situándose incluso por encima de los terminales más avanzados de UNIX. Un emulador de terminal de estas características constituye el compañero ideal de PowerShell junto con las utilidades que he ido comentado en el blog bajo la serie PowerShell Utilities Series. Es por ello que se ha convertido en mi primera opción como terminal para plataformas Microsoft. ConEmu tiene el siguiente aspecto:

image

¿Qué nos ofrece ConEmu con respecto a la consola tradicional, conhost.exe? Lo más llamativo es:

  • Redimensionado realizando ajuste de línea en el texto para evitar el scroll horizontal.
  • Tabulaciones para poder tener abiertas múltiples consolas en la misma ventana.
  • Integración con ciertas aplicaciones que no son una consola, como PuTTY (a pesar de lo que pudiéramos pensar, PuTTY no es una aplicación de consola) o Notepad.
  • Integración con las Jumplist de Windows 7 en adelante, permitiéndonos ver en la barra de tareas el progreso de la ejecución de una tarea PowerShell.
  • Búsqueda de texto integrada en el terminal.
  • Barra de estado con multitud de elementos de información del sistema.
  • Modo Quake
  • Macros
  • Cambio de opacidad de la ventana.

Se puede ver un listado completo de las características aquí. A continuación se puede otro ejemplo de ConEmu con PuTTY integrado en una pestaña:

image

Así que ya sabéis, si sois amantes de la consola y usuarios de Windows, ConEmu sea seguramente una visita obligada para darle una buena probada. ¡Espero que os resulte muy útil!

Happy command line!

Problemas federando dominio con Azure ADConnect

Desde hace ya algún tiempo Azure ADConnect ha pasado de ser un producto preview , a sustituir definitivamente a DirSync, como instrumento para integrar y sincronizar identidades onpremise con Azure AD. Aunque ambas aplicaciones (DirSync y ADConnect), se basan en FIM 2010, esta última no sólo se ha dedicado a la sincronización de directorios (ampliándola con más opciones ), sino que ha incrementado su potencia añadiendo otros componentes.  Quizá, debido a esta complejidad derivada de ser una herramienta multipropósito, puede ser más difícil acotar y depurar errores.

Para poder emplear ADConnect -una vez realizados los pasos previos necesarios en Azure- debemos descargarla e instalarla en una de las máquinas pertenecientes a nuestro dominio. El instalable es un asistente que nos guiará en todo momento. Todo esto nos facilita mucho el trabajo, convirtiéndolo en una mera sucesión de pantallas, en las que únicamente tendremos que pulsar el botón siguiente y completar los datos. Pero, ¿qué pasa si el programa falla o nos da error?

Dependiendo del punto donde esto suceda, el asistente nos ofrecerá una serie de recomendaciones. Si el fallo no se subsana, es posible que nos aconseje la desinstalación total del producto, y proceder a instalarlo nuevamente. Pero, esto no nos garantiza que el fallo vuelva a aparecer en la siguiente ejecución. Por todo ello, quizá antes de prender fuego a todo y volver a empezar de cero, es bueno que nos paremos un momento y recapacitemos.

CASO PRÁCTICO

Dicho todo esto vamos a poner un caso práctico: tenemos un dominio con nuestro DC,  ADFS, etc que queremos federar con Azure;  para hacerlo empleamos Azure ADConnect. Lanzamos el ejecutable y casi al final de la configuración nos falla con el error que podemos ver en pantalla:

000AD-Connect

Hemos revisado toda la configuración y parece que todo está correcto. Así que procedemos a reintentar la ejecución, pero sigue fallando. Nos fijamos en qué hay un log en el que podemos revisar todos y cada uno de los pasos realizados. Examinando el log en detalle, observamos que lo que hay detrás son comandos de PowerShell. En concreto, vemos que aunque el asistente ha validado los DNS no ha terminado de verificarlos, con lo que no es posible validar correctamente el dominio. Para solventarlo, abrimos una consola de Powershell Azure AD, nos conectamos a nuestra suscripción y ejecutamos:

Comprobamos que las entradas DNS son las correctas, pulsamos “Retry”, y voilà la configuración se puede completar correctamente.

Como conclusión después de todo lo anterior, es que para poder diagnosticar de forma adecuada es importante conocer su mecánica de funcionamiento. ¡Un saludo y hasta la próxima! Smile

Office 365 Pro Plus gratis sólo por pertenecer a tu centro educativo

Varios meses atrás, mi compañero Alberto redactó un artículo muy interesante acerca de Office en el ámbito académico. En él, se detallaba cómo obtener gratis Office 365 Pro Plus mediante unos sencillos pasos, si cumplías una serie de requisitos. Pues bien, Microsoft, en aras de hacer las cosas más sencillas,  ha publicado una web para hacer más fácil la instalación de dicha suite.

CapturaOfficeEdu

 

¿Cuales son los beneficios de contar con  Office 365 Pro Plus?

  • El poder tener instalado Office en hasta 15 dispositivos, es decir, en hasta  5  ordenadores personales, 5  dispositivos tablets y 5  teléfonos móviles. Pudiéndose así compartir la licencia con quién el usuario quiera.
  • Disponer de 1TB de almacenamiento en Onedrive para almacenar todo tipo de archivos.
  • Contar en todo momento con las herramientas de Office como Word, Excel y otras muchas más.
  • Estar siempre actualizado a la última versión de Office.

El único requisito para poder descargar Office de manera gratuita, es ser estudiante o pertenecer al equipo PAS/PDI (Personal de Administración y Servicios / Personal Docente e Investigador) de una serie de centros universitarios que tengan contratado el servicio. Si reúnes dicha condición, sólo tendrás que acceder a https://www.microsoft.com/spain/office365gratis/,  elegir tu universidad en el listado desplegable  y pulsar el botón Descarga Gratis Office 365 Pro Plus.  Automáticamente serás redirigido a un asistente web donde, siguiendo  los pasos que se indican, podrás descargar Office de forma gratuita y legal. No detallaré el proceso a seguir, pues es el mismo que Alberto explicó en su entrada de este blog, con lo que se anima encarecidamente a leerla con atención.

  CapturaOfficeEdu2

Pero, ¿qué pasa si tu colegio o universidad no está en el listado?  Basta con comprobar si tu institución educativa dispone de tal servicio. Para ello,  sólo hay  acceder a esta página web si eres estudiante o a este enlace si perteneces al grupo PAS/PDI.  Accederás a un asistente web donde seguirás un procedimiento similar al ya explicado.

¿Y si el centro no dispone de tal servicio?  Si eres estudiante y tu centro educativo no cuenta con esta ventaja, puedes consultar otras opciones para obtener Office. Si por el contrario, perteneces al personal docente o administrativo y deseas que tu institución ofrezca dicha característica, puedes contactar con el equipo de educación de Microsoft vía email a la dirección de correo aulamicrosoft@microsoft.com.

¡Ya no hay excusa para el mundo educativo de disponer de Office 365 Pro Plus gratis!

Borrado de objetos fantasma del metaverso

Como ya hemos visto en una introducción a FIM/MIM, este producto es un poderoso sistema de sincronización de identidades. Para hacer su misión, guarda información de objetos de diversos tipos en el Metaverso, que actúa a la vez como origen y destino de información.

Para traer la información al Connector Space de un Management Agent (MA), se dispone de dos operaciones: full import y delta import. Estas operaciones, como su nombre indica, están pensadas para jugar dos roles en el proceso: En primer lugar traer todos los objetos, y luego detectar cambios en los mismos. Una vez finaliza cualquiera de estas operaciones, se hace una operación de sincronización (full sync/delta sync) y los cambios se escriben en el metaverso al tiempo que se reciben actualizaciones desde el metaverso, que luego haya que exportar.

En la mayoría de ocasiones, los MA que se configuran, disponen para la operación delta import de mecanismos que permiten detectar no sólo los cambios en el valor de los atributos, sino también si algún objeto se ha eliminado. Por otro lado, dada la naturaleza de los sistemas a los que se conectan los Management Agents, hay ocasiones en las que la eliminación de un objeto no se puede detectar porque el objeto ha desaparecido por completo del sistema origen, lo que impide la trazabilidad del evento. Esto implica, que existe un objeto en el metaverso que no debería existir : Un objeto fantasma.

Happy-Haunting-Ghost-Banner

Una forma de solucionar esta situación consiste en ejecutar una operación Full Import, lo que permite al Connector Space detectar todas las eliminaciones “fantasma”, y propagar los cambios al metaverso. Sin embargo, es posible encontrarse en una situación en la que el connector space tiene un tamaño de cientos de miles, o millones de registros, y completar una operación de Full import bajo dichas condiciones puede suponer varios días de trabajo. Dependiendo de la situación, esto no es una estrategia viable, ya que requiere una planificación cuidadosa, y una parada de servicio del sistema de sincronización, que durante varios días no va a actualizar la información de los sistemas conectados dentro de los intervalos habituales de tiempo.

Otra forma de resolver esta situación… es actuar de forma proactiva, y prohibir en los sistemas origen que se produzca el borrado físico de objetos, de forma que el problema nunca se produce, y por tanto, no hay que hacer nada más al respecto.

Afortunadamente, aunque ya sea porque no se puede cambiar la forma de trabajo o porque una operación de Full Import se prolongaría demasiado en el tiempo, se dispone de una tercera alternativa. Usar un Management Agent adicional que se encargue de hacer la limpieza. En esencia, lo que se hace es añadir los objetos a eliminar a este management agent, usando algún atributo que los identifique de forma unívoca, se les hace un JOIN, configurar una regla de eliminación, provocar una desconexión, y la desconexión lanzará un delete.

Creación de un Management Agent de CSV: “Delimited Text File”

El conector más sencillo que se puede usar para este propósito es el conector de CSV. Principalmente porque es posible alimentarlo con datos extraídos directamente del metaverso, además de por la sencillez con la que se puede configurar.

Lo primero es determinar qué objetos son los que se desea eliminar. En este caso, se acude a la pestaña “Metaverse Search”, y por motivos didácticos, se ordenan los objetos devueltos por el campo ObjectID para seleccionar algunos de ellos (los primeros). Hay que tener en cuenta que el ObjectID de los objetos existentes en el Metaverso es diferente del ObjectID de los objetos existentes en el Connector Space de cada MA, así que es importante coger el del Metaverso. Es importante en este paso fijarse en el número de objetos que pueblan el Metaverso: 4683.

MVCapture2

Lo más destacable de esta fase, es que se pueden elegir los campos que se desea obtener en la búsqueda del metaverso, seleccionar los objetos con el ratón, y copiarlos con Ctrl+C. Esto genera una copia en CSV en el portapapeles que se puede pegar a voluntad en el archivo de texto que se va a utilizar para el MA.

cleanupCSV

Ahora que ya se tiene el archivo CSV, y está definido el formato de los datos que se van a utilizar, es hora de pasar a crear y configurar el Management Agent de CSV. Como indica el título de esta sección, es el MA “Delimited Text File”. En las siguientes capturas de pantalla se van a especificar las principales opciones que hay que tener en cuenta a la hora de especificar los parámetros del MA, para que pueda ser usado con la finalidad deseada.

En primer lugar, seleccionar un archivo CSV que contiene el formato de los datos que el MA va a importar. Se puede definir el mismo archivo que se ha creado previamente.

template

A continuación, toca configurar algunos parámetros del CSV para asegurarse de que el MA lo lee correctamente: Separadores de atributos, cómo definir los nombres de atributos…

format

En esta pantalla se define el anchor y el tipo de dato de los atributos, además de indicar si son multivaluados (array) o no. El anchor es equivalente a la clave primaria, indentificando de forma inequívoca e irrepetible al objeto. De esta forma todos los atributos de los objetos quedan perfectamente definidos.

attributes

Toca definir las reglas de JOIN. En este caso, el join se hace en base al ObjectID. Este atributo es siempre único para cada objeto creado, tanto en el connector space como en el metaverso. Dado que lo que se desea es unir los objetos del Connector Space del MA de CSV con su equivalente en el metaverso, este ObjectID es el mismo existente en el metaverso. Así, se establece el enlace correcto entre objetos, y no es necesario crear un CSV grande con multitud de campos que permitan hacer el Join.

joinRule

Es de vital importancia especificar que el comportamiento de deprovisionamiento sea “Make them disconnectors”. Esta parte juega un papel importantísimo, a posteriori, porque se especifica en las reglas de borrado de los objetos del metaverso que un elemento se borre cuando uno de sus enlaces en el Connector Space del MA de CSV pase al estado “disconnector”.

DeprovisioningCSV

A continuación, se guarda la configuración del Management Agent, y se procede a modificar la política de eliminación de objetos tipo “Person” del Metaverso. En esta pantalla, hay dos opciones: O se elimina el objeto cuando el último conector se desconecta (ignorando los conectores de ciertos Management Agents), o bien eliminar cuando un conector de alguno de los Management Agents elegidos se desconecta. Se elige esta última opción y se marca el conector de limpieza (llamado CleanUp) en este caso. Se han ocultado los nombres de los otros MAs que hay desplegados en esta implementación de MIM porque no son relevantes para el caso que nos ocupa.

DeletionRule2

Con esto, ya se está listo para empezar el proceso de eliminación. Lo primero que hay que hacer es poblar el Connector Space con los objetos necesarios. Para ello, hay que configurar los perfiles de ejecución de “Full Import” y “Full Sync” para el MA de limpieza. A la hora de configurar el Full Import, se pide la localización física del archivo CSV que contiene los datos a importar. Este CSV debe residir en una carpeta específica, creada dentro de la estructura de carpetas del MIM en el momento de guardar el Management Agent.

ConfigureFullImportCSV

Una vez creados los perfiles de Full Import y Full Sync, toca ejecutarlos:

Se puede observar que como resultado del Full Import, se han añadido 15 objetos, que son los que se habían añadido al CSV originalmente. Esto se puede comprobar haciendo una búsqueda en el Connector Space, o simplemente clicando sobre el enlace “Adds” que aparece en la ventana de resultados.

FullImportCSV2

La consecuencia del Full Sync, con la regla de JOIN especificada anteriormente, es que se ejecuta la operación JOIN sobre los objetos del Connector Space, que pasan a su vez a estar enlazados con los objetos que ya residían en el metaverso y que se desean eliminar.

FullSyncCSV2

Ahora llega la parte interesante. Para eliminar los objetos del metaverso hay que convertir en desconectores los que tenemos en el Connector Space del MA de limpieza. La forma más sencilla de conseguirlo es borrando el Connector Space del MA de limpieza y haciendo un Full Sync. Al hacerlo, automáticamente los objetos desconectados eliminarán los correspondientes objetos del Metaverso, limpiando de forma efectiva los datos basura que no se habían eliminado de forma adecuada.

 

Conclusión

Como se puede ver en la siguiente captura, en el Metaverso quedan 4668 objetos, de los 4683 que había originalmente. Los 15 objetos que han sido gestionados con el MA de CSV para la operación de limpieza han desaparecido por completo del Metaverso, y ya no aparecerán en subsecuentes operaciones de sincronización en los otros MA que habían contribuido estos datos. Una operación sencilla, que ha permitido eliminar objetos que de otra forma no hubiesen desaparecido del Metaverso si no se realizan las operaciones de Full Import/Full Sync en el MA que creó los objetos.

endResult

Bonus

Una alternativa diferente de conseguir la limpieza pasa por utilizar el conector de SQL, esto se puede consultar en la url https://konab.com/using-cleanup-ma-fim-2010/