Windows 10 IoT Enterprise 2019: modo multiquiosco

introducción

Windows 10 IoT Empresa 2019 es el nombre comercial de la próxima versión de Windows 10. El lanzamiento de esta versión se anunció en septiembre de 2018, respectivamente, tiene la versión 1809, 18 es el año, 09 es el mes. Se han escrito muchos artículos sobre la nueva versión de Windows 10 1809, pero la mayoría de ellos están dedicados a varios "arcos", "bellezas" y diversas funciones que se demandan en el hogar.
Este artículo solo analizará las funciones que pueden tener demanda entre los fabricantes de dispositivos de uso fijo. Es decir, sobre las nuevas capacidades del modo "Kiosco". También se abordará el tema del cambio de nombres de los esquemas de servicios para las ediciones de Windows del segmento empresarial.

Antiguo esquema de servicio con nuevo nombre.

Empezaré con una breve explicación: en el segmento corporativo de las ediciones de Windows existen dos esquemas de servicios según los cuales Windows recibe actualizaciones. Los diagramas de servicio tienen una designación de letras. Actualmente las sucursales de servicios se denominan LTSC y SAC.

LTSC significa Canal de servicio a largo plazo (con mantenimiento a largo plazo). Anteriormente, dicho canal se llamaba LTSB - Long Term Servicing Branch... Microsoft simplemente cambió el nombre del canal de servicio, el servicio en sí siguió siendo el mismo.

Microsoft también cambió el nombre de la rama de servicio CBB - Current Branch for Business, ahora esta rama de servicio se llama SAC - Canal semestral. Nuevamente, sólo ha cambiado el nombre.

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

Un poco sobre la nueva modalidad quiosco en SAC

Como ya dije, LTSC y SAC tienen distribuciones diferentes. LTSC no tiene aplicaciones universales estándar ni una tienda de aplicaciones, pero SAC sí. En consecuencia, LTSC no tiene un navegador Edge, pero SAC sí. Si selecciona el navegador Edge al configurar un quiosco, ahora hay dos modos disponibles:

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

No me detendré en configurar estos modos, porque... La configuración es muy sencilla y se realiza en una interfaz gráfica. Simplemente cree un usuario que no sea miembro del grupo de Administradores, habilite el modo quiosco usando EDGE y vea cómo funcionan estos modos.

Kiosco con muchas aplicaciones.

Algunas personas piensan que el uso con licencia Windows 10 IoT Enterprise implica el funcionamiento de una sola aplicación en el dispositivo, de hecho este no es el caso. El dispositivo debe estar diseñado para realizar una única tarea empresarial y el usuario no debe tener acceso a un escritorio. Ahora la propia Microsoft ha dado la herramienta para utilizar muchas aplicaciones. Este modo se llama “quiosco multiaplicación”; de aquí en adelante, por brevedad, lo llamaré “multiquiosco”. En este artículo veremos cómo configurar este modo usando el paquete de software y algunas de las características de este modo.

Un poco sobre el modo Multikiosco

Cuando inicia sesión en una cuenta de usuario para la cual está configurado el modo multiquiosco, el sistema funcionará en modo tableta. El menú Inicio se expandirá a pantalla completa y mostrará mosaicos de aplicaciones.

Lista de configuraciones básicas y capacidades de modo:

  1. Configuración para múltiples usuarios o grupos
  2. A cada usuario o grupo se le pueden asignar configuraciones individuales
  3. Posibilidad de utilizar aplicaciones universales y clásicas.
  4. La capacidad de iniciar automáticamente una de las aplicaciones cuando el usuario inicia sesión
  5. Aplicaciones en la lista blanca
  6. Acceder a carpetas usando una lista blanca

Vale la pena prestar atención al punto 5. De forma predeterminada, solo se permitirán funcionar aquellas aplicaciones que sean necesarias para el funcionamiento del sistema, otras aplicaciones deben agregarse a la lista de permitidas. Aquellos. Ahora no es necesario configurar AppLocker por separado. Por cierto, para evitar conflictos con la configuración de AppLocker, en el modo multiquiosco, no se aplicarán todas las reglas configuradas de AppLocker.

El punto 6 indica una buena opción, pero por el momento sólo es posible dar permiso de escritura a la carpeta “Descargas”. El modo le permite utilizar aplicaciones universales y clásicas. Todas las configuraciones de modo se especifican en un archivo XML, en el que también puede especificar configuraciones para un único quiosco de aplicaciones.

Ahora intentemos configurarlo todo...

Qué necesitamos...

  1. En primer lugar, necesitamos el propio sistema que admita el modo multikiosco. Aquí puedes descargar Versión de demostración
  2. Instrucciones para configurar un multikiosco
  3. Cualquier editor XML
  4. Para aplicar la configuración multikiosco:
    1. Para el método número 1: ICD, que forma parte del ADK. ADK es posible скачать здесь
    2. Para el método número 2: la utilidad PsExec. La utilidad puede ser скачать здесь

Él dijo: "¡Vamos!"

Realizaré todos los experimentos en la versión comercial de Windows 10 IoT Enterprise 1809 LTSC x32, no en una versión de demostración. El sistema no se activará porque La falta de activación no afecta la funcionalidad del sistema. Tomé 32 bits solo porque ocupa menos espacio y será más rápido trabajar con imágenes del sistema.

Paso 1 – instalación

Instalar Win 10 IoT Enterprise no es diferente de instalar Win 10 Enterprise, por lo que no describiré todo el proceso de instalación, solo hablaré de algunos de los matices.

Por si acaso, déjame recordarte que no instales el sistema encima del instalado. Cuando el instalador le pregunte sobre la ubicación de instalación del sistema, elimine todas las particiones en el disco del sistema futuro y especifique un disco sin particiones.

Instalamos el sistema sin conexión a Internet para que el sistema no extraiga nada innecesario.

Porque Crearemos imágenes de respaldo del sistema y para ello lo sellaremos en modo auditoría, luego puedes ahorrar algo de tiempo cargando el sistema en modo auditoría inmediatamente después de la instalación. Para hacer esto, cuando el sistema le solicite que seleccione una región, “Comencemos con la región. ¿Es esto correcto? Simplemente presione "Ctrl+Shift+F3".

Paso 2: crea una imagen del sistema

Porque Nos burlaremos del sistema y probaremos varias configuraciones nuevas, es posible que algo salga mal y necesitemos devolver el sistema a su estado original. Y para volver rápidamente a su estado original, debe crear una imagen del sistema. Lo único que haré es copiar el "kit de caballero": el guión y el archivo de respuestas. Todos mis archivos se encuentran en la carpeta "Sysprep", que copio en la raíz del disco del sistema. Y por supuesto, compartiré este “set de caballero” contigo.

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 %AdminName%>nul 2>nul
if %errorLevel% neq 0 (call :AddAdmin "%AdminName%")
if %errorLevel% neq 0 (call :ShowMessage "‡‡‡Ошибка создания новой учетной записи администратора "%AdminName%"‡‡Нажмите любую клавишу для завершения работы скрипта"&pause>nul&exit)

pushd "%~dp0"

cls
call :ShowMessage ‡‡‡‡‡‡‡‡‡‡
echo  1 - Запечатать систему в режиме аудита
echo  2 - Запечатать систему в режиме приветствия
:Select
set /p Choice="Введите номер пункта меню: "
if "%Choice%"=="1" (goto Audit)
if "%Choice%"=="2" (goto OOBE)
echo.&echo Выбрано недопустимое значение.&goto Select

exit

:Audit
    call :ShowMessage "‡‡‡‡‡Запечатывание системы в режиме аудита"
    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 "‡‡‡‡‡Запечатывание системы в режиме приветствия"
    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 Не указано имя пользователя&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 %AdminGroup% %UserName% /add
    net localgroup %UserGroup% %UserName% /delete
    endlocal&exit /b 0
goto :eof

:GetGroupName
    if "%~1"=="" (echo Не указан SID группы&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 Ошибка определения имени группы по 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

Cuando se inicie, el script comprobará la presencia de la cuenta "Admin" y creará una si falta. La cuenta se agregará al grupo de Administradores.

Unattend.xml: archivo de respuesta para sysprep.

<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <settings pass="specialize">
        <component name="Microsoft-Windows-Deployment" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <RunSynchronous>
                <RunSynchronousCommand wcm:action="add">
                    <Path>reg add HKLMSoftwareMicrosoftWindowsCurrentVersionSetupOOBE /v SetupDisplayedProductKey /t REG_DWORD /d 1 /f</Path>
                    <Order>1</Order>
                    <Description>Dont show key page</Description>
                </RunSynchronousCommand>
                <RunSynchronousCommand wcm:action="add">
                    <Path>reg add HKLMSoftwareMicrosoftWindowsCurrentVersionSetupOOBE /v UnattendCreatedUser /t REG_DWORD /d 1 /f</Path>
                    <Order>2</Order>
                    <Description>Dont make account</Description>
                </RunSynchronousCommand>
                <RunSynchronousCommand wcm:action="add">
                    <Path>cmd.exe /c rd %systemdrive%Sysprep /s /q</Path>
                    <Order>3</Order>
                    <Description>Del Folder</Description>
                </RunSynchronousCommand>
            </RunSynchronous>
        </component>
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" 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>
                <Enabled>true</Enabled>
                <Username>Admin</Username>
            </AutoLogon>
        </component>
    </settings>
    <settings pass="oobeSystem">
        <component name="Microsoft-Windows-International-Core" processorArchitecture="x86" 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>en-US; ru-RU</InputLocale>
            <SystemLocale>ru-RU</SystemLocale>
            <UILanguage>ru-RU</UILanguage>
            <UILanguageFallback></UILanguageFallback>
            <UserLocale>ru-RU</UserLocale>
        </component>
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <OOBE>
                <HideEULAPage>true</HideEULAPage>
                <HideLocalAccountScreen>true</HideLocalAccountScreen>
                <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
                <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
                <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
                <ProtectYourPC>1</ProtectYourPC>
            </OOBE>
        </component>
    </settings>
</unattend>

Al sellar en modo auditoría, el script agregará un comando al registro para finalizar el proceso “sysprep.exe” para no cerrar la ventana sysprep manualmente cada vez. Cuando se sella en modo de saludo, el script eliminará el comando para cerrar la ventana del registro y cambiará el valor de la arquitectura en el archivo de respuesta al actual. El archivo de respuesta contiene parámetros para iniciar el sistema sin interacción del usuario y un comando para eliminar la carpeta "Sysprep" en la raíz de la unidad del sistema.

Ahora sellaré el sistema en modo auditoría usando “Sysprep.bat” y capturaré una imagen del sistema. Crearé una imagen del sistema usando DISM y solo crearé una imagen del volumen del sistema. Si va a crear una imagen solo del volumen del sistema, y ​​no de todo el disco, no olvide copiar el contenido del directorio “WindowsSystem32Recovery” al primer volumen en la carpeta “RecoveryWindowsRE” después de implementar el sistema. Esto deberá hacerse antes de cargar el sistema operativo. Después de cargar el sistema operativo, el directorio "WindowsSystem32Recovery" ya estará vacío.

Paso 3 – Rusificación del sistema

El paquete de idioma se puede instalar sin conexión a Internet si tiene este paquete. Si no, el propio sistema lo descargará de Internet cuando agregues el idioma en la configuración. Simplemente no es necesario adquirir el paquete de idiomas de versiones anteriores del sistema operativo. Para Windows 10 1809 debe haber un paquete de idioma específico para Windows 10 1809.

Microsoft sigue su plan de transferir gradualmente la configuración del menú clásico al nuevo, por lo que en el panel de control clásico ya no encontrará configuraciones para cambiar el idioma e instalar un paquete de idioma. Estas configuraciones ahora están solo en los parámetros del sistema.

En el modo auditoría, puede encontrar un problema al abrir la configuración del sistema desde el menú Inicio; para abrir la configuración del sistema, ejecute el comando - "ms-settings:", preste atención a los dos puntos al final del comando, sin él, el comando no trabajo. Después de abrir los parámetros del sistema una vez usando este comando, se puede abrir usando el menú gráfico.

Pero en la configuración del sistema puede instalar un paquete de idioma si el sistema está conectado a Internet; no hay ninguna opción para elegir instalar un paquete de idioma desde un archivo local.

No describiré el proceso de localización del sistema porque... Esto complicará significativamente el artículo, especialmente porque se detalla el proceso de localización. descrito aquí. Pero me gustaría llamar su atención sobre la peculiaridad de cambiar el idioma del sistema después de instalar un paquete de idioma usando la consola. Esta característica se describe en el mismo wiki al que proporcioné un enlace anteriormente, en la subsección "Agregar un 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: instale las aplicaciones necesarias

Porque Dado que los sistemas LTSB y LTSC no tienen una tienda de aplicaciones, la instalación de aplicaciones desde Microsoft Store causa algunas dificultades, concretamente la descarga de la aplicación. Para descargar aplicaciones, la empresa Adguard ha creado un servicio muy conveniente: "Tienda Adguard", con el que podrás obtener enlaces de descarga temporales de aplicaciones y sus componentes.

Para instalar la aplicación, necesitará archivos con las extensiones “Appx” y “AppxBundle”. Antes de instalar la aplicación en sí, debe instalar sus componentes. Por regla general, los componentes de una aplicación se pueden distinguir intuitivamente por el nombre del archivo.

Para no alargar demasiado el artículo, no describiré en detalle el proceso de instalación de aplicaciones, sobre todo porque hay información sobre la instalación. instrucciones detalladas. Pero agregaré una forma más de instalar aplicaciones en su cuenta actual. Las aplicaciones se pueden instalar usando el programa. "Instalador de aplicaciones", pero para instalar aplicaciones necesitarás una conexión a Internet, pero las aplicaciones se pueden instalar con un doble clic y no necesitarás sus componentes, todos los componentes necesarios se descargarán e instalarán "Instalador de aplicaciones".

Y un pequeño recordatorio: al instalar la aplicación en la cuenta actual, no podrá sellar el sistema. Cómo instalar aplicaciones para que pueda sellar el sistema, consulte las instrucciones anteriores. Y para comprobar el funcionamiento del multikiosco, las aplicaciones existentes son suficientes.

Paso 5: crear un archivo de configuración para el multikiosco

Ahora llegamos a la parte más interesante: configurar el modo quiosco. Miremos a instrucción según la configuración que veamos. En primer lugar, necesitaremos crear un archivo de configuración XML, cuyo ejemplo completo se puede encontrar aquí. ver aquí.

Comencemos configurando el diseño de los mosaicos. La forma más sencilla de crear una configuración de personalización de mosaicos XML es exportar su estado actual.

En primer lugar, agreguemos mosaicos de las aplicaciones que necesitamos al menú Inicio. Inicie la búsqueda "Win+s", busque la aplicación deseada, haga clic derecho sobre ella y seleccione "Anclar a la pantalla de inicio".

He fijado las siguientes aplicaciones:

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

Las dos últimas aplicaciones fueron fijadas porque... Simplemente no hay otras aplicaciones universales en el paquete LTSC estándar. Tenga en cuenta que los mosaicos del escritorio enlazan con accesos directos. Ahora, al mover los mosaicos directamente en el menú Inicio, separaré los mosaicos fijados en dos grupos. Para crear un nuevo grupo de mosaicos, arrastre un mosaico significativamente más alto o más bajo que otros mosaicos, lo que resaltará un divisor intuitivo. Puede nombrar los grupos a su discreción; para hacer esto, coloque el cursor del mouse sobre el grupo y cuando aparezca la inscripción "Nombra el grupo", haga clic con el botón izquierdo del mouse. Llamaré al primer grupo "Configuración", incluirá los mosaicos "Configuración" y "Seguridad de Windows". Llamaré al segundo grupo "Aplicaciones de Office", que incluirá todos los demás mosaicos. Por cierto, puedes mover grupos enteros de mosaicos arrastrándolos usando las dos franjas que se encuentran en la parte superior derecha del nombre del grupo.

Porque En el mosaico "Seguridad de Windows", el nombre no encaja completamente, cambiaré su tamaño a "Ancho". Para cambiar el tamaño de un mosaico, haga clic derecho en el mosaico y seleccione "Cambiar tamaño".

Después de la configuración, exportamos el estado actual y ejecutamos el comando en el entorno de PowerShell – “Export-StartLayout – ruta C:SysprepStartLayout.xml”.

A continuación, la forma más sencilla no es crear el archivo de configuración usted mismo, sino tome un archivo de ejemplo desde aquí configuración: haga clic en el botón "Copiar", pegue el contenido en el bloc de notas y guárdelo como "MultiAppKiosk.xml". Ahora cambiamos la configuración a la nuestra. Para cambiar la configuración de los mosaicos adjuntos, copie todo el bloque "StartLayoutCollection" de "StartLayout.xml" a "MultiAppKiosk.xml". Para agregar aplicaciones a las permitidas, debe insertar identificadores universales de aplicaciones en la sección "AllowedApps" y en el 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 está se refieren los azulejos. Para acceder rápidamente a un acceso directo, haga clic derecho en un mosaico fijado y vaya a Más > Ir a ubicación del archivo. Tenga en cuenta que el parámetro "AppUserModelId" se usa para especificar el ID de la aplicación universal y el parámetro "DesktopAppPath" se usa para especificar la ruta completa a la aplicación de escritorio. Y un pequeño matiz más, si planea usar IE en un sistema x64, en la lista de aplicaciones permitidas debe especificar dos rutas para el archivo ejecutable “Archivos de programa Internet Exploreriexplore.exe” y “Archivos de programa (x86) Internet Exploreriexplore. exe".

No daré acceso a las carpetas, por lo que eliminaré la sección "FileExplorerNamespaceRestrictions".

Mostrar la barra de tareas no me molesta, así que dejo todo como está en la sección “Barra de tareas”.

En el ejemplo, se especifican dos perfiles, pero solo tendré un perfil, por lo que se puede eliminar la sección con el segundo perfil. Antes de desinstalar, preste atención al ejemplo de inicio automático de una aplicación con argumentos.

En la sección "Configuraciones", las cuentas están vinculadas a perfiles; tenga en cuenta que se pueden vincular varias cuentas a un perfil. Pero porque Solo estoy interesado en una cuenta, luego eliminaré todos los enlaces excepto el primero: los bloques "Config". En el enlace restante escribiré el nombre de usuario “Usuario”.

Tengo este archivo con parámetros.

MultiAppKiosk.xml

<?xml version="1.0" encoding="utf-8" ?>
<AssignedAccessConfiguration 
  xmlns="http://schemas.microsoft.com/AssignedAccess/2017/config"
  xmlns:rs5="http://schemas.microsoft.com/AssignedAccess/201810/config"
  >
  <Profiles>
      <Profile Id="{9A2A490F-10F6-4764-974A-43B19E722C23}">
          <AllAppsList>
              <AllowedApps>
                  <App AppUserModelId="WINDOWS.IMMERSIVECONTROLPANEL_CW5N1H2TXYEWY!MICROSOFT.WINDOWS.IMMERSIVECONTROLPANEL" />
                  <App AppUserModelId="Microsoft.Windows.SecHealthUI_cw5n1h2txyewy!SecHealthUI" />
                  <App DesktopAppPath="%windir%system32notepad.exe" />
                  <App DesktopAppPath="C:Program FilesInternet Exploreriexplore.exe" />
                  <App DesktopAppPath="%windir%system32win32calc.exe" />
                  <App DesktopAppPath="%windir%system32mspaint.exe" />
                  <App DesktopAppPath="%ProgramFiles%Windows NTAccessorieswordpad.exe" />
              </AllowedApps>
          </AllAppsList>
          <StartLayout>
              <![CDATA[<LayoutModificationTemplate xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout" Version="1" xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification">
                    <LayoutOptions StartTileGroupCellWidth="6" />
                    <DefaultLayoutOverride>
                      <StartLayoutCollection>
                        <defaultlayout:StartLayout GroupCellWidth="6">
                          <start:Group Name="Настройки">
                            <start:Tile Size="2x2" Column="0" Row="0" AppUserModelID="WINDOWS.IMMERSIVECONTROLPANEL_CW5N1H2TXYEWY!MICROSOFT.WINDOWS.IMMERSIVECONTROLPANEL" />
                            <start:Tile Size="4x2" Column="2" Row="0" AppUserModelID="Microsoft.Windows.SecHealthUI_cw5n1h2txyewy!SecHealthUI" />
                          </start:Group>
                          <start:Group Name="Офисные приложения">
                            <start:DesktopApplicationTile Size="2x2" Column="2" Row="2" DesktopApplicationLinkPath="%ALLUSERSPROFILE%MicrosoftWindowsStart MenuProgramsAccessoriesWordpad.lnk" />
                            <start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationLinkPath="%APPDATA%MicrosoftWindowsStart MenuProgramsAccessoriesNotepad.lnk" />
                            <start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationLinkPath="%ALLUSERSPROFILE%MicrosoftWindowsStart MenuProgramsAccessoriesCalculator.lnk" />
                            <start:DesktopApplicationTile Size="2x2" Column="0" Row="2" DesktopApplicationLinkPath="%ALLUSERSPROFILE%MicrosoftWindowsStart MenuProgramsAccessoriesPaint.lnk" />
                            <start:DesktopApplicationTile Size="2x2" Column="4" Row="0" DesktopApplicationLinkPath="%APPDATA%MicrosoftWindowsStart MenuProgramsAccessoriesInternet Explorer.lnk" />
                          </start:Group>
                        </defaultlayout:StartLayout>
                      </StartLayoutCollection>
                    </DefaultLayoutOverride>
                  </LayoutModificationTemplate>
              ]]>
          </StartLayout>
          <Taskbar ShowTaskbar="true"/>
      </Profile>
  </Profiles>
  <Configs>
      <Config>
          <Account>User</Account>
          <DefaultProfile Id="{9A2A490F-10F6-4764-974A-43B19E722C23}"/>
      </Config>
  </Configs>
</AssignedAccessConfiguration>

Cuando cree sus archivos de configuración XML, no olvide que cada perfil debe tener una identificación única, y no solo dentro de un archivo XML, sino dentro de un sistema operativo. Aquellos. Idealmente, para evitar confusiones, puede crear un nuevo identificador cada vez; esto se puede hacer en el entorno de PowerShell usando el comando “[guid]::NewGuid()”. Y asegúrese de guardar el archivo en codificación "UTF-8"; si el archivo se guarda en codificación "ANSI", al crear el paquete de preparación recibirá un error si el archivo XML contiene cirílico.

Paso 6: aplicar la configuración multikiosco

Veamos dos formas de aplicar la configuración descrita en el archivo de configuración. La primera es a través de un paquete de aprovisionamiento, que debe crearse en ICD. Para algunos, quizás este método les resulte más familiar. El segundo es utilizar el “Proveedor WMI MDM Bridge”, este método me pareció más conveniente.

Método n. ° 1

¿Quién no tiene un DAI? descargar ADK e instalar. Instalar ADK es muy sencillo; el conjunto de componentes se puede dejar como predeterminado.

Inicie ICD, haga clic en el mosaico "Preparación avanzada", especifique el nombre y la carpeta del proyecto y haga clic en "Siguiente". En la siguiente ventana, seleccione "Todas las ediciones del escritorio de Windows" y haga clic en "Siguiente". Puede omitir la importación del paquete de preparación; haga clic en "Finalizar".

Expanda el menú desplegable "Configuración de tiempo de ejecución", luego expanda el submenú "Acceso asignado" y seleccione "Configuración de acceso asignado a múltiples aplicaciones". En la parte superior de la sección central de la ventana ICD, haga clic en el botón "Examinar" e indique la ubicación del archivo XML con la configuración. Por si acaso, puedes guardar el proyecto presionando “Ctrl+s”. En la parte superior izquierda del ICD, seleccione "Exportar" y seleccione "Paquete de aprovisionamiento" en el menú desplegable. Como propietario, seleccione "Administrador de TI"; todas las demás preguntas se pueden omitir haciendo clic en "Siguiente" y al final haga clic en "Construir" y "Finalizar".

En el sistema instalado no olvide crear un usuario “Usuario”, no se puede agregar al grupo “Administradores”, de lo contrario el multikiosco no funcionará. Creé un usuario en Gestión Informática con una contraseña que nunca caduca.

Ahora ejecutamos el paquete de preparación en el sistema previamente instalado. Después de aplicar el paquete de preparación, el menú Inicio y el menú del administrador cambiarán. En la columna de inicio izquierda deberían desaparecer los botones: “Documentos”, “Imagen”, “Opciones”. Si el menú de inicio no ha cambiado, entonces algo salió mal. Un paquete instalado se puede eliminar abriendo la ventana Configuración > Cuentas > Acceso a cuenta profesional o educativa > Agregar o eliminar paquete de aprovisionamiento.

Si el menú de inicio ha cambiado, entonces la configuración se aplica al sistema, inicie sesión como el usuario para quien está configurado el multikiosco y observe el resultado.

Método n. ° 2

Aplicar la configuración usando el "Proveedor WMI de MDM Bridge" descrito aquí. La conveniencia de este método es su flexibilidad de uso y la capacidad de deshacerse de muchas operaciones manuales necesarias para crear un paquete de preparación. Aquí todos pueden tomar una decisión que les convenga. Hice un par de guiones para mí.

MiltiKiosk.bat – script de inicio

@echo off
chcp 1251>nul

if not exist "%~dp0psexec.exe" call :ShowMessage "‡‡‡‡‡‡‡‡‡‡‡‡‡Для работы скрипта необходим файл psexec.exe‡‡Для завершения работы скрипта нажмите любую клавишу"&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 Не найдено PS файлов с началом названия - "%~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 – guión principal

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

Function ShowMessage ($Message='', $Align=0) {
    Try {$Align = [decimal]$Align} Catch {Return 'Для параметра Align может быть указано только число' | ConvertEncoding 'windows-1251' -To 'UTF-16'}
    if ($Message -is [int]) {for ($i=1; $i -le $Message; $i++) {Write-Host}; Return}
    if ([System.Text.Encoding]::Default.WindowsCodePage -eq 1252) {$Message = $Message | ConvertEncoding 'windows-1251' -To 'UTF-16'}
    if ($Message -is [string]) {[array] $Message = $Message}
    foreach ($String in $Message) {
        Try {$String = [int]$String} Catch {}
        if ($String -is [int]) {for ($i=1; $i -le $String; $i++) {Write-Host}; continue}
        if ($Host.UI.RawUI.BufferSize.Width -gt $String.Length) {
            if ($Align -eq 0) {Write-Host $String
            } else {Write-Host ("{0}{1}" -f (' ' * (([Math]::Max(0, $Host.UI.RawUI.BufferSize.Width / $Align) - [Math]::Floor($String.Length / $Align)))), $String)}
        } else {Write-Host $String}
    } 
}

$script:NameSpace="rootcimv2mdmdmmap"
$script:ClassName="MDM_AssignedAccess"
$script:MultiAppKiosk = Get-CimInstance -Namespace $NameSpace -ClassName $ClassName
if (-not $MultiAppKiosk) {ShowMessage -Message (3, 'Ошибка получения объекта настроек', 2, 'Нажмите "Enter" для завершения рабты скрипта') -Align 2; Read-Host; Exit}

Function MainMenu() {
    ShowMessage (13, ' 0 - Выход', ' 1 - Выбрать XML-файл для установки', ' 2 - Показать текущую конфигурацию мультикиоска', ' 3 - Удалить настройки мультикиоска', 1)
    $local:PromptText = 'Выберите действие'
    if ([System.Text.Encoding]::Default.WindowsCodePage -eq 1252) {$PromptText = $PromptText | ConvertEncoding 'windows-1251' -To 'UTF-16'}

    $local:Selections = 1..2
    While ($true) {
        $Select = Read-Host -Prompt $PromptText
        Switch ($Select) {
            0 {exit}
            1 {XMLSelection}
            2 {ShowMessage -Message (1, 'Начало конфигурации') -Align 2; Write-Host $MultiAppKiosk.Configuration; ShowMessage -Message ('Конец конфигурации', 1, 'Для возврата в меню нажмите "Enter"', 1) -Align 2; Read-Host}
            3 {$MultiAppKiosk.Configuration = $Null; Set-CimInstance -CimInstance $MultiAppKiosk; ShowMessage -Message (1, 'Выполнена команда удаления настроек', 1) -Align 2}
            DEFAULT {ShowMessage 'Выбрано недопустимое значение'}
        }
        if ($Selections -contains $Select) {Clear-Host; ShowMessage (15, ' 0 - Выход', ' 1 - Выбрать XML-файл для установки', ' 2 - Показать текущую конфигурацию мультикиоска', ' 3 - Удалить настройки мультикиоска', 1)}
    }
}

Function XMLSelection() {
    Clear-Host

    if (!(Test-Path -Path $PSScriptRoot'XML')) {ShowMessage -Message (13, 'Не найден каталог', $('"'+$PSScriptRoot+'XML"'), 1, 'Нажмите "Enter" для возврвта в предыдущее меню') -Align 2; Read-Host; Return}

    $local:XMLList = @()
    $XMLList += Get-ChildItem -Path $PSScriptRoot'XML' -name -filter '*.xml'
    if ($XMLList.Count -eq  0) {ShowMessage -Message (13, 'Не найдено XML-файлов в каталоге', $('"'+$PSScriptRoot+'XML"'), 1, 'Нажмите "Enter" для возврвта в предыдущее меню') -Align 2; Read-Host; Return}

    [int]$local:Indent = 13 - $XMLList.Count / 2; if ($Indent -lt 1) {$Indent = 1}
    ShowMessage ($Indent, ' 0 - Вернуться в предыдущее меню')
    for ($i=0; $i -le $XMLList.GetUpperBound(0); $i++) {Write-Host $(' '+($i+1)+' - '+$XMLList[$i])}
    Write-Host
    $local:PromptText = 'Выберите файл для установки'
    if ([System.Text.Encoding]::Default.WindowsCodePage -eq 1252) {$PromptText = $PromptText | ConvertEncoding 'windows-1251' -To 'UTF-16'}

    $local:Selections = 1..$XMLList.Count
    $local:BackToPrevMenu = 0
    While ($BackToPrevMenu -eq 0) {
        $Select = Read-Host -Prompt $PromptText
        Switch ($Select) {
            0 {$BackToPrevMenu = 1}
            {$Selections -contains $Select} {ShowMessage $('Дана команда на применение настроек из файла '+$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 ('Выбрано недопустимое значение')} 
        }
    }
}

MainMenu

Si desea utilizar mi solución, guarde los scripts anteriores con sus nombres originales en una carpeta y coloque el archivo "PsExec.exe" en la misma carpeta. En la misma carpeta, cree una carpeta “XML” y copie los archivos XML para configurar el multikiosco en ella. Usaré el mismo archivo que en el primer método.

MultiAppKiosk.xml

<?xml version="1.0" encoding="utf-8" ?>
<AssignedAccessConfiguration 
  xmlns="http://schemas.microsoft.com/AssignedAccess/2017/config"
  xmlns:rs5="http://schemas.microsoft.com/AssignedAccess/201810/config"
  >
  <Profiles>
      <Profile Id="{9A2A490F-10F6-4764-974A-43B19E722C23}">
          <AllAppsList>
              <AllowedApps>
                  <App AppUserModelId="WINDOWS.IMMERSIVECONTROLPANEL_CW5N1H2TXYEWY!MICROSOFT.WINDOWS.IMMERSIVECONTROLPANEL" />
                  <App AppUserModelId="Microsoft.Windows.SecHealthUI_cw5n1h2txyewy!SecHealthUI" />
                  <App DesktopAppPath="%windir%system32notepad.exe" />
                  <App DesktopAppPath="C:Program FilesInternet Exploreriexplore.exe" />
                  <App DesktopAppPath="%windir%system32win32calc.exe" />
                  <App DesktopAppPath="%windir%system32mspaint.exe" />
                  <App DesktopAppPath="%ProgramFiles%Windows NTAccessorieswordpad.exe" />
              </AllowedApps>
          </AllAppsList>
          <StartLayout>
              <![CDATA[<LayoutModificationTemplate xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout" Version="1" xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification">
                    <LayoutOptions StartTileGroupCellWidth="6" />
                    <DefaultLayoutOverride>
                      <StartLayoutCollection>
                        <defaultlayout:StartLayout GroupCellWidth="6">
                          <start:Group Name="Настройки">
                            <start:Tile Size="2x2" Column="0" Row="0" AppUserModelID="WINDOWS.IMMERSIVECONTROLPANEL_CW5N1H2TXYEWY!MICROSOFT.WINDOWS.IMMERSIVECONTROLPANEL" />
                            <start:Tile Size="4x2" Column="2" Row="0" AppUserModelID="Microsoft.Windows.SecHealthUI_cw5n1h2txyewy!SecHealthUI" />
                          </start:Group>
                          <start:Group Name="Офисные приложения">
                            <start:DesktopApplicationTile Size="2x2" Column="2" Row="2" DesktopApplicationLinkPath="%ALLUSERSPROFILE%MicrosoftWindowsStart MenuProgramsAccessoriesWordpad.lnk" />
                            <start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationLinkPath="%APPDATA%MicrosoftWindowsStart MenuProgramsAccessoriesNotepad.lnk" />
                            <start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationLinkPath="%ALLUSERSPROFILE%MicrosoftWindowsStart MenuProgramsAccessoriesCalculator.lnk" />
                            <start:DesktopApplicationTile Size="2x2" Column="0" Row="2" DesktopApplicationLinkPath="%ALLUSERSPROFILE%MicrosoftWindowsStart MenuProgramsAccessoriesPaint.lnk" />
                            <start:DesktopApplicationTile Size="2x2" Column="4" Row="0" DesktopApplicationLinkPath="%APPDATA%MicrosoftWindowsStart MenuProgramsAccessoriesInternet Explorer.lnk" />
                          </start:Group>
                        </defaultlayout:StartLayout>
                      </StartLayoutCollection>
                    </DefaultLayoutOverride>
                  </LayoutModificationTemplate>
              ]]>
          </StartLayout>
          <Taskbar ShowTaskbar="true"/>
      </Profile>
  </Profiles>
  <Configs>
      <Config>
          <Account>User</Account>
          <DefaultProfile Id="{9A2A490F-10F6-4764-974A-43B19E722C23}"/>
      </Config>
  </Configs>
</AssignedAccessConfiguration>

Un poco sobre las características del guión. El script está diseñado para utilizar archivos XML con codificación "UTF8"; si desea utilizar la codificación "ANSI", elimine el parámetro "codificación UTF8" de la opción de lectura de archivos. Debe colocar los archivos XML en la carpeta "XML" sin reemplazar caracteres; el propio script reemplazará los caracteres especiales con las designaciones apropiadas. Para no confundirse con los GUID al vincular usuarios a perfiles, simplemente puede indicar el número de usuario o el nombre entre llaves; todo el contenido entre llaves se reemplazará con GUID.

Usar el script es muy simple, simplemente ejecútelo y seleccione el elemento requerido. Para cambiar la configuración actual a una nueva, no es necesario eliminar la actual, se sobrescribirá. No olvide crear los usuarios que se especifican en el archivo de configuración.

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

Paso 7: sellar el sistema

El multikiosco funciona, bueno, eso es todo, al parecer...

Si todo va según lo planeado, entonces no notas nada.

No olvide que aún necesitamos cambiar el sistema del modo auditoría al modo bienvenida. Bueno, ya estamos listos para esto, lanzamos “Sysprep.bat”, seleccionamos el punto 2, el sistema está sellado. Encendemos el dispositivo, el sistema arranca, iniciamos sesión en la cuenta de usuario para la que está configurado el multikiosco, pero no podemos iniciar sesión. Después del mensaje de “Bienvenida”, aparece el mensaje de “Cerrar sesión”.

Al principio quería describir solo la solución al problema, pero luego decidí describir los pasos para identificar el problema y encontrar la solución más sencilla porque... Seguramente muchos lectores se sentirán atormentados por vagas dudas: "¿Y si fuera así?". Creo que describir los distintos experimentos le permitirá ahorrar una cantidad significativa de tiempo si desea encontrar otra solución. Para que la información sea lo más precisa posible y para asegurarme una vez más de que no haya errores, describiré los experimentos en el formato "hecho y registrado". Aquellos. Volveré a hacer los experimentos descritos.

experimentos

¿Qué hicimos? Hay dos cuentas en el sistema:

“Admin” – en el grupo “Administradores”
“Usuario” – en el grupo “Usuarios”
En modo auditoría el multikiosco funcionaba, pero al estar sellado no funcionaba.

experimento 1

Eliminamos el paquete de preparación instalado, en el complemento "Administración de computadoras" eliminamos el usuario "Usuario" y creamos un nuevo usuario con el nombre "Usuario", aplicamos el paquete de preparación, vamos a la cuenta "Usuario" - lo hace no trabajo. Vamos al nombre "Admin", eliminamos el usuario "Usuario" del grupo "Usuarios", lo agregamos al grupo "Administradores", vamos al nombre "Usuario"; no funciona. Iniciamos sesión con el nombre "Admin", eliminamos el paquete de preparación con el multikiosco, iniciamos sesión con el nombre "Usuario"; logramos iniciar sesión, pero, por supuesto, el modo multikiosco no funciona porque Se eliminó el paquete de aprovisionamiento.

experimento 2

Subimos la imagen del sistema: rusificada en modo auditoría.

El sistema operativo se ha cargado, presione "Win+r", porque Nuestra ventana sysprep se cerró automáticamente, ejecute el comando "sysprep" y ejecute "sysprep" en la ventana que se abre. Configuración de Sysprep en la ventana: "Ir a la ventana de bienvenida del sistema (OOBE)", "Preparación para su uso", "Reiniciar". Haga clic en "Aceptar" y espere el saludo del sistema operativo. Respondemos a las preguntas cuando el sistema arranca por primera vez: “¿Continuar en el idioma seleccionado?” - "ruso"; región – Rusia; distribución del teclado – ruso; agregue una segunda distribución de teclado: omita; “Vamos a conectarte a la red” – “Saltar por ahora”; conectarse a Internet - no; acuerdo de licencia - aceptar; “Quién utilizará esta computadora” – “Prueba”; creando una contraseña: deje el campo en blanco; Manejo cómodo en diferentes dispositivos – no; Configuración de privacidad – aceptar. El sistema operativo se ha cargado, en el complemento "Administración de computadoras" creamos un usuario con el nombre "Usuario", agregamos el paquete de preparación. El resultado es que no funciona.

experimento 3

Subimos la imagen del sistema: rusificada en modo auditoría.

El sistema operativo se ha cargado, conecte el sistema a Internet, ejecute el comando “gpedit.msc” y en la sección “Windows Update” habilite la opción “Habilitar actualizaciones recomendadas mediante actualizaciones automáticas”, reinicie por si acaso. En el centro de actualizaciones, haga clic en "Buscar actualizaciones" y reinicie hasta que se instalen todas las actualizaciones. Desconecte el sistema de Internet. Lanzamos “sysprep” en modo gráfico y repetimos todos los pasos descritos en el paso anterior desde ejecutar la utilidad “sysprep” hasta agregar el paquete de preparación. El resultado es que no funciona.

experimento 4

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

Lanzamos "sysprep" en modo gráfico, sellamos el sistema operativo con los mismos parámetros que durante el experimento 2. Cuando el sistema arranca por primera vez, seleccionamos los mismos parámetros que en el experimento 2, con la excepción de los parámetros regionales y de idioma porque No existe el idioma ruso. De la misma manera, cree un usuario "Usuario" y agregue un paquete de aprovisionamiento. El resultado es que funciona. Aquellos. El problema está relacionado con la localización.

experimento 5

Subimos la imagen del sistema: rusificada en modo auditoría.

En el complemento "Administración de computadoras", cree un usuario "Usuario", agregue un paquete de preparación, vaya a la cuenta "Usuario", el quiosco múltiple funciona.

Cierre sesión en su cuenta e inicie sesión en la cuenta "Admin". Lanzamos PowerShell con derechos de administrador, ejecutamos el comando “Dism /online /Get-Intl” y vemos “Idioma de interfaz de usuario predeterminado: en-US”.

Arrancamos desde la unidad flash en WinPE, el sistema operativo implementado está en mi unidad E. Ejecutamos el comando “Dism /image:E: /Set-UILang:ru-ru”. Observamos el resultado, ejecutamos "Dism /image:E: /Get-Intl" y vemos "Idioma de interfaz de usuario predeterminado del sistema: ru-RU".

Arrancamos el sistema, iniciamos sesión en la cuenta “Usuario”, el multikiosco no funciona.

Para establecer claramente la relación causa-efecto del problema, intentemos nuevamente hacer que el quiosco múltiple funcione y no funcione.

Arrancamos desde la unidad flash en WinPE, el sistema operativo implementado está en mi unidad E. Ejecutamos el comando “Dism /image:E: /Set-UILang:en-us”. Observamos el resultado, ejecutamos “Dism /image:E: /Get-Intl” y vemos “Idioma de interfaz de usuario predeterminado del sistema: en-US”.

Arrancamos el sistema, iniciamos sesión en la cuenta “Usuario”, el multikiosco funciona.

Arrancamos desde la unidad flash en WinPE, el sistema operativo implementado está en mi unidad E. Ejecutamos el comando “Dism /image:E: /Set-UILang:ru-ru”. Observamos el resultado, ejecutamos "Dism /image:E: /Get-Intl" y vemos "Idioma de interfaz de usuario predeterminado del sistema: ru-RU".

Arrancamos el sistema, iniciamos sesión en la cuenta “Usuario”, el multikiosco no funciona.

Aquellos. Puede ver una clara dependencia del rendimiento del quiosco en el idioma predeterminado de la interfaz de usuario. ¿Quizás existen otros factores que afectan el rendimiento del multikiosco?

experimento 6

Para la pureza del experimento, rellenamos el sistema. Subimos la imagen del sistema: rusificada en modo auditoría.

Lanzamos “sysprep” en modo gráfico, sellamos el SO con los mismos parámetros que durante el experimento 2. Esperamos que el SO nos salude y responda las preguntas: “¿Continuar en el idioma seleccionado?” - "Inglés Estados Unidos)"; región – Rusia; Distribución del teclado: ruso. Además, todos los parámetros se seleccionaron como en el experimento 2.

Veamos la configuración de idioma predeterminada de la interfaz de usuario. Ejecutamos el comando “Dism /online /Get-Intl” y vemos “Idioma predeterminado de la interfaz de usuario del sistema: en-US”. En el complemento "Administración de computadoras", cree un usuario "Usuario", agregue un paquete de preparación, vaya a la cuenta "Usuario", el quiosco múltiple funciona.

Estamos intentando romper el quiosco cambiando el idioma predeterminado de la interfaz de usuario. Entramos en el usuario "Prueba", que se creó cuando el sistema se inició por primera vez y habilitamos el inicio de sesión automático para que el sistema no se inicie en la cuenta "Usuario" de inmediato. Ejecute “netplwiz”, seleccione el usuario “Probar”, desmarque la casilla de verificación “Requerir nombre de usuario y contraseña” y aplique los parámetros.

Arranque desde una unidad flash en WinPE. Ejecute el comando “Dism /image:E: /Set-UILang:ru-ru”. Observamos el resultado, ejecutamos "Dism /image:E: /Get-Intl" y vemos "Idioma de interfaz de usuario predeterminado del sistema: ru-RU".

Arrancamos el sistema, intentamos iniciar sesión en la cuenta "Usuario", el multikiosco funciona. Aquellos. no se puede romper. ¿Es posible hacer que funcione de esta manera?

experimento 7

Subimos la imagen del sistema: rusificada en modo auditoría.

Lanzamos "Sysprep.bat", seleccionamos el punto 2. Arrancamos el sistema, creamos el usuario "Usuario" en el complemento "Administración de computadoras", agregamos el paquete de preparación, vamos a la cuenta "Usuario", el multi- El quiosco no funciona.

Arranque desde una unidad flash en WinPE. Ejecute el comando “Dism /image:E: /Set-UILang:en-us”. Observamos el resultado, ejecutamos “Dism /image:E: /Get-Intl” y vemos “Idioma de interfaz de usuario predeterminado del sistema: en-US”.

Arrancamos el sistema, intentamos iniciar sesión en la cuenta "Usuario", el multikiosco no funciona.

Resulta que al cambiar la configuración de idioma predeterminada de la interfaz de usuario, puede afectar el rendimiento del multikiosco solo cuando el sistema está en modo de auditoría o en el primer inicio después de sellar el sistema. Esto significa que deberá sellar el sistema con un archivo de respuesta en el que se seleccionará el idioma del sistema en inglés y luego cambiar la configuración del sistema para que la interfaz sea rusa. No es una muy buena solución. ¿Quizás el problema pueda resolverse instalando un paquete de idioma o instalando paquetes de idioma adicionales?

experimento 8

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

Nos conectamos a Internet, en los parámetros del sistema vamos a la sección "Idioma", seleccionamos "Agregar idioma", seleccionamos el idioma "ruso", hacemos clic en "Siguiente", dejamos los parámetros de instalación por defecto, hacemos clic en "Instalar", después de la instalación el paquete de idioma reiniciamos el sistema, ahora en rusificado. Desconecte el sistema de Internet, ejecute “Sysprep.bat”, seleccione el punto 2.

Después de cargar el sistema, en el complemento "Administración de computadoras", cree el usuario "Usuario", agregue el paquete de preparación, vaya a la cuenta "Usuario", el multi-kiosco no funciona.

experimento 9

Intentemos rusificar el sistema antes de la instalación, en modo fuera de línea. Al mismo tiempo habrá un breve programa educativo sobre la localización de la distribución.

Tomo una unidad flash con una distribución original limpia: X21-96381. Será la unidad "E". Para montar 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 los paquetes: “Microsoft-Windows-Client-Language-Pack_x86_ru-ru.cab”, “lp.cab”, “WinPE-Setup_ru-ru.cab”. Ejecuto la consola con derechos de administrador. Creo que los comandos adicionales quedará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_ru-ru.cabcode
dism /Image:Installcode /Set-AllIntl:ru-ru
dism /Image:Install /Set-TimeZone:"Russian Standard Time"code

dism /Mount-Wim /WimFile:InstallWindowsSystem32RecoveryWinre.wim /index:1 /MountDir:Winrecode
dism /Image:Winre /Add-Package /PackagePath:lp.cabcode
dism /Image:Winrecode /Set-AllIntl:ru-ru
dism /Image:Winre /Set-TimeZone:"Russian Standard Time"code
dism /Unmount-Image /MountDir:Winre /Commitcode

dism /Image:Install /Gen-LangINI /distribution:E: /Set-AllIntl:ru-RUcode
dism /image:Install /Set-SetupUILang:RU-ru /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:ru-ru
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_ru-ru.cabcode
dism /Image:Bootcode /Set-AllIntl:ru-ru
copy e:sourceslang.ini Bootsourceslang.ini /ycode
dism /Unmount-Image /MountDir:Boot /Commit

Arrancamos desde la unidad flash, seleccionamos el idioma ruso e instalamos el sistema en un disco en blanco. Cuando el sistema le solicite que seleccione una región, presione “Ctrl+Shift+F3”. En el complemento "Administración de computadoras", cree un usuario "Usuario", agregue un paquete de preparación, vaya a la cuenta "Usuario", el quiosco múltiple no funciona.

Arranque desde una unidad flash en WinPE. Ejecute el comando “Dism /image:E: /Set-UILang:en-us”.

Arrancamos el sistema, intentamos iniciar sesión en la cuenta "Usuario", el multikiosco funciona.

Aparentemente el problema no está en los métodos para agregar un paquete, intentemos agregar paquetes adicionales.

experimento 10

Cogemos el pendrive que preparamos en el paso anterior.

Tomamos el paquete “Feat on Demand” – X21-87815. Copio los paquetes a la carpeta “c:Mount”: «Microsoft-Windows-LanguageFeatures-Basic-ru-ru-Package~31bf3856ad364e35~x86~~.cab», «Microsoft-Windows-LanguageFeatures-OCR-ru-ru-Package~31bf3856ad364e35~x86~~.cab», «Microsoft-Windows-LanguageFeatures-Handwriting-ru-ru-Package~31bf3856ad364e35~x86~ ~.cab», «Microsoft-Windows-LanguageFeatures-TextToSpeech-ru-ru-Package~31bf3856ad364e35~x86~~.cab».

Берем пакет «Feat on Demand RDX Updt» – X21-99781. В папку «c:Mount» копирую из него пакеты: «Microsoft-Windows-RetailDemo-OfflineContent-Content-Package~31bf3856ad364e35~x86~~.cab», « Microsoft-Windows-RetailDemo-OfflineContent-Content-ru-ru-Package~31bf3856ad364e35~x86~~.cab».

Inicie la consola con derechos de administrador y ejecute los comandos:

Equipos

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 unidad flash, seleccionamos el idioma ruso e instalamos el sistema en un disco en blanco. Cuando el sistema le solicite que seleccione una región, presione “Ctrl+Shift+F3”. En el complemento "Administración de computadoras", cree el usuario "Usuario", agregue el paquete de aprovisionamiento e inicie sesión en la cuenta "Usuario". Me salió una pantalla negra que permaneció colgada durante mucho tiempo, así que inicié el sistema en caliente.

Eliminamos el paquete de preparación, iniciamos sesión como “Usuario”, reiniciamos el sistema, agregamos el paquete de preparación, el multikiosco no funciona.

Arranque desde una unidad flash en WinPE. Ejecute el comando “Dism /image:E: /Set-UILang:en-us”.

Arrancamos el sistema, intentamos iniciar sesión en la cuenta "Usuario", el multikiosco funciona.

Solución alterna

Héroes normales. ¡Siempre se desvían!

Varios métodos para instalar paquetes de localización no resolvieron el problema, lo que significa que tendrá que instalar el idioma "en-us" en el primer inicio después del sellado y cambiar la configuración de idioma después del primer inicio.

Subimos la imagen del sistema: rusificada en modo auditoría.

En el archivo "Unattend.xml", ingrese "en-US" en el parámetro, ejecute "Sysprep.bat", seleccione el punto 2 y vea lo que obtuvimos. La pantalla de bienvenida está en inglés, el multikiosco funciona. Esto significa que debe agregar un comando a "Unattend.xml" para cambiar el idioma del saludo. Y para hacer esto, debe ejecutar el comando “control intl.cpl,, /f:” indicando el archivo de configuración, que especificará la copia de los parámetros actuales a la pantalla de bienvenida. El contenido del archivo de configuración se verá así.

<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend">
      <gs:UserList>
        <gs:User UserID="Current" CopySettingsToSystemAcct="true"/> 
    </gs:UserList>
</gs:GlobalizationServices>

Porque Copiará la configuración del usuario actual, luego el comando debe ejecutarse después de que el usuario haya iniciado sesión, lo que significa que necesitaremos. Hay un pequeño "pero", la ejecución se llevará a cabo después de que un usuario con derechos de administrador inicie sesión. Y no me gustaría crear un archivo adicional que sería necesario para que el comando se ejecute correctamente. Es mejor implementar toda la solución en un solo archivo: "Unattend.xml". Para hacer esto, simplemente necesitará ejecutar un comando que cree un archivo de configuración. Creo que crearé un archivo de configuración usando el comando "echo" en el entorno "cmd", pero necesita escapar de los corchetes angulares con un circunflejo. Aquellos. Para crear un archivo de configuración, se obtiene el siguiente comando.

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

Pero necesitamos colocar este comando en XML, que tiene sus propios requisitos para el uso de caracteres especiales:

Personaje especial
Valor de reposición

>
&gt;

<
&lt;

&
&amp;

"
&apos;

"
&quot;

Como resultado, para crear un archivo de configuración, obtuvimos el siguiente 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;

A continuación, ejecutamos el comando usando el archivo de configuración.

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

A continuación, elimine el archivo creado anteriormente y reinicie el sistema. Los cambios entrarán en vigor después de reiniciar.

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

Como resultado, terminé con el siguiente archivo de respuesta para sysprep.

Unattend.xml

<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <settings pass="specialize">
        <component name="Microsoft-Windows-Deployment" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <RunSynchronous>
                <RunSynchronousCommand wcm:action="add">
                    <Path>reg add HKLMSoftwareMicrosoftWindowsCurrentVersionSetupOOBE /v SetupDisplayedProductKey /t REG_DWORD /d 1 /f</Path>
                    <Order>1</Order>
                    <Description>Dont show key page</Description>
                </RunSynchronousCommand>
                <RunSynchronousCommand wcm:action="add">
                    <Path>reg add HKLMSoftwareMicrosoftWindowsCurrentVersionSetupOOBE /v UnattendCreatedUser /t REG_DWORD /d 1 /f</Path>
                    <Order>2</Order>
                    <Description>Dont make account</Description>
                </RunSynchronousCommand>
                <RunSynchronousCommand wcm:action="add">
                    <Path>cmd.exe /c rd %systemdrive%Sysprep /s /q</Path>
                    <Order>3</Order>
                    <Description>Del Folder</Description>
                </RunSynchronousCommand>
            </RunSynchronous>
        </component>
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" 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>
                <Enabled>true</Enabled>
                <Username>Admin</Username>
            </AutoLogon>
        </component>
    </settings>
    <settings pass="oobeSystem">
        <component name="Microsoft-Windows-International-Core" processorArchitecture="x86" 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>en-US; ru-RU</InputLocale>
            <SystemLocale>ru-RU</SystemLocale>
            <UILanguage>en-US</UILanguage>
            <UILanguageFallback></UILanguageFallback>
            <UserLocale>ru-RU</UserLocale>
        </component>
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <OOBE>
                <HideEULAPage>true</HideEULAPage>
                <HideLocalAccountScreen>true</HideLocalAccountScreen>
                <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
                <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
                <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
                <ProtectYourPC>1</ProtectYourPC>
            </OOBE>
            <FirstLogonCommands>
                <SynchronousCommand wcm:action="add">
                    <CommandLine>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;</CommandLine>
                    <Description>CreateConfig</Description>
                    <Order>1</Order>
                </SynchronousCommand>
                <SynchronousCommand wcm:action="add">
                    <CommandLine>control intl.cpl,,/f:&quot;%TMP%Config.xml&quot;</CommandLine>
                    <Description>UseConfig</Description>
                    <Order>2</Order>
                </SynchronousCommand>
                <SynchronousCommand wcm:action="add">
                    <CommandLine>cmd.exe /c del &quot;%TMP%Config.xml&quot; /q&amp;shutdown /r /f /t 00</CommandLine>
                    <Description>DelConfig</Description>
                    <Order>3</Order>
                </SynchronousCommand>
            </FirstLogonCommands>
        </component>
    </settings>

Vamos a revisar...

Subimos la imagen del sistema: rusificada en modo auditoría.

Cambiamos el archivo Unattend.xml por uno nuevo, ejecutamos “Sysprep.bat”, seleccionamos el punto 2 y vemos lo que obtuvimos. Cuando inicia por primera vez, la pantalla de bienvenida está en inglés y el sistema se reinicia. La pantalla de bienvenida está en ruso, el multikiosco funciona.

Si tiene alguna pregunta sobre la configuración y la licencia de Windows 10 IoT Enterprise, comuníquese con: [email protected] o al sitio web quarta-embedded.ru.
Puedes encontrar respuestas a algunas preguntas en nuestra wiki o en nuestro Canal de YouTube

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

Fuente: habr.com