Windows 10 IoT Enterprise 2019: modo multiquiosco

Introdución

Windows 10 IoT Enterprise 2019 é o nome comercial da próxima versión de Windows 10. O lanzamento desta versión anunciouse en setembro de 2018, respectivamente, ten a versión 1809, 18 é o ano, 09 é o mes. Escribíronse moitos artigos sobre a nova versión de Windows 10 1809, pero a maioría deles están dedicados a varios "lazos", "belezas" e varias funcionalidades que se demandan na casa.
Este artigo só discutirá a funcionalidade que pode ser demandada entre os fabricantes de dispositivos de uso fixo. É dicir, sobre as novas capacidades do modo "Quiosco". Tamén se abordará o tema de cambiar os nomes dos esquemas de servizos para as edicións de Windows do segmento empresarial.

Antigo esquema de servizo co novo nome

Comezo cunha pequena explicación: no segmento corporativo das edicións de Windows hai dous esquemas de servizos segundo os cales Windows recibe actualizacións. Os diagramas de servizo teñen unha designación de letra. Actualmente as ramas de servizos chámanse LTSC e SAC.

LTSC significa Canle de servizo a longo prazo (con mantemento a longo prazo). Anteriormente, tal canle chamábase LTSB - Long Term Servicing Branch. Microsoft simplemente cambiou o nome da canle de servizo, o servizo en si seguía sendo o mesmo.

Microsoft tamén cambiou o nome da rama de servizo CBB - Current Branch for Business, agora esta rama de servizo chámase SAC - Canle semianual. De novo, só cambiou o nome.

Pero hai que mencionar que as ramas de servizo de LTSC e SAC usan diferentes distribucións de Windows.

Un pouco sobre o novo modo quiosco no SAC

Como xa dixen, LTSC e SAC teñen distribucións diferentes. LTSC non ten aplicacións universais estándar nin unha tenda de aplicacións, pero SAC si. En consecuencia, LTSC non ten un navegador Edge, pero SAC si. Se seleccionas o navegador Edge ao configurar un quiosco, agora hai dous modos dispoñibles:

  1. Como sinal dixital ou pantalla interactiva
  2. Como un navegador público

Non vou determe na configuración destes modos, porque... A configuración é moi sinxela e realízase nunha interface gráfica. Só ten que crear un usuario que non sexa membro do grupo de administradores, activarlle o modo quiosco mediante EDGE e ver como funcionan estes modos.

Kiosco con moitas aplicacións

Algunhas persoas pensan que o uso con licenza Windows 10 IoT Enterprise implica o funcionamento dunha soa aplicación no dispositivo, de feito non é así. O dispositivo debe estar deseñado para realizar unha única tarefa empresarial e o usuario non debe ter acceso a un escritorio. Agora a propia Microsoft deu a ferramenta para usar moitas aplicacións. Este modo chámase "quiosco multi-aplicación"; de aquí en diante, para brevidade, chamareino "quiosco multi-aplicación". Neste artigo veremos como configurar este modo usando o paquete de software e algunhas das características deste modo.

Un pouco sobre o modo Multikiosk

Cando inicie sesión nunha conta de usuario para a cal está configurado o modo multiquiosco, o sistema funcionará en modo tableta. O menú Inicio expandirase a pantalla completa, mostrando mosaicos da aplicación.

Lista de configuracións básicas e capacidades do modo:

  1. Configuración para varios usuarios ou grupos
  2. A cada usuario ou grupo pódeselle asignar unha configuración individual
  3. Capacidade para utilizar aplicacións universais e clásicas
  4. A posibilidade de iniciar automaticamente unha das aplicacións cando o usuario inicia sesión
  5. Aplicacións incluídas na lista branca
  6. Acceso a cartafoles mediante unha lista branca

Cabe atender ao punto 5. Por defecto só poderán funcionar aquelas aplicacións que sexan necesarias para o funcionamento do sistema, debendo engadirse outras á lista de admitidas. Eses. Agora non precisa configurar AppLocker por separado. Por certo, para evitar conflitos coa configuración de AppLocker, no modo multiquiosco non se aplicarán todas as regras de AppLocker configuradas.

O punto 6 indica unha boa opción, pero de momento só é posible dar permiso de escritura ao cartafol "Descargas". O modo permítelle utilizar aplicacións universais e clásicas. Todos os axustes do modo especifícanse nun ficheiro XML, no que tamén pode especificar a configuración dun único quiosco de aplicacións.

Agora imos tentar configuralo todo...

Que necesitamos...

  1. En primeiro lugar, necesitamos o propio sistema, que admite o modo multiquiosco. Aquí podes descargar versión demo
  2. Instrucións para configurar un multiquiosco
  3. Calquera editor XML
  4. Para aplicar a configuración do multiquiosco:
    1. Para o método no 1 - ICD, que forma parte do ADK. ADK é posible descarga aquí
    2. Para o método número 2: a utilidade PsExec. A utilidade pode ser descarga aquí

El dixo: "Imos!"

Realizarei todos os experimentos na versión comercial de Windows 10 IoT Enterprise 1809 LTSC x32, non nunha versión de demostración. O sistema non se activará porque a falta de activación non afecta a funcionalidade do sistema. Tomei 32 bits só porque ocupa menos espazo e será máis rápido traballar con imaxes do sistema.

Paso 1 - instalación

Instalar Win 10 IoT Enterprise non é diferente de instalar Win 10 Enterprise, polo que non vou describir todo o proceso de instalación, só falarei sobre algúns dos matices.

Por se acaso, recordo que non instales o sistema encima do instalado. Cando o instalador pregunte sobre a localización de instalación do sistema, elimine todas as particións do disco futuro do sistema e especifique un disco sen particións.

Instalamos o sistema sen conexión a Internet para que o sistema non tire nada innecesario.

Porque Crearemos imaxes de copia de seguridade do sistema e para iso selarémolo en modo auditoría, entón podes aforrar tempo cargando o sistema en modo auditoría inmediatamente despois da instalación. Para iso, cando o sistema che pide que selecciones unha rexión “Comecemos pola rexión. É certo", só tes que premer "Ctrl+Maiús+F3".

Paso 2: crea unha imaxe do sistema

Porque burlarémonos do sistema e probaremos varias opcións novas, é posible que algo saia mal e teñamos que devolver o sistema ao seu estado orixinal. E para volver rapidamente ao seu estado orixinal, cómpre crear unha imaxe do sistema. O único que farei é copiar o "kit do cabaleiro": o guión e o ficheiro de resposta. Todos os meus ficheiros están situados no cartafol "Sysprep", que copio na raíz do disco do sistema. E, naturalmente, compartirei este "conxunto de cabaleiro" contigo.

Sysprep.bat – para selar o 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

Cando se inicie, o script comprobará a presenza da conta "Administrador" e creará unha se a falta. A conta engadirase ao grupo Administradores.

Unattend.xml: ficheiro de resposta 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>

Ao selar no modo de auditoría, o script engadirá un comando ao rexistro para finalizar o proceso "sysprep.exe" para non pechar a xanela de sysprep manualmente cada vez. Cando está selado no modo ola, o script eliminará o comando para pechar a xanela do rexistro e el mesmo cambiará o valor da arquitectura do ficheiro de resposta ao actual. O ficheiro de resposta contén parámetros para iniciar o sistema sen interacción do usuario e un comando para eliminar o cartafol "Sysprep" na raíz da unidade do sistema.

Agora vou selar o sistema en modo de auditoría usando "Sysprep.bat" e capturar unha imaxe do sistema. Imaxerei o sistema usando DISM e só o volume do sistema. Se imaxinará só o volume do sistema e non o disco completo, non esqueza copiar o contido do directorio "WindowsSystem32Recovery" no primeiro volume no cartafol "RecoveryWindowsRE" despois de implantar o sistema. Isto terá que facerse antes de cargar o sistema operativo. despois de cargar o sistema operativo, o directorio "WindowsSystem32Recovery" xa estará baleiro.

Paso 3 - Rusificación do sistema

O paquete de idioma pódese instalar sen conexión a Internet se tes este paquete. Se non, o propio sistema descargarao de Internet cando engada o idioma na configuración. Só non é necesario sacar o paquete de idioma de versións anteriores do sistema operativo. Para Windows 10 1809 debe haber un paquete de idioma específico para Windows 10 1809.

Microsoft segue o seu plan de transferir gradualmente a configuración do menú clásico ao novo, polo que no panel de control clásico xa non atoparás a configuración para cambiar o idioma e instalar un paquete de idioma. Estas configuracións están agora só nos parámetros do sistema.

No modo de auditoría, pode atopar un problema ao abrir a configuración do sistema desde o menú Inicio; para abrir a configuración do sistema, execute o comando - "ms-settings:", preste atención aos dous puntos ao final do comando, sen el o comando non funciona. Despois de abrir os parámetros do sistema unha vez usando este comando, pódese abrir mediante o menú gráfico.

Pero na configuración do sistema pode instalar un paquete de idioma se o sistema está conectado a Internet, non hai opción para escoller instalar un paquete de idioma desde un ficheiro local.

Non vou describir o proceso de localización do sistema porque... isto complicará significativamente o artigo, sobre todo porque se detalla o proceso de localización descrito aquí. Pero gustaríame chamar a súa atención sobre a peculiaridade de cambiar o idioma do sistema despois de instalar un paquete de idioma usando a consola. Esta función descríbese na mesma wiki á que proporcionei unha ligazón anteriormente, na subsección "Engadir un idioma á lista de idiomas".

Instalarei o paquete de idioma sen conexión a Internet.

Despois da localización completa do sistema, asegúrese de crear unha imaxe do sistema.

Paso 4 - Instala as aplicacións necesarias

Porque Dado que os sistemas LTSB e LTSC non teñen unha tenda de aplicacións, a instalación de aplicacións desde Microsoft Store provoca algunhas dificultades, é dicir, descargar a aplicación. Para descargar aplicacións, a empresa Adguard fixo un servizo moi cómodo: "Tenda Adguard", co que podes obter ligazóns de descarga temporais para aplicacións e os seus compoñentes.

Para instalar a aplicación, necesitará ficheiros coas extensións "Appx" e "AppxBundle". Antes de instalar a propia aplicación, debes instalar os seus compoñentes. Como regra xeral, os compoñentes dunha aplicación pódense distinguir intuitivamente polo nome do ficheiro.

Para non facer o artigo demasiado longo, non vou describir en detalle o proceso de instalación de aplicacións, especialmente porque hai información sobre a instalación instrucións detalladas. Pero engadirei un xeito máis de instalar aplicacións na túa conta actual. As aplicacións pódense instalar mediante o programa "Instalador de aplicacións", pero para instalar aplicacións necesitarás unha conexión a Internet, pero as aplicacións pódense instalar cun dobre clic e non necesitarás os seus compoñentes, descargaranse e instalaranse todos os compoñentes necesarios. "Instalador de aplicacións".

E un pequeno recordatorio, ao instalar a aplicación na conta actual, non poderá selar o sistema. Como instalar aplicacións para que poida selar o sistema, consulte as instrucións anteriores. E para comprobar o funcionamento do multiquiosco, as aplicacións existentes son bastante suficientes.

Paso 5: creación dun ficheiro de configuración para o multikiosco

Agora chegamos á parte máis interesante: configurar o modo quiosco. Vexamos instrución segundo a configuración que vemos. Primeiro de todo, necesitaremos crear un ficheiro de configuración XML, un exemplo completo do cal pódese atopar aquí. mira aquí.

Comecemos configurando o deseño do mosaico. A forma máis sinxela de crear unha configuración de personalización de mosaicos XML é exportar o seu estado actual.

En primeiro lugar, imos engadir mosaicos das aplicacións que necesitamos ao menú Inicio. Chama a busca "Win+s", busca a aplicación desexada, fai clic co botón dereito sobre ela e selecciona "Pin to Start Screen".

Fixei as seguintes aplicacións:

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

As dúas últimas solicitudes foron fixadas porque... Simplemente non hai outras aplicacións universais no paquete estándar LTSC. Teña en conta que os mosaicos do escritorio enlazan con atallos. Agora, movendo as tellas directamente no menú Inicio, separarei as tellas fixadas en dous grupos. Para crear un novo grupo de tellas, arrastra unha tella significativamente máis alta ou máis baixa que outras tellas, o que destacará un divisor intuitivo. Podes nomear os grupos ao teu criterio; para iso, coloca o cursor do rato enriba do grupo e, cando apareza a inscrición "Nome o grupo", fai clic co botón esquerdo do rato. Chamarei ao primeiro grupo "Configuración", incluirá os mosaicos "Configuración" e "Seguridade de Windows". Chamarei ao segundo grupo "Aplicacións ofimáticas", que incluirá todos os demais mosaicos. Por certo, pode mover grupos enteiros de mosaicos arrastrándoos usando as dúas franxas que se atopan na parte superior dereita do nome do grupo.

Porque No mosaico "Seguridade de Windows" o nome non encaixa completamente, cambiarei o seu tamaño a "Wide". Para cambiar o tamaño dunha tella, fai clic co botón dereito sobre a tella e selecciona "Redimensionar".

Despois da configuración, exportamos o estado actual e executamos o comando no ambiente PowerShell - "Export-StartLayout - ruta C:SysprepStartLayout.xml".

A continuación, o xeito máis sinxelo é non crear vostede mesmo o ficheiro de configuración, senón toma un ficheiro de exemplo de aquí configuración: fai clic no botón "Copiar", pega o contido no bloc de notas e gárdao como "MultiAppKiosk.xml". Agora cambiamos a configuración á nosa. Para cambiar a configuración dos mosaicos adxuntos, copie todo o bloque "StartLayoutCollection" de "StartLayout.xml" a "MultiAppKiosk.xml". Para engadir aplicacións ás permitidas, cómpre inserir identificadores universais de aplicacións na sección "AllowedApps" e no mesmo bloque engadir a ruta completa aos ficheiros executables das aplicacións clásicas, que se especifica nas propiedades dos atallos aos que se tellas refírense. Para acceder rapidamente a un atallo, fai clic co botón dereito nun mosaico fixado e vai a Máis > Ir á localización do ficheiro. Teña en conta que o parámetro "AppUserModelId" úsase para especificar o ID de aplicación universal e o parámetro "DesktopAppPath" úsase para especificar a ruta completa á aplicación de escritorio. E un pequeno matiz máis, se pensas usar IE nun sistema x64, na lista de aplicacións permitidas debes especificar dous camiños para o ficheiro executable "Program FilesInternet Exploreriexplore.exe" e "Program Files (x86)Internet Exploreriexplore. exe”.

Non vou dar acceso aos cartafoles, polo que estou eliminando a sección "FileExplorerNamespaceRestrictions".

Mostrar a barra de tarefas non me molesta, así que deixo todo como está na sección "Barra de tarefas".

No exemplo, especifícanse dous perfís, pero só terei un perfil, polo que se pode eliminar a sección co segundo perfil. Antes de desinstalar, preste atención ao exemplo de iniciar automaticamente unha aplicación con argumentos.

Na sección "Configuracións", as contas están vinculadas a perfís; ten en conta que se poden ligar varias contas a un mesmo perfil. Pero porque Só me interesa unha conta, entón eliminarei todos os enlaces excepto o primeiro: os bloques "Configuración". Na ligazón restante escribirei o nome de usuario "Usuario".

Conseguín este ficheiro 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>

Cando faga os seus ficheiros de configuración XML, non esqueza que cada perfil debe ter un ID único, e non só dentro dun ficheiro XML, senón dentro dun SO. Eses. Idealmente, para evitar confusións, pode crear un novo identificador cada vez; isto pódese facer no ambiente PowerShell mediante o comando "[guid]::NewGuid()". E asegúrate de gardar o ficheiro en codificación "UTF-8"; se o ficheiro está gardado en codificación "ANSI", entón ao crear o paquete de preparación recibirás un erro se o ficheiro XML contén cirílico.

Paso 6: aplicar a configuración do multiquiosco

Vexamos dúas formas de aplicar a configuración descrita no ficheiro de configuración. O primeiro é a través dun paquete de aprovisionamento, que debe crearse no ICD. Para algúns, quizais este método sexa máis familiar. O segundo é usar o "Proveedor WMI MDM Bridge", este método pareceume máis cómodo.

Método # 1

Quen non ten un ICD? Descargar ADK e instalar. A instalación de ADK é moi sinxela; o conxunto de compoñentes pódese deixar como predeterminado.

Inicie ICD, prema no mosaico "Preparación avanzada", especifique o nome e cartafol do proxecto e prema en "Seguinte". Na seguinte xanela, seleccione "Todas as edicións do escritorio de Windows" e prema en "Seguinte". Podes omitir a importación do paquete de preparación; fai clic en "Finalizar".

Expanda o menú despregable "Configuración do tempo de execución" e, a continuación, expanda o submenú "Acceso asignado" e seleccione "Configuración de acceso asignado múltiple". Na parte superior da sección central da xanela ICD, faga clic no botón "Examinar" e indique a localización do ficheiro XML coa configuración. Por se acaso, pode gardar o proxecto premendo "Ctrl+s". Na parte superior esquerda do ICD, seleccione "Exportar" e seleccione "Paquete de aprovisionamento" no menú despregable. Como propietario, seleccione "Administrador de TI"; Pódense omitir todas as outras preguntas facendo clic en "Seguinte" e ao final en "Construír" e "Finalizar".

No sistema instalado, non esqueza crear un usuario "Usuario"; non se pode engadir ao grupo "Administradores", se non, o multiquiosco non funcionará. Creei un usuario en Xestión informática cun contrasinal que nunca caduca.

Agora executamos o paquete de preparación no sistema instalado previamente. Despois de aplicar o paquete de preparación, cambiarán o menú Inicio e o menú do administrador. Na columna de inicio da esquerda deberían desaparecer os botóns: "Documentos", "Imaxe", "Opcións". Se o menú de inicio non cambiou, algo saíu mal. Pódese eliminar un paquete instalado abrindo a xanela Configuración > Contas > Acceso á conta laboral ou escolar > Engadir ou eliminar paquete de aprovisionamento.

Se o menú de inicio cambiou, a configuración aplícase ao sistema, inicie sesión como o usuario para o que está configurado o multikiosco e mire o resultado.

Método # 2

Aplicando a configuración usando "MDM Bridge WMI Provider" descrito aquí. A comodidade deste método é a súa flexibilidade de uso e a capacidade de desfacerse de moitas operacións manuais que son necesarias para crear un paquete de preparación. Aquí cada un pode tomar unha decisión por si mesmo que lle resulte conveniente. Fixen un par de guións para min.

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 – script 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

Se queres usar a miña solución, garda os scripts anteriores cos seus nomes orixinais nun cartafol e pon o ficheiro "PsExec.exe" no mesmo cartafol. No mesmo cartafol, cree un cartafol "XML" e copie os ficheiros XML para configurar o multiquiosco nel. Vou usar o mesmo ficheiro que no primeiro 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 pouco sobre as características do guión. O script está deseñado para usar ficheiros XML con codificación "UTF8"; se quere usar a codificación "ANSI", elimine o parámetro "codificación UTF8" da opción de lectura do ficheiro. Debe colocar ficheiros XML no cartafol "XML" sen substituír caracteres; o propio script substituirá os caracteres especiais coas designacións adecuadas. Para non confundirse nos GUID de vincular usuarios a perfís, pode simplemente indicar o número de usuario ou o nome entre chaves; todo o contido en chaves será substituído por GUID.

Usar o script é moi sinxelo, só tes que executalo e seleccionar o elemento necesario. Para cambiar a configuración actual a unha nova, non é necesario eliminar a actual; sobrescribirase. Non esqueza crear usuarios que se especifican no ficheiro de configuración.

Ao visualizar a configuración do multiquiosco actual na mesma sesión na que se aplicou, en lugar de caracteres especiais, mostraranse combinacións de caracteres de substitución. Despois de cambiar a sesión (reiniciar o script), todos os caracteres especiais mostraranse na súa forma orixinal.

Paso 7: selado do sistema

O multiquiosco funciona, ben, iso é todo, ao parecer...

Se todo vai segundo o plan, entón non estás notando nada.

Non esquezas que aínda necesitamos cambiar o sistema do modo de auditoría ao modo de benvida. Ben, estamos preparados para iso, lanzamos "Sysprep.bat", seleccione o punto 2, o sistema está selado. Acendemos o dispositivo, o sistema arranca, iniciamos sesión na conta de usuario para a que está configurado o multikiosco, pero non podemos iniciar sesión. Despois da mensaxe "Benvido", aparece a mensaxe "Saír".

Ao principio quería describir só a solución do problema, pero máis tarde decidín describir os pasos para identificar o problema e atopar a solución máis sinxela porque... Seguramente moitos lectores estarán atormentados por vagas dúbidas: "E se é así...". Creo que describir os distintos experimentos aforrarache unha cantidade significativa de tempo se queres atopar outra solución. Para que a información sexa o máis precisa posible e para asegurarme de novo de que non hai erros, describirei os experimentos no formato "feito e gravado". Eses. Volverei facer os experimentos descritos.

experimentos

Que fixemos? Hai dúas contas no sistema:

"Administrador" - no grupo "Administradores".
"Usuario": no grupo "Usuarios".
No modo de auditoría, o multiquiosco funcionaba, pero cando estaba selado, non funcionaba.

Experimento 1

Eliminamos o paquete de preparación instalado, no complemento "Xestión de ordenadores" eliminamos o usuario "Usuario" e creamos un novo usuario co nome "Usuario", aplicamos o paquete de preparación, vai á conta "Usuario" - faino non funciona. Pasamos ao nome "Administrador", eliminamos o usuario "Usuario" do grupo "Usuarios", engadímolo ao grupo "Administradores", pasamos ao nome "Usuario" - non funciona. Iniciamos sesión co nome "Administrador", eliminamos o paquete de preparación co multiquiosco, iniciamos sesión baixo o nome "Usuario"; conseguimos iniciar sesión, pero, por suposto, o modo multiquiosco non funciona porque Eliminouse o paquete de aprovisionamento.

Experimento 2

Subimos a imaxe do sistema - Rusificada en modo auditoría.

O SO cargou, preme "Win + r", porque A nosa xanela de sysprep pechouse automaticamente, executa o comando "sysprep" e executa "sysprep" na xanela que se abre. Configuración de Sysprep na xanela: "Ir á xanela de benvida do sistema (OOBE)", "Preparación para o seu uso", "Reiniciar". Fai clic en "Aceptar" e agarda o saúdo do sistema operativo. Respondemos ás preguntas cando se inicia o sistema por primeira vez: "Queres continuar no idioma seleccionado?" - "ruso"; rexión - Rusia; disposición do teclado - ruso; engadir unha segunda disposición de teclado - omitir; "Imos conectarte á rede" - "Saltar por agora"; conectarse a Internet - non; contrato de licenza - aceptar; "Quen usará este ordenador" - "Proba"; creando un contrasinal: deixe o campo en branco; Funcionamento cómodo en diferentes dispositivos - non; Configuración de privacidade: aceptar. Cargouse o SO, no complemento "Xestión de ordenadores" creamos un usuario co nome "Usuario", engadimos o paquete de preparación. O resultado é que non funciona.

Experimento 3

Subimos a imaxe do sistema - Rusificada en modo auditoría.

Cargouse o SO, conecte o sistema a Internet, execute o comando "gpedit.msc" e na sección "Actualización de Windows" active a opción "Activar actualizacións recomendadas mediante actualizacións automáticas", reinicie por se acaso. No centro de actualizacións, fai clic en "Buscar actualizacións" e reinicia ata que se instalen todas as actualizacións. Desconecte o sistema de Internet. Lanzamos "sysprep" en modo gráfico e repetimos todos os pasos descritos no paso anterior desde a execución da utilidade "sysprep" ata engadir o paquete de preparación. O resultado é que non funciona.

Experimento 4

Subimos a imaxe do sistema - inglés en modo auditoría.

Lanzamos "sysprep" en modo gráfico, selamos o sistema operativo cos mesmos parámetros que durante o experimento 2. Cando o sistema arranca por primeira vez, seleccionamos os mesmos parámetros que no experimento 2, coa excepción dos parámetros rexionais e de idioma porque Non hai lingua rusa. Do mesmo xeito, crea un usuario "Usuario" e engade un paquete de aprovisionamento. O resultado é que funciona. Eses. O problema está relacionado coa localización.

Experimento 5

Subimos a imaxe do sistema - Rusificada en modo auditoría.

No complemento "Xestión de ordenadores", cree un usuario "Usuario", engade un paquete de preparación, vai á conta "Usuario", o multiquiosco funciona.

Pecha sesión na túa conta e inicia sesión na conta "Administrador". Lanzamos PowerShell con dereitos de administrador, executamos o comando "Dism /online /Get-Intl" e vemos "Idioma da interface de usuario predeterminado: en-US".

Arrancamos desde a unidade flash a WinPE, o sistema operativo implantado está na miña unidade E. Executamos o comando "Dism /image:E: /Set-UILang:ru-ru". Observamos o resultado, executamos "Dism /image:E: /Get-Intl" e vemos "Idioma predeterminado da IU do sistema: ru-RU".

Iniciamos o sistema, iniciamos sesión na conta "Usuario", o multikiosco non funciona.

Para establecer claramente a relación causa-efecto do problema, tentemos de novo que o multiquiosco funcione e non funcione.

Arrancamos desde a unidade flash a WinPE, o sistema operativo implantado está na miña unidade E. Executamos o comando "Dism /image:E: /Set-UILang:en-us". Observamos o resultado, executamos "Dism /image:E: /Get-Intl" e vemos "Idioma da IU do sistema predeterminado: en-US".

Iniciamos o sistema, iniciamos sesión na conta "Usuario", o multikiosco funciona.

Arrancamos desde a unidade flash a WinPE, o sistema operativo implantado está na miña unidade E. Executamos o comando "Dism /image:E: /Set-UILang:ru-ru". Observamos o resultado, executamos "Dism /image:E: /Get-Intl" e vemos "Idioma predeterminado da IU do sistema: ru-RU".

Iniciamos o sistema, iniciamos sesión na conta "Usuario", o multikiosco non funciona.

Eses. podes ver unha clara dependencia do rendemento do quiosco do idioma da interface de usuario predeterminado. Quizais haxa outros factores que afectan o rendemento do multiquiosco?

Experimento 6

Para a pureza do experimento, enchemos o sistema. Subimos a imaxe do sistema - Rusificada en modo auditoría.

Lanzamos "sysprep" en modo gráfico, selamos o SO cos mesmos parámetros que durante o experimento 2. Agardamos a que o SO nos saúde e responda ás preguntas: "Continuar no idioma seleccionado?" – “Inglés (Estados Unidos)”; rexión - Rusia; Disposición do teclado - ruso. Ademais, todos os parámetros foron seleccionados como no experimento 2.

Vexamos a configuración predeterminada do idioma da interface de usuario. Executamos o comando "Dism /online /Get-Intl" e vemos "Idioma da IU do sistema predeterminado: en-US". No complemento "Xestión de ordenadores", cree un usuario "Usuario", engade un paquete de preparación, vai á conta "Usuario", o multiquiosco funciona.

Estamos tentando romper o quiosco cambiando o idioma da interface de usuario predeterminado. Entramos ao usuario "Test", que se creou cando o sistema iniciou por primeira vez e activamos o inicio de sesión automático para que o sistema non se inicie na conta "Usuario" inmediatamente. Execute "netplwiz", seleccione o usuario "Proba", desmarque a caixa de verificación "Requirir nome de usuario e contrasinal" e aplique os parámetros.

Arranque desde unha unidade flash en WinPE. Execute o comando "Dism /image:E: /Set-UILang:ru-ru". Observamos o resultado, executamos "Dism /image:E: /Get-Intl" e vemos "Idioma predeterminado da IU do sistema: ru-RU".

Iniciamos o sistema, tentamos iniciar sesión na conta "Usuario", o multikiosco funciona. Eses. non se pode romper. É posible facelo funcionar deste xeito?

Experimento 7

Subimos a imaxe do sistema - Rusificada en modo auditoría.

Lanzamos "Sysprep.bat", seleccionamos o punto 2. Arrancamos no sistema, creamos o usuario "Usuario" no complemento "Xestión de ordenadores", engade o paquete de preparación, vai á conta "Usuario", o multi- o quiosco non funciona.

Arranque desde unha unidade flash en WinPE. Execute o comando "Dism /image:E: /Set-UILang:en-us". Observamos o resultado, executamos "Dism /image:E: /Get-Intl" e vemos "Idioma da IU do sistema predeterminado: en-US".

Iniciamos o sistema, tentamos iniciar sesión na conta "Usuario", o multikiosco non funciona.

Acontece que ao cambiar a configuración de idioma da interface de usuario predeterminada, pode afectar o rendemento do multikiosco só cando o sistema está en modo de auditoría ou no primeiro arranque despois de selar o sistema. Isto significa que terás que selar o sistema cun ficheiro de resposta no que se seleccionará o idioma do sistema en inglés e, a continuación, cambiar a configuración do sistema para que a interface sexa rusa. Non é unha solución moi boa. Quizais o problema se poida resolver instalando un paquete de idioma ou instalando paquetes de idioma adicionais?

Experimento 8

Subimos a imaxe do sistema - inglés en modo auditoría.

Conectámonos a Internet, nos parámetros do sistema vai á sección "Idioma", selecciona "Engadir idioma", selecciona o idioma "Ruso", fai clic en "Seguinte", deixa os parámetros de instalación por defecto, fai clic en "Instalar", despois da instalación. o paquete de idioma reiniciamos o sistema, agora en Russified. Desconecte o sistema de Internet, execute "Sysprep.bat", seleccione o punto 2.

Despois de cargar o sistema, no complemento "Xestión de ordenadores", cree o usuario "Usuario", engada o paquete de preparación, vaia á conta "Usuario", o quiosco múltiple non funciona.

Experimento 9

Tentemos rusificar o sistema antes da instalación, en modo fóra de liña. Paralelamente realizarase un pequeno programa educativo sobre a localización da distribución.

Levo unha unidade flash cunha distribución orixinal limpa - X21-96381. Será a unidade "E". Para montar imaxes, creo cartafoles: “c:MountInstall”, “c:MountWinre”, “c:MountBoot”. Levo un conxunto de paquetes de localización: X21-87814. E no cartafol "c:Mount" copio os paquetes: "Microsoft-Windows-Client-Language-Pack_x86_ru-ru.cab", "lp.cab", "WinPE-Setup_ru-ru.cab". Lanzo a consola con dereitos de administrador. Creo que máis comandos quedarán claros sen 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 a unidade flash, seleccionamos o idioma ruso e instalamos o sistema nun disco en branco. Cando o sistema che pida que selecciones unha rexión, preme "Ctrl + Maiús + F3". No complemento "Xestión de ordenadores", cree un usuario "Usuario", engada un paquete de preparación, vaia á conta "Usuario", o quiosco múltiple non funciona.

