Monthly Archives: febrero 2019

Crear un pendrive personalizado para instalar Windows 10

De vez en cuando tengo que hacer reinstalaciones de equipos en el colegio, y siempre ando buscando formas para hacer que esa tarea me lleve menos tiempo.

Una de las cosas que he hecho últimamente es crear un pendrive de instalación de Windows 10, para instalaciones en equipos individuales, con la mayor parte del software que necesito ya instalado.

Te aviso que no voy a utilizar el modo «oficial» de hacer las cosas, ya que Microsoft tiene un montón de utilidades para hacer temas más complejos, pero para lo que yo necesito, un par de scripts de Powershell me salvan la papeleta y me llevan menos tiempo.

¿Qué necesitas?

Lo primero que vas a necesitar es un par de pendrives. Uno pequeño (1 GB es suficiente) y otro grande. Cuando más grande, más imágenes diferentes podrás tener en él.

Por otro lado, necesitas un ordenador con Windows 10, idealmente actualizado a la última versión, y en el que instalaremos Windows ADK (luego lo comento). Este ordenador lo usaremos para crear el pendrive de WindowsPE (luego hablamos de ello) y para hacer pequeñas modificaciones a la imagen que hayamos creado, en caso necesario.

Finalmente necesitarás el ordenador en el que harás la instalación de referencia. Mi experiencia con Windows 10 es que, tras generalizar la imagen, podrás utilizarla en ordenadores con hardware me diferente. En mi caso, en el colegio, tengo muchos modelos distintos, con diferentes antigüedades, y tengo tres imágenes, que utilizo según el caso:

  • Una instalación de 64 bits, que utilizo solo para un modelo que tiene una controladora de disco un poco extraña.
  • Una instalación de 64 bits, que utilizo para el resto de equipos.
  • Una instalación de 32 bits, para unos equipos pequeños con procesador Atom (esta va en un pendrive aparte, con instalador de 32 bits).

Windows ADK

Lo primero que necesitamos es instalar en un ordenador con Windows 10 (idealmente la última versión) el paquete Windows ADK (Assesment and Deployment Kit). Lo podemos descargar desde aquí:

  • https://docs.microsoft.com/en-us/windows-hardware/get-started/adk-install

Después, si hemos instalado el Windows ADK de la versión 1809 o posterior, tendremos que instalar, aparte, el plugin de WindowsPE:

  • https://go.microsoft.com/fwlink/?linkid=2022233

WindowsPE

Lo siguiente que necesitamos es un pendrive con WindowsPE. ¿Qué es WindowsPE? Es una versión reducida de Windows que se utiliza, entre otras cosas, para capturar imágenes de instalación. Para ello, en el ordenador en el que hemos instalado Windows ADK, crearemos un directorio con el sistema base que luego pasaremos a un pendrive.

Ejecutamos la línea de comandos de Windows ADK en modo administrador («Deployment and imaging tools enviroment» o, en castellano, «Entorno de herramientas de implementación y creación de imágenes») y escribimos:

copype amd64 c:\WinPE_amd64

O, en caso de querer crear un pendrive para equipos de 32 bits:

copype x86 c:\WinPE_x86

Este comando crea una carpeta en c: con los ficheros que se copiarán al pendrive. Introducimos el pendrive que vayamos a utilizar (pequeño, con un 1GB es sufificiente) y escribimos:

MakeWinPEMedia /UFD c:\WinPE_amd64 f:

Cambiamos el nombre del directorio al que hayamos creado en el paso anterior, y la letra f por la del pendrive. Una vez terminado, extraemos el pendrive con seguridad.

Instalación base

En el pendrive grande grabamos la imagen de instalación de Windows 10. Yo me descargo la ISO de las licencias por volumen de Microsoft, y después utilizo Rufus para grabarla (cuidado, formateando el pendrive en NTFS, porque la imagen resultante tendrá, probablemente, más de 4GB).

Con ese pendrive instalamos el sistema operativo en una máquina de referencia y cuando se haya completado y empiece la configuración inicial, antes de seleccionar el idioma, pulsamos Shift + Alt + F3.

El equipo se reiniciará y Windows 10 arrancará en modo auditoría. Este modo utiliza el usuario administrador por defecto y nos permite instalar aplicaciones y realizar cambios para, después, generalizar la imagen, de forma que podamos utilizarla en nuevas instalaciones.

En mi caso, hago una instalación de la última versión de Office (al final hablaré un poco de esto), navegadores, notepad++, ImageResizer, VLC, 7zip, Paint.Net… lo que cada uno necesite.

Finalmente, copio en c:\ una carpeta que llamo «scripts». Cuando instalo un ordenador quiero hacer tres cosas: activarlo (si no es un equipo OEM con licencia de Windows integrada en la BIOS), crear una serie de usuarios locales y meterlo en dominio.

