Desvelando el misterio de las capturas de pantalla automáticas en Windows 8/8.1

En cada nueva versión de Windows, se incorporan nuevas “mini características” o herramientas que por lo general, son para mejorar diferentes tareas básicas pero necesarias cuando se está trabajando con el sistema operativo.

Normalmente no hay tanto para cubrir en este tipo de cosas como para escribir un artículo, sin embargo, hace un tiempo alguien planteó una duda muy interesante con respecto a una funcionalidad en Windows 8/8.1 que permite crear capturas de pantalla automáticas y almacenarlas en una carpeta dentro de Imágenes con tan solo presionar las teclas de Windows + ImprPantPetSis.

Dentro de la carpeta, se van creando las imágenes con su respectivo índice que inicia en uno (1):

image

Los dos aspectos más interesantes, son el hecho de no tener que guardar y nombrar la captura de pantalla manualmente después de presionar ImprPantPetSis como hasta Windows 7 se debía hacer, así que es muy fácil y rápido, perfecto para escenarios donde necesitemos documentar varias pantallas y no haya el tiempo de detallarlas mucho usando la herramienta de Recortes, por ejemplo. El índice irá aumentando de a uno en uno, así que no hay problemas por colisión de nombres o ausencia de capturas, ya que todo lo hará Windows de una forma efectiva.

Ahora, lo interesante de la pregunta en el Foro de Windows en Microsoft Community, era que si uno elimina alguna, o todas las capturas de pantalla que se generan y se vuelve a presionar las teclas Windows + ImprPantPetSis con el objetivo de generar una nueva, el índice no será nuevamente uno (1) (Si es que se borraron todas), pues en vez de eso, el índice continuará donde se dejó en la última captura. Por ejemplo, si se crearon 10 capturas, se borran y se vuelve a crear una, no se llamará Screenshot(1), sino que tendrá como identificador numérico el que seguía en el orden lógico, es decir: Screenshot(11). 

¿Por qué sucede esto? ¿Cómo administra Windows los índices internamente? ¿Se puede volver a inicializar desde el uno? Todas estas preguntas las respondió de una forma precisa Ramón Sola en el hilo del foro, así que este artículo no es más que una ampliación un poco más detallada del comportamiento con dos objetivos: 1) Solucionar las inquietudes a quienes se hagan la misma pregunta, 2) Explorar un poco sobre lo complejo e inteligente que puede llegar a ser Windows.

La herramienta que utilizaré para entender esto será por supuesto Process Monitor.

La primera captura

Con la primera captura de pantalla que se tome puede ser suficiente para entender cómo funciona, aunque es más interesante ver paso a paso cómo es que responde Windows a los diferentes escenarios.

Cuando se presiona la combinación de teclas Windows + ImprPantPetSis, veremos que la pantalla se vuelve un poco oscura por no más de uno o dos segundos y en el directorio de Imágenes –como lo expliqué al principio- se generará una carpeta llamada Screenshots; dentro de esta, una primera captura con el nombre de Screenshot (1). ¿Qué hizo Windows en este tramo de tiempo? Pues bien, esto es lo que nos muestra Process Monitor:

image

Recordemos que los resultados de Process Monitor se leen de forma descendiente, así que teniendo esto en cuenta, Windows de forma inteligente intenta crear toda la estructura de carpetas hasta llegar a la última que en últimas es la necesaria para la operación y en este caso sería Screenshots.

*Nota: Hay que aclarar que si estuviéramos programando con la API de Windows, utilizar la función de CreateDirectory no genera toda la estructura de carpetas como sí lo hace la de RegCreateKeyEx en el Registro, por ejemplo así que tendríamos que automatizarlo nosotros mismos.

Enfocándonos un poco más en las 6 operaciones que muestra la captura de la traza, Windows utiliza CreateFile para intentar crear el directorio Pictures (Imágenes), pero obtiene como resultado NAME COLLISION devuelto por el Manejador de Errores de Windows, que en contexto de programación tendría el identificador ERROR_ALREADY_EXITS y más específico, el código de error 183. 

Ahora, la razón por la que en dos veces en principio se muestra la operación de CreateFile, es porque Process Monitor la utiliza para referenciar diferentes funciones asociadas, que en este caso se referirían a intentar crear, y si ya existe, simplemente abrir el directorio y posteriormente consultar la información con QueryBasicInformationFile. En otras palabras, hasta la cuarta operación, Windows verifica que se cree o abra la carpeta Pictures, para luego volver a llamar a la operación CreateFile, que internamente está es utilizando CreateDirectory y así escribir la carpeta de Screenshots. Lo último que hace es cerrar con CloseFile. Cabe destacar que cuando crea el directorio, obtiene resultado de SUCCESS, porque al ser primera vez, no existe de forma predeterminada.

