Windows 10 IoT Enterprise 2019 – modo multiquiosque

Introdução

Windows 10 IoT Enterprise 2019 é o nome comercial do próximo lançamento do Windows 10. O lançamento desta versão foi anunciado em setembro de 2018, respectivamente, possui a versão 1809, 18 é o ano, 09 é o mês. Muitos artigos foram escritos sobre a nova versão do Windows 10 1809, mas a maioria deles é dedicada a vários “arcos”, “belezas” e diversas funcionalidades que são procuradas em casa.
Este artigo discutirá apenas funcionalidades que podem ser exigidas pelos fabricantes de dispositivos de uso fixo. Nomeadamente, sobre as novas capacidades do modo “Quiosque”. O tópico de mudança de nomes de esquemas de serviço para edições Windows do segmento corporativo também será abordado.

Esquema de serviço antigo com novo nome

Deixe-me começar com uma breve explicação: no segmento corporativo de edições do Windows existem dois esquemas de serviço segundo os quais o Windows recebe atualizações. Os diagramas de serviço possuem uma designação de letra. Atualmente as agências de atendimento são denominadas LTSC e SAC.

LTSC significa Canal de manutenção de longo prazo (com manutenção a longo prazo). Anteriormente, esse canal era chamado de LTSB - Long Term Servicing Branch, a Microsoft simplesmente mudou o nome do canal de serviço, o serviço em si permaneceu o mesmo.

A Microsoft também mudou o nome da agência de atendimento CBB - Atual Agência Empresarial, agora essa agência de atendimento se chama SAC - Canal semestral. Novamente, apenas o nome mudou.

Mas deve ser mencionado que as filiais de atendimento LTSC e SAC utilizam diferentes distribuições do Windows.

Um pouco sobre a nova modalidade quiosque do SAC

Como já disse, LTSC e SAC possuem distribuições diferentes. O LTSC não possui aplicativos universais padrão ou uma loja de aplicativos, mas o SAC possui. Conseqüentemente, o LTSC não possui um navegador Edge, mas o SAC possui. Se você selecionar o navegador Edge ao configurar um quiosque, dois modos estarão disponíveis:

  1. Como sinal digital ou display interativo
  2. Como um navegador público

Não vou me alongar na configuração desses modos, porque... A configuração é muito simples e é feita em uma interface gráfica. Basta criar um usuário que não seja membro do grupo Administradores, habilitar o modo quiosque para ele usando EDGE e ver como funcionam esses modos.

Quiosque com muitas aplicações

Algumas pessoas pensam que o uso licenciado Windows 10 IoT Empresarial implica o funcionamento de apenas um aplicativo no dispositivo, na verdade não é o caso. O dispositivo deve ser projetado para executar uma única tarefa comercial e o usuário não deve ter acesso a um desktop. Agora a própria Microsoft forneceu a ferramenta para usar muitos aplicativos. Este modo é chamado de “quiosque multi-app”; daqui em diante, por questões de brevidade, vou chamá-lo de “multiquiosque”. Neste artigo veremos como configurar este modo usando o pacote de software e alguns dos recursos deste modo.

Um pouco sobre o modo Multikiosk

Ao fazer login em uma conta de usuário para a qual o modo multiquiosque está configurado, o sistema funcionará no modo tablet. O menu Iniciar será expandido para tela inteira, exibindo blocos de aplicativos.

Lista de configurações básicas e recursos de modo:

  1. Configuração para vários usuários ou grupos
  2. Cada usuário ou grupo pode receber configurações individuais
  3. Capacidade de usar aplicativos universais e clássicos
  4. A capacidade de iniciar automaticamente um dos aplicativos quando o usuário faz login
  5. Aplicativos na lista de permissões
  6. Acessando pastas usando uma lista branca

Vale atentar para o ponto 5. Por padrão, apenas poderão funcionar os aplicativos necessários ao funcionamento do sistema, outros aplicativos deverão ser adicionados à lista de permitidos. Aqueles. Agora você não precisa configurar o AppLocker separadamente. A propósito, para evitar conflitos com as configurações do AppLocker, no modo multiquiosque, todas as regras do AppLocker configuradas não serão aplicadas.

O ponto 6 indica uma boa opção, mas no momento só é possível dar permissão de gravação para a pasta “Downloads”. O modo permite usar aplicativos universais e clássicos. Todas as configurações de modo são especificadas em um arquivo XML, no qual você também pode especificar configurações para um único quiosque de aplicativo.

Agora vamos tentar configurar tudo...

