Sysprep en Windows 7

De Manuais Informática - IES San Clemente.
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Ir a la navegación Ir a la búsqueda

Introdución ao Sysprep para Windows 7, 8.1 e 10

Sysprep (preparación do sistema), prepara unha instalación de Windows para crear a súa imaxe. Sysprep elimina da instalación de Windows a información específica do equipo, incluido o identificador de seguridade (SID), co que xeneraliza a instalación para que poida instalarse en varios equipos.


O manual que aquí presentamos ven inspirado dos seguintes titoriais para Windows Vista:

Saber que, a diferencia do que ocorre en Windows XP, no Windows Vista e no Windows 7 a aplicación Sysprep.exe xa ven no propio sistema operativo, xustamente no directorio C:\Windows\System32.
O arquivo de respostas agora é un arquivo xml e cambia radicalmente con respecto ao visto para Windows XP.
Como ferramenta gráfica de axuda para crear este arquivo de respostas hai que descargar e instalar o Kit de Instalación Automatizada para Windows (WAIK) para o Windows 7 e o Windows Assessment and Deployment Kit (Windows ADK) para Windows 8.1 e 10 onde atoparemos a utilidade Administrador de Imáxenes do Sistema (WSIM) que é a que temos que empregar.

Para facer esta práctica precisamos

  • O DVD de Windows 7, 8.1 ou 10 en formato dvd ou nun arquivo ISO (neste caso empregarase o arquivo es_windows_7_ultimate_rc_x86_dvd_349016.iso).
  • Para Windows 7 o paquete de utilidades Windows AIK para Windows 7, no caso de Windows 8.1 o paquete de utilidades Windows Assessment and Deployment Kit (Windows ADK), para windows 10 ADK for Winddows
  • Un equipo con Windows XP SP2, ou superior, para instalar o Windows AIK ou o Windows ADK e onde crearemos o arquivo .xml.
  • Un equipo, ou máquina virtual, con Windows 7, Windows 8.1 ou Windows 10 para probar o arquivo sysprep.xml creado.

Plan de traballo

O noso obxectivo é preparar unha imaxe có sistema operativo Windows 7 e todas as ferramentas que nos interesen. Esta imaxe a poderemos clonar en outros equipos con igual ou (agora dende Windows Vista) distinto hardware.

Para a restauración da imaxe nos novos equipos poderase empregar calquera das ferramentas existentes no mercado, como Norton Ghos e Acronis, ou libres como Clonezilla. Así e todo, agora Microsoft tamén ten unha ferramenta para o manexo de imaxes de sistemas operativos denominada ImageX.

Os pasos a seguir serán os seguintes:

  1. Instalar e configurar o equipo base con Windows 7, actualizalo e agregarlle todas as aplicacións que nos interese.
  2. Instalar o paquete de utilidades Windows AIK para Windows 7 no equipo de traballo do taller, este equipo terá instalado un sistema operativo Windows XP SP2 ou superior.
  3. Crear o arquivo sysprep.xml cós requirimentos desexados.
  4. Executar a aplicación sysprep.exe cós parámetros axeitados.
  5. Creación da imaxe e posterior clonación no resto dos equipos empregando a nosa ferramenta preferida.

Creación do arquivo sysprep.xml

Como sabemos, o arquivo sysprep.xml automatizará a resposta das preguntas que Windows 7 nos fai cando o PC arranca por primeira vez despois de que fose a imaxe aplicada ao PC: O nome do PC, a Clave do producto, a creación dunha conta local, a Zona Horaria,...

Aquí, como exemplo, crearemos un arquivo para unha situación típica, pero sinxela:

  • Nome do equipo: Pedirá o nome cando se inicie o equipo por primeira vez, pero tamén se explicará como configuralo dende o arquivo de respostas.
  • Configuración do nome da empresa dona do equipo. No noso caso será TRITON00 SL.
  • Configuración IP: DHCP ou IP fixa. Non se verá o xeito de que o pida o Sysprep (pois parece que non hai forma).
  • Execución de un ou varios arquivos de procesamento por lotes de xeito automático e sen interacción por parte do usuario. Executando eses arquivos poderemos facer:
  • Eliminar o arquivo de respostas unha vez executado, para así evitar posibles copias por un usuario.
  • Configuración personalizada do Nome e do TCP/IP do equipo, para configuración da clonación automatizada nunha rede de varios equipos.
  • Facer que o equipo sexa membro dun dominio.
  • Configurar os sistemas de almacenamento do equipo.

Arranque e configuración inicial do programa WSIM