Después de esto, y luego de realizar muchas otras tareas, entre las que se incluye crear y trabajar con un archivo desktop.ini ubicado en la misma carpeta, viene lo realmente interesante mientras se copia la captura de pantalla en Screenshots:

S1

*Nota: Pueden hacer clic en la imagen para verla de tamaño completo.

Las cuatro operaciones encerradas con rojo permiten que Windows nos despeje gran cantidad de las dudas con respecto a la característica:

La primera operación, que Process Monitor reporta como RegQueryValue, utiliza la función (Entre otras) de NtQueryValueKey en modo Kernel, y que en modo usuario sería RegQueryValueEx para leer el contenido de un Valor de Registro, en este caso, el de ScreenshotIndex, pero en principio, el resultado es NAME NOT FOUND indicando que el Valor de registro ni siquiera se encuentra creado. Windows pasa entonces a abrir el archivo Screenshot (1).png pero también recibe NAME NOT FOUND así que el archivo no existe.

Para entender un poco mejor, veamos lo que ocurre en las otras dos operaciones resaltadas: Antes de la operación en rojo, hay una operación de RegCreateKey, que en este contexto es abrir la clave para escribir un valor, luego procede y finalmente reporta operación de RegSetValue –internamente utilizando RegSetValueEx- para crear un valor muy interesante llamado ScreenshotIndex, y si entramos en las propiedades, podremos ver que es de tipo DWORD y almacena el contenido de dos (2). Así quedaría en el Registro:

image

Después de esto, se cierra la operación sobre la sub-clave y se procede a crear el archivo llamado Screenshot (1).png, que previamente se había buscado para saber si existía o no. ¡Ahí tenemos nuestra primera captura!

Como siempre, los valores de registro suelen decir un poco su objetivo en el nombre, y este básicamente nos da a entender que gestionará los índices que aparecen después del nombre Screenshot entre paréntesis. ¿Pero por qué tiene el 2 y no el 1, creado en primera instancia? Para responder eso, hay que probar un poco más la característica:

Segunda captura

Si presionamos Windows + ImprPantPetSis por segunda vez, mientras monitoreamos con la ayuda de Process Monitor el comportamiento de Windows, podremos ver que primero se creará una segunda captura con el nombre Screenshot (2).png en el directorio Screenshots:

image

En las operaciones a nivel de archivos y registros hay un pequeño cambio interesante:

image

Las operaciones son exactamente las mismas que para la primera captura, pero aquí debemos notar que el primer RegQueryValue que se hace sobre ScreenshotIndex ya no es NAME NOT FOUND (Porque no existía), sino que ahora es SUCCESS, y por ende, ahora Windows tiene el contenido exacto del valor, es decir, el número dos (2) que estableció desde la primera captura.

A continuación se verifica que exista o no (CreateFile) el archivo Screenshot (2).png; como recibe una respuesta de NAME NOT FOUND (No se encuentra), procede a escribir en el valor de registro ScreenshotIndex nuevamente con la operación RegSetValue pero esta vez con un contenido de tres (3):

image

Después de esto cierra (otra vez) y finalmente crea el archivo Screenshot (2).png.

¿Excelente, no creen? En términos más sencillos, y para resumir un poco todo hasta aquí, Windows 8/8.1 tiene un nombre predeterminado de Screenshot para cada captura de pantalla generado a partir de la combinación de teclas Windows + ImprPantPetSis; para evitar colisión y pérdida de capturas, tiene un valor de registro llamado ScreenshotIndex que mantiene el índice que sigue a continuación, y para evitar que ya esté, siempre valida el nombre que va a utilizar antes de modificar el índice en el valor.

Así las cosas, si creáramos una tercera captura de pantalla automática, se llamaría Screenshot (3).png, pero el valor de ScreenshotIndex tendría contenido de cuatro (4), referenciando su próximo índice.

Tratando de engañar a Windows

Aquí es donde finalmente veremos qué tan inteligente puede llegar a ser Windows sobre diferentes escenarios, y empezando por el más básico, supongamos que tenemos tres capturas creadas, es decir, Screenshot (1), Screenshot (2) y Screenshot (3); quiere decir, que el valor ScreenshotIndex tiene el contenido de cuatro (4) para el próximo índice –Tal cual lo expliqué en el párrafo anterior-.