Arranque desde unha unidade flash en WinPE. Execute o comando "Dism /image:E: /Set-UILang:en-us".

Iniciamos o sistema, tentamos iniciar sesión na conta "Usuario", o multikiosco funciona.

Ao parecer, o problema non está nos métodos de engadir un paquete, imos tentar engadir paquetes adicionais.

Experimento 10

Collemos a unidade flash que preparamos no paso anterior.

Tomamos o paquete "Feat on Demand" - X21-87815. Copio os paquetes deste ao cartafol "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 a consola con dereitos de administrador e execute os 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 a unidade flash, seleccionamos o idioma ruso e instalamos o sistema nun disco en branco. Cando o sistema che pida que selecciones unha rexión, preme "Ctrl + Maiús + F3". No complemento "Xestión de ordenadores", cree o usuario "Usuario", engade o paquete de aprovisionamento e inicie sesión na conta "Usuario". Tiven unha pantalla negra que colgou durante moito tempo, así que iniciei o sistema en quente.

Eliminamos o paquete de preparación, iniciamos sesión como "Usuario", reiniciamos o sistema, engadimos o paquete de preparación, o multikiosco non funciona.

Arranque desde unha unidade flash en WinPE. Execute o comando "Dism /image:E: /Set-UILang:en-us".

Iniciamos o sistema, tentamos iniciar sesión na conta "Usuario", o multikiosco funciona.

Solución alternativa

Heroes normais. Sempre dan un rodeo!

Varios métodos de instalación de paquetes de localización non resolveron o problema, o que significa que terás que instalar o idioma "en-us" no primeiro arranque despois do selado e cambiar a configuración do idioma despois do primeiro arranque.

Subimos a imaxe do sistema - Rusificada en modo auditoría.

No ficheiro "Unattend.xml", introduza "en-US" no parámetro, execute "Sysprep.bat", seleccione o punto 2 e vexa o que conseguimos. A pantalla de benvida está en inglés, o multiquiosco funciona. Isto significa que debes engadir un comando a "Unattend.xml" para cambiar o idioma do saúdo. E para iso, cómpre executar o comando "control intl.cpl,, /f:" indicando o ficheiro de configuración, que especificará a copia dos parámetros actuais na pantalla de benvida. O contido do ficheiro de configuración será así.

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

Porque copiará a configuración do usuario actual, entón o comando debe executarse despois de que o usuario inicie sesión, o que significa que necesitaremos. Hai un pequeno "pero", a execución terá lugar despois de que un usuario con dereitos de administrador inicie sesión. E non me gustaría crear un ficheiro adicional que sería necesario para que o comando funcione correctamente. É mellor implementar a solución completa nun único ficheiro: "Unattend.xml". Para iso, só terás que executar un comando que cree un ficheiro de configuración. Creo que crearei un ficheiro de configuración usando o comando "echo" no ambiente "cmd", pero ten que escapar dos corchetes angulares cun circunflexo. Eses. Para crear un ficheiro de configuración, obtense o seguinte 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 ten os seus propios requisitos para o uso de caracteres especiais:

Carácter especial
Valor de substitución

>
&gt;

<
&lt;

&
&amp;

'
&apos;

"
&quot;

Como resultado, para crear un ficheiro de configuración, obtivemos o seguinte 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, executamos o comando usando o ficheiro de configuración.

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

A continuación, elimine o ficheiro creado anteriormente e reinicie o sistema. os cambios terán efecto despois dun reinicio.

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

Como resultado, acabei co seguinte ficheiro de resposta 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>

Comprobamos...

Subimos a imaxe do sistema - Rusificada en modo auditoría.

Cambiamos o ficheiro Unattend.xml por un novo, executamos "Sysprep.bat", seleccionamos o punto 2 e vemos o que conseguimos. Cando inicias por primeira vez, a pantalla de benvida está en inglés e o sistema reinicia. A pantalla de benvida está en ruso, o multiquiosco funciona.

Se tes algunha dúbida sobre a configuración e a licenza de Windows 10 IoT Enterprise, ponte en contacto con: [protexido por correo electrónico] ou ao sitio web quarta-embedded.ru.
Podes atopar respostas a algunhas preguntas en a nosa wiki ou na nosa Canle de YouTube

Autor do artigo: Vladimir Borisenkov, experto técnico en Quarta Technologies.

Fonte: www.habr.com