O que nós precisamos...

  1. Em primeiro lugar, precisamos do próprio sistema, que suporta o modo multiquiosque. Aqui você pode baixar versão demo
  2. Instruções para configurar um multiquiosque
  3. Qualquer editor XML
  4. Para aplicar configurações de multiquiosque:
    1. Para o método nº 1 - CID, que faz parte do ADK. ADK é possível baixe aqui
    2. Para o método nº 2 - o utilitário PsExec. A utilidade pode ser baixe aqui

Ele disse - “Vamos!”

Conduzirei todos os experimentos na versão comercial do Windows 10 IoT Enterprise 1809 LTSC x32, não em uma versão demo. O sistema não será ativado porque a falta de ativação não afeta a funcionalidade do sistema. Peguei 32 bits apenas porque ocupa menos espaço e será mais rápido trabalhar com imagens do sistema.

Passo 1 – instalação

Instalar o Win 10 IoT Enterprise não é diferente de instalar o Win 10 Enterprise, portanto não descreverei todo o processo de instalação, falarei apenas sobre algumas das nuances.

Por precaução, deixe-me lembrá-lo, não instale o sistema em cima do instalado. Quando o instalador perguntar sobre o local de instalação do sistema, exclua todas as partições do futuro disco do sistema e especifique um disco não particionado.

Instalamos o sistema sem conexão com a Internet para que o sistema não retire nada desnecessário.

Porque Criaremos imagens de backup do sistema e para isso iremos selá-lo em modo de auditoria, então você pode economizar tempo carregando o sistema em modo de auditoria imediatamente após a instalação. Para fazer isso, quando o sistema solicitar que você selecione uma região “Vamos começar com a região. Está certo" basta pressionar "Ctrl+Shift+F3".

Etapa 2 – crie uma imagem do sistema

Porque vamos zombar do sistema e tentar várias novas configurações, é possível que algo dê errado e precisaremos retornar o sistema ao seu estado original. E para retornar rapidamente ao seu estado original, você precisa criar uma imagem do sistema. A única coisa que farei é copiar o “kit de cavalheiros” - o script e o arquivo de resposta. Todos os meus arquivos estão localizados na pasta “Sysprep”, que copio para a raiz do disco do sistema. E naturalmente, vou compartilhar esse “conjunto de cavalheiros” com vocês.

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

Ao ser iniciado, o script verificará a presença da conta “Admin” e criará uma se estiver faltando. A conta será adicionada ao grupo Administradores.

Unattend.xml – arquivo 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 auditoria, o script adicionará um comando ao registro para encerrar o processo “sysprep.exe” para não fechar a janela do sysprep manualmente todas as vezes. Quando selado no modo hello, o script removerá o comando para fechar a janela do registro e alterará o valor da arquitetura no arquivo de resposta para o atual. O arquivo de resposta contém parâmetros para inicializar o sistema sem interação do usuário e um comando para excluir a pasta “Sysprep” na raiz da unidade do sistema.

Agora vou selar o sistema em modo de auditoria usando “Sysprep.bat” e capturar uma imagem do sistema. Farei uma imagem do sistema usando DISM e apenas o volume do sistema. Se você deseja criar uma imagem apenas do volume do sistema, e não do disco inteiro, não se esqueça de copiar o conteúdo do diretório “WindowsSystem32Recovery” para o primeiro volume na pasta “RecoveryWindowsRE” após implantar o sistema. Isso precisará ser feito antes de carregar o sistema operacional. após carregar o SO, o diretório “WindowsSystem32Recovery” já estará vazio.

Passo 3 – Russificação do sistema

O pacote de idiomas pode ser instalado sem conexão com a Internet se você tiver este pacote. Caso contrário, o próprio sistema fará o download da Internet quando você adicionar o idioma nas configurações. Só não é necessário levar o pacote de idiomas das versões anteriores do sistema operacional. Para o Windows 10 1809, deve haver um pacote de idiomas específico para o Windows 10 1809.

A Microsoft está seguindo seu plano de transferir gradualmente as configurações do menu clássico para o novo, portanto, no painel de controle clássico você não encontrará mais configurações para alterar o idioma e instalar um pacote de idiomas. Essas configurações agora estão apenas nos parâmetros do sistema.

No modo de auditoria, você pode encontrar um problema ao abrir as configurações do sistema no menu Iniciar; para abrir as configurações do sistema, execute o comando - “ms-settings:”, preste atenção aos dois pontos no final do comando, sem ele o comando irá não funciona. Após abrir os parâmetros do sistema uma vez através deste comando, ele pode ser aberto através do menu gráfico.