¿Qué sucede si cambiamos el contenido de ScreenshotIndex a tres (3), para que la próxima captura se tenga que llamar Screenshot (3) y colisione contra la que ya está creada? Process Monitor nos responde:

S2

Como en las anteriores veces, primero se abre la sub-clave de Explorer, se procede a consultar el valor de ScreenshotIndex (con un contenido de 3), cierra la operación y luego como en las otras veces intenta abrir el Screenshot (3).png para ver si existe y como en este caso recibe SUCCESS (El archivo ya está creado), de forma muy inteligente procede a cerrarlo y verificar el siguiente en su orden lógico, es decir, Screenshot (4).png y al no encontrarlo (NAME NOT FOUND), procede con su comportamiento normal y actualiza el índice, pero no al 4 (Teniendo en cuenta que habíamos puesto 3), sino al 5, porque da por hecho de que escribirá el archivo con índice 4, y de hecho lo hace en las próximas operaciones.

image

*Nota: Aunque traté de verlo desde Process Monitor, ignoro cómo maneja los índices cuando no puede depender del valor de registro completamente.

Segundo intento

Vamos a suponer ahora, partiendo de donde quedó el ejercicio anterior, que contenido de ScreenshotIndex no será el que sigue, es decir, cinco (5), sino dos más adelante, o sea: 6. ¿Qué sucede al crear la captura? Process Monitor responde:

image

En este caso, Windows lee el índice (6), intenta abrir el archivo con ese nombre y al ver que no existe, pasa como en su procedimiento normal, a establecer el contenido de ScreenshotIndex al siguiente, es decir: 7. Como no hay problemas con eso, termina creando la captura de pantalla con ese índice. Las capturas habrán pasado entonces de 4 a 6:

image

Sobre esto podemos concluir que no valida el inmediatamente anterior, solo el siguiente, así que aunque es inteligente, no le interesa en este caso qué hay atrás. No fue lo suficientemente audaz en este caso.

Último intento

Para terminar, y sobre la base anterior, es decir, capturas creadas del 1 al 6, sin incluir el 5 porque no existe, ¿Qué pasa si cambio el contenido de ScreenshotIndex a cero (0)? Pues bien, Process Monitor responde:

image

Windows consulta el contenido de ScreenshotIndex (Que tiene cero (0)), pero como ese no lo utiliza para poner índice, procede a iniciar desde el número uno (1); como encuentra que ya existe, pasa inmediatamente a verificar si el siguiente en orden existe pero como también recibe SUCCESS (Existe), sigue de a uno en uno hasta encontrar un hueco, es decir, hasta que el resultado sea NAME NOT FOUND (No existe) y en este caso, sería precísamente en la captura con índice cinco (5). 
Por último, establece el contenido de ScreenshotIndex al siguiente, es decir, 6 que incluso ya está creado, pero nos damos cuenta que Windows no hace ninguna comparación contra el nombre del archivo para ver si el índice está referenciado o no, y de igual forma, así tenga uno repetido (Como vimos en el primer ejercicio), procederá luego es a crear el siguiente, es decir: Screenshot (7).png. 

Hay más escenarios, como intentar escarlarlos en diferente orden, pero Windows sólo escribirá donde encuentre un espacio, sea al principio, en la mitad o en la final, así que no es necesario documentar más.

Restablecer el índice al valor inicial

Como punto final, ¿Cómo podemos hacer que todo inicie nuevamente? Muy sencillo, debemos borrar todas las capturas de pantalla (el directorio no es necesario, pero también se puede hacer), y después eliminar el valor ScreenshotIndex ubicado en:

HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorer

image

De esta forma, o eliminando los archivos y poniendo el índice en uno (1), todo empezará nuevamente:

image

Eso es todo, espero les pueda ser de utilidad.

¡Comentarios y correcciones bienvenidas!

PD. No olviden seguirme en Twitter: http://www.twitter.com/secalderonr

Saludos,

Checho

Explorando Assigned Access en Windows 8.1 PRO RTM

Hace solo algunos días, Microsoft, basado en la retroalimentación recibida sobre el lanzamiento del RTM de Windows 8.1, ha decidido dar un paso atrás y finalmente ha permitido que todo el que tenga Suscripción MSDN / TechNet tiene disponible Windows 8.1 PRO y Windows Server 2012 R2, además de Visual Studio 2013 RC. Ahora por fin podemos recorrer todas las características integradas en esta actualización, que será completamente gratuita para todo el que posea Windows 8 a partir del 18 de Octubre del presente año.