Para a creación do arquivo sysprep.xml precisamos o programa Windows System Image Manager (WSIM). WSIM é unha parte do paquete de ferramentas Windows Automated Installation Kit para Windows 7 (WAIK).

Unha vez instalado todo o paquete o executamos, tendo a seguinte aparencia:

Sysprepw7-01.jpg


Logo prememos en “Novo arquivo de resposta...”

Sysprepw7-02.jpg


Para poder proseguir coa creación do arquivo de resposta temos que “abrir unha imaxe de Windows” que é un arquivo .wim existente dentro da carpeta \Sources do DVD de Windows 7 que imos a clonar (ver este enlace):

Sysprepw7-03.jpg


Agora sairá unha pantalla que nos permite escoller unha das distribucións existentes no DVD, neste caso nos interesa a de Windows 7 Ultimate:

Sysprepw7-04.jpg


E xa estamos preparados para comezar a crear o arquivo de resposta:

Sysprepw7-05.jpg


Como vemos está dividido entre components de Windows e outros packages que podemos agregalos a unha das sete fases de configuración:

  • WindowsPE : Esta fase consiste na carga da contorna de preinstalación, cando se inicia o medio de instalación. Nesta fase prepárase o disco duro para a instalación (particionamento e formateo). Os arquivos do sistema operativo son copiados ao disco duro.
  • Offline Servicing : Aplícanse actualizacións ao sistema operativo e outros paquetes, tamén paquetes de idioma e actualizacións de seguridade.
  • Generalize : Esta fase só ocorre se executamos o sysprep có atributo /generalize. Neste paso pódese configurar algúns parámetros de Windows. Aplicando o parámetro /generalize nos aseguramos que a imaxe xerada será apta para ser clonada en outros equipos distintos do equipo orixe.
  • Specialize : Aplícase a información específica do sistema, como a configuración de rede e do dominio.
  • AuditSystem : Esta fase só ocorre cando arrancamos o sistema no modo auditoría (audit). Execútase esta fase antes de que calquera usuario inicie sesión.
  • AuditUser : Esta fase só ocorre cando arrancamos o sistema no modo auditoría (audit). Execútase esta fase despois de que calquera usuario inicie sesión en modo auditoría.
  • OobeSystem : Configuración dos parámetros na instalación de Windows antes de que a Benvida ao sistema operativo apareza.

Pasos da creación do sysprep.xml

Nos seguintes pasos accedemos á parte esquerda onde pon Imaxe de Windows e escollemos o Componente que se mande para engadilo no noso arquivo de resposta no punto tamén indicado:

1.- Componente Microsoft-Windows-Security-SPP_neutral agregalo no noso arquivo de resposta no Componente 3 generalize:

Sysprepw7-06.jpg

Una vez agregado vemos á dereita:

Sysprepw7-07.jpg

Configuramos:
SkipRearm=1
Así facemos que nos permita executar moitas veces o Sysprep, tal e como vemos na axuda da aplicación pulsando F1:

Sysprepw7-08.jpg

2.- Componente Windows-Security-SPP-UX__neutral agregalo no noso arquivo de resposta no Componente 4 specialize:

Configuramos:
SkipAutoActivation=True
Así Windows non intenta activarse automáticamente.

Sysprepw7-09.jpg

3.- Componente Microsoft-Windows-Shell-Setup_neutral agregalo no noso arquivo de resposta no Componente 4 specialize:

Configuramos:
- ComputerName=
· Se non aparece ComputerName no arquivo de resposta, deberase introducir un nome durante a Windows® Welcome.
· Se a propiedade ComputerName dáselle o valor asterisco (*) ou baleiro, será xerado un valor aleatorio.
· Se lle damos un valor terá un máximo de 15 caracteres.
- ProductKey=xxxx-xxx-...
Poñerase a Chave da versión do Windows a instalar se interesa.
En Windows 10 é obrigatorio poñerlle unha, podemos utilizar a da nosa organización ou unha KMS válida.
- RegisteredOrganization=Microsoft
Nunca cambiar este valor.
- RegisteredOwner=AutoBVT
Nunca cambiar este valor.
- ShowWindowsLive=false
Non se mostrará o link de Windows Live no menú de inicio.
- TimeZone=Romance Standard Time
A nosa zona horaria que poderemos coñecer có comando tzutil.

Sysprepw7-10.jpg

  • Nota: Se quixeras activar o usuario Administrador debes facer o seguinte:
Engadir o compoñente amd64_Microsoft-Windows-Deployment__neutral no punto 4 Specialize
RunSynchronousCommand[Order="1"]
- Order: 1
- Path: net user administrator /active:yes
- WillReboot: Never