Además de esto, aprovecho para ejecutar Windows Update, meter todas las actualizaciones (en configuración avanzada de Windows Update activo las actualizaciones de otros productos de Microsoft para actualizar también Office) y ejecuto el liberador de espacio en disco para borrar todos los ficheros temporales. Ah, y quito también todo lo que haya en descargas.

Una vez todo esté preparado, ejecutamos Sysprep, la herramienta que generaliza el sistema (borra el identificador de la instalación de Windows, y todo lo relacionado con hardware del registro).

En modo auditoría, Sysprep se ejecuta en el arranque del sistema. Si no lo hemos cerrado ya tenemos ahí la pantalla, y si no, está en:

C:\Windows\System32\sysprep\sysprep.exe

Es importante que marquemos «Generalizar» y que no reiniciemos, sino que apaguemos. Si reiniciamos ahora, volverá a ejecutarse el asistente de instalación (nada que no podamos solucionar volviendo a entrar al modo de auditoría y volviendo a ejecutar Sysprep, pero perderemos tiempo).

Capturar la imagen

Como hemos dicho antes, Windows PE (o WinPE, Preinstalation Environment) es un entorno para preparar instalaciones. Es una versión mini de Windows, con una consola de comandos y una serie de utilidades para trabajar con imágenes.

Metemos el pendrive que hemos preparado en el ordenador en el que acabamos de realizar la instalación, y arrancamos desde este (con cuidado de no arrancar desde el disco duro). Lo primero que debemos hacer es cambiar el layout de teclado. En mi caso, para ponerlo en Español-España:

 wpeutil SetKeyboardLayout 040a:0000040a
start cmd

El primer comando establece el layout de teclado, y el segundo lo hace efectivo en una nueva ventana.

Necesitamos una unidad en la que guardar nuestra nueva imagen. Para ello, podemos pinchar el USB que vayamos a utilizar, o montar una unidad de red.

Supongo que todos aquellos que estén leyendo esto saben montar una unidad de red, pero por si acaso:

net use w: \\servidor\recurso_compartido /USER:usuario

Cambiamos w: por la letra de unidad que queramos usar.

El siguiente paso es montar la partición del disco en la que hemos instalado Windows 10. Ejecutamos:

diskpart

Desde esta aplicación buscamos el disco en el que hemos instalado (en este ejemplo, el 0), la partición del disco que contiene la instalación (en este ejemplo, la 2), y le asignamos una letra libre.

List disk
Select disk 0
List partition
Select partition 2
Assign letter g
Exit

Finalmente, capturamos la imagen. Cambiamos W por la letra de unidad en la que vayamos a guardar la imagen, y G por la letra de unidad en la que hayamos montado la instalación. También cambiamos el nombre por uno más descriptivo:

Dism /Capture-Image /ImageFile:w:\Windows10.wim /CaptureDir:g:\ /Name:"Windows 10"

Y apagamos:

Wpeutil shutdown

Preparamos nuestro pendrive personalizado

El último paso es copiar el fichero .wim que acabamos de capturar al pendrive que utilizaremos para capturar Windows 10, si es que no lo hemos capturado en él directamente.

En ese pendrive, en la carpeta «sources» hay un fichero «install.wim» que contiene la instalación base de Windows 10. Lo que haremos es sustituirlo por la imagen que acabamos de capturar.

Lo que yo hago es renombrar ese fichero (para poder usar una instalación limpia en caso necesario) y poner en su lugar el fichero que he capturado antes, con nombre «install.wim». Con un pendrive lo suficientemente grande, podemos tener ahí varios ficheros .wim y, antes de hacer una instalación, renombrar a «install.wim» el que queramos utilizar.

Es importante recordar que el pendrive no puede estar formateado en FAT32, porque si no, no podremos copiar imágenes que ocupen más de 4GB.

Listo para usar

Ahora puedes usar ese pendrive para instalar Windows 10 en cualquier ordenador. Esa instalación base tendrá ya, desde el primer momento, todas las aplicaciones que hayas instalado y cualquier otro fichero que hayas copiado.

¿Cómo puedo modificar la imagen?

En caso de que tengamos que modificar la imagen por algún motivo, podemos hacer ciertas operaciones, como instalar drivers, algunas aplicaciones, o cambiar ficheros, desde el ordenador en el que hemos instalado ADK (realmente,desde cualquier ordenador con Windows 10).

Podemos montar el .wim desde una consola de comandos en modo administrador:

dism /Mount-Image /index:1 /imagefile:z:\Windows10-image.wim /MountDir:c:\mount

z:\Windows10-image.wim es el fichero que queremos montar, y c:\mount es una carpeta que hemos creado en el ordenador para acceder a los ficheros de la misma.

Una vez realizados los cambios, desmontamos la imagen:

dism /Unmount-Image /MountDir:c:/mount /Commit

Una vez más, cambiamos c:\mount por la carpeta que hayamos utilizado. Si nos arrepentimos, cambiamos el /Commit por /Discard.