*Nota: Todavía no se ha liberado la edición Enterprise de 8.1 RTM, aunque según el anuncio, estará disponible en las próximas semanas.

Junto con esta compilación RTM, podemos ver una de las características más interesantes y mencionadas desde antes de que fuera Beta, llamada Assigned Access que básicamente, nos permitirá establecer una sola aplicación de interfaz moderna sobre un usuario estándar para que al momento de iniciar con él, no pueda utilizar nada más que la aplicación asignada por el administrador. Cabe aclarar que como dije, es válido únicamente para aplicaciones de Windows 8, conocidas como “Metro”.

En este artículo mostraré el paso a paso para configurar y utilizar Assigned Access en Windows 8.1 y Enterprise.

Requerimientos

1. Naturalmente, Windows 8.1 RT, Windows 8.1 PRO o Windows 8.1 Enterprise en RTM o disponibilidad general. En este momento, solo es posible descargar el producto a través de Suscripción MSDN y TechNet. Probablemente con el 8.1 Enteprirse RTM se libere alguna versión de prueba pero eso es difícil de saber hasta que se libere.

Creando usuario estándar

Para Assigned Access, es necesario crear una cuenta estándar que sirva para este objetivo solamente, es decir, en la que se vaya a iniciar siempre que se desee tener solo una aplicación de interfaz modena ejecutándose.

En el equipo con Windows 8.1 PRO RTM, vamos con el puntero a la parte inferior derecha para que se nos despliegue la barra lateral, hacemos clic en Settings (Configuraciones), Change PC Settings (Cambiar configuraciones de PC). Esto abrirá el Panel de Control de Interfaz Moderna. Hacemos clic en el tab de Accounts (Cuentas), Other Accounts (Otras cuentas) y clic en el botón Add an account (Agregar una cuenta):

image

Nos abrirá un pequeño asistente en la interfaz moderna para crear una nueva cuenta, sea con una cuenta Microsoft, o bien una cuenta local. La cuenta la debemos dejar como estándar. Para este caso, el usuario creado lo decidí llamar Kiosk:

image

Lo siguiente es abrir el usuario estándar recién creado para que se aprovisionen e instalen las aplicaciones de Interfaz Moderna. Podemos hacer esto fácilmente desde la Pantalla de Inicio, haciendo clic en nuestro usuario en la parte superior derecha y seleccionando el que acabamos de crear:

image

*Nota: Si no nos aparece el nuevo usuario, cerramos sesión completamente, ingresamos otra vez y procedemos.

Configurando Assigned Access

Después de crear el usuario e iniciar por primera vez con él, cerramos sesión, entramos a la cuenta con los privilegios administrativos, volvemos a Cambiar configuración de PC, Cuentas, Otras cuentas y hacemos clic en el vínculo inferior que dice “Set up an account for assigned access” (Configurar una cuenta para acceso asignado), esto nos abrirá el asistente de interfaz moderna:

image

Clic en el botón Choose an account (Seleccionar una cuenta), le indicamos la recién creada (en este caso Kiosk) y cuando se habilite el botón de Choose an app (Seleccionar una aplicación), buscamos entre las aprovisionadas, cuál deseamos que sea la única que arranque con el usuario; para mi caso, escogí Internet Explorer:

image

¡Esto es todo! No es necesario hacer clic en ningún otro botón, simplemente cerramos la aplicación de Configuraciones de PC e iniciamos de nuevo con nuestro usuario asignado.

Explorando Assigned Access

Inmediatamente después de que iniciemos sesión con el usuario que configuramos para el Assigned Access, nos ejecutará la aplicación de interfaz moderna establecida:

image

Lo demás es simplemente empezar a consumir la aplicación a gusto propio del usuario. Noten que el usuario solo podrá personalizar y utilizar las opciones propias de la aplicación, porque ni siquiera podrá cerrarla, cambiarse al escritorio, etc:

image

Si se intenta abrir la página con la opción de Ver en el escritorio de Internet Explorer, veremos un pequeño reflejo como si se intentase abrir, pero vuelve a la aplicación, así como si se cierra con ALT + F4. ¡Funciona realmente bien!

La única forma que encontré hasta ahora para salir de la aplicación, es presionando CTRL + ALT + DELETE, apagar o bien proceder a cerrar sesión.

Espero les sea de utilidad.

¡Comentarios bienvenidos!

PD. No olviden seguirme en Twitter: http://www.twitter.com/secalderonr

Saludos,

Checho

Cambiar contraseña olvidada para recuperar el inicio de sesión en Windows 8/8.1

No debería ser así, pero es más común de lo que imaginamos ver en entornos corporativos y de hogar algo similar a esta captura al intentar iniciar sesión con algún usuario:

image

En este caso, no me estoy refiriendo exactamente a que se haya digitado mal la contraseña, sino que por X o Y razón, ya no podemos acceder al sistema operativo y las razones van desde olvido, hasta que Windows no acepta la contraseña, así esta sea una válida. La pregunta que surge en los foros después suele ser: ¿Cómo recupero el acceso a mi cuenta?

Hay quienes tienen suerte de poder ingresar con otra cuenta, pero muchas veces se trata de alguna con privilegios estándar, así que poco o nada se consigue.

En este artículo, y con el único propósito de recuperar nuestro acceso a Windows. Mostraré cómo podemos sacar ventaja de un comportamiento del sistema operativo, y de Windows PE para cambiar la contraseña de cualquier usuario, aún cuando no podemos ni siquiera iniciar sesión con otro.

*Nota: El procedimiento que pasaré a describir, funciona exactamente igual desde Windows Vista hasta Windows 8.1.

Requerimientos

– Necesitamos un equipo adicional (Lo llamaremos técnico) donde podamos descargar e instalar el ADK para Windows 8/8.1.

La versión para Windows 8, la pueden descargar desde aquí:
http://www.microsoft.com/es-es/download/details.aspx?id=30652

La versión para Windows 8.1, la pueden descargar desde aquí:
http://www.microsoft.com/es-co/download/details.aspx?id=39982

– Un dispositivo USB o unidad DVD que se pueda preparar para copiar los archivos de Windows PE.

– Por supuesto, el equipo donde no se puede iniciar sesión, sin importar la razón.

La “puerta” de Windows

Internamente, cada que se lanza un proceso desde Windows, que por supuesto corresponde a alguna aplicación, como por ejemplo Notepad.exe para el Bloc de notas, el sistema hará una consulta en la sub-clave Image File Execution Options, que está en la clave:

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersion

Lo que buscará, será el nombre exacto del proceso (Sin ninguna ruta), y esto sucede con cualquier proceso, y lo podemos ver claramente si utilizamos Process Monitor y el ejemplo del Bloc de Notas:

image

Si la sub-clave existe, entonces procederá a consultar que exista un valor denominado Debugger, que se encargará de contener el proceso que Windows utilizará para remplazar el real:

image

Este comportamiento es bastante viejo en Windows, y se creó con el fin de lanzar Depuradores en vez de la aplicación para analizar por ejemplo, el código de inicio.

Hasta aquí no hay mucho para considerarlo extraño, pero si juntamos esto, con el hecho que desde el Escritorio de Inicio de sesión, que lo maneja el Winlogon y que se ejecuta bajo el usuario de System desde hace ya tiempo nos da la posibilidad de lanzar algo llamado Sticky Keys,  creado para que combinaciones que se hagan con teclas como CTRL, ALT, SHIFT se puedan presionar una sola a la vez y no todas al tiempo, encontramos la oportunidad de oro para “engañar” a Windows e iniciar un proceso más poderoso como cmd.exe cuando se llame Sticky Keys desde la Pantalla de Inicio de sesión presionando cinco (5) veces la tecla SHIFT y tener privilegios totales.

*Nota: Espero poder detallar –cuando el conocimiento me lo permita- temas de Escritorios, y Winlogon en un futuro no muy lejano.

Básicamente, lo que haremos será crearle una clave en Image File Execution Options con el nombre del proceso padre que lanza el Sticky Keys llamada sethc.exe y crear el valor de Debugger para que se inicie cmd.exe.

Sin embargo, como estamos contando con que no podemos entrar a Windows para poder realizar esta configuración, necesitamos apoyarnos en algo que nos de bastante flexibilidad para modificar el Registro de Windows de forma offline y me refiero por supuesto a un Windows Pe. De esta forma, contemplando el escenario más difícil que es no poder ingresar ni siquiera, crearemos la clave y su respectivo valor desde Windows PE y reiniciaremos el sistema operativo para luego jugar con Net User y cambiar la contraseña a cualquier usuario, o crear uno nuevo que pertenezca al grupo de Administradores.

Creando el Windows PE

Volviendo a los pasos entonces, desde el Equipo técnico donde instalamos el ADK para Windows 8/8.1, buscamos desde la Pantalla de Inicio Deployment and Imaging Tools Environment, hacemos clic derecho y ejecutamos el símbolo como Administrador.

Digitamos: Copype.cmd <Arquitectura> C:WinPE

Donde <Arquitectura> corresponde a la que tenga nuestro sistema operativo, es decir x86 para 32 bits o AMD64 para 64 bits. En mi caso, que es 64 bits, el comando quedaría:

Copype.cmd AMD64 C:WinPE

image

Se nos creará una carpeta en la raíz de la partición del sistema operativo (C:) con el nombre de WinPE.

Lo que tenemos que hacer ahora es preparar un dispositivo USB tal cual fuéramos a instalar Windows desde él, y grabar los archivos que están dentro de la carpeta C:WinPE con el objetivo de iniciar el equipo afectado desde allí.

Otra forma, es crear una imagen .ISO y grabarla en un CD/DVD. Para esto, tendríamos que crear la ISO ejecutando desde el Símbolo:

MakeWinPeMedia /ISO C:WinPE C:WinPE.iso

image
Iniciamos el equipo donde tenemos problemas con la contraseña desde el Windows PE, sea a través de USB o con un medio CD/DVD.

Desde el Símbolo del Sistema que se ejecuta, lanzamos Regedit.exe para abrir el Editor:

image

Desde el Editor de Registro, vamos a montar toda la clave correspondiente a HKEY_LOCAL_MACHINESoftware que se encuentra guardada como un Hive en la partición del sistema operativo local (no el de WinPE), específicamente en el directorio de C:WindowsSystem32Config. Su nombre es SOFTWARE.DAT

Para esto, nos situamos en la clave de HKEY_LOCAL_MACHINE y hacemos clic en el menú File > Load Hive…

image

Navegamos hasta el directorio C:WindowsSystem32Config, seleccionamos SOFTWARE y clic en el botón Open:

image

En la ventana de Load Hive, indicamos cualquier nombre, por ejemplo Pass y clic en OK

image

Ahora, debemos navegar hasta:

HKEY_LOCAL_MACHINEPassMicrosoftWindows NTCurrentVersion

Hacemos clic derecho sobre la sub-clave Image File Execution Options, y seleccionamos Nuevo > Clave

image

Lo llamamos sethc.exe. Después de esto, nos situamos sobre sethc.exe y en el panel derecho hacemos clic derecho, Nuevo > Valor de Cadena

image

Debe nombrarse como Debugger y al darle doble clic para editar el contenido, le especificamos: cmd.exe

image

Con esto listo, nos situamos otra vez sobre la raíz de Pass, que es la sub-clave que contiene el Hive, vamos al menú File y seleccionamos Unload Hive. Si nos pide confirmación, clic en el botón Sí (Yes).

Reiniciamos el sistema cerrando el Editor de Registro y el Símbolo del Sistema.

Cambiando la contraseña

Si todo salió bien, los siguientes pasos nos deben salir sin ningún tipo de problemas:

1. En la pantalla de Inicio de Sesión, presionamos varias veces la tecla SHIFT (Alrededor de 5 veces seguidas) y nos debe lanzar un símbolo del sistema, que si verificamos, estará bajo el usuario System:

image

*Nota: Debemos presionar la tecla SHIFT de una forma rápida.

2. Desde el Símbolo del Sistema, cambiamos la contraseña del usuario que deseemos, para mi caso Andy ejecutando: Net User <Usuario> <Contraseña>

Donde <Usuario> corresponde a la cuenta con la que no podemos inicar sesión, y <Contraseña> a las nuevas credenciales. Por ejemplo, yo estableceré la nueva contraseña como Passw0rd al usuario Andy, así que mi comando quedaría:

Net User Andy Passw0rd

image

Windows nos debe notificar que el comando se completó satisfactoriamente (Internamente, Windows devuelve el código 0, que contiene el mensaje genérico).

Una vez pase esto, cerramos la consola y simplemente digitamos la nueva contraseña para posteriormente iniciar sesión otra vez:

image

¿Fácil, no les parece? Será nuestra decisión quitar la sub-clave de sethc.exe generada o dejarla ahí por si en un futuro la necesitamos.

Espero les sea de utilidad.