4.- Componente Microsoft-Windows-International-Core_neutral agregalo no noso arquivo de resposta no Componente 7 oobeSystem:

- InputLocale=es-ES
- SystemLocale=es-ES
- UILanguage=es-ES
- UILanguageFallback=es-ES
- UserLocale=es-ES

Sysprepw7-14.jpg

5.- Componente Microsoft-Windows-Shell-Setup_neutral agregalo no noso arquivo de resposta no Componente 7 oobeSystem: Directamente no componente:

- RegisteredOrganization=TRITON00 SL
- RegisteredOwner=TRITON00 SL
- TimeZone=Romance Standard Time
A nosa zona horaria que poderemos coñecer có comando tzutil.

Sysprepw7-15.jpg

No sub-componente OOBE:

- HideEULAPage=true
- NetworkLocation=Work
- ProtectYourPC=1, 2 o 3 (empregando 3 deshabilitamos as actualizacións automáticas)

Sysprepw7-16.jpg

No sub-componente UserAccounts:

- AdministratorPassword=abc123.
O contrasinal do Administrador local.

Sysprepw7-17.jpg

No sub-component LocalAccounts débese crear unha conta de usuario có seu password para poder iniciar sesión no equipo cando a instalación remate (este paso é totalmente obrigatorio se o PC se agrega a un Dominio).

Sysprepw7-18.jpg


Aprende.png
Autologon

Para que o seguinte apartado funcione, teremos que baixar o nivel de “Notificación acerca de cambios en el equipo”. Para facelo, en Inicio -> Executar, introducimos o comando UAC e eliximos “Non notificarme nunca”.

En Autologon:

- Enabled=true
- LogonCount=1
Será o número de veces que queremos que inicie automáticamente: 1, 2, 3,... un enteiro.
- Username=admin
Usuario con permiso de execución. Non conseguimos iniciar con administrador dende o sysprep.
- Password: Introducimos o password do usuario "admin"

En FirstLogonCommands: Agregamos un SynchronousCommand por cada vez que se vaia a iniciar o equipo.

- CommandLine=cmd /c del C:\Windows\system32\sysprep\sysprep.xml
Tamén poderíamos facelo doutro xeito, empregando un arquivo borrar.bat que tivese no seu interior:
REM Arquivo borrar.bat
REM Borra o sysprep.xml que, por defecto, non se borra
REM -----------------------------------------
del C:\Windows\system32\sysprep\sysprep.xml 
REM -----------------------------------------
Gardando ese arquivo na carpeta Sysprep esta propiedade tería o seguinte valor:
CommandLine=C:\Windows\system32\sysprep\borrar.bat
De calquera dos xeitos, así borramos o arquivo sysprep.xml que por defecto non se borra.
- Order=1
1: Primeira vez, 2:Segunda vez, 3:Terceira vez,…
- RequiresUserInput=false
Se o comando é automático.
  • Ollo có nome deste arquivo: Se o arquivo de respostas que estamos a crear é para automatizar a instalación (non a clonación), este arquivo debe chamarse autounattend.xml.
  • Ollo cós Passwords empregados no sysprep : Os passwords que aparecen no arquivo .xml están codificados en Base64 NON cifrados. Este detalle podemos comprobalo, por exemplo, na seguinte web onde podemos ver que, por exemplo, ao decodificar a seguinte clave "YQBiAGMAMQAyADMALgAuAFAAYQBzAHMAdwBvAHIAZAA=" vemos que nos devolve a web "abc123..Password". Nós para xerar ese "churro" puxeramos no WAIK a clave "abc123..".
En Powershell tamén podemos pasar calquera string a Base64:
PS>$b  = [System.Text.Encoding]::UTF8.GetBytes("abc123..Password")
PS>[System.Convert]::ToBase64String($b)
YWJjMTIzLi5QYXNzd29yZA==
En PowerShell tamén podemos pasar calquera Base64 a string e, polo tanto, descubrir o password oculto:
PS>$b  = [System.Convert]::FromBase64String("YQBiAGMAMQAyADMALgAuAFAAYQBzAHMAdwBvAHIAZAA=")
PS> [System.Text.Encoding]::UTF8.GetString($b)
a b c 1 2 3 . . P a s s w o r d
#O que hai logo de cada un dos caracteres "non son espazos", podemos velo que mostramos o contido de $b:
PS>$b
97
0
98
0
99
0
49
0
50
...
#Son "0" = Null
#Vémolo mellor agora:
PS>$b = [System.Text.Encoding]::UTF8.GetBytes("abc123..Password")
PS> $b
97
98
99
49
50
...
#Recorda que $b é un array de bytes:
PS>$b.GetType().name
Byte[]