Mas nas configurações do sistema você pode instalar um pacote de idiomas se o sistema estiver conectado à Internet, não há opção de instalar um pacote de idiomas a partir de um arquivo local.

Não descreverei o processo de localização do sistema porque... isso complicará significativamente o artigo, especialmente porque o processo de localização é detalhado descrito aqui. Mas gostaria de chamar a atenção para a peculiaridade de alterar o idioma do sistema após instalar um pacote de idiomas usando o console. Este recurso é descrito no mesmo wiki para o qual forneci um link anteriormente, na subseção "Adicionando um idioma à lista de idiomas".

Instalarei o pacote de idiomas sem conexão com a internet.

Após a localização completa do sistema, certifique-se de criar uma imagem do sistema.

Passo 4 – Instale os aplicativos necessários

Porque Dado que os sistemas LTSB e LTSC não possuem loja de aplicações, a instalação de aplicações da Microsoft Store causa algumas dificuldades, nomeadamente o download da aplicação. Para baixar aplicativos, a empresa Adguard criou um serviço muito conveniente - "Loja Adguard", com o qual você pode obter links temporários para download de aplicativos e seus componentes.

Para instalar o aplicativo, você precisará de arquivos com as extensões “Appx” e “AppxBundle”. Antes de instalar o aplicativo em si, você deve instalar seus componentes. Como regra, os componentes de um aplicativo podem ser distinguidos intuitivamente pelo nome do arquivo.

Para não prolongar o artigo, não descreverei detalhadamente o processo de instalação de aplicativos, principalmente porque há informações sobre instalação instruções detalhadas. Mas acrescentarei mais uma forma de instalar aplicativos em sua conta corrente. Os aplicativos podem ser instalados usando o programa "Instalador de aplicativos", mas para instalar aplicativos você precisará de uma conexão com a Internet, mas os aplicativos podem ser instalados com um clique duplo e você não precisará de seus componentes, todos os componentes necessários serão baixados e instalados "Instalador de aplicativos".

E um pequeno lembrete, ao instalar o aplicativo na conta corrente, você não conseguirá lacrar o sistema. Como instalar aplicativos para lacrar o sistema, veja as instruções acima. E para verificar o funcionamento do multiquiosque, os aplicativos existentes são suficientes.

Passo 5 – criando um arquivo de configuração para o multiquiosque

Agora chegamos à parte mais interessante: configurar o modo quiosque. Vamos olhar para instrução de acordo com as configurações que vemos. Primeiramente, precisaremos criar um arquivo de configuração XML, cujo exemplo completo pode ser encontrado aqui. olha aqui.

Vamos começar configurando o layout dos blocos. A maneira mais fácil de criar uma configuração de personalização de bloco XML é exportar seu estado atual.

Em primeiro lugar, vamos adicionar blocos dos aplicativos que precisamos ao menu Iniciar. Acesse a busca “Win+s”, encontre o aplicativo desejado, clique com o botão direito sobre ele e selecione “Fixar na tela inicial”.

Fixei os seguintes aplicativos:

  • Bloco de notas
  • Калькулятор
  • Internet Explorer
  • pintar
  • WordPad
  • Parâmetros
  • Segurança do Windows

Os dois últimos aplicativos foram fixados porque... Simplesmente não existem outras aplicações universais no pacote LTSC padrão. Observe que os blocos da área de trabalho estão vinculados a atalhos. Agora, movendo os blocos diretamente no menu Iniciar, separarei os blocos fixados em dois grupos. Para criar um novo grupo de blocos, arraste um bloco significativamente para cima ou para baixo em relação aos outros blocos, o que destacará um divisor intuitivo. Você pode nomear os grupos a seu critério, para isso coloque o cursor do mouse acima do grupo, e quando aparecer a inscrição “Nomeie o grupo”, clique com o botão esquerdo do mouse. Chamarei o primeiro grupo de “Configurações”, que incluirá os blocos “Configurações” e “Segurança do Windows”. Chamarei o segundo grupo de “Aplicativos de Escritório”, que incluirá todos os outros blocos. A propósito, você pode mover grupos inteiros de peças arrastando-as usando as duas listras localizadas no canto superior direito do nome do grupo.

Porque No bloco “Segurança do Windows” o nome não cabe completamente, vou mudar seu tamanho para “Largo”. Para alterar o tamanho de um bloco, clique com o botão direito no bloco e selecione “Redimensionar”.

Após a configuração, exportamos o estado atual e executamos o comando no ambiente PowerShell – “Export-StartLayout – caminho C:SysprepStartLayout.xml”.

A seguir, a maneira mais fácil não é criar você mesmo o arquivo de configurações, mas pegue um arquivo de exemplo daqui configurações – clique no botão “Copiar”, cole o conteúdo no bloco de notas e salve como “MultiAppKiosk.xml”. Agora alteramos as configurações para as nossas. Para alterar as configurações dos blocos anexados, copie todo o bloco “StartLayoutCollection” de “StartLayout.xml” para “MultiAppKiosk.xml”. Para adicionar aplicativos aos permitidos, você precisa inserir identificadores universais de aplicativos na seção “AllowedApps” e no mesmo bloco adicionar o caminho completo para os arquivos executáveis ​​​​dos aplicativos clássicos, que é especificado nas propriedades dos atalhos aos quais o azulejos referem-se. Para acessar rapidamente um atalho, clique com o botão direito em um bloco fixado e vá para Mais > Ir para o local do arquivo. Observe que o parâmetro "AppUserModelId" é usado para especificar o Universal App ID e o parâmetro "DesktopAppPath" é usado para especificar o caminho completo para o aplicativo de desktop. E mais uma pequena nuance, se você planeja usar o IE em um sistema x64, então na lista de aplicativos permitidos você deve especificar dois caminhos para o arquivo executável “Arquivos de ProgramasInternet Exploreriexplore.exe” e “Arquivos de Programas (x86)Internet Exploreriexplore. exe".

Não darei acesso às pastas, por isso estou excluindo a seção “FileExplorerNamespaceRestrictions”.

Exibir a barra de tarefas não me incomoda, então deixo tudo como está na seção “Barra de Tarefas”.

No exemplo, dois perfis são especificados, mas terei apenas um perfil, portanto a seção com o segundo perfil pode ser excluída. Antes de desinstalar, preste atenção ao exemplo de inicialização automática de um aplicativo com argumentos.

Na seção “Configurações”, as contas estão vinculadas a perfis; observe que várias contas podem ser vinculadas a um perfil. Mas porque Estou interessado apenas em uma conta, então excluirei todas as ligações, exceto a primeira - os blocos “Config”. Na ligação restante escreverei o nome de usuário “Usuário”.

Eu tenho esse arquivo com 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>

Ao criar seus arquivos de configuração XML, não esqueça que cada perfil deve ter um ID exclusivo, e não apenas dentro de um arquivo XML, mas dentro de um sistema operacional. Aqueles. Idealmente, para evitar confusão, você pode criar um novo identificador a cada vez; isso pode ser feito no ambiente PowerShell usando o comando “[guid]::NewGuid()”. E certifique-se de salvar o arquivo na codificação “UTF-8”, se o arquivo for salvo na codificação “ANSI”, ao construir o pacote de preparação você receberá um erro se o arquivo XML contiver cirílico.

Passo 6 – aplicando configurações de multiquiosque

Vejamos duas maneiras de aplicar as configurações descritas no arquivo de configuração. A primeira é através de um pacote de provisionamento, que deve ser criado no ICD. Para alguns, talvez este método seja mais familiar. A segunda é usar o “MDM Bridge WMI Provider”, esse método me pareceu mais conveniente.

Método # 1

Quem não tem CDI? baixar ADK e instale. A instalação do ADK é muito simples, o conjunto de componentes pode ser deixado como padrão.

Inicie o ICD, clique no bloco “Preparação avançada”, especifique o nome e a pasta do projeto e clique em “Avançar”. Na próxima janela, selecione “Todas as edições da área de trabalho do Windows” e clique em “Avançar”. Você pode pular a importação do pacote de preparação; clique em “Concluir”.

Expanda o menu suspenso “Configurações de tempo de execução”, expanda o submenu “AssignedAccess” e selecione “MultiAppAssignedAccessSettings”. Na parte superior da seção intermediária da janela do ICD, clique no botão “Browse” e indique a localização do arquivo XML com as configurações. Por precaução, você pode salvar o projeto pressionando “Ctrl+s”. Na parte superior esquerda do ICD, selecione “Exportar” e selecione “Pacote de provisionamento” no menu suspenso. Como proprietário, selecione “Administrador de TI”; todas as outras questões podem ser ignoradas clicando em “Avançar” e no final clique em “Construir” e “Concluir”.

No sistema instalado não se esqueça de criar um usuário “Usuário”; ele não pode ser adicionado ao grupo “Administradores”, caso contrário o multiquiosque não funcionará. Criei um usuário no Gerenciamento do Computador com uma senha que nunca expira.