PD. No olviden seguirme en Twitter: http://www.twitter.com/secalderonr

Checho

Quitar aplicaciones predeterminadas de Windows 8 durante la instalación con Microsoft Deployment Toolkit

Ya he tocado en varios artículos aquí diferentes cosas referente a las Aplicaciones de Interfaz Moderna de Windows 8, antes conocidas como aplicaciones “Metro”. Sin embargo, en este artículo no promoveré necesariamente su despliegue o utilización, sino más bien una forma de salir de algunas de ellas rápidamente.

Windows 8/8.1 incluye una gran cantidad de aplicaciones de Interfaz Moderna preinstaladas, incluyendo una serie dedicada a Comunicaciones, algunas para noticias, otras sociales, etc. Pensando en implementación corporativa de Windows 8, como es posible que la empresa quiera sacar provecho de esto e incluso hacer Sideloading de sus propias aplicaciones, otras querrán hasta impedir el acceso completo a la Tienda o cualquier aplicación de este tipo instaladas, sea quitándolas, o a través de políticas creadas por AppLocker.

En este artículo les mostraré cómo podemos aprovechar el despliegue de Windows 8 que estemos realizando con Microsoft Deployment Toolkit 2012/2013 para que una vez instalado el sistema operativo, se quiten todas las aplicaciones de Interfaz Moderna embebidas, exceptuando por supuesto la de Internet Explorer y la Tienda pues son necesarias y no se pueden quitar.

Requerimientos

1. Un Equipo técnico que tenga instalado Windows Server 2008 R2/2012/2012 R2 con el ADK para Windows 8/8.1 y Microsoft Deployment Toolkit 2012/2013.

Pueden descargar una versión de prueba de Windows Server 2012 desde aquí:
http://technet.microsoft.com/es-es/evalcenter/hh670538.aspx

El ADK para Windows 8 lo descargan desde aquí, y Microsoft Deployment Toolkit 2012 desde aquí.

*Nota: Si van a trabajar sobre Windows Server 2012 R2 y Windows 8.1, es necesario instalar el ADK para 8.1 y MDT 2013 Preview.

2. Un equipo de referencia que esté en la misma red que el técnico para hacer el despliegue de Windows 8 y quitar las aplicaciones.

Prerequisitos

Con el objetivo de promover los otros artículos que tengo aquí, y para no repetir un proceso que puede ser un poco largo, es necesario basarnos en la instalación y configuración de MDT para instalar Windows 8. El artículo incluye los pasos para agregar aplicaciones, paquetes y crear nuestra Secuencia de Tareas. Lo pueden ver aquí:
http://geeks.ms/blogs/checho/archive/2013/02/05/implementaci-243-n-b-225-sica-de-windows-8-con-mdt-2012-update-1-y-windows-deployment-services.aspx

Este artículo lo iniciaré desde el momento en que ya se ha creado la Primera Secuencia de Tareas, antes de actualizar el Recurso Compartido, agregarlo a WDS y desplegar. Por esta razón es necesario seguir bien el post anterior.

Creando los Scripts de PowerShell

Hace un tiempo, la gente del Blog: “The Deployment Guysescribió un artículo donde nos comparte un sencillo Script de PowerShell que se encargará de desinstalar todas las aplicaciones preinstaladas de Windows 8 que se le haya indicado. Este mismo Script es el que utilizaré aquí, pero es necesario hacer un par de pasos adicionales para que se pueda llamar desde MDT:

1. Copiamos todo el Script a un Bloc de Notas y lo guardamos como RemoveApps.ps1 y lo debemos guardar en la carpeta de Scripts de nuestro Recurso Compartido de MDT. En mi caso, que el recurso se llama DeploymentShare$ y está en la unidad de Windows, la ruta sería: C:DeploymentShareScripts

image

*Nota: El Script completo de PowerShell es este (Obviar las líneas horizontales):


$AppsList = "Microsoft.Bing" , "Microsoft.BingFinance" , "Microsoft.BingMaps" , "Microsoft.BingNews",`
            "Microsoft.BingSports" , "Microsoft.BingTravel" , "Microsoft.BingWeather" , "Microsoft.Camera",`
            "microsoft.microsoftskydrive" , "Microsoft.Reader" , "microsoft.windowscommunicationsapps",`
            "microsoft.windowsphotos" , "Microsoft.XboxLIVEGames" , "Microsoft.ZuneMusic",`
            "Microsoft.ZuneVideo" , "Microsoft.Media.PlayReadyClient"