Bonus: algunos scripts

Por si os sirve para algo, os pongo aquí los scripts que utilizo para las instalaciones del colegio.

Activar Windows

Si uso equipos que no tienen ID de Windows en la BIOS, tengo un script con estas dos líneas, que ejecuto como administrador (con la clave de activación que quiero utilizar):

slmgr.vbs /ipk 00000-00000-00000-00000-00000
slmgr.vbs /ato

Con otro script permito la ejecución de Powershell y creo una serie de usuarios, según para qué vaya a utilizarse el ordenador, además de meterlo en dominio en caso necesario. El .bat:

cd /d %~dp0
powershell Set-ExecutionPolicy -ExecutionPolicy Unrestricted
powershell -File main.ps1
pause

Y el script de Powershell:

function Create-LocalAdminUser
{
    Param($Name,$Description,$Keyfile)
 
    $u = $null
    # Si el usuario no existe, lo creamos.
    try
    {
        $u = Get-LocalUser -Name $Name -ErrorAction Stop | Out-Null
                               echo "Usuario $Name recuperado."
    }
    catch
    {
        $u = New-LocalUser -Name $Name -NoPassword -AccountNeverExpires
                               echo "Usuario $Name creado."
    }
 
    # Le ponemos la clave correspondiente y le actualizamos la descripción
    $pass = Get-Content $Keyfile | ConvertTo-SecureString -Key (1..16)
    Set-LocalUser -Name $Name -Password $pass
    Set-LocalUser -Name $Name -Description $Description
               
    # Lo añadimos al grupo de administradores locales
                try
                {
                               $ug = Get-LocalGroupMember -Group "Administradores" -Member $Name -ErrorAction Stop | Out-Null
                               echo "Ya pertenece al grupo de administradores"
                }
                catch
                {
                               Add-LocalGroupMember -Group "Administradores" -Member $Name
                               echo "Añadido al grupo de administradores"
                }
}
 
function Add-ToDomain
{
    $adpass = Get-Content .\domain.key | ConvertTo-SecureString -Key (1..16)
    $cred = New-Object System.Management.Automation.PSCredential("administrador@maristak.maristasbilbao.com",$adpass)
    Add-Computer -DomainName "maristak.maristasbilbao.com" -Credential $cred
}
 
$opt = 0
while (($opt -ne 1) -and ($opt -ne 2) -and ($opt -ne 3))
{
    echo "¿Para qué se utilizará este ordenador?"
    echo "1. Ordenador de alumnado. Se creará usuario 'adminlocal' con clave de Administrador Local. No se meterá en dominio."
    echo "2. Ordenador de profesorado o de botiquín. Se creará usuario 'admin' con clave de profesorado y un 'adminlocal' con clave de administrador local y un 'ikasle' con clave 'ikasle'."
    echo "3. Ordenador de aula o sala de profesorado. Se creará usuario 'admin' con clave de profesorado y un 'adminlocal' con clave de administrador local."
    $opt = Read-Host "Introduce la opción:"
}
 
if ($opt -eq 1)
{
    Create-LocalAdminUser -Name "AdminLocal" -Description "Local Administrator" -Keyfile ".\student.key"
    echo "Finalizado."
}
elseif ($opt -eq 2)
{
    Create-LocalAdminUser -Name "AdminLocal" -Description "Local Administrator" -Keyfile ".\student.key"
    Create-LocalAdminUser -Name "admin" -Description "Administrador personal" -Keyfile ".\teacher.key"
    Create-LocalAdminUser -Name "ikasle" -Description "Ikasle generikoa" -Keyfile ".\ikasle.key"
    Add-ToDomain
    echo "Finalizado. No olvides entrar en el controlador de dominio, mover el equipo al grupo 'Ordenadores' y añadirlo al grupo 'Ordenadores'. Reinicia el equipo y, si va a ser usado como botiquín, inicia sesión con el usuario local '.\ikasle'."
}
else
{
    Create-LocalAdminUser -Name "AdminLocal" -Description "Local Administrator" -Keyfile ".\student.key"
    Create-LocalAdminUser -Name "admin" -Description "Administrador personal" -Keyfile ".\teacher.key"
    Add-ToDomain
    echo "Finalizado. No olvides entrar en el controlador de dominio, mover el equipo al grupo 'Ordenadores' y añadirlo al grupo 'Ordenadores'. Reinicia el equipo y, si va a ser usado como botiquín, inicia sesión con el usuario local '.\ikasle'."
}

Los ficheros .key que aparecen en el script tienen las claves de los usuarios. Para crearlos, en una ventana de Powershell ejecutamos:

"La clave que quieres usar" | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString -Key (1..16) | Out-File "file.key"

Y con eso creo que está todo 😀

Por cierto, que sepas que he escrito una novela de ciencia ficción. Puedes leer los tres primeros capítulos este enlace, y puedes comprarla en Amazon, tanto en papel como en formato ebook.