Agora executamos o pacote de preparação no sistema instalado anteriormente. Após aplicar o pacote de preparação, o menu Iniciar e o menu do administrador serão alterados. Na coluna inicial esquerda devem desaparecer os botões: “Documentos”, “Imagem”, “Opções”. Se o menu iniciar não mudou, algo deu errado. Um pacote instalado pode ser removido abrindo a janela Configurações > Contas > Acesso à conta corporativa ou de estudante > Adicionar ou remover pacote de provisionamento.

Se o menu iniciar foi alterado, as configurações são aplicadas ao sistema, faça login como o usuário para quem o multiquiosque está configurado e veja o resultado.

Método # 2

Aplicando configurações usando "MDM Bridge WMI Provider" descrito aqui. A conveniência desse método é sua flexibilidade de uso e a capacidade de eliminar muitas operações manuais necessárias para criar um pacote de preparação. Aqui todos podem tomar uma decisão que seja conveniente para eles. Eu fiz alguns scripts para mim.

MiltiKiosk.bat – script de lançamento

@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 você quiser usar minha solução, salve os scripts acima com seus nomes originais em uma pasta e coloque o arquivo “PsExec.exe” na mesma pasta. Na mesma pasta, crie uma pasta “XML” e copie nela os arquivos XML para configurar o multiquiosque. Usarei o mesmo arquivo do 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>

Um pouco sobre as características do script. O script foi projetado para usar arquivos XML com codificação “UTF8”, se você quiser usar a codificação “ANSI”, remova o parâmetro “encoding UTF8” da opção de leitura do arquivo. Você deve colocar os arquivos XML na pasta “XML” sem substituir caracteres; o próprio script substituirá os caracteres especiais pelas designações apropriadas. Para não se confundir nos GUIDs de vinculação de usuários a perfis, você pode simplesmente indicar o número ou nome do usuário entre chaves; todo o conteúdo entre chaves será substituído por GUIDs.

Usar o script é muito simples, basta executá-lo e selecionar o item desejado. Para alterar a configuração atual para uma nova, não é necessário excluir a atual; ela será sobrescrita. Não se esqueça de criar usuários especificados no arquivo de configuração.

Ao visualizar a configuração atual do multiquiosque na mesma sessão em que foi aplicada, ao invés de caracteres especiais, serão exibidas combinações de caracteres de substituição. Após alterar a sessão (reiniciar o script), todos os caracteres especiais serão exibidos em sua forma original.

Passo 7 - Selando o Sistema

O multiquiosque funciona, bom, só isso, ao que parece...

Se tudo correr conforme o planejado, você não está percebendo nada.

Não esqueça que ainda precisamos mudar o sistema do modo de auditoria para o modo de boas-vindas. Pois bem, estamos prontos para isso, lançamos “Sysprep.bat”, selecionamos o ponto 2, o sistema está lacrado. Ligamos o dispositivo, o sistema inicializa, fazemos login na conta do usuário para a qual o multiquiosque está configurado, mas não conseguimos fazer login. Após a mensagem “Bem-vindo”, aparece a mensagem “Logout”.

A princípio queria descrever apenas a solução do problema, mas depois decidi descrever os passos para identificar o problema e encontrar a solução mais simples porque... Certamente muitos leitores serão atormentados por vagas dúvidas – “E se for assim...”. Acho que descrever os vários experimentos economizará uma quantidade significativa de tempo se você quiser encontrar outra solução. Para tornar as informações o mais precisas possível e para mais uma vez ter certeza de que não há erros, descreverei os experimentos no formato “feito e registrado”. Aqueles. Farei os experimentos descritos novamente.

experimentos

O que nós fizemos? Existem duas contas no sistema:

“Admin” – no grupo “Administradores”
“Usuário” – no grupo “Usuários”
No modo auditoria, o multiquiosque funcionou, mas quando lacrado não funcionou.

Experiência 1

Excluímos o pacote de preparação instalado, no snap-in “Gerenciamento do Computador” excluímos o usuário “Usuário” e criamos um novo usuário com o nome “Usuário”, aplicamos o pacote de preparação, vamos para a conta “Usuário” - isso faz não funciona. Vamos com o nome “Admin”, removemos o usuário “Usuário” do grupo “Usuários”, adicionamos ao grupo “Administradores”, vamos com o nome “Usuário” - não funciona. Efetuamos login com o nome “Admin”, excluímos o pacote de preparação com o multiquiosque, efetuamos login com o nome “Usuário” - conseguimos fazer o login, mas é claro que o modo multiquiosque não funciona porque O pacote de provisionamento foi removido.

Experiência 2

Carregamos a imagem do sistema - Russified em modo de auditoria.

O sistema operacional foi carregado, pressione “Win+r”, porque Nossa janela sysprep foi fechada automaticamente, execute o comando “sysprep” e execute “sysprep” na janela que se abre. Configurações do Sysprep na janela: “Vá para a janela de boas-vindas do sistema (OOBE)”, “Preparando para uso”, “Reinicializar”. Clique em “OK” e aguarde a saudação do sistema operacional. Respondemos às perguntas quando o sistema inicializa pela primeira vez: “Continuar no idioma selecionado?” - "Russo"; região – Rússia; layout do teclado – russo; adicione um segundo layout de teclado - pule; “Vamos conectar você à rede” – “Pular por enquanto”; conecte-se à Internet - não; contrato de licença - aceitar; “Quem vai usar este computador” – “Teste”; criando uma senha - deixe o campo em branco; Operação conveniente em diferentes dispositivos – não; Configurações de privacidade – aceitar. O SO foi carregado, no snap-in “Gerenciamento do Computador” criamos um usuário com o nome “Usuário”, adicionamos o pacote de preparação. O resultado é que não funciona.

Experiência 3

Carregamos a imagem do sistema - Russified em modo de auditoria.

O sistema operacional foi carregado, conecte o sistema à Internet, execute o comando “gpedit.msc” e na seção “Windows Update” habilite a opção “Ativar atualizações recomendadas por meio de atualizações automáticas”, reinicie por precaução. No centro de atualização, clique em “Verificar atualizações” e reinicie até que todas as atualizações sejam instaladas. Desconecte o sistema da Internet. Lançamos “sysprep” em modo gráfico e repetimos todas as etapas descritas na etapa anterior, desde a execução do utilitário “sysprep” até a adição do pacote de preparação. O resultado é que não funciona.

Experiência 4

Carregamos a imagem do sistema - inglês em modo de auditoria.

Lançamos o “sysprep” em modo gráfico, selamos o sistema operacional com os mesmos parâmetros do experimento 2. Quando o sistema inicializa pela primeira vez, selecionamos os mesmos parâmetros do experimento 2, com exceção dos parâmetros regionais e de idioma porque Não existe idioma russo. Da mesma forma, crie um usuário “Usuário” e adicione um pacote de provisionamento. O resultado é que funciona. Aqueles. O problema está relacionado à localização.

Experiência 5

Carregamos a imagem do sistema - Russified em modo de auditoria.

No snap-in “Gerenciamento do Computador”, crie um usuário “Usuário”, adicione um pacote de preparação, vá para a conta “Usuário”, o multiquiosque funciona.

Saia da sua conta e faça login na conta “Admin”. Lançamos o PowerShell com direitos de administrador, executamos o comando “Dism /online /Get-Intl” e vemos “Idioma padrão da interface do usuário: en-US”.

Inicializamos a partir da unidade flash no WinPE, o sistema operacional implantado está na minha unidade E. Executamos o comando “Dism /image:E: /Set-UILang:ru-ru”. Observamos o resultado, executamos “Dism /image:E: /Get-Intl” e vemos “Idioma padrão da UI do sistema: ru-RU”.

Inicializamos no sistema, fazemos login na conta “Usuário”, o multiquiosque não funciona.

Para estabelecer claramente a relação de causa e efeito do problema, vamos tentar novamente fazer com que o multiquiosque funcione e não funcione.

Inicializamos a partir da unidade flash no WinPE, o sistema operacional implantado está na minha unidade E. Executamos o comando “Dism /image:E: /Set-UILang:en-us”. Observamos o resultado, executamos “Dism /image:E: /Get-Intl” e vemos “Idioma padrão da UI do sistema: en-US”.

Inicializamos no sistema, fazemos login na conta “Usuário”, o multiquiosque funciona.

Inicializamos a partir da unidade flash no WinPE, o sistema operacional implantado está na minha unidade E. Executamos o comando “Dism /image:E: /Set-UILang:ru-ru”. Observamos o resultado, executamos “Dism /image:E: /Get-Intl” e vemos “Idioma padrão da UI do sistema: ru-RU”.

Inicializamos no sistema, fazemos login na conta “Usuário”, o multiquiosque não funciona.

Aqueles. você pode ver uma clara dependência do desempenho do quiosque no idioma padrão da interface do usuário. Talvez existam outros fatores que afetam o desempenho do multiquiosque?

Experiência 6

Para a pureza do experimento, reabastecemos o sistema. Carregamos a imagem do sistema - Russified em modo de auditoria.

Lançamos o “sysprep” em modo gráfico, selamos o SO com os mesmos parâmetros do experimento 2. Esperamos que o SO nos cumprimente e responda às perguntas: “Continuar no idioma selecionado?” - "Inglês dos Estados Unidos)"; região – Rússia; Layout do teclado – Russo. Além disso, todos os parâmetros foram selecionados como no experimento 2.

Vejamos as configurações de idioma padrão da interface do usuário. Executamos o comando “Dism /online /Get-Intl” e vemos “Idioma padrão da UI do sistema: en-US”. No snap-in “Gerenciamento do Computador”, crie um usuário “Usuário”, adicione um pacote de preparação, vá para a conta “Usuário”, o multiquiosque funciona.

Estamos tentando quebrar o quiosque alterando o idioma padrão da interface do usuário. Entramos no usuário “Teste”, que foi criado na primeira inicialização do sistema e habilitamos o login automático para que o sistema não inicialize na conta “Usuário” imediatamente. Execute “netplwiz”, selecione o usuário “Teste”, desmarque a caixa de seleção “Exigir nome de usuário e senha” e aplique os parâmetros.

Inicialize a partir de uma unidade flash no WinPE. Execute o comando “Dism /image:E: /Set-UILang:ru-ru”. Observamos o resultado, executamos “Dism /image:E: /Get-Intl” e vemos “Idioma padrão da UI do sistema: ru-RU”.

Inicializamos no sistema, tentamos fazer login na conta “Usuário”, o multiquiosque funciona. Aqueles. não pode ser quebrado. É possível fazer funcionar dessa maneira?

Experiência 7

Carregamos a imagem do sistema - Russified em modo de auditoria.

Lançamos “Sysprep.bat”, selecionamos o ponto 2. Inicializamos no sistema, criamos o usuário “User” no snap-in “Computer Management”, adicionamos o pacote de preparação, vamos para a conta “User”, o multi- quiosque não funciona.

Inicialize a partir de uma unidade flash no WinPE. Execute o comando “Dism /image:E: /Set-UILang:en-us”. Observamos o resultado, executamos “Dism /image:E: /Get-Intl” e vemos “Idioma padrão da UI do sistema: en-US”.

Inicializamos no sistema, tentamos fazer login na conta “Usuário”, o multiquiosque não funciona.

Acontece que, ao alterar a configuração de idioma padrão da interface do usuário, você pode afetar o desempenho do multikiosk somente quando o sistema estiver no modo de auditoria ou na primeira inicialização após lacrar o sistema. Isso significa que você terá que selar o sistema com um arquivo de resposta no qual o idioma do sistema será selecionado em inglês e, em seguida, alterar as configurações do sistema para que a interface seja russa. Não é uma solução muito boa. Talvez o problema possa ser resolvido instalando um pacote de idiomas ou instalando pacotes de idiomas adicionais?

Experiência 8

Carregamos a imagem do sistema - inglês em modo de auditoria.

Conectamos à Internet, nos parâmetros do sistema vá para a seção “Idioma”, selecione “Adicionar idioma”, selecione o idioma “Russo”, clique em “Avançar”, deixe os parâmetros de instalação como padrão, clique em “Instalar”, após instalar o pacote de idiomas reinicializamos o sistema, agora em Russified. Desconecte o sistema da Internet, execute “Sysprep.bat”, selecione o ponto 2.

Após carregar o sistema, no snap-in “Gerenciamento do Computador”, crie o usuário “Usuário”, adicione o pacote de preparação, vá para a conta “Usuário”, o multi-quiosque não funciona.

Experiência 9

Vamos tentar russificar o sistema antes da instalação, no modo offline. Ao mesmo tempo, será realizado um breve programa educativo sobre a localização da distribuição.

Pego uma unidade flash com uma distribuição original limpa - X21-96381. Será a unidade "E". Para montar imagens, crio pastas: “c:MountInstall”, “c:MountWinre”, “c:MountBoot”. Pego um conjunto de pacotes de localização - X21-87814. E para a pasta “c:Mount” copio os pacotes dela: “Microsoft-Windows-Client-Language-Pack_x86_ru-ru.cab”, “lp.cab”, “WinPE-Setup_ru-ru.cab”. Eu inicio o console com direitos de administrador. Acho que outros comandos ficarão claros sem comentários.

Comandos de localização

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

Inicializamos a partir da unidade flash, selecionamos o idioma russo e instalamos o sistema em um disco vazio. Quando o sistema solicitar que você selecione uma região, pressione “Ctrl+Shift+F3”. No snap-in “Gerenciamento do Computador”, crie um usuário “Usuário”, adicione um pacote de preparação, vá para a conta “Usuário”, o multi-quiosque não funciona.

