Windows 10 IoT Enterprise 2019—modo de quiosco múltiple

Introducción

Windows 10 IoT Enterprise 2019 – nombre de marketing de la siguiente versión de Windows 10. El lanzamiento de esta versión fue anunciado en septiembre de 2018, corresponde a la versión 1809, 18 – año, 09 – mes. Se han escrito muchos artículos sobre la nueva versión de Windows 10 1809, pero la mayoría se centra en diversos 'extras', 'mejoras' y funcionalidades que son necesarias en el hogar.
En este artículo, hablaremos solo de las funcionalidades que pueden ser necesarias entre los fabricantes de dispositivos de propósito fijo. Específicamente, sobre las nuevas características del modo 'Kiosco'. También se tocará el tema de los cambios en los nombres de los esquemas de mantenimiento de las versiones de Windows para el sector empresarial.

El antiguo esquema de mantenimiento con un nuevo nombre

Comenzaré con una breve explicación, en el segmento empresarial de las versiones de Windows hay dos esquemas de mantenimiento a través de los cuales Windows recibe actualizaciones. Los esquemas de mantenimiento tienen una designación alfabética. Ahora las ramas de mantenimiento se llaman LTSC y SAC.

LTSC – significa Canal de Servicio a Largo Plazo (con servicio a largo plazo). Anteriormente, este canal se llamaba LTSB – Rama de Servicio a Largo Plazo, Microsoft simplemente cambió el nombre del canal de servicio, el servicio en sí se mantuvo igual.

Además, Microsoft cambió el nombre de la rama de servicio CBB – Rama Actual para Empresas, ahora esta rama de servicio se llama SAC – Canal Semestral. Nuevamente, solo cambió el nombre.

Pero cabe mencionar que se utilizan diferentes distribuciones de Windows para las ramas de servicio LTSC y SAC.

Un poco sobre el nuevo modo kiosco en SAC

Como mencioné, LTSC y SAC tienen distribuciones diferentes. En LTSC no hay aplicaciones universales estándar ni una tienda de aplicaciones, mientras que en SAC sí. Por lo tanto, en LTSC no hay navegador Edge, mientras que en SAC sí. Si al configurar el kiosco se selecciona el navegador Edge, ahora hay dos modos accesibles:

  1. Como firma digital o pantalla interactiva
  2. Como navegador público

No me detendré en la configuración de estos modos, ya que la configuración es muy simple y se lleva a cabo en la interfaz gráfica. Solo cree un usuario que no esté en el grupo 'Administradores', active el modo kiosco utilizando EDGE y observe cómo funcionan estos modos.

Kiosco con múltiples aplicaciones

Algunos piensan que el uso licenciado de Windows 10 IoT Enterprise supone el funcionamiento de una sola aplicación en el dispositivo, pero en realidad no es así. El dispositivo debe estar destinado a realizar una única tarea empresarial y el usuario no debe tener acceso al escritorio. Ahora Microsoft proporciona una herramienta para utilizar múltiples aplicaciones. Este modo se llama "multi-app kiosk", y a partir de ahora lo denominaré "mulkiosk". En este artículo, examinaremos la configuración de este modo utilizando un paquete de aprovisionamiento y algunas características de este modo.

Un poco sobre el modo "Mulkiosk"

Al iniciar sesión en la cuenta de usuario para la cual se ha configurado el modo mulkiosk, el sistema funcionará en modo tableta. El menú "Inicio" se expandirá a pantalla completa, mostrando los mosaicos de las aplicaciones.

Listado de configuraciones y características principales del modo:

  1. Configuración para múltiples usuarios o grupos
  2. Se pueden asignar configuraciones individuales a cada usuario o grupo
  3. Posibilidad de utilizar aplicaciones universales y clásicas
  4. Posibilidad de iniciar automáticamente una de las aplicaciones al iniciar sesión el usuario en el sistema
  5. Funcionamiento de las aplicaciones según una lista blanca
  6. Acceso a carpetas según una lista blanca

Es importante prestar atención al punto 5. Por defecto, solo se permitirá el funcionamiento de aquellas aplicaciones necesarias para la operación del sistema; las demás aplicaciones deben añadirse a la lista de permitidas. Es decir, ahora no es necesario configurar AppLocker por separado. Por cierto, para evitar conflictos con la configuración de AppLocker, en el modo mulkiosk no se aplicarán las reglas configuradas de AppLocker.

En el punto 6 se destaca una buena opción, pero en este momento solo se puede conceder permiso de escritura para la carpeta "Descargas". El modo permite el uso de aplicaciones universales y clásicas. Todas las configuraciones del modo se indican en un archivo XML, en el que también se pueden especificar configuraciones para un kiosco de una sola aplicación.

Y ahora intentemos configurar todo esto...

Lo que necesitaremos...

  1. En primer lugar, necesitaremos el sistema mismo, que sea compatible con el modo mulkiosk. Aquí se puede descargar la versión de demostración
  2. Instrucciones para la configuración del mulkiosk
  3. Cualquier editor XML
  4. Para aplicar las configuraciones del mulkiosk:
    1. Para el método n.º 1 — ICD, que forma parte de ADK. Se puede descargarlo aquí
    2. Para el método n.º 2 – la utilería PsExec. La utilería se puede descargarlo aquí

Él dijo – «¡Vámonos!»

Realizaré todos los experimentos en Windows 10 IoT Enterprise 1809 LTSC x32 versión comercial, no en la demo. El sistema estará sin activación, ya que la falta de activación no afecta la funcionalidad del sistema. Elegí 32 bits solo porque ocupa menos espacio y trabajar con las imágenes del sistema será más rápido.

Paso 1 – instalación

La instalación de Win 10 IoT Enterprise no difiere de la instalación de Win 10 Enterprise, por lo que no describiré todo el proceso de instalación, solo mencionaré algunos matices.

Por si acaso, recuerden, no instalen el sistema sobre uno ya instalado. Cuando el instalador pregunte sobre el lugar de instalación del sistema, eliminen todas las particiones en el futuro disco de sistema y seleccionen el disco no particionado.

Instalamos el sistema sin conexión a internet, para que el sistema no descargue nada adicional.

Dado que estaremos creando copias de seguridad del sistema y lo vamos a sellar en modo auditoría, podemos ahorrar un poco de tiempo al arrancar el sistema en modo auditoría justo después de la instalación. Para ello, cuando el sistema les pida elegir una región «Empecemos con la región. ¿Es correcto?», simplemente presionen «Ctrl + Shift + F3».

Paso 2 – creamos una imagen del sistema

Como vamos a experimentar con el sistema probando varias configuraciones nuevas, no es descartable que algo salga mal y debamos restaurar el sistema a su estado original. Y para un regreso rápido a este estado, necesitamos crear una imagen del sistema. Lo único que haré será copiar el «kit de caballero» – el script y el archivo de respuestas. Todos los archivos los tengo en la carpeta «Sysprep», que copiaré en la raíz del disco del sistema. Y, por supuesto, compartiré con ustedes este «kit de caballero».

Sysprep.bat – para sellar el sistema.

@echo off
chcp 1251>nul

net session>nul 2>nul
if %errorLevel% neq 0 (powershell -command "Start-Process "%~s0" -Verb RunAs"&exit)

