Powershell basics: Las tuberias

¡Hola a todos!

En ocasiones previas habéis visto en este blog el uso de PowerShell (que también se suele abreviar como PS) para realizar tareas administrativas. Y la verdad es que como herramienta de administración de sistemas Windows es insuperable. Así que… ¿Por qué no hablar sobre algunos de los conceptos más importantes de PowerShell?

La base son los objetos

Ante todo, lo más importante a la hora de trabajar con PowerShell es entender los datos con los que trabaja. A diferencia de otros sistemas de scripting, que nos devuelven datos en forma de texto, en PowerShell lo que se nos devuelve son objetos. Objetos que en la consola tienen una representación textual, pero que pueden manipularse de formas mucho más complejas.

Sin ir más lejos, cuando escribimos el comando “ls” o “dir”, en realidad estamos ejecutando el cmdlet “get-childitem”, el cual nos devuelve una lista de archivos. Ahora bien, como ya hemos dicho, lo que PS nos devuelve son objetos.

ls ls_0

Esto lo podemos comprobar, sin ir más lejos, si deseamos solicitar un elemento concreto de la lista de objetos que ls nos devuelve. Pero aún se puede ir más lejos. PowerShell nos proporciona un cmdlet que nos permite analizar la estructura de un objeto. Este cmdlet se llama “Get-Member”, y nos devuelve información completa sobre métodos y propiedades del objeto que le hemos pasado como parámetro. En este caso, los métodos son funciones que el objeto puede ejecutar, mientras que las propiedades son datos (objetos) que se pueden consultar.

ls_getmember

En este caso, se puede ver cómo PS extrae la información del objeto de tipo “DirectoryInfo”, y muestra diversos métodos que se pueden usar para manipular o extraer más información de dicho objeto. Dependiendo del tipo de objetos con los que estemos trabajando, utilizar el cmdlet get-member va a ser muy útil para inspeccionar los resultados, y obtener no sólo información sobre la estructura del objeto, sino acceder a funciones que permiten al objeto realizar acciones más avanzadas. ¿Cómo se ha conseguido comunicar el cmdlet “ls” con el “get-member”? Pasándole información por una tubería.

Tuberías (Pipeline)

En la mayoría de sistemas de scripting se incluye una funcionalidad conocida como “tubería” y como se puede imaginar, el nombre de esta característica es una metáfora del funcionamiento de la misma. ¿Para qué se usa una tubería? Para conectar un origen de datos a un destino que los consuma. En el caso de PowerShell, una tubería permite hacer un streaming de objetos desde el cmdlet que los está produciendo (como resultado) a otro cmdlet que los va a consumir (para procesar los objetos, transformarlos, ordenarlos, etc).

Entre las características más vitales de las tuberías, destacaría las siguientes:

  • Las tuberías conectan dos cmdlets. Esto no impide que un cmdlet que está recibiendo datos desde una tubería pueda enviar los resultados a través de otra. Es decir, se pueden encadenar tuberías para conectar múltiples cmdlets sin ningún tipo de limitaciones.
  • El streaming de objetos a través de las tuberías se realiza uno a uno. Esto es importantísimo en términos de rendimiento, y en demasiadas ocasiones se suele pasar por alto. Se comenta con mayor detalle en la siguiente sección.

¿Cómo se usan las tuberías?

Para interconectar la salida de un cmdlet con la entrada de otro se usa el carácter especial “|”. Éste carácter indica a PowerShell que debe enviar los objetos de respuesta del cmdlet a la izquierda del mismo hacia el cmdlet a la derecha. Ya se ha visto un ejemplo práctico de funcionamiento de la tubería cuando se presentó el cmdlet “Get-Member”, el cual, como ya se indicó, toma como entrada objetos.

Así pues, un ejemplo de tubería muy sencilla sería “Get-ChildItem | select-Object * | Out-Gridview”. Esta tubería devuelve una ventana (Out-Gridview),8con todos los atributos de los objetos (Select-Object *) devueltos por el cmldet Get-ChildItem.

outGridview

Consideraciones de rendimiento

A la hora de manipular datos a  escala masiva, siempre va a aparecer la siguiente disyuntiva: Consumo de RAM vs Consumo de Tiempo.

Usualmente, la forma más rápida de procesar datos consiste en almacenar el resultado de la ejecución del cmdlet en un array, y procesarlo. Pero esto significa almacenar toda la información devuelta en memoria. En el caso de, por ejemplo, consultar información de un Directorio Activo con decenas o cientos de miles de objetos, la consulta cargará todos los objetos en memoria. Y esto, en máquinas con recursos limitados, como mínimo va a provocar la ralentización de todos los servicios de la misma. Incluyendo la propia ejecución del script.

Por otro lado, en vez de cachear toda la información en RAM, se puede usar una técnica diferente para procesar esa enorme cantidad de información. Y ya se ha hablado de ella en este artículo. Las tuberías pasan los objetos devueltos  de uno en uno. Esto significa que se pueden procesar las decenas o cientos de miles de objetos individualmente, sin colapsar la memoria del sistema. Como contrapartida, el tiempo de ejecución del script suele aumentar drásticamente, debido al overhead provocado por el movimiento de los objetos entre cmdlets.

En ocasiones, no va a ser posible elegir entre un tipo de optimización u otro. Por ejemplo, si el cmdlet/función que suministra los resultados incluye algún mecanismo de caducidad por el que transcurrido cierto tiempo desde la ejecución del mismo, se considera que los resultados son viejos y por tanto no válidos. Esto puede suceder en funciones de búsqueda o consulta. En este caso, habría que acudir obligatoriamente al mecanismo de cacheado en RAM, ya que los resultados cacheados no van a “caducar” durante la ejecución del script.

 

¡Y esto es todo de momento! Esperamos que con estos consejos sobre el uso de tuberías y cómo afectan al consumo de recursos del sistema podáis escribir scripts más eficaces, siempre adaptándolos a las necesidades de cada momento.

 

Enlaces de Interés:

http://blogs.technet.com/b/heyscriptingguy/archive/2014/06/30/back-to-the-basics-part-1-learning-about-the-powershell-pipeline.aspx

PowerShell Utilities Series: vitaminas para tu PowerShell con PSReadLine

Update (23/03/2015): José Ángel Fernández nos ha informado que las instrucciones de instalación del módulo pueden fallar con determinados formatos de fecha de Windows. Agregamos en tal caso el método de instalación manual.

Hace algunas semanas hablábamos de cómo los administradores de sistemas pasamos buena parte de nuestra vida en la línea de comandos y de como utilidades como el DMCredential la hace más fácil y eficiente. Continuando con esta serie de post de utilidades para la línea de comandos por excelencia en Microsoft Windows, PowerShell, en esta ocasión le toca el turno a una de las más versátiles y potentes: PSReadLine.

PSReadLine es un módulo para PowerShell en su versión 3 o posterior desarrollado por Jason Shirk que mejora considerablemente nuestra experiencia con la línea de comandos, agregando la siguiente funcionalidad a nuestra consola:

  • Resaltado de sintaxis en tiempo real mientras escribimos.
  • Notificación de errores de sintaxis, ¡antes de que presionemos ENTER y ejecutemos el cmdlet!
  • Edición multi-línea sin abrir editores de texto.
  • Atajos de teclado personalizables.
  • Deshacer/Rehacer.
  • Autoguardado del historial de cmdlet para consultarlo entre sesiones.
  • Intellisense (CTRL+SPACE)
  • Guiños a usuarios de UNIX:
    • Modo Emacs.
    • Autocompletar estilo Bash
    • Búsqueda interactiva en el historial estilo Bash/zsh (CTRL+R)

El módulo es tan intuitivo que no se necesitan conocimientos especiales para comenzar a usarlo.

Instalación

Hay dos formas automatizadas de instalar este módulo: con Windows Management Framework 5.0 (en preview en el momento de escribir estas líneas) o bien usando PsGet.

Si alguna de estas presenta problemas podemos también instalarlo de forma manual.

Windows Management Framework 5.0

En caso de que usemos WMF 5.0 la instalación es tan simple como hacer lo siguiente:

PsGet

PsGet es una herramienta que se utiliza para automatizar la instalación, actualización y eliminación de módulos de PowerShell. Como tal, la herramienta simplifica la instalación de PSReadLine al mismo nivel que WMF 5.0. No hay que confundirla con Chocolatey, que instala cualquier software en general; PsGet es exclusivo para módulos de PowerShell. Para instalar PsGet debemos ejecutar lo siguiente:

Hecho esto ya sólo nos quedaría instalar el módulo de la misma forma que haríamos con WMF 5.0:

Instalación manual

En caso de que nos fallen los métodos anteriores siempre podemos hacer una instalación manual del mismo:

  1. Descargar la última versión del módulo desde aquí.
  2. Descomprimir los contenidos del ZIP en C:Users[User]DocumentsWindowsPowerShellmodulesPSReadline. Crear las carpetas necesarias si no existen.

Hacer que el módulo se cargue al abrir la consola

Seguimos las mismas instrucciones que hacíamos con el ls a color:

  1. Editamos el archivo: $Home[My ]DocumentsWindowsPowerShellProfile.ps1 o bien $Home[My ]DocumentsProfile.ps1 según el tipo de profile que usemos.
  2. Agregamos la línea Import-Module PSReadLine.

Uso

¿Tienes el módulo ya instalado? ¡Abre una nueva consola de PowerShell e importa el módulo!

Resaltado de sintaxis

Nada más empezar a escribir verás que el módulo colorea la sintaxis mientras escribes en la consola.

psreadline1

Detección de errores de sintaxis

Si hay algún error de sintaxis mientras escribes la sentencia, podrás ver como el color del prompt cambia a rojo.

psreadline2

Intellisense inline

Presiona CTRL+SPACE mientras estás escribiendo un cmdlet para que aparezca un menú de autocompletar estilo Intellisense.

psreadline3

Edición multilínea

¿Te has encontrado con alguna situación como la de la captura de pantalla siguiente y has necesitado volver a la primera línea? Ahora es perfectamente posible.

psreadline4

Establecer atajos de teclado y modificar opciones

Es posible controlar el comportamiento de PSReadLine mediante el sustantivo PSReadLineOption y PSReadLineKeyHandler:

¡Y aún más!

Podéis encontrar más información y descargar el código fuente del proyecto desde su web en GitHub.

Happy PowerShelling!

Enlace relacionado: PSReadLine homepage
Enlace relacionado: Keith Hill’s Blog, PSReadLine: A Better Line Editing Experience for the PowerShell Console
Enlace relacionado: Ed Wilson, Scripting Guy, The Search for a Better PowerShell Console Experience

Office GRATIS en Educación

Hoy venimos con un artículo muy especial, y es que como muchos de vosotros sabréis, sobre todo si os dedicáis al mundo académico, Microsoft está tirando la casa por la ventana y está ofreciendo la última versión de Office de forma GRATUITA.

Se trata de un Office basado en suscripción, es decir, utiliza Office 365 para la asignación de la licencia, la descarga y la autenticación del usuario. Este Office siempre será la última versión disponible en cada plataforma, por lo que ahora mismo podremos descargar por ejemplo Office 2013 para Windows, pero el día de mañana si sacan Office 2016, tendremos la licencia incluida.

Además, como podéis intuir, Office no está disponible sólo para Windows. De hecho hace poco anunciaban que ya estaba disponible para las diferentes plataformas tanto de Escritorio como en dispositivos móviles:

More Office. Everywhere you need it: http://blogs.microsoft.com/blog/2014/11/06/office-everywhere/

La versión de Office que incluye se llama Office 365 ProPlus, y nos permite activar el Office hasta en 15 dispositivos, teniendo que ser 5 en Escritorio, 5 en tabletas y 5 en teléfonos móviles:

image

Esta licencia de Office 365 ProPlus va dirigida al ámbito personal del usuario, por lo que utilizando sus credenciales de Office 365 podrá activarlo en los diferentes equipos que tenga en casa, en su iPad o su teléfono móvil.

Pero vamos a empezar por los requisitos que debe cumplir cualquier Institución Académica que quiera aprovecharse de esta oferta:

  • Debe tener licenciado Office para todo su PAS/PDI (Personal de Administración y Servicios / Personal Docente e Investigador). Estas licencias son las que normalmente se adquieren para el uso en el centro de trabajo.
  • Las licencias de Office 365 ProPlus están dirigidas para el PAS/PDI y los actuales Estudiantes. No pueden licenciarse ex-alumnos o colectivos que no se contemplen como PAS/PDI.
  • Es necesario tener una suscripción o tenantde Office 365 (GRATUITO para Educación).
  • Es recomendable que los usuarios estén también dados de alta en Office 365.

 

Una vez tengamos esto listo y cumplamos con los requisitos, vamos a ver como nos podríamos beneficiar de la oferta de la manera más rápida. Esto será gracias al sistema de auto-servicio publicado por Microsoft:

Office en el ámbito educativo: http://products.office.com/es-ES/student/office-in-education?tab=students

 

¿Cómo funciona este sistema de auto-servicio?

La verdad es que podemos encajar en distintos escenarios donde el auto-servicio nos simplifica la vida, por lo que veremos aquí el procedimiento completo, y analizaremos todos los diferentes caminos que podemos tomar:

  • En la web anterior encontramos el primer detalle importante. Si nos fijamos, para acceder al auto-servicio nos aparecen 3 pestañas, en función de si somos Alumnos, Profesores o Centros educativos:

 

image

Al pinchar en el botón verde que aparece en las diferentes secciones accederemos al primer paso del auto-servicio, pero si nos fijamos en la URL, la dirección cambia indicando en cada caso el SKU correspondiente a la licencia para Alumnos o Profesores:

image

Alumnos:

image

Profesores:

image

 

  • Una vez dentro, se nos presenta el cuadro de texto para introducir nuestro nombre de usuario perteneciente a una Institución Académica que pueda beneficiarse de la oferta:

image

 

En este momento es cuando el usuario debe introducir el nombre de usuario con el que accede a los servicios de Office 365. Pongamos un ejemplo de una Universidad:

image

 

Una vez pinche en el botón de Suscribirse, comienza el proceso de validación por parte de Microsoft, que consta de los siguientes pasos:

  • El dominio al cual pertenece el usuario debe estar dado de alta en una lista maestra que maneja Microsoft. Para hacerlo las Instituciones Académicas podéis escribir a educacion@microsoft.com o directamente a mi correo: amarcos@plainconcepts.com

En caso de no tener habilitado el auto-servicio, el usuario se encontrará un aviso de este estilo:

image

 

  • En segundo lugar, una vez comprueba que el dominio está aprobado en la lista maestra, lo que va a hacer es comprobar si ese dominio está dado de alta en alguna suscripción o tenant de Office 365. Por ello es importante que previamente tengamos nuestra suscripción creada y los dominios añadidos. Si tenéis dudas respecto a este paso os dejo documentación:

          Centro de aprendizaje de Office 365: https://support.office.com/es-ES/learn/office365-for-business

          Trabajar con nombres de dominio en Office 365: https://support.office.com/es-es/article/Trabajar-con-nombres-de-dominio-en-Office-365-502fe172-af17-4b42-ad9c-1ab651d28796

 

  • Una vez el sistema encuentre el tenant donde está dado de alta el dominio en cuestión, lo que hará será buscar al usuario. En este caso podemos encontrarnos con 2 vertientes, que el usuario exista o que no. Si el usuario existe, le pedirá que inicie sesión para verificar que realmente es él:

 

image

 

  • Si el usuario no está dado de alta, este es el mensaje que se encontraría:

 

image

 

  • Podemos permitir que el sistema de auto-servicio se encargue del alta del usuario. Para ello hay que tener en cuenta una serie de cuestiones importantes:

–  Cuidado si tenemos sincronización de usuarios desde un directorio local para ese dominio.

El sistema puede llegar a crear un usuario duplicado, o podemos tener incongruencias entre nuestro directorio local y el Azure Active Directory de Office 365.

–  Para poder activar el alta desde el auto-servicio es necesario indicarlo explícitamente a través de un cmdlet de PowerShell a nivel de tenant: Set-MsolCompanySettings -AllowEmailVerifiedUsers $true

Una vez hecho los cambios, este es el mensaje que se encontraría el usuario:

Capture12

El usuario recibirá un correo electrónico en el buzón especificado. El detalle importante aquí es que la dirección de correo debe existir (para poder recibirlo) y debe pertenecer al dominio que hemos indicado en la lista maestra de Microsoft, que está dado de alta en Office 365, y que el usuario escribe en el primer paso del auto-servicio. Notar también que no es necesario que ese buzón esté específicamente en Office 365, puede residir en otro sistema independiente. Una vez el usuario reciba el correo y pinche en el enlace podrá rellenar los datos necesarios para darse de alta en el tenant de Office 365 donde está el dominio asociado:

 

  • Ahora que ya se han hecho todas las verificaciones pertinentes, y que el usuario está creado en Office 365, ya sólo queda que inicie sesión para que se le asigne la licencia de Office 365 ProPlus y pueda acceder a la descarga:

image

 

image

image

 

  • Ya sólo nos queda descargarnos el Office para Windows del portal, el Office para Mac, el Office para iPad desde la Apple Store, el Office para Android desde la Play Store… y activarlo en el primer arranque con nuestras credenciales de Office 365. A partir de ese momento la aplicación, de forma transparente al usuario, verificará cada 30 días que el usuario sigue teniendo la licencia asignada en Office 365.

 

  • Cada usuario podrá acudir al portal de Office 365, y en la sección de Software (https://portal.microsoftonline.com/OLS/MySoftware.aspx) gestionar las activaciones realizadas en los equipos de Escritorio, con la posibilidad de liberar aquellas de las 5 disponibles que no utilicemos. En el caso de las tabletas o los dispositivos móviles, basta con desinstalar el software para liberar la activación.

clip_image001

 

¡Ya está! Parece largo pero no es tanto, lo que pasa que hemos intentado poner las combinaciones más comunes y que todos los pasos se vieran claros con los pantallazos.

 

Vamos ahora con una sección de preguntas y respuestas un tanto atípica, ya que no sigue un hilo normal, sino que expongo las cosas que más nos han preguntado:

  • ¿Estas licencias, sólo incluyen el Office?: No, incluyen todas las licencias de Office 365 que se consideran “no administradas”, es decir, de aquellos productos que no requieren de un cambio en los DNS. Es el caso de Office 365  ProPlus, pero también de SharePoint Online con OneDrive for Business y su almacenamiento de 1TB por usuario, o el Office Online. El sistema de auto-servicio es capaz también de darse cuenta de si alguna de estas licencias ya está previamente asignada al usuario y no duplicarlas.

 

  • ¿Qué ocurre si no queremos usar el auto-servicio?: si no queréis utilizar este sistema y en cambio queréis asignar las licencias de manera granular vosotros mismos, existe otro cmldet de PowerShell para bloquear el auto-servicio:  Set-MsolCompanySettings -AllowAdHocSubscriptions $false

 

  • ¿Por qué aparecen 1M de licencias para Estudiantes y 1/2M para Faculty?: esto ocurre porque alguno de los dominios que tenéis en ese tenant ha sido aprobado por Microsoft para el auto-servicio, y dado que la provisión de las licencias en el tenant es el proceso que más tiempo requiere, en lugar de hacerlo 1 a 1 con cada usuario que llegue, se hace una vez al principio con una cantidad suficiente de licencias para que no haya problemas.

 

  • ¿Qué ocurre si mis alumnos y mis ex-alumnos comparten el mismo dominio?: en este caso lo ideal es que, siempre que sea posible, no utilicéis el auto-servicio y asignéis las licencias de manera granular según algún atributo del usuario que le distinga en un colectivo u otro.

 

  • ¿Hay alguna diferencia entre el Office 365 ProPlus para Alumnos y el de Profesores?: No, a nivel de funcionalidad es exactamente lo mismo. Sólo se distingue en el portal de acceso al auto-servicio para tenerlos controlados y regulados frente a Microsoft.

 

  • Cualquier otra consulta, hay un F.A.Q oficial donde podréis encontrar mucha más información:

Office 365 ProPlus para el ámbito educativo: preguntas técnicas más frecuentes: https://support.office.com/es-es/article/Office-365-ProPlus-para-el-%c3%a1mbito-educativo-preguntas-t%c3%a9cnicas-m%c3%a1s-frecuentes-7fb1b2f9-94c2-4cbb-b01e-a6eca34261d6?ui=en-US&rs=es-ES&ad=ES

 

Espero que os haya sido de utilidad, y ¡todo el mundo educativo a descargarse el Office!

PPT y videos del Desayuno de Infraestructura Microsoft con Plain Concepts

0c07b269-44bd-4e43-920c-ce4cb7383e3d

Ha pasado un poquito más de una semana desde que celebramos el Desayuno de Infraestructura Microsoft con Plain Concepts, ¡y finalmente tenemos publicados la grabación completa en video del evento y las presentaciones que utilizamos!  Esperamos que fuera un evento ameno, divertido y que sobre todo aprendiéseis mucho sobre multitud de conceptos, arquitecturas y servicios que constituyen algunos de nuestros caballos de batalla habituales día tras día. Si te lo perdiste o bien quieres recordar algo, ahora tienes la oportunidad de verlo desde casa.

  • Presentación: pasado presente y futuro de la infraestructura. | [PPT] [VIDEO]
  • Identidad: los misterios del metaverso con Forefront Identity Manager. | [PPT] [VIDEO]
  • Single Sign On e IdPs: Active Directory Federation Services (ADFS). | [PPT] [VIDEO]
  • Identidad híbrida con Azure Active Directory. | [PPT] [VIDEO]
  • Cross-premises: integrando redes e infraestructura con Microsoft Azure. | [PPT] [VIDEO]

No queríamos cerrar este post sin enseñaros algunas fotos del evento. ¡Muchas gracias a todos los asistentes!

2015-02-26 12.48.44 (Medium)

WP_20150226_09_40_17_Pro (Medium)

2015-02-26 13.35.45

WP_20150226_018

WP_20150226_024

¡Nos vemos en el siguiente!

Enlace relacionado: Desayuno de Infraestructura Microsoft con Plain Concepts en Channel 9

Reducir el tamaño de un disco en Hyper-v

Al igual que las máquinas físicas, nuestras máquinas virutales también necesitan cierto mantenimiento. Su mantenimiento no es tan intenso, pero no por ello debemos pasarlo por alto. Así, por ejemplo podemos  encontramos con la situación de que un disco duro virtual  de una máquina está ocupando más de lo deseado   y queremos reducir su tamaño. Hoy vamos a ver cómo podemos realizar ese proceso .

Lo primero que tenemos que saber, antes de nada es que, para poder reducir el tamaño del disco , éste debe estar en formato vhdx, si no es así lo tendremos que convertir. En nuestro caso partimos de un disco duro que ocupa 130GB aproximadamente y en formato vhd, con lo que  primero tenemos que convertir el disco.

image

Para ello, dentro de Hyper-V en el panel derecho, seleccionamos editar el disco y seguimos un asistente que nos guiará paso a paso.

image

Introducimos la ruta del disco de la máquina virtual que queremos convertir .

image

Elegimos la opción de convertir.

image

Seleccionamos vhdx como formato de disco.

image

Configuramos el disco como expansión dinámica.

image

Agregamos el destino donde se va a exportar el disco (no puede ser el mismo destino que el de origen)

image

Pulsamos finalizar.

image

Y comenzaría todo el proceso de conversión, que se cerrará cuando se complete.

image

Una vez que ya está convertido a formato vhdx ,debemos liberar espacio en el disco duro virtual.   todo es montar el vhd para que podamos administrarlo con el administrador de discos.

image

Abrimos el administrador de discos de windows, hacemos clic con el botón secundario y seleccionamos reducir.

image

Elegimos el tamaño que queremos reducir.

image

Ya hemos liberado espacio en el disco duro virtual, pero para poder reducir el espacio ocupado debemos reducir el volumen.

image

Demontamos el disco, ya que no necesitamos tenerlo añadido.

image

image

Por último, desde el Hypervisor, pulsamos nuevamente en editar disco.

image

Aparecerá nuevamente el asistente para editar el disco duro.

image

Seleccionamos el disco duro en el  que hemos liberado espacio.

image Elegimos la opción de reducir volumen

image

Introducimos el tamaño que queremos reducir

image

Y , por último pulsamos finalizar.

image

Como podemos observar, después de todo este  proceso hemos conseguido reducir casi 60 GB del tamaño original, una diferencia bastante significativa de tamaño.

image

Y, sin más dilación me despido. Espero que os sea útil. Hasta el proximo post!!!