Solución do Sysprep.xml

Unha vez seguidos os pasos anteriores obteremos o seguinte arquivo que chamaremos Sysprep.xml

<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <settings pass="generalize">
        <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64"
 publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"
 xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <SkipRearm>1</SkipRearm>
        </component>
    </settings>
    <settings pass="specialize">
        <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64"
 publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"
 xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <SkipAutoActivation>true</SkipAutoActivation>
        </component>
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64"
 publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"
 xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <ComputerName>PC-00</ComputerName>
            <ShowWindowsLive>false</ShowWindowsLive>
            <TimeZone>Romance Standard Time</TimeZone>
        </component>
    </settings>
    <settings pass="oobeSystem">
        <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64"
 publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"
 xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <InputLocale>es-ES</InputLocale>
            <SystemLocale>es-ES</SystemLocale>
            <UILanguage>es-ES</UILanguage>
            <UILanguageFallback>es-ES</UILanguageFallback>
            <UserLocale>es-ES</UserLocale>
        </component>
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64"
 publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"
 xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <AutoLogon>
                <Password>
                    <Value>YQBiAGMAMQAyADMALgBQAGEAcwBzAHcAbwByAGQA</Value>
                    <PlainText>false</PlainText>
                </Password>
                <Enabled>true</Enabled>
                <LogonCount>1</LogonCount>
                <Username>admin</Username>
            </AutoLogon>
            <FirstLogonCommands>
                <SynchronousCommand wcm:action="add">
                    <CommandLine>cmd /c del C:\Windows\system32\sysprep\sysprep.xml</CommandLine>
                    <Order>1</Order>
                    <RequiresUserInput>false</RequiresUserInput>
                </SynchronousCommand>
            </FirstLogonCommands>
            <OOBE>
                <HideEULAPage>true</HideEULAPage>
                <NetworkLocation>Work</NetworkLocation>
                <ProtectYourPC>3</ProtectYourPC>
            </OOBE>
            <UserAccounts>
                <LocalAccounts>
                    <LocalAccount wcm:action="add">
                        <Password>
                            <Value>YQBiAGMAMQAyADMALgBQAGEAcwBzAHcAbwByAGQA</Value>
                            <PlainText>false</PlainText>
                        </Password>
                        <Description>admin</Description>
                        <DisplayName>admin</DisplayName>
                        <Group>Administradores</Group>
                        <Name>admin</Name>
                    </LocalAccount>
                </LocalAccounts>
            </UserAccounts>
            <RegisteredOrganization>Triton00 SL</RegisteredOrganization>
            <RegisteredOwner>Triton00 SL</RegisteredOwner>
            <TimeZone>Romance Standard Time</TimeZone>
        </component>
    </settings>
    <cpi:offlineImage cpi:source="wim:d:/sources/install.wim#Windows 7 ENTERPRISEN"
 xmlns:cpi="urn:schemas-microsoft-com:cpi" />
</unattend>

Execución de Sysprep.exe

Despois de crear o arquivo sysprep.xml debemos copialo na carpeta C:\windows\system32\sysprep do equipo no que queremos aplicalo.

Tarefas a realizar antes da execución do sysprep

  • Se o equipo ten instalado o Reproductor de Windows Media

Antes de Executar o sysprep.exe hai que deter o "Servizo de uso compartido de rede do Reproductor de Windows Media". Para iso executa como administrador a ferramenta "services.msc", busca o servizo e premendo no botón dereito do rato enriba del elixe "deter".

Services-msc.png

  • Facer copia de seguridade dos directorios Panther
Realizaremos copia de seguridade dos seguintes directorios (copiar todos os subdirectorios e arquivos):
  • C:\Windows\Panther
  • C:\Windows\System32\Sysprep\Panther

Execucióndo comando sysprep.exe (parámetros)

O programa Sysprep.exe ten unha serie de parámetros que deberíamos coñecer:

sysprep.exe [/oobe | /audit] [/generalize] [/reboot | /shutdown | /quit] [/quiet] [/unattend:answerfile]
  • /audit : Restaura o equipo ao modo de auditoría.
  • /generalize : Prepara a instalación de Windows para facer unha imaxe del e poder logo clonala. Resetéase o SID creado na instalación.
  • /oobe : Restaura o equipo ao Modo de Benvida. Neste Modo o usuario final pode configurar ao seu antoxo o sistema operativo, así pode crear usuarios, cambiarlle de nome ao equipo e outras configuracións. Todos estes parámetros pasaranse có arquivo de respostas creado sysprep.xml.
  • /reboot : Reinicia o equipo.
  • /shutdown : Apaga o equipo.
  • /quiet : Executa o Sysprep sen mostrar ningún tipo de mensaxe de configuración.
  • /quit : Pecha o Sysprep despois de executar os comandos especificados.
  • /unattend:answerfile : Aplica os parámetros existentes no arquivo de respostas (answerfile) durante a instalación desatendida.

Hai que ter en conta que para transferir unha imaxe a un equipo diferente, primeiro debes quitar a información específica do equipo configurado mediante a xeneralización da imaxe coa ferramenta Sysprep. Para preparar un equipo para o cliente, debes xeralizar (/generalize) o equipo e configuralo para arrancar en OOBE (/oobe) cando un cliente arranque o equipo por primeira vez. Tendo esto en conta, para configurar o sistema para a posterior creación da imaxe debemos executar a aplicación Sysprep.exe cós seguintes parámetros:

C:\Windows\System32\Sysprep\sysprep.exe /generalize /oobe /shutdown /unattend:sysprep.xml

Cando executamos o sysprep.exe, o sistema crea un arquivo unattend.xml no directorio C:\Windows\Panther así que o arquivo de respostas creado por nós pode ser borrado sen problemas para ocultar os passwords aí gardados. Ese arquivo creado polo sistema ten xa borrados os passwords e será o que empregue o sistema para configurarse no primeiro arranque.

Resolución de problemas na execución do sysprep

Ollo!! Se actualizaches o Windows 10

Unha vez actualizado o Windows 10, se queremos aplicar o Sysprep este da un erro que nos impide facelo. Son varias as posibilidades:

  • Mirar se existe a clave no Rexistro de Windows HKEY_LOCAL_MACHINE/SYSTEM/SETUP/UPGRADE, hai que borrala e así xa se permite a execución:
Chave Rexistro W10
  • Mirar o arquivo de logs C:\Windows\system32\sysprep\Panther\Setupact.log e se o erro indica que "non se poden desinstalar certas apps pertencentes ao usuario que está a executar o sysprep", hai que desinstalalas có seguinte comando:
PS>Remove-AppxPackage -Package [Paquete_A_Desinstalar]
Desinstalación APPs Sysprep


  • Se o erro ten que ver con que executamos sysprep máis de tres veces:
- Configurar as seguintes claves de registro así:
HKEY_LOCAL_MACHINE\SYSTEM\Setup\Status\SysprepStatus\GeneralizationState\
· CleanupState:2
· GeneralizationState:7
- Executar os seguintes comandos como administrador:
PS> msdtc -uninstall (espera uns segundos)
PS> msdtc -install (espera uns segundos)
PS> Restart-Computer
Mira se as claves de rexistro non cambiaron.
Executa outra vez o sysprep có teu .xml

Clonar Windows 7 nunha rede

Pode ser interesante facer algunha das seguintes accións se queremos clonar unha rede de varios equipos e que estes se fagan membros dun dominio.

1.- Temos que programar varios arquivos de script PowerShell que, con referencia á MAC do equipo, lle configure o nome, a IP e o faga membro dun dominio determinado.

2.- Temos antes que crear un arquivo CSV separado por comas con un contido similar ao seguinte:

MAC,nombre,IP,MS,PE,DNS1,DNS2
08:00:27:B7:0B:CB,PC100,10.200.100.100,255.255.0.0,10.200.0.254,10.0.4.1,10.0.4.2
08:00:27:B7:0B:CC,PC101,10.200.100.101,255.255.0.0,10.200.0.254,10.0.4.1,10.0.4.2
08:00:27:B8:0C:DC,PC102,10.200.100.102,255.255.0.0,10.200.0.254,10.0.4.1,10.0.4.2

3.- Antes de nada, debemos saber que:

  • Os scripts de PowerShell son arquivos de texto gardados con extensión .PS1.
  • Por defecto estes arquivos os abre o Notepad polo que, se lle decimos en Autologon que se executen o único que ocorre é que se "abren" sen mais. Temos que configurar Windows 7 para que os arquivos con extensión .ps1 se executen todos por defecto có programa Powershell.exe.
  • Ademais, para executalos hai que facelo con permisos de Administrador (hai que baixar o nivel de “Notificación acerca de cambios en el equipo”, có comando UAC) e, ademais hai que cambiar a preferencia do usuario para a directiva de execución de Windows PowerShell, executando o comando:
Set-ExecutionPolicy RemoteSigned

Para ver se cambiou o nivel executas o comando:

Get-ExecutionPolicy

4.- Cambiar configuración IPs:

#Conseguir a MAC da tarxeta de rede do teu equipo
$adaptador = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object { $_.IpEnabled }

<#Seleccionar os parámetros a configurar dende o CSV tendo en conta a MAC do teu equipo#>
$EQ = Import-Csv C:\Windows\System32\sysprep\equipos.csv | Where-Object { $_.MAC -eq $adaptador.MACAddress }
 
#Cambiarlle a IP ao equipo

#Así configuramos unha IP estática
$adaptador.EnableStatic($EQ.IP,$EQ.MS)
$adaptador.SetGateways($EQ.PE, [UInt16] 1)
$arrDNSServers = @($EQ.DNS1, $EQ.DNS2)
$adaptador.SetDNSServerSearchOrder($arrDNSServers)

<#Se queres IP por DHCP, comenta o bloque anterior e descomenta este:
$adaptador.EnableDHCP()
$arrDNSServers = @()
$adaptador.SetDNSServerSearchOrder($arrDNSServers)
#>

5.-Un código de PowerShell que nos permite cambiar o nome do equipo podería ser o siguinte:

#Conseguir a MAC da tarxeta de rede do equipo
$adaptador = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object { $_.IpEnabled }
#Seleccionar os parámetros a configurar dende o CSV tendo en conta a MAC do teu equipo
$EQ = Import-Csv C:\Windows\System32\sysprep\equipos.csv | Where-Object { $_.MAC -eq $adaptador.MACAddress }
#Cambiarlle o nome ao equipo
$equipo = Get-WmiObject -Class Win32_ComputerSystem 
$equipo.Rename($EQ.nombre)

#Reiniciamos o equipo
Restart-Computer

6.- Agregar o equipo ao dominio:

#Hai que adaptar as seguintes variables
$usuario = "usuarioConPermisos"
$contrasinal = "contrasinalDoUsuario" 
$dominio = "dominio.local"

$password = ConvertTo-SecureString $contrasinal -AsPlainText -Force
$username = $dominio + "\" + $usuario
$myCred = New-Object System.Management.Automation.PSCredential $username, $password
Add-Computer -DomainName  $dominio -Credential $myCred
#Engadir o equipo nunha UO determinada:
$uo = "OU=CLIENTES,OU=EQUIPOS,OU=DOMINIO,dc=dominio,dc=local"
Add-Computer -DomainName $dominio -Credential $myCred -OUPath $uo

#Reiniciamos o equipo
Restart-Computer


Nota: Se queres ler un erro con calma, podes engadir, antes do apartado de reiniciar, as seguintes liñas:

<#Párate#>
Write-Host "Pulsa una tecla para continuar ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

7.- Outro xeito de facelo sería empregado o comando netdom, que permitirá, entre outras cousas cambiarlle o nome ao equipo e facelo membro do dominio. Para que o noso equipo teña esta ferramenta software temos que instalar o paquete: "Herramientas de administración remota del servidor para Windows 7 con Servie Pack 1 (SP1)".

Clonar Windows 10 nunha rede

Antes de nada hai que ter preparada a máquina Windows 10:

· Poñer a ExecutionPolicy en RemoteSigned.
· Baixar a UAC, que agora se chama "Activar o desactivar el control de cuentas de usuario" que o podes atopar no Panel de control.

O sysprep.xml o configuramos para que arranque dúas veces como usuario "admin".

- A primeira vez que arranca executamos o script ipnome.ps1 que cambia a IP do equipo, cambia o nome do equipo e logo prepara todo para que se execute o segundo script.
- A segunda vez que arranca o equipo hai que facer que o equipo entre no dominio (dominio.ps1) pero hai que executalo como administrador (comoadmin.ps1).

A continuación vemos o contido de todos os documentos empregados:

  • Contido do unattend.xml para Windows 10 Education Retail Technical Preview 64bits
- Contraseñas en Base64: "abc123.."
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <settings pass="generalize">
        <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <SkipRearm>1</SkipRearm>
        </component>
    </settings>
    <settings pass="specialize">
        <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <SkipAutoActivation>true</SkipAutoActivation>
        </component>
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <ComputerName>*</ComputerName>
            <RegisteredOwner>AutoBVT</RegisteredOwner>
            <ShowWindowsLive>false</ShowWindowsLive>
            <TimeZone>Romance Standard Time</TimeZone>
            <ProductKey>NW6C2-QMPVW-D7KKK-3GKT6-VCFB2</ProductKey>
        </component>
    </settings>
    <settings pass="oobeSystem">
        <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <InputLocale>es-ES</InputLocale>
            <SystemLocale>es-ES</SystemLocale>
            <UILanguage>es-ES</UILanguage>
            <UILanguageFallback>es-ES</UILanguageFallback>
            <UserLocale>es-ES</UserLocale>
        </component>
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <AutoLogon>
                <Password>
                    <Value>YQBiAGMAMQAyADMALgAuAFAAYQBzAHMAdwBvAHIAZAA=</Value>
                    <PlainText>false</PlainText>
                </Password>
                <Enabled>true</Enabled>
                <LogonCount>2</LogonCount>
                <Username>wadmin</Username>
            </AutoLogon>
            <FirstLogonCommands>
                <SynchronousCommand wcm:action="add">
                    <CommandLine>powershell c:\scripts\ipnome.ps1</CommandLine>
                    <Order>1</Order>
                    <Description>Cambia IP e nome dos equipos</Description>
                    <RequiresUserInput>false</RequiresUserInput>
                </SynchronousCommand>
            </FirstLogonCommands>
            <OOBE>
                <HideEULAPage>true</HideEULAPage>
                <NetworkLocation>Work</NetworkLocation>
                <ProtectYourPC>3</ProtectYourPC>
            </OOBE>
            <UserAccounts>
                <LocalAccounts>
                    <LocalAccount wcm:action="add">
                        <Password>
                            <Value>YQBiAGMAMQAyADMALgAuAFAAYQBzAHMAdwBvAHIAZAA=</Value>
                            <PlainText>false</PlainText>
                        </Password>
                        <Description>wadmin</Description>
                        <DisplayName>wadmin</DisplayName>
                        <Group>Administradores</Group>
                        <Name>wadmin</Name>
                    </LocalAccount>
                </LocalAccounts>
            </UserAccounts>
            <RegisteredOrganization>Viso</RegisteredOrganization>
            <RegisteredOwner>Viso</RegisteredOwner>
            <TimeZone>Romance Standard Time</TimeZone>
        </component>
    </settings>
    <cpi:offlineImage cpi:source="wim:c:/users/usuario/desktop/sysprep/install.wim#Windows 10 Education Retail Technical Preview" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
</unattend>
  • Contido de equipos.csv
MAC,IP,MS,PE,DNS,nombre,dominio
08-00-27-A2-6C-56,172.16.10.201,24,172.16.10.1,172.16.10.10,wclient1,viso.local
08-00-27-A2-6C-55,172.16.10.202,24,172.16.10.1,172.16.10.10,wclient2,viso.local
08-00-27-A2-6C-54,172.16.10.203,24,172.16.10.1,172.16.10.10,wclient3,viso.local
08-00-27-1E-AE-D5,172.16.10.204,24,172.16.10.1,172.16.10.10,wclient4,viso.local
08-00-27-1E-AE-D6,172.16.10.205,24,172.16.10.1,172.16.10.10,wclient5,viso.local
  • Contido do ipnome.ps1 para PowerShell 3.0 ou superior
## Adaptador que vamos a configurar
$adaptador = "Ethernet"

#Seleccionar os parámetros a configurar dende o CSV
#buscamos a fila que coincide coa MAC da nosa tarxeta
# MAC,IP,MS,PE,DNS,nombre
##Seleccionamos a nosa NIC “Ethernet” para descubrir a súa MAC
$nic = Get-NetAdapter -name ${adaptador}
$EQ = Import-Csv C:\scripts\equipos.csv | Where-Object { $_.MAC -eq ${nic}.MACAddress }

# Configuración IP 
## Desactivamos a obtención automática de configuración IP  (DHCP)
Set-NetIPInterface -InterfaceAlias ${adaptador} -DHCP Disabled

## Eliminamos a configuración IP do equipo, 
## se non existe devolve un erro que o enviamos a NULL
Remove-NetIPAddress -InterfaceAlias ${adaptador} -IncludeAllCompartments `
-Confirm:$false  2> Out-Null

## Eliminamos a configuración da Puerta de Enlace, 
## se non existe devolve un erro que o enviamos a NULL
Remove-NetRoute -InterfaceAlias ${adaptador} -Confirm:$false  2> Out-Null

## Configuramos a IP estática, a máscara de subrede e a porta de enlace
New-NetIPAddress -InterfaceAlias ${adaptador} -AddressFamily IPv4 -IPAddress ${EQ}.IP `
-PrefixLength ${EQ}.MS -Type Unicast -DefaultGateway ${EQ}.PE

## Temos que facer un array cós servidores DNS
###para pasarllos ao comando Set-DnsClientServerAddress
$arrDNSServers = @(${EQ}.DNS) 

## Configuramos os servidores DNS
Set-DnsClientServerAddress -InterfaceAlias ${adaptador} -ServerAddresses ${arrDNSServers}
Set-DnsClientGlobalSetting -SuffixSearchList @(${EQ}.dominio)

## – O cambio de IP NON require reinicio – 

## - O segundo script o lanzamos dende o Inicio de Windows -
cp C:\scripts\comoadmin.bat "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\"

# Cambiar o nombre e Reiniciar o equipo
Rename-Computer -NewName ${EQ}.nombre -Restart -Force

## – O cambio de Nome SI require reinicio –


  • Contido do arquivo comoadmin.bat
#O script comoadmin.bat executa o importante que é comoadmin.ps1
#Non podemos facelo directamente pois os ps1 ábrense có Notepad
cmd /c powershell "C:\scripts\comoadmin.ps1"
  • Contido do arquivo comoadmin.ps1
#O script dominio.ps1 hai que executalo como administrador
Start-Process Powershell -Verb RunAs -ArgumentList "-file c:\scripts\dominio.ps1"
  • Contido do arquivo dominio.ps1
#Hai que adaptar as seguintes variables
$usuario = "usuario1"
$contrasinal = "abc123.." 
$dominio = "viso.local"
 
$password = ConvertTo-SecureString $contrasinal -AsPlainText -Force
$username = $dominio + "\" + $usuario
$myCred = New-Object System.Management.Automation.PSCredential $username, $password
$uo = "OU=CLIENTES,OU=EQUIPOS,OU=VISO,dc=viso,dc=local"
Add-Computer -DomainName $dominio -Credential $myCred -OUPath $uo

## Borramos o arquivo unattend.xml
del C:\Windows\System32\Sysprep\unattend.xml

## Borramos el script comoadmin.bat que se iniciaba automáticamente
rm "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\comoadmin.bat"

#Reiniciamos o equipo
Restart-Computer
  • Comando a executar:
PS>C:\Windows\System32\Sysprep\sysprep.exe /generalize /oobe /shutdown /unattend:unattend.xml

Introducir un único equipo no dominio

Sen a necesidade de empregar scripts, podemos cambiar o nome dun equipo e metelo no dominio (sen necesidade de reiniciar) xa dende o paso specialize. Debemos modificar o sysprep.xml antes creado, no apartado specilize, tal e como se mostra a continuación:

<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <settings pass="specialize">
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <OEMInformation>
                <Manufacturer>IES San Clemente</Manufacturer>
                <SupportURL>http://www.iessanclemente.net</SupportURL>
            </OEMInformation>
            <ComputerName>PC10</ComputerName>
            <TimeZone>Romance Standard Time</TimeZone>
            <RegisteredOrganization>Microsoft</RegisteredOrganization>
            <RegisteredOwner>AutoBVT</RegisteredOwner>
            <ShowWindowsLive>false</ShowWindowsLive>
            <CopyProfile>true</CopyProfile>
        </component>
        <component name="Microsoft-Windows-UnattendedJoin" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <Identification>
                <Credentials>
                    <Domain>dominio.local</Domain>
                    <Password>abc123..</Password>
                    <Username>administrador</Username>
                </Credentials>
                <JoinDomain>dominio.local</JoinDomain>
            </Identification>
        </component>
        <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <SkipAutoActivation>true</SkipAutoActivation>
        </component>
    </settings>
    <settings pass="generalize">
...

Para facer unha clonación a moitos equipos nunha rede, configurando nomes distintos e meténdoos no dominio, farémolo do seguinte xeito:

Tal e como apuntamos antes, cando se executa o sysprep.exe, o sistema crea un arquivo unattend.xml na carpeta C:\Windows\Panther. Ese arquivo é o que emprega para modificar o sistema tal e como nos interesa.
Sabendo esto, se modificamos ese arquivo para cada un dos equipos xa clonados, dende un linux ou dende o clonezilla,... "pero sen arrancar o Windows..." poderíamos ter configurados todos os equipos de xeito particular e xa metidos no dominio. Esto faría que non precisaríamos os scripts de configuración antes vistos.
A configuración IP podería facerse cun DHCP na rede ou en fase OOBE cun script, pero xa non se precisarían varios reinicios.

Enlaces Interesantes


-- Cristina París
-- Carlos Carrión