Inicialize a partir de uma unidade flash no WinPE. Execute o comando “Dism /image:E: /Set-UILang:en-us”.

Inicializamos no sistema, tentamos fazer login na conta “Usuário”, o multiquiosque funciona.

Aparentemente o problema não está nos métodos de adição de um pacote, vamos tentar adicionar pacotes adicionais.

Experiência 10

Pegamos o pen drive que preparamos na etapa anterior.

Pegamos o pacote “Feat on Demand” – X21-87815. Copio os pacotes dele para a pasta “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 o console com direitos de administrador e execute os comandos:

Equipes

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

Inicializamos a partir da unidade flash, selecionamos o idioma russo e instalamos o sistema em um disco vazio. Quando o sistema solicitar que você selecione uma região, pressione “Ctrl+Shift+F3”. No snap-in “Gerenciamento do Computador”, crie o usuário “Usuário”, adicione o pacote de provisionamento e faça login na conta “Usuário”. Recebi uma tela preta que ficou pendurada por um longo tempo, então inicializei o sistema a quente.

Excluímos o pacote de preparação, logamos como “Usuário”, reinicializamos o sistema, adicionamos o pacote de preparação, o multiquiosque não funciona.

Inicialize a partir de uma unidade flash no WinPE. Execute o comando “Dism /image:E: /Set-UILang:en-us”.

Inicializamos no sistema, tentamos fazer login na conta “Usuário”, o multiquiosque funciona.

Gambiarra

Heróis normais. Eles sempre fazem um desvio!

Vários métodos de instalação de pacotes de localização não resolveram o problema, o que significa que você terá que instalar o idioma “en-us” na primeira inicialização após a vedação e alterar as configurações de idioma após a primeira inicialização.

Carregamos a imagem do sistema - Russified em modo de auditoria.

No arquivo “Unattend.xml”, digite “en-US” no parâmetro, execute “Sysprep.bat”, selecione o ponto 2 e veja o que obtivemos. A tela de boas-vindas está em inglês, o multiquiosque funciona. Isso significa que você precisa adicionar um comando ao “Unattend.xml” para alterar o idioma de saudação. E para isso, é necessário executar o comando “control intl.cpl,, /f:” indicando o arquivo de configuração, que especificará a cópia dos parâmetros atuais para a tela de boas-vindas. O conteúdo do arquivo de configuração ficará assim.

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

Porque copiará as configurações do usuário atual, então o comando deverá ser executado após o login do usuário, o que significa que precisaremos. Há um pequeno “mas”, a execução ocorrerá após o login de um usuário com direitos de administrador. E eu não gostaria de criar um arquivo adicional que seria necessário para que o comando fosse executado com êxito. É melhor implementar toda a solução em um único arquivo - “Unattend.xml”. Para fazer isso, basta executar um comando que cria um arquivo de configuração. Acho que vou criar um arquivo de configuração usando o comando "echo" no ambiente "cmd", mas ele precisa escapar dos colchetes angulares com um circunflexo. Aqueles. Para criar um arquivo de configuração, o seguinte comando é obtido.

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

Mas precisamos colocar este comando em XML, que possui requisitos próprios para o uso de caracteres especiais:

Caractere especial
Valor de substituição

>
&gt;

<
&lt;

&
&amp;

'
&apos;

"
&quot;

Como resultado, para criar um arquivo de configuração, 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 seguir, executamos o comando usando o arquivo de configuração.

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

Em seguida, exclua o arquivo criado anteriormente e reinicie o sistema. as alterações entrarão em vigor após uma reinicialização.

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

Como resultado, acabei com o seguinte arquivo de resposta para sysprep.

Autônomo.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 checar...

Carregamos a imagem do sistema - Russified em modo de auditoria.

Alteramos o arquivo Unattend.xml para um novo, executamos “Sysprep.bat”, selecionamos o ponto 2 e vemos o que conseguimos. Na primeira inicialização, a tela de boas-vindas fica em inglês e o sistema é reinicializado. A tela de boas-vindas está em russo, o multiquiosque funciona.

Se você tiver alguma dúvida sobre como configurar e licenciar o Windows 10 IoT Enterprise, entre em contato com: [email protegido] ou para o site quarta-embedded.ru.
Você pode encontrar respostas para algumas perguntas em nossa wiki ou em nosso Canal do youtube

Autor do artigo: Vladimir Borisenkov, especialista técnico da Quarta Technologies.

Fonte: habr.com