ForEach ($App in $AppsList)
{
    $PackageFullName = (Get-AppxPackage $App).PackageFullName
    if ((Get-AppxPackage $App).PackageFullName)
    {
        Write-Host "Removing Package: $App"
        remove-AppxProvisionedPackage -online -packagename $PackageFullName
        remove-AppxPackage -package $PackageFullName
    }
    else
    {
        Write-Host "Unable to find package: $App"
    }
}


2. Para que Windows pueda ejecutar este tipo de Scripts, es necesario que la política de ExecutionPolicy debe estar habilidada según el tipo deseado. Para este caso, debemos establecerla con Unrestricted

En un Bloc de Notas nuevamente copiamos (Obviar las líneas horizontales):


Set-ExecutionPolicy Unrestricted


Guardamos el Script como EnablePolicy.ps1 en la misma carpeta de Scripts del Deployment Share.

image

Personalizando la Secuencia de Tareas

Nuestro último paso, por lo menos en MDT, es indicarle a la Secuencia de Tareas creada para el despliegue que utilice los dos Scripts recien creados, primero el de EnablePolicy para que Windows habilite la ejecución, y segundo el de RemoveApps para que las aplicaciones predeterminadas de Microsoft se quiten completamente.

En el Equipo técnico, ejecutamos el Deployment Workbench, abrimos la Secuencia de Tareas haciendo doble clic o clic derecho > Properties y pestaña de Task Sequence. Allí veremos todos los pasos que realiza el Asistente de Implementación de MDT, y que se agregan de forma predeterminada al utilizar Standard Client Task Sequence:

image

Nos ubicamos en el paso de Install Applications, debajo del nodo State Restore, clic en el botón superior de Add > General > Run PowerShell Script

image

Nos debe quedar justo debajo de Install Applications. Lo seleccionamos y en PowerShell script le especificamos el nombre para el primer Script a ejecutar, que en este caso sería: EnablePolicy.ps1

image

Hacemos clic en el botón Apply para que el icono se ponga en verde luego de actualizar.

Realizamos exactamente el mismo procedimiento, pero en PowerShell script le especificamos ahora el nombre del segundo Script, que en últimas es el que necesitamos para desinstalar y quitar las aplicaciones de Windows 8 instaladas predeterminadamente. En este caso: RemoveApps.ps1

Al final, las dos deberían quedar así:

image

*Nota: EnablePolicy.ps1 debe establecerse antes de RemoveApps.ps1 y el nombre para cada tarea puede ser modificado en el campo de Name cuando se está personalizando.

Eso es todo lo que debemos hacer, nuestro último paso es hacer clic derecho en el Deployment Share y seleccionar Update Deployment Share.

image

En el asistente para actualizar, dejamos la opción predeterminada y hacemos clic en el botón Next hasta que haga el proceso y aparezca Finish.

Para implementar, subimos la imagen del LiteTouchPE en nuestro Windows Deployment Services (WDS) tal cual lo expliqué en el post de implementación básica de Windows 8, y pasamos a probar.

Probando despliegue y comportamiento

Para terminar, iniciamos un equipo de referencia por la red y seguimos los pasos indicados en el asistente de instalación de Windows para desplegar el sistema operativo seleccionando la Secuencia de Tareas creada con el propósito de quitar las aplicaciones de Interfaz Moderna preinstaladas.

Para no abordar en lo que ya expliqué en el artículo referenciado, dejaré las capturas de pantalla normales durante el proceso de Lite Touch Installation como referencia:

image image

image image

image image

image image

*Nota: La cantidad de páginas pueden variar dependiendo de lo que hayamos o no indicado en el proceso de configuración desde el MDT, como agregar aplicaciones.

Después de que Windows instale y haya desplegado las aplicaciones, debemos ver un pequeño mensaje notificándonos el proceso para quitar aplicaciones:

R1

Si todo sale bien, pasados un par de minutos, podremos ver la Pantalla de Inicio ahora está solo con las aplicaciones de Interfaz Moderna que no se pueden quitar como IE y la Tienda:

image

*Nota: Si les sale una pequeña advertencia sobre Set-ExecutionPolicy, es porque en Unrestricted puede correr cualquier Script y lo ideal sería manipular esto a través de políticas de grupo así que basta con darle clic al botón Finish.

Espero sea de utilidad.

PD. No olviden seguirme en Twitter: http://www.twitter.com/secalderonr

Saludos,

Checho