tasklist /fi "ImageName eq sysprep.exe" | find /i "sysprep.exe"
if %errorlevel% lss 1 (taskkill /im sysprep.exe)

set AdminName=Admin
net user minName%>nul 2>nul
if %errorLevel% neq 0 (call :AddAdmin "minName%")
if %errorLevel% neq 0 (call :ShowMessage "‡‡‡Error al crear una nueva cuenta de administrador "minName%"‡‡Presione cualquier tecla para cerrar el script"&pause>nul&exit)

pushd "%~dp0"

cls
call :ShowMessage ‡‡‡‡‡‡‡‡‡‡
echo 1 - Preparar el sistema en modo auditoría
echo 2 - Preparar el sistema en modo bienvenida
:Select
set /p Choice="Ingrese el número de la opción: "
if "%Choice%"=="1" (goto Audit)
if "%Choice%"=="2" (goto OOBE)
echo.&echo Opción no válida seleccionada.&goto Select

exit

:Audit
 call :ShowMessage "‡‡‡‡‡Preparando el sistema en modo auditoría"
 reg add HKLMSoftwareMicrosoftWindowsCurrentVersionRun /v KillSysprep /t REG_SZ /d "taskkill /im sysprep.exe" /f
 %SYSTEMROOT%System32Sysprepsysprep.exe /audit /generalize /shutdown /quiet
goto :eof

:OOBE
 call :ShowMessage "‡‡‡‡‡Preparando el sistema en modo bienvenida"
 reg delete HKLMSoftwareMicrosoftWindowsCurrentVersionRun /v KillSysprep /f
 powershell -command "(Get-Content -path 'Unattend.xml' -Raw).Trim() -replace 'Architecture=""".+?"""','Architecture="""%PROCESSOR_ARCHITECTURE%"""' | Set-Content -path 'Unattend.xml'"
 %SYSTEMROOT%System32Sysprepsysprep.exe /oobe /generalize /shutdown /quiet /unattend:Unattend.xml
goto :eof

:AddAdmin
 setlocal
 set UserName=%~1
 if not defined UserName (echo No se ha especificado un nombre de usuario&endlocal&exit /b 1)

 call :GetGroupName "S-1-5-32-544" AdminGroup
 if not defined AdminGroup (endlocal&exit /b 2)

 call :GetGroupName "S-1-5-32-545" UserGroup
 if not defined UserGroup (endlocal&exit /b 3)

 net user %UserName% /add
 wmic useraccount where "Name='%UserName%'" set PasswordExpires=False>nul
 net localgroup minGroup% %UserName% /add
 net localgroup %UserGroup% %UserName% /delete
 endlocal&exit /b 0
goto :eof

:GetGroupName
 if "%~1"=="" (echo No se ha especificado el SID del grupo&goto :eof)
 set %2=
 for /f "tokens=2 delims= " %%i in ('whoami /groups /fo table^|find "%~1"') do set %2=%%i
 if not defined %2 (echo Error al determinar el nombre del grupo por el SID "%~1")
goto :eof

:ShowMessage
 setlocal enabledelayedexpansion
 set String=%~1
 if not defined String (echo.&setlocal disabledelayedexpansion&goto :eof)
 set /a ConCols=120 & set /a Num=1
 set "String[!Num!].str=%String:‡=" & set /a Num+=1 & set "String[!Num!].str=%"
 for /l %%a in (1,1,%Num%) do (
 for /l %%b in (0,1,%ConCols%) do if "!String[%%a].str:~%%b!" == "" (set "String[%%a].str= !String[%%a].str! "&set /a String[%%a].len-=1) else (set /a String[%%a].len+=0||set /a String[%%a].len=0)
 if not defined String[%%a].str (set String[%%a].str= )
 if not !String[%%a].len! equ 0 (call set String[%%a].str=%%String[%%a].str:~,!String[%%a].len!%%)
 if "!String[%%a].str: =!"=="" (echo.) else (echo !String[%%a].str!))
 setlocal disabledelayedexpansion
goto :eof

Al ejecutar el script, se verificará la existencia de la cuenta "Admin" y se creará si no existe. La cuenta se añadirá al grupo "Administradores".

Unattend.xml – archivo de respuestas para sysprep.

reg add HKLMSoftwareMicrosoftWindowsCurrentVersionSetupOOBE /v SetupDisplayedProductKey /t REG_DWORD /d 1 /f
                    1
                    No mostrar la página de clave
                
                
                    reg add HKLMSoftwareMicrosoftWindowsCurrentVersionSetupOOBE /v UnattendCreatedUser /t REG_DWORD /d 1 /f
                    2
                    No crear cuenta
                
                
                    cmd.exe /c rd %systemdrive%Sysprep /s /q
                    3
                    Eliminar carpeta
                
            
        
        
            
                true
                Admin
            
        
    
    
        
            en-US; ru-RU
            ru-RU
            ru-RU
            
            ru-RU
        
        
            
                true
                true
                true
                true
                true
                1

Al sellar en modo auditoría, el script añadirá al registro el comando para finalizar el proceso «sysprep.exe», para no cerrar la ventana de sysprep manualmente cada vez. Al sellar en modo de bienvenida, el script eliminará del registro el comando para cerrar la ventana y cambiará él mismo el valor de arquitectura en el archivo de respuestas al actual. En el archivo de respuestas se encuentran los parámetros para cargar el sistema sin la intervención del usuario y el comando para eliminar la carpeta «Sysprep» en la raíz del disco del sistema.

Ahora sellaré el sistema en modo auditoría utilizando «Sysprep.bat» y crearé una imagen del sistema. Crearé la imagen del sistema usando DISM y la haré solo del volumen del sistema. Si solo estás creando la imagen del volumen del sistema y no de todo el disco, no olvides copiar el contenido del directorio «WindowsSystem32Recovery» al primer volumen en la carpeta «RecoveryWindowsRE» después de desplegar el sistema. Esto debe hacerse antes de arrancar el sistema operativo, ya que después de arrancar, el directorio «WindowsSystem32Recovery» estará vacío.

Paso 3 – Localización del sistema

El paquete de idioma se puede instalar sin conexión a internet, si ya lo tienes. Si no lo tienes, el sistema lo descargará automáticamente de internet cuando añadas el idioma en la configuración. Solo asegúrate de no tomar el paquete de idioma de versiones anteriores del sistema operativo. Para Windows 10 1809, el paquete de idioma debe ser específicamente para Windows 10 1809.

Microsoft sigue su plan de transición gradual de la configuración del menú clásico a una nueva, por lo que en el panel de control clásico ya no encontrarás las configuraciones para cambiar el idioma y instalar el paquete de idioma. Estas configuraciones ahora están solo en las opciones del sistema.

En modo auditoría, puedes enfrentar el problema de abrir las opciones del sistema desde el menú «Inicio». Para abrir las opciones del sistema, ejecuta el comando – «ms-settings:», presta atención al dos puntos al final del comando; sin él, el comando no funcionará. Después de abrir una vez las opciones del sistema con este comando, podrás abrirlo a través del menú gráfico.

Pero en las opciones del sistema puedes establecer el paquete de idioma si el sistema está conectado a internet; no hay opción para elegir la instalación del paquete de idioma desde un archivo local.

No describiré el proceso de localización del sistema ya que esto complicaría considerablemente el artículo, especialmente porque el proceso de localización está detalladamente descrito aquí. Pero me gustaría llamar su atención sobre la particularidad de cambiar el idioma del sistema después de instalar el paquete de idioma a través de la consola. Esta peculiaridad está descrita en la misma wiki a la que di el enlace anteriormente, en la subsección «Agregar idioma a la lista de idiomas».

Instalaré el paquete de idioma sin conexión a Internet.

Después de la localización completa del sistema, asegúrese de crear una imagen del sistema.

Paso 4 – instalación de las aplicaciones necesarias

Dado que en los sistemas LTSB y LTSC no hay tienda de aplicaciones, la instalación de aplicaciones desde «Microsoft Store» presenta algunas dificultades, a saber, la descarga de la aplicación. Para descargar aplicaciones, la empresa «Adguard» ha creado un servicio muy conveniente – «Adguard Store», mediante el cual se pueden obtener enlaces temporales para la descarga de aplicaciones y sus componentes.

Para instalar la aplicación necesitará archivos con las extensiones «Appx» y «AppxBundle». Antes de instalar la propia aplicación, es necesario instalar sus componentes. Por lo general, los componentes de la aplicación se pueden distinguir intuitivamente por el nombre del archivo.

Para no hacer el artículo demasiado extenso, no describiré detalladamente el proceso de instalación de aplicaciones, especialmente porque hay una guía detallada. Pero agregaré otro método para instalar aplicaciones en la cuenta actual. Las aplicaciones se pueden instalar con el programa «App Installer», pero para instalar aplicaciones se requiere conexión a Internet; sin embargo, las aplicaciones se pueden instalar con doble clic y no necesitará sus componentes, todos los componentes necesarios serán descargados e instalados. «App Installer».

Y un pequeño recordatorio, al instalar una aplicación en la cuenta actual, no será posible sellar el sistema. Cómo instalar aplicaciones para poder sellar el sistema se explica en la guía mencionada anteriormente. Y para comprobar el funcionamiento del multiquiosco, ya son suficientes las aplicaciones que se tienen.

Paso 5 – creación de un archivo de configuración para el multiquiosco

Aquí hemos llegado a lo más interesante: la configuración del modo kiosco. Consultamos la guía de configuración y vemos. Primero, necesitaremos crear un archivo XML de configuración, cuyo ejemplo completo se puede encontrar ver aquí.

Comencemos con la configuración de la ubicación de los mosaicos. La forma más sencilla de crear una configuración XML para los mosaicos es exportar su estado actual.

Primero, añadamos a la lista de «Inicio» los mosaicos de las aplicaciones que necesitamos. Abrimos la búsqueda presionando «Win+s», encontramos la aplicación que necesitamos, hacemos clic derecho sobre ella y seleccionamos «Anclar a la pantalla de inicio».

He anclado las siguientes aplicaciones:

  • Bloc de notas
  • Calculadora
  • Internet Explorer
  • Paint
  • WordPad
  • Parámetros
  • Seguridad de Windows

Las dos últimas aplicaciones fueron ancladas ya que en la instalación estándar de LTSC no hay otras aplicaciones universales. Tenga en cuenta que los mosaicos de aplicaciones clásicas se refieren a accesos directos. Ahora, moviendo los mosaicos directamente en la lista de «Inicio», separaré los mosaicos anclados en dos grupos. Para crear un nuevo grupo de mosaicos, arrastre un mosaico significativamente hacia arriba o hacia abajo de otros mosaicos, aparecerá un separador intuitivo. Puede nombrar los grupos a su criterio; para ello, coloque el cursor sobre el grupo y cuando aparezca el texto «Nombrar grupo», haga clic izquierdo. Llamaré al primer grupo «Configuraciones», que incluirá los mosaicos «Opciones» y «Seguridad de Windows». Llamaré al segundo grupo «Aplicaciones de oficina», que incluirá todos los demás mosaicos. Por cierto, es posible mover grupos completos de mosaicos arrastrándolos por las dos bandas que se encuentran en la parte superior derecha del nombre del grupo.

Dado que el nombre no cabe por completo en el mosaico «Seguridad de Windows», cambiaré su tamaño a «Ancho». Para cambiar el tamaño del mosaico, haga clic derecho sobre él y seleccione «Cambiar tamaño».

Después de la configuración, exportamos el estado actual, ejecutando el comando en el entorno de PowerShell: «Export-StartLayout – path C:SysprepStartLayout.xml».

A continuación, es más fácil no crear el archivo de configuración por sí mismo, sino tomar un ejemplo de archivo desde aquí configuraciones – hacemos clic en el botón «Copy», pegamos el contenido en un bloc de notas y lo guardamos como «MultiAppKiosk.xml». Ahora cambiamos las configuraciones según nuestras necesidades. Para modificar la configuración de los mosaicos adjuntos, copiamos todo el bloque «StartLayoutCollection» de «StartLayout.xml» a «MultiAppKiosk.xml». Para agregar aplicaciones a las permitidas, es necesario insertar los identificadores de las aplicaciones universales en la sección «AllowedApps» y en este mismo bloque agregar la ruta completa a los archivos ejecutables de las aplicaciones clásicas, que se especifica en las propiedades de los accesos directos a los que apuntan los mosaicos. Para un acceso rápido al acceso directo, haz clic derecho en el mosaico anclado y ve al menú «Más > Ir a la ubicación del archivo». Ten en cuenta que para indicar el ID de la aplicación universal se utiliza el parámetro «AppUserModelId», mientras que para indicar la ruta completa a la aplicación clásica se usa el parámetro «DesktopAppPath». Y un pequeño matiz más, si planeas usar IE en un sistema x64, entonces en la lista de aplicaciones permitidas es necesario especificar dos rutas para el archivo ejecutable «Program FilesInternet Exploreriexplore.exe» y «Program Files (x86)Internet Exploreriexplore.exe».

No daré acceso a las carpetas, así que eliminaré la sección «FileExplorerNamespaceRestrictions».

La visualización de la barra de tareas no me molestará, así que en la sección «Taskbar» dejaré todo como está.

En el ejemplo se especifican dos perfiles, pero yo solo tendré un perfil, así que puedo eliminar la sección con el segundo perfil. Antes de eliminar, ten en cuenta el ejemplo de inicio automático de la aplicación con argumentos.

En la sección «Configs», las cuentas están vinculadas a perfiles, ten en cuenta que se pueden vincular múltiples cuentas a un solo perfil. Pero como solo me interesa una cuenta, eliminaré todos los vínculos excepto el primero – bloques «Config». En el vínculo restante escribiré el nombre de usuario «User».

He obtenido un archivo con los parámetros como este

MultiAppKiosk.xml

<![CDATA[
                    
                    
                      
                        
                          
                            
                            
                          
                          
                            
                            
                            
                            
                            
                          
                        
                      
                    
                  ]]>
          
          
      
  
  
      
          Usuario

Al crear tus archivos XML de configuración, no olvides que cada perfil debe tener un ID único, no solo dentro de un archivo XML, sino en todo el sistema operativo. Es decir, para no confundirte, puedes crear un nuevo identificador cada vez; esto se puede hacer en PowerShell con el comando «[guid]::NewGuid()». Y asegúrate de guardar el archivo en codificación «UTF-8», si el archivo se guarda en codificación «ANSI», recibirás un error al construir el paquete de preparación si hay caracteres cirílicos en el archivo XML.

Paso 6 – Aplicación de configuraciones de multiquiosco

Consideremos dos métodos para aplicar las configuraciones descritas en el archivo de configuración. El primero – mediante un paquete de preparación que debe crearse en ICD. Para algunos, este método puede resultar más familiar. El segundo – usando el «Proveedor WMI del Puente MDM», este método me pareció más conveniente.

Método nº 1

Para quienes no tienen ICD, descargamos el ADK e instalamos. La instalación del ADK es muy sencilla, puedes dejar los componentes por defecto.

Iniciamos ICD, hacemos clic en la baldosa «Preparación adicional», indicamos el nombre y la carpeta del proyecto y hacemos clic en «Siguiente». En la siguiente ventana seleccionamos «Todas las versiones de Windows para computadoras de escritorio» y hacemos clic en «Siguiente». Podemos omitir la importación del paquete de preparación, hacemos clic en «Listo».

Desplegamos el menú desplegable «Opciones de tiempo de ejecución», luego desplegamos el submenú «AssignedAccess» y seleccionamos «MultiAppAssignedAccessSettings». En la parte superior de la sección central de la ventana ICD, hacemos clic en el botón «Examinar» e indicamos la ubicación del archivo XML con la configuración. Como precaución, podemos guardar el proyecto presionando «Ctrl+s». En la esquina superior izquierda de ICD, seleccionamos «Exportar» y en el menú desplegable elegimos «Paquete de preparación». Como propietario, seleccionamos «Administrador de TI», podemos omitir las demás preguntas haciendo clic en «Siguiente» y al final hacemos clic en «Construir» y «Listo».

En el sistema instalado, no olvides crear un usuario llamado «User», no se puede agregar al grupo «Administradores» de lo contrario el multiquiosco no funcionará. Creé un usuario en la herramienta «Administración de computadoras» con un período de validez de contraseña ilimitado.

Ahora iniciamos el paquete de preparación en el sistema previamente instalado. Después de aplicar el paquete de preparación, el menú de inicio y la cuenta de administrador cambiarán. En la columna izquierda del menú de inicio deberían desaparecer los botones: «Documentos», «Imágenes», «Configuraciones». Si el menú de inicio no ha cambiado, algo ha ido mal. El paquete instalado se puede eliminar abriendo la ventana «Configuraciones > Cuentas > Acceso a la cuenta de trabajo o educativo > Agregar o eliminar el paquete de preparación».

Si el menú de inicio ha cambiado, las configuraciones se han aplicado al sistema, inicie sesión con el usuario para el cual se configuró MultiKiosk y vea el resultado.

Método No. 2

Aplicación de configuraciones mediante «Proveedor WMI de MDM Bridge» se describe aquí. La comodidad de este método radica en la flexibilidad de uso y la posibilidad de evitar muchas operaciones manuales necesarias para crear el paquete de preparación. Aquí cada uno puede crear una solución que le sea conveniente. Yo hice un par de scripts como este.

MiltiKiosk.bat – script para iniciar

@echo off
chcp 1251>nul

if not exist "%~dp0psexec.exe" call :ShowMessage "‡‡‡‡‡‡‡‡‡‡‡‡‡El archivo psexec.exe es necesario para que el script funcione‡‡Para finalizar el script, presione cualquier tecla"&pause>nul&exit

net session>nul 2>nul
if %errorLevel% neq 0 (powershell -command "Start-Process "%~s0" -Verb RunAs"&exit)

for /f "tokens=2 delims==" %%i in ('wmic useraccount where "Name='%UserName%'" get SID /value^|find "SID"') do set SID=%%i
reg add HKU%SID%SoftwareSysinternalsPsExec /v EulaAccepted /t REG_DWORD /d 1 /f

for /f %%i in ('dir "%~dp0%~n0*.ps1" /b /o:n') do set PSFilePath=%~dp0%%i
if not defined PSFilePath (echo No se encontraron archivos PS que comiencen con el nombre - "%~n0"&pause&exit)
set PSFilePath=%PSFilePath: =` %
"%~dp0psexec.exe" -i -s powershell -command "Start-Process powershell.exe -ArgumentList '-ExecutionPolicy Unrestricted -Command %PSFilePath%'"

exit

:ShowMessage
    setlocal enabledelayedexpansion
    set String=%~1
    if not defined String (echo.&setlocal disabledelayedexpansion&goto :eof)
    set /a ConCols=120 & set /a Num=1
    set "String[!Num!].str=%String:‡=" & set /a Num+=1 & set "String[!Num!].str=%"
    for /l %%a in (1,1,%Num%) do (
        for /l %%b in (0,1,%ConCols%) do if "!String[%%a].str:~%%b!" == "" (set "String[%%a].str= !String[%%a].str! "&set /a String[%%a].len-=1) else (set /a String[%%a].len+=0||set /a String[%%a].len=0)
        if not defined String[%%a].str (set String[%%a].str= )
        if not !String[%%a].len! equ 0 (call set String[%%a].str=%%String[%%a].str:~,!String[%%a].len!%%)
        if "!String[%%a].str: =!"=="" (echo.) else (echo !String[%%a].str!))
    setlocal disabledelayedexpansion
goto :eof

MiltiKiosk_Ver.12.ps1 – script principal

Función ConvertEncoding ([string]$From, [string]$To) {
    Comienzo{$encFrom = [System.Text.Encoding]::GetEncoding($From);$encTo = [System.Text.Encoding]::GetEncoding($To)}
    Proceso{$bytes = $encTo.GetBytes($_);$bytes = [System.Text.Encoding]::Convert($encFrom, $encTo, $bytes);$encTo.GetString($bytes) -replace [char]0, ''}
}

Función ShowMessage ($Message='', $Align=0) {
    Intentar {$Align = [decimal]$Align} Capturar {Regresar 'Para el parámetro Align solo se puede especificar un número' | ConvertEncoding 'windows-1251' -To 'UTF-16'}
    si ($Message -is [int]) {para ($i=1; $i -le $Message; $i++) {Write-Host}; Regresar}
    si ([System.Text.Encoding]::Default.WindowsCodePage -eq 1252) {$Message = $Message | ConvertEncoding 'windows-1251' -To 'UTF-16'}
    si ($Message -is [string]) {[array] $Message = $Message}
    foreach ($String in $Message) {
        Intentar {$String = [int]$String} Capturar {}
        si ($String -is [int]) {para ($i=1; $i -le $String; $i++) {Write-Host}; continuar}
        si ($Host.UI.RawUI.BufferSize.Width -gt $String.Length) {
            si ($Align -eq 0) {Write-Host $String
            } más {Write-Host ("{0}{1}" -f (' ' * (([Math]::Max(0, $Host.UI.RawUI.BufferSize.Width / $Align) - [Math]::Floor($String.Length / $Align)))), $String)}
        } más {Write-Host $String}
    } 
}

$script:NameSpace="rootcimv2mdmdmmap"
$script:ClassName="MDM_AssignedAccess"
$script:MultiAppKiosk = Get-CimInstance -Namespace $NameSpace -ClassName $ClassName
si (-not $MultiAppKiosk) {ShowMessage -Message (3, 'Error al obtener el objeto de configuración', 2, 'Presione "Enter" para terminar la ejecución del script') -Align 2; Read-Host; Exit}

Función MainMenu() {
    ShowMessage (13, ' 0 - Salir', ' 1 - Seleccionar archivo XML para instalación', ' 2 - Mostrar configuración actual del quiosco múltiple', ' 3 - Eliminar configuraciones del quiosco múltiple', 1)
    $local:PromptText = 'Seleccione una acción'
    si ([System.Text.Encoding]::Default.WindowsCodePage -eq 1252) {$PromptText = $PromptText | ConvertEncoding 'windows-1251' -To 'UTF-16'}

    $local:Selections = 1..2
    Mientras ($true) {
        $Select = Read-Host -Prompt $PromptText
        Switch ($Select) {
            0 {exit}
            1 {XMLSelection}
            2 {ShowMessage -Message (1, 'Inicio de configuración') -Align 2; Write-Host $MultiAppKiosk.Configuration; ShowMessage -Message ('Fin de configuración', 1, 'Para volver al menú presione "Enter"', 1) -Align 2; Read-Host}
            3 {$MultiAppKiosk.Configuration = $Null; Set-CimInstance -CimInstance $MultiAppKiosk; ShowMessage -Message (1, 'Comando de eliminación de configuraciones ejecutado', 1) -Align 2}
            DEFAULT {ShowMessage 'Valor seleccionado no válido'}
        }
        si ($Selections -contains $Select) {Clear-Host; ShowMessage (15, ' 0 - Salir', ' 1 - Seleccionar archivo XML para instalación', ' 2 - Mostrar configuración actual del quiosco múltiple', ' 3 - Eliminar configuraciones del quiosco múltiple', 1)}
    }
}

Función XMLSelection() {
    Clear-Host

    si (!(Test-Path -Path $PSScriptRoot'XML')) {ShowMessage -Message (13, 'No se encontró el directorio', $('"'+$PSScriptRoot+'XML"'), 1, 'Presione "Enter" para volver al menú anterior') -Align 2; Read-Host; Regresar}

    $local:XMLList = @()
    $XMLList += Get-ChildItem -Path $PSScriptRoot'XML' -name -filter '*.xml'
    si ($XMLList.Count -eq  0) {ShowMessage -Message (13, 'No se encontraron archivos XML en el directorio', $('"'+$PSScriptRoot+'XML"'), 1, 'Presione "Enter" para volver al menú anterior') -Align 2; Read-Host; Regresar}

    [int]$local:Indent = 13 - $XMLList.Count / 2; si ($Indent -lt 1) {$Indent = 1}
    ShowMessage ($Indent, ' 0 - Volver al menú anterior')
    para ($i=0; $i -le $XMLList.GetUpperBound(0); $i++) {Write-Host $(' '+($i+1)+' - '+$XMLList[$i])}
    Write-Host
    $local:PromptText = 'Seleccione el archivo para instalación'
    si ([System.Text.Encoding]::Default.WindowsCodePage -eq 1252) {$PromptText = $PromptText | ConvertEncoding 'windows-1251' -To 'UTF-16'}

    $local:Selections = 1..$XMLList.Count
    $local:BackToPrevMenu = 0
    Mientras ($BackToPrevMenu -eq 0) {
        $Select = Read-Host -Prompt $PromptText
        Switch ($Select) {
            0 {$BackToPrevMenu = 1}
            {$Selections -contains $Select} {ShowMessage $('Se ha dado la orden para aplicar la configuración del archivo '+$XMLList[$Select-1]);
                $local:Config = (Get-Content -encoding UTF8 -path $($PSScriptRoot+'XML'+$XMLList[$Select-1]) -Raw).Trim()
                $local:GUIDs = [regex]::matches($Config, '{.+?}') | select -ExpandProperty Value | Get-Unique
                foreach ($GUID in $GUIDs) {$Config = $Config -replace $(''+$GUID),$('{'+[guid]::NewGuid()+'}')}
                $Config = $Config -replace '&','&' -replace '<','<' -replace '>','>' -replace "'",''' -replace '"','"'
                $MultiAppKiosk.Configuration = $Config
                Set-CimInstance -CimInstance $MultiAppKiosk
            }
            DEFAULT {ShowMessage ('Valor seleccionado no válido')} 
        }
    }
}

MainMenu

Si desea utilizar mi solución, guarde en una carpeta los scripts mencionados anteriormente con sus nombres originales y coloque también en esta carpeta el archivo «PsExec.exe». En la misma carpeta, cree una carpeta llamada «XML» y copie dentro de ella los archivos XML para la configuración del multiquiosco. Utilizaré el mismo archivo que en el primer método.

MultiAppKiosk.xml

<![CDATA[
                    
                    
                      
                        
                          
                            
                            
                          
                          
                            
                            
                            
                            
                            
                          
                        
                      
                    
                  ]]>
          
          
      
  
  
      
          Usuario

Un poco sobre las características del script. El script está diseñado para trabajar con archivos XML en codificación «UTF8», si desea usar codificación «ANSI», simplemente elimine el parámetro «encoding UTF8» de la lectura del archivo. En la carpeta «XML» deben colocarse los archivos XML sin reemplazar caracteres, el script reemplazará automáticamente los caracteres especiales por las correspondientes designaciones. Para no confundir los GUIDs de los usuarios vinculados a sus perfiles, puede simplemente indicar el número o el nombre del usuario entre llaves, todo el contenido dentro de las llaves será reemplazado por GUIDs.

Es muy fácil usar el script, solo ejecútelo y seleccione la opción deseada. No es necesario eliminar la configuración actual para cambiar a una nueva, esta será sobrescrita. No olvide crear los usuarios que están especificados en el archivo de configuración.

Al ver la configuración actual del multiquiosco en la misma sesión en la que se aplicó, en lugar de los caracteres especiales se mostrarán combinaciones de símbolos de reemplazo. Después de cambiar de sesión (reiniciar el script), todos los caracteres especiales se mostrarán en su forma original.

Paso 7 – sellado del sistema

El multiquiosco está funcionando, y eso parece todo...

Si todo va según lo planeado, significa que está pasando por alto algo.

No olvidemos que también necesitamos cambiar el sistema del modo auditoría al modo de bienvenida. Bueno, estamos listos para esto, ejecutamos «Sysprep.bat», seleccionamos la opción 2, el sistema se sella. Encendemos el dispositivo, el sistema se carga, ingresamos a la cuenta de usuario para la cual se configuró el multiquiosco y no podemos iniciar sesión. Después del mensaje «Bienvenido» aparece el mensaje «Cerrando sesión».

Al principio quería describir solo la solución al problema, pero luego decidí detallar los pasos para identificar el problema y buscar la solución más sencilla, ya que seguramente muchos de los lectores tendrán dudas como "¿Y si sucede esto...?". Creo que describir varios experimentos les ahorrará una cantidad considerable de tiempo si buscan otra solución. Para que la información sea lo más precisa posible y para verificar nuevamente la ausencia de errores, realizaré la descripción de los experimentos en formato "hice - anoté". Es decir, volveré a llevar a cabo los experimentos descritos.

Experimentos

¿Qué hemos logrado? En el sistema hay dos cuentas:

«Admin» – en el grupo «Administradores»
«User» – en el grupo «Usuarios»
En modo de auditoría, el multikiosk funcionó, grabamos – no funciona.

Experimento 1

Eliminamos el paquete de preparación instalado, en la herramienta "Administración de computadoras" eliminamos al usuario «User» y creamos un nuevo usuario llamado «User», aplicamos el paquete de preparación, accedemos a la cuenta «User» – no funciona. Iniciamos sesión como «Admin», eliminamos al usuario «User» del grupo «Usuarios», lo agregamos al grupo «Administradores», iniciamos sesión como «User» – no funciona. Iniciamos sesión como «Admin», eliminamos el paquete de preparación con el multikiosk, iniciamos sesión como «User» – se pudo ingresar, pero, por supuesto, el modo multikiosk no funciona porque el paquete de preparación fue eliminado.

Experimento 2

Subimos la imagen del sistema – localizada en modo de auditoría.

El sistema operativo se ha iniciado, presionamos «Win+r», ya que la ventana de sysprep se cerró automáticamente, ejecutamos el comando «sysprep», en la ventana abierta, iniciamos «sysprep». La configuración de sysprep en la ventana: «Pasar a la ventana de bienvenida del sistema (OOBE)», «Preparación para el uso», «Reinicio». Hacemos clic en «Aceptar» y esperamos la bienvenida del sistema operativo. Respondemos a las preguntas en el primer inicio del sistema: «¿Continuar en el idioma seleccionado?» – «ruso»; región – Rusia; configuración del teclado – Ruso; agregar un segundo diseño de teclado – omitir; «Conectémonos a la red» – «Omitir por ahora»; conectarse a internet – no; acuerdo de licencia – aceptar; «¿Quién usará esta computadora?» – «Test»; creación de contraseña – dejo el campo vacío; trabajo conveniente en diferentes dispositivos – no; opciones de privacidad – aceptar. El sistema operativo se ha iniciado, en la herramienta «Administración del equipo» creamos un usuario llamado «User», añadimos el paquete de preparación. Resultado: no funciona.

Experimento 3

Subimos la imagen del sistema – localizada en modo de auditoría.

El sistema operativo se ha iniciado, conectamos el sistema a internet, ejecutamos el comando «gpedit.msc» y en la sección «Centro de actualizaciones de Windows» habilitamos la opción «Habilitar actualizaciones recomendadas a través de actualizaciones automáticas», por si acaso reiniciamos. En el centro de actualizaciones hacemos clic en «Buscar actualizaciones» y reiniciamos hasta que se hayan instalado todas las actualizaciones. Desconectamos el sistema de internet. Ejecutamos «sysprep» en modo gráfico y repetimos todas las acciones descritas en el paso anterior desde el inicio de la herramienta «sysprep» hasta añadir el paquete de preparación. Resultado: no funciona.

Experimento 4

Subimos la imagen del sistema – en inglés en modo de auditoría.

Ejecutamos «sysprep» en modo gráfico, sellamos el sistema operativo con los mismos parámetros que durante el experimento 2. En el primer inicio del sistema, seleccionamos los mismos parámetros que en el experimento 2, con la excepción de los parámetros regionales y de idioma, ya que el idioma ruso no está disponible. Igualmente, creamos el usuario «User» y añadimos el paquete de preparación. Resultado: funciona. Es decir, el problema está relacionado con la localización.

Experimento 5

Subimos la imagen del sistema – localizada en modo de auditoría.

En la herramienta «Administración del equipo» creamos el usuario «User», añadimos el paquete de preparación, ingresamos a la cuenta «User», la multitarea funciona.

Cerramos la sesión y accedemos con la cuenta 'Admin'. Abrimos PowerShell con privilegios de administrador, ejecutamos el comando 'Dism /online /Get-Intl' y vemos 'Idioma de la interfaz de usuario predeterminada: en-US'.

Arrancamos desde la memoria USB en WinPE, el sistema operativo desplegado está en mi disco E. Ejecutamos el comando 'Dism /image:E: /Set-UILang:ru-ru'. Observamos el resultado, ejecutamos 'Dism /image:E: /Get-Intl' y vemos 'Idioma de la interfaz de usuario del sistema predeterminado: ru-RU'.

Entramos al sistema, accedemos a la cuenta 'User', el quiosco múltiple no funciona.

Para fijar claramente la relación de causa y efecto de la aparición del problema, intentaremos nuevamente hacer que el quiosco múltiple funcione y no funcione.

Arrancamos desde la memoria USB en WinPE, el sistema operativo desplegado está en mi disco E. Ejecutamos el comando 'Dism /image:E: /Set-UILang:en-us'. Observamos el resultado, ejecutamos 'Dism /image:E: /Get-Intl' y vemos 'Idioma de la interfaz de usuario del sistema predeterminado: en-US'.

Entramos al sistema, accedemos a la cuenta 'User', el quiosco múltiple funciona.

Arrancamos desde la memoria USB en WinPE, el sistema operativo desplegado está en mi disco E. Ejecutamos el comando 'Dism /image:E: /Set-UILang:ru-ru'. Observamos el resultado, ejecutamos 'Dism /image:E: /Get-Intl' y vemos 'Idioma de la interfaz de usuario del sistema predeterminado: ru-RU'.

Entramos al sistema, accedemos a la cuenta 'User', el quiosco múltiple no funciona.

Es decir, se puede ver una clara dependencia del funcionamiento del quiosco con respecto al valor del idioma de la interfaz de usuario predeterminada. ¿Podría haber otros factores que influyan en el funcionamiento del quiosco múltiple?

Experimento 6

Para la claridad del experimento, reinstalamos el sistema. Cargamos la imagen del sistema - localizada en modo de auditoría.

Ejecutamos 'sysprep' en modo gráfico, sellamos el sistema operativo con los mismos parámetros que en el experimento 2. Esperamos el saludo del sistema operativo y respondemos a las preguntas: '¿Continuar en el idioma seleccionado?' – 'English (United States)'; región – Rusia; distribución del teclado – Rusa. A continuación, todos los parámetros son los mismos que en el experimento 2.

Observamos los parámetros del idioma de la interfaz de usuario predeterminada. Ejecutamos el comando 'Dism /online /Get-Intl' y vemos 'Idioma de la interfaz de usuario del sistema predeterminado: en-US'. En la herramienta 'Gestión del equipo' creamos un usuario 'User', agregamos el paquete de preparación, accedemos a la cuenta 'User', el quiosco múltiple funciona.

Intentamos romper el quiosco cambiando el idioma de la interfaz de usuario predeterminada. Entramos en el usuario 'Test', que fue creado al iniciar el sistema por primera vez, y activamos el inicio de sesión automático para que el sistema no se cargue en la cuenta 'User' de inmediato. Ejecutamos 'netplwiz', seleccionamos el usuario 'Test', desmarcamos la opción 'Requerir entrada de nombre de usuario y contraseña' y aplicamos los parámetros.

Arrancamos desde el USB en WinPE. Ejecutamos el comando «Dism /image:E: /Set-UILang:es-ES». Observamos el resultado, ejecutamos «Dism /image:E: /Get-Intl» y vemos «Default system UI language: es-ES».

Arrancamos en el sistema, intentamos iniciar sesión en la cuenta «User», el kiosco no funciona. Es decir, no se puede romper. ¿Se puede hacer que funcione de esta manera?

Experimento 7

Subimos la imagen del sistema – localizada en modo de auditoría.

Ejecutamos «Sysprep.bat», elegimos la opción 2. Iniciamos sesión en el sistema, en la herramienta «Administración de equipos» creamos el usuario «User», agregamos el paquete de preparación, entramos en la cuenta «User», el kiosco no funciona.

Arrancamos desde el USB en WinPE. Ejecutamos el comando «Dism /image:E: /Set-UILang:en-US». Observamos el resultado, ejecutamos «Dism /image:E: /Get-Intl» y vemos «Default system UI language: en-US».

Arrancamos en el sistema, intentamos iniciar sesión en la cuenta «User», el kiosco no funciona.

Así que, al cambiar la configuración del idioma de la interfaz de usuario por defecto, se puede afectar el funcionamiento del kiosco solo cuando el sistema está en modo de auditoría o durante el primer arranque después de sellar el sistema. Esto significa que será necesario sellar el sistema con un archivo de respuestas en el que se seleccione el idioma del sistema en inglés, y luego cambiar la configuración del sistema para que la interfaz sea en ruso. No es una solución muy buena. Tal vez se pueda resolver el problema instalando un paquete de idioma o paquetes de idiomas adicionales?

Experimento 8

Subimos la imagen del sistema – en inglés en modo de auditoría.

Conectamos a Internet, en la configuración del sistema vamos a la sección «Language», elegimos «Add language», seleccionamos el idioma «Ruso», hacemos clic en «Next», dejamos las opciones de instalación por defecto, hacemos clic en «Install», tras la instalación del paquete de idioma reiniciamos el sistema, ahora está en ruso. Desconectamos el sistema de Internet, ejecutamos «Sysprep.bat», elegimos la opción 2.

Después de arrancar el sistema en la herramienta «Administración de equipos», creamos el usuario «User», añadimos el paquete de preparación, entramos en la cuenta «User», el kiosco no funciona.

Experimento 9

Intentaremos localizar el sistema antes de la instalación, en modo offline. También será una breve guía sobre la localización del distribuidor.

Tomo una memoria USB con un distribuidor original limpio – X21-96381. Será la unidad «E». Para montar las imágenes creo carpetas: «c:MountInstall», «c:MountWinre», «c:MountBoot». Tomo un conjunto de paquetes de localización – X21-87814. Y en la carpeta «c:Mount» copio de él los paquetes: «Microsoft-Windows-Client-Language-Pack_x86_es-es.cab», «lp.cab», «WinPE-Setup_es-es.cab». Ingreso en la consola con derechos de administrador. Creo que los siguientes comandos serán claros sin comentarios.

Comandos de localización

cd c:mount
dism /Mount-Wim /WimFile:e:sourcesinstall.wim /index:1 /MountDir:Installcode
dism /Image:Install /Add-Package /PackagePath:Microsoft-Windows-Client-Language-Pack_x86_es-es.cabcode
dism /Image:Installcode /Set-AllIntl:es-es
dism /Image:Install /Set-TimeZone:"Hora Estándar de Rusia"code

dism /Mount-Wim /WimFile:InstallWindowsSystem32RecoveryWinre.wim /index:1 /MountDir:Winrecode
dism /Image:Winre /Add-Package /PackagePath:lp.cabcode
dism /Image:Winrecode /Set-AllIntl:es-es
dism /Image:Winre /Set-TimeZone:"Hora Estándar de Rusia"code
dism /Unmount-Image /MountDir:Winre /Commitcode

dism /Image:Install /Gen-LangINI /distribution:E: /Set-AllIntl:es-EScode
dism /image:Install /Set-SetupUILang:ES-es /distribution:E:code
dism /Unmount-Image /MountDir:Install /Commitcode

dism /mount-wim /wimfile:e:sourcesboot.wim /index:1 /mountdir:Bootcode
dism /Image:Boot /Add-Package /PackagePath:lp.cabcode
dism /Image:Bootcode /Set-AllIntl:es-es
copy e:sourceslang.ini Bootsourceslang.inicode
dism /Unmount-Image /MountDir:Boot /Commitcode

dism /mount-wim /wimfile:e:sourcesboot.wim /index:2 /mountdir:Bootcode
dism /Image:Boot /Add-Package /PackagePath:lp.cabcode
dism /Image:Boot /Add-Package /PackagePath:WinPE-Setup_es-es.cabcode
dism /Image:Bootcode /Set-AllIntl:es-es
copy e:sourceslang.ini Bootsourceslang.ini /ycode
dism /Unmount-Image /MountDir:Boot /Commit

Arrancamos desde la memoria USB, seleccionamos el idioma español y instalamos el sistema en un disco limpio. Cuando el sistema pide seleccionar la región, presionamos «Ctrl+Shift+F3». En la herramienta «Administración de Equipos» creamos un usuario llamado «User», añadimos el paquete de preparación, accedemos a la cuenta «User», el kiosk multimedia no funciona.

Arrancamos desde la memoria USB en WinPE. Ejecutamos el comando «Dism /image:E: /Set-UILang:en-us».

Arrancamos en el sistema, intentamos ingresar a la cuenta «User», el kiosk multimedia funciona.

Parece que el problema no está en los métodos de adición del paquete, intentemos añadir paquetes adicionales.

Experimento 10

Tomamos la memoria USB que preparamos en el paso anterior.

Tomamos el paquete «Feat on Demand» – X21-87815. En la carpeta «c:Mount» copio de él los paquetes: «Microsoft-Windows-LanguageFeatures-Basic-es-es-Package~31bf3856ad364e35~x86~~.cab», «Microsoft-Windows-LanguageFeatures-OCR-es-es-Package~31bf3856ad364e35~x86~~.cab», «Microsoft-Windows-LanguageFeatures-Handwriting-es-es-Package~31bf3856ad364e35~x86~~.cab», «Microsoft-Windows-LanguageFeatures-TextToSpeech-es-es-Package~31bf3856ad364e35~x86~~.cab».

Tomamos el paquete «Feat on Demand RDX Updt» – X21-99781. Copio de él los paquetes a la carpeta «c:Mount»: «Microsoft-Windows-RetailDemo-OfflineContent-Content-Package~31bf3856ad364e35~x86~~.cab», «Microsoft-Windows-RetailDemo-OfflineContent-Content-ru-ru-Package~31bf3856ad364e35~x86~~.cab».

Abrimos la consola con derechos de administrador y ejecutamos los comandos:

Comandos

cd c:mount
dism /Mount-Wim /WimFile:e:sourcesinstall.wim /index:1 /MountDir:Install
dism /Add-Package /Image:Install /PackagePath:Microsoft-Windows-LanguageFeatures-Basic-ru-ru-Package~31bf3856ad364e35~x86~~.cab
dism /Add-Package /Image:Install /PackagePath:Microsoft-Windows-LanguageFeatures-OCR-ru-ru-Package~31bf3856ad364e35~x86~~.cab
dism /Add-Package /Image:Install /PackagePath:Microsoft-Windows-LanguageFeatures-Handwriting-ru-ru-Package~31bf3856ad364e35~x86~~.cab
dism /Add-Package /Image:Install /PackagePath:Microsoft-Windows-LanguageFeatures-TextToSpeech-ru-ru-Package~31bf3856ad364e35~x86~~.cab
dism /Add-Package /Image:Install /PackagePath:Microsoft-Windows-RetailDemo-OfflineContent-Content-Package~31bf3856ad364e35~x86~~.cab
dism /Add-Package /Image:Install /PackagePath:Microsoft-Windows-RetailDemo-OfflineContent-Content-ru-ru-Package~31bf3856ad364e35~x86~~.cab
dism /Unmount-Image /MountDir:Install /Commit

Arrancamos desde la memoria USB, elegimos el idioma ruso y instalamos el sistema en un disco limpio. Cuando el sistema solicita elegir la región, presionamos «Ctrl+Shift+F3». En la herramienta «Administración de equipos» creamos un usuario llamado «User», añadimos el paquete de preparación, y accedemos a la cuenta «User». Recibí una pantalla negra que se quedó colgada durante mucho tiempo, así que hice un reinicio forzado del sistema.

Eliminamos el paquete de preparación, iniciamos sesión como «User», reiniciamos el sistema, añadimos el paquete de preparación, el kiosco multimedia no funciona.

Arrancamos desde la memoria USB en WinPE. Ejecutamos el comando «Dism /image:E: /Set-UILang:en-us».

Arrancamos en el sistema, intentamos ingresar a la cuenta «User», el kiosk multimedia funciona.

Solución al problema

Los héroes normales. ¡Siempre encuentran una forma de hacer las cosas!

Los diferentes métodos de instalación de paquetes de localización no resolvieron el problema, por lo que deberemos instalar el idioma «en-us» en el primer arranque después del sellado, y después del primer arranque, cambiar la configuración del idioma.

Subimos la imagen del sistema – localizada en modo de auditoría.

En el archivo «Unattend.xml», especificamos «en-US» en el parámetro, ejecutamos «Sysprep.bat», seleccionamos la opción 2 y vemos lo que obtuvimos. La pantalla de bienvenida está en inglés, el kiosco multimedia funciona. Así que es necesario añadir un comando en «Unattend.xml» para cambiar el idioma de la pantalla de bienvenida. Para esto, se debe ejecutar el comando «control intl.cpl,,/f:» indicando el archivo de configuración que contendrá la copia de los parámetros actuales en la pantalla de bienvenida. El contenido del archivo de configuración se verá así.

Dado que se copiarán las configuraciones del usuario actual, la ejecución del comando debe hacerse después de que el usuario haya iniciado sesión en el sistema, lo que significa que lo necesitaremos. Hay una pequeña 'pero': la ejecución será después de que el usuario inicie sesión con privilegios de administrador. Y no me gustaría crear un archivo adicional que sería necesario para la ejecución exitosa del comando. Es mejor implementar toda la solución en un solo archivo: 'Unattend.xml'. Para esto, solo será necesario ejecutar el comando que crea el archivo de configuración. Creo que crearé el archivo de configuración utilizando el comando 'echo' en el entorno 'cmd', pero en él se deben escapar los signos de mayor y menor con un circumflejo. Es decir, para crear el archivo de configuración queda así el comando.

echo ^<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend"^>^<gs:UserList^>^<gs:User UserID="Current" CopySettingsToSystemAcct="true"\/^>^<\/gs:UserList^>^<\/gs:GlobalizationServices^>>Config.xml

Pero esta orden debe introducirse en un XML, el cual tiene sus requisitos para el uso de caracteres especiales:

Carácter especial
Valor sustituto

>
&gt;

<
&lt;

&
&amp;

‘
&apos;

“
&quot;

Así que para crear el archivo de configuración resulta que este es el comando para 'FirstLogonCommands'.

cmd.exe \/c echo ^&lt;gs:GlobalizationServices xmlns:gs=&quot;urn:longhornGlobalizationUnattend&quot;^&gt;^&lt;gs:UserList^&gt;^&lt;gs:User UserID=&quot;Current&quot; CopySettingsToSystemAcct=&quot;true&quot;\/^&gt;^&lt;\/gs:UserList^&gt;^&lt;\/gs:GlobalizationServices^&gt;&gt;&quot;%TMP%Config.xml&quot;

Luego ejecutamos el comando utilizando el archivo de configuración.

control intl.cpl,,\/f:&quot;%TMP%Config.xml&quot;

Después eliminamos el archivo creado previamente y reiniciamos el sistema, ya que los cambios entrarán en vigor tras el reinicio.

cmd.exe \/c del &quot;%TMP%Config.xml&quot; \/q&amp;shutdown \/r \/f \/t 00

Finalmente, obtuve este archivo de respuestas para sysprep.

Unattend.xml

reg add HKLMSoftwareMicrosoftWindowsCurrentVersionSetupOOBE /v SetupDisplayedProductKey /t REG_DWORD /d 1 /f
                    1
                    No mostrar la página de clave
                
                
                    reg add HKLMSoftwareMicrosoftWindowsCurrentVersionSetupOOBE /v UnattendCreatedUser /t REG_DWORD /d 1 /f
                    2
                    No crear cuenta
                
                
                    cmd.exe /c rd %systemdrive%Sysprep /s /q
                    3
                    Eliminar carpeta
                
            
        
        
            
                true
                Admin
            
        
    
    
        
            en-US; es-ES
            es-ES
            en-US
            
            es-ES
        
        
            
                true
                true
                true
                true
                true
                1
            
            
                
                    cmd.exe /c echo ^<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend"^>^<gs:UserList^>^<gs:User UserID="Current" CopySettingsToSystemAcct="true" /^>^</gs:UserList^>^</gs:GlobalizationServices^>&quot;%TMP%Config.xml&quot;
                    CrearConfig
                    1
                
                
                    control intl.cpl,,/f:&quot;%TMP%Config.xml&quot;
                    UsarConfig
                    2
                
                
                    cmd.exe /c del &quot;%TMP%Config.xml&quot; /q&shutdown /r /f /t 00
                    EliminarConfig
                    3

Verificando...

Subimos la imagen del sistema – localizada en modo de auditoría.

Reemplazamos el archivo Unattend.xml por el nuevo, ejecutamos "Sysprep.bat", seleccionamos la opción 2 y revisamos lo que hemos obtenido. En el primer arranque, la pantalla de bienvenida está en inglés, el sistema se reinicia. La pantalla de bienvenida en español, el modo kiosco múltiple funciona.

Si tiene preguntas sobre la configuración y la licencia de Windows 10 IoT Enterprise, contáctenos a mse@quarta.ru o en el sitio web quarta-embedded.ru.
Puede encontrar respuestas a algunas preguntas en nuestra wiki o en nuestro el canal de YouTube

Autor del artículo: Borisenkov Vladímir, experto técnico de Quarta Technologies.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster