Windows 10 IoT Enterprise 2019 - Modalità multichiosco

Introduzione

Windows 10 IoT Enterprise 2019 è il nome commerciale della prossima versione di Windows 10. Il rilascio di questa versione è stato annunciato a settembre 2018, rispettivamente, ha la versione 1809, 18 è l'anno, 09 è il mese. Sono stati scritti molti articoli sulla nuova versione di Windows 10 1809, ma la maggior parte di essi è dedicata a vari "fiocchi", "bellezze" e varie funzionalità richieste a casa.
Questo articolo discuterà solo delle funzionalità che potrebbero essere richieste dai produttori di dispositivi a scopo fisso. Vale a dire, sulle nuove funzionalità della modalità "Kiosk". Verrà inoltre affrontato il tema della modifica dei nomi degli schemi di servizio per le edizioni Windows del segmento enterprise.

Vecchio schema di servizio con nuovo nome

Vorrei iniziare con una breve spiegazione: nel segmento aziendale delle edizioni Windows esistono due schemi di servizio in base ai quali Windows riceve gli aggiornamenti. Gli schemi di servizio hanno una designazione tramite lettera. Attualmente le filiali del servizio si chiamano LTSC e SAC.

LTSC sta per Canale di manutenzione a lungo termine (con manutenzione a lungo termine). In precedenza, tale canale si chiamava LTSB - Long Term Servicing Branch, Microsoft ha semplicemente cambiato il nome del canale di servizio, il servizio stesso è rimasto lo stesso.

Microsoft ha anche cambiato il nome del ramo di servizio CBB - Current Branch for Business, ora questo ramo di servizio si chiama SAC - Canale semi-annuale. Anche in questo caso è cambiato solo il nome.

Ma va detto che i rami di servizio LTSC e SAC utilizzano distribuzioni Windows diverse.

Un po' della nuova modalità chiosco al SAC

Come ho già detto, LTSC e SAC hanno distribuzioni diverse. LTSC non dispone di app universali standard o di un app store, ma SAC sì. Di conseguenza, LTSC non dispone di un browser Edge, ma SAC sì. Se selezioni il browser Edge durante la configurazione di un chiosco multimediale, ora sono disponibili due modalità:

  1. Come segnaletica digitale o display interattivo
  2. Come un browser pubblico

Non mi soffermerò sull'impostazione di queste modalità, perché... La configurazione è molto semplice e viene eseguita tramite un'interfaccia grafica. Basta creare un utente che non sia membro del gruppo Amministratori, abilitare per lui la modalità tutto schermo utilizzando EDGE e vedere come funzionano queste modalità.

Chiosco con molte applicazioni

Alcune persone pensano che l'uso sia concesso in licenza Windows 10 IoT Enterprise implica il funzionamento di una sola applicazione sul dispositivo, in realtà non è così. Il dispositivo deve essere progettato per eseguire una singola attività aziendale e l'utente non deve avere accesso a un desktop. Ora la stessa Microsoft ha fornito lo strumento per utilizzare molte applicazioni. Questa modalità si chiama “multi-app kiosk”; di seguito, per brevità, la chiamerò “multikiosk”. In questo articolo esamineremo la configurazione di questa modalità utilizzando il pacchetto software e alcune delle funzionalità di questa modalità.

Un po' della modalità Multikiosk

Quando accedi a un account utente per il quale è configurata la modalità multi-chiosco, il sistema funzionerà in modalità tablet. Il menu Start si espanderà a schermo intero, visualizzando i riquadri dell'applicazione.

Elenco delle impostazioni di base e delle funzionalità della modalità:

  1. Configurazione per più utenti o gruppi
  2. A ciascun utente o gruppo possono essere assegnate impostazioni individuali
  3. Capacità di utilizzare applicazioni universali e classiche
  4. La possibilità di avviare automaticamente una delle applicazioni quando l'utente accede
  5. Applicazioni autorizzate
  6. Accesso alle cartelle utilizzando una lista bianca

Vale la pena prestare attenzione al punto 5. Per impostazione predefinita, solo le applicazioni necessarie al funzionamento del sistema potranno funzionare, le altre applicazioni dovranno essere aggiunte all'elenco di quelle consentite. Quelli. Ora non è necessario configurare AppLocker separatamente. A proposito, per evitare conflitti con le impostazioni di AppLocker, in modalità multi-chiosco, tutte le regole di AppLocker configurate non verranno applicate.

Il punto 6 indica una buona opzione, ma al momento è possibile dare il permesso di scrittura solo alla cartella “Download”. La modalità consente di utilizzare applicazioni universali e classiche. Tutte le impostazioni della modalità sono specificate in un file XML, in cui è anche possibile specificare le impostazioni per un singolo chiosco dell'applicazione.

Ora proviamo a sistemare il tutto...

Cosa ci serve...

  1. Prima di tutto, abbiamo bisogno del sistema stesso, che supporti la modalità multikiosk. Qui puoi scaricare versione demo
  2. Istruzioni per la configurazione di un multikiosk
  3. Qualsiasi editor XML
  4. Per applicare le impostazioni multikiosk:
    1. Per il metodo n. 1 - ICD, che fa parte dell'ADK. L'ADK è possibile скачать здесь
    2. Per il metodo n. 2: l'utilità PsExec. L'utilità può essere скачать здесь

Ha detto: "Andiamo!"

Condurrò tutti gli esperimenti sulla versione commerciale di Windows 10 IoT Enterprise 1809 LTSC x32, non su una versione demo. Il sistema non verrà attivato perché la mancata attivazione non pregiudica la funzionalità del sistema. Ho preso 32 bit solo perché occupa meno spazio e sarà più veloce lavorare con le immagini di sistema.

Passaggio 1: installazione

L'installazione di Win 10 IoT Enterprise non è diversa dall'installazione di Win 10 Enterprise, quindi non descriverò l'intero processo di installazione, parlerò solo di alcune sfumature.

Per ogni evenienza, lascia che te lo ricordi, non installare il sistema sopra quello installato. Quando il programma di installazione chiede informazioni sul percorso di installazione del sistema, eliminare tutte le partizioni sul futuro disco di sistema e specificare un disco non partizionato.

Installiamo il sistema senza una connessione Internet in modo che il sistema non apra nulla di non necessario.

Perché Creeremo immagini di backup del sistema e per questo lo sigilleremo in modalità audit, quindi potrai risparmiare tempo caricando il sistema in modalità audit subito dopo l'installazione. Per fare ciò, quando il sistema ti chiede di selezionare una regione “Iniziamo con la regione. È giusto?" basta premere "Ctrl+Shift+F3".

Passaggio 2: crea un'immagine di sistema

Perché prenderemo in giro il sistema e proveremo varie nuove impostazioni, è possibile che qualcosa vada storto e dovremo riportare il sistema allo stato originale. E per tornare rapidamente allo stato originale, è necessario creare un'immagine di sistema. L'unica cosa che farò è copiare il "kit del gentiluomo": lo script e il file di risposte. Tutti i miei file si trovano nella cartella "Sysprep", che copio nella root del disco di sistema. E naturalmente condividerò con voi questo “set da gentiluomo”.

Sysprep.bat – per sigillare il 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

Una volta avviato, lo script verificherà la presenza dell'account "Admin" e ne creerà uno se manca. L'account verrà aggiunto al gruppo Amministratori.

Unattend.xml: file di risposta per 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>

Quando si sigilla in modalità di controllo, lo script aggiungerà un comando al registro per terminare il processo "sysprep.exe" in modo da non chiudere manualmente la finestra sysprep ogni volta. Una volta sigillato in modalità ciao, lo script rimuoverà il comando per chiudere la finestra dal registro e modificherà esso stesso il valore dell'architettura nel file di risposte con quello corrente. Il file di risposte contiene parametri per l'avvio del sistema senza l'interazione dell'utente e un comando per eliminare la cartella "Sysprep" nella radice dell'unità di sistema.

Ora sigillerò il sistema in modalità di controllo utilizzando "Sysprep.bat" e acquisirò un'immagine del sistema. Immaginerò il sistema utilizzando DISM e immaginerò solo il volume del sistema. Se creerai l'immagine solo del volume di sistema e non dell'intero disco, non dimenticare di copiare il contenuto della directory "WindowsSystem32Recovery" sul primo volume nella cartella "RecoveryWindowsRE" dopo aver distribuito il sistema. Questa operazione dovrà essere eseguita prima di caricare il sistema operativo. dopo aver caricato il sistema operativo, la directory "WindowsSystem32Recovery" sarà già vuota.

Fase 3 – russificazione del sistema

Se disponi di questo pacchetto, il pacchetto lingua può essere installato senza una connessione Internet. In caso contrario, il sistema stesso lo scaricherà da Internet quando aggiungi la lingua nelle impostazioni. Non è necessario prendere il Language Pack dalle versioni precedenti del sistema operativo. Per Windows 10 1809 deve essere disponibile un Language Pack specifico per Windows 10 1809.

Microsoft sta seguendo il suo piano per trasferire gradualmente le impostazioni dal menu classico a quello nuovo, quindi nel pannello di controllo classico non troverai più le impostazioni per cambiare la lingua e installare un pacchetto linguistico. Queste impostazioni ora si trovano solo nei parametri di sistema.

In modalità di controllo, potresti riscontrare un problema nell'apertura delle impostazioni di sistema dal menu Start; per aprire le impostazioni di sistema, esegui il comando - "ms-settings:", presta attenzione ai due punti alla fine del comando, senza di essi il comando verrà visualizzato non funziona. Dopo aver aperto una volta i parametri di sistema utilizzando questo comando, è possibile aprirli utilizzando il menu grafico.

Ma nelle impostazioni di sistema è possibile installare un pacchetto lingua se il sistema è connesso a Internet, non è possibile scegliere di installare un pacchetto lingua da un file locale.

Non descriverò il processo di localizzazione del sistema perché... ciò complicherà notevolmente l'articolo, soprattutto perché il processo di localizzazione è dettagliato descritto qui. Ma vorrei attirare la vostra attenzione sulla particolarità di cambiare la lingua del sistema dopo aver installato il Language Pack utilizzando la console. Questa funzionalità è descritta nella stessa wiki a cui ho fornito un collegamento in precedenza, nella sottosezione "Aggiunta di una lingua all'elenco delle lingue".

Installerò il Language Pack senza una connessione Internet.

Dopo la localizzazione completa del sistema, assicurati di creare un'immagine del sistema.

Passaggio 4: installare le applicazioni necessarie

Perché Poiché i sistemi LTSB e LTSC non dispongono di un negozio di applicazioni, l'installazione delle applicazioni da Microsoft Store causa alcune difficoltà, in particolare il download dell'applicazione. Per scaricare le applicazioni, la società Adguard ha realizzato un servizio molto conveniente: "Negozio Adguard", con cui è possibile ottenere collegamenti temporanei per il download delle applicazioni e dei relativi componenti.

Per installare l'applicazione avrete bisogno di file con le estensioni “Appx” e “AppxBundle”. Prima di installare l'applicazione stessa, è necessario installare i suoi componenti. Di norma i componenti di un'applicazione possono essere distinti in modo intuitivo tramite il nome del file.

Per non rendere l'articolo troppo lungo, non descriverò in dettaglio il processo di installazione delle applicazioni, soprattutto perché sono presenti informazioni sull'installazione istruzioni dettagliate. Ma aggiungerò un altro modo per installare le applicazioni nel tuo account corrente. Le applicazioni possono essere installate utilizzando il programma "Programma di installazione dell'app", ma per installare le applicazioni avrai bisogno di una connessione Internet, ma le applicazioni possono essere installate con un doppio clic e non avrai bisogno dei suoi componenti, tutti i componenti necessari verranno scaricati e installati "Programma di installazione dell'app".

E un piccolo promemoria: quando installi l'applicazione sul conto corrente, non sarai in grado di sigillare il sistema. Come installare le applicazioni in modo da poter sigillare il sistema, vedere le istruzioni sopra. E per verificare il funzionamento del multikiosk, le applicazioni esistenti sono più che sufficienti.

Passaggio 5: creazione di un file di configurazione per il multikiosk

Ora arriviamo alla parte più interessante: impostare la modalità kiosk. Guardiamo istruzione in base alle impostazioni che vediamo. Prima di tutto dovremo creare un file di configurazione XML, di cui potete trovare un esempio completo qui. vedi qui.

Iniziamo impostando il layout delle tessere. Il modo più semplice per creare una configurazione di personalizzazione del riquadro XML è esportare il loro stato attuale.

Prima di tutto aggiungiamo i riquadri delle applicazioni di cui abbiamo bisogno nel menu Start. Richiama la ricerca "Win+s", trova l'applicazione desiderata, fai clic destro su di essa e seleziona "Aggiungi alla schermata iniziale".

Ho bloccato le seguenti app:

  • taccuino
  • Calcolatrice
  • Internet Explorer
  • Verniciatura
  • WordPad
  • Parametri
  • езопасность Windows

Le ultime due applicazioni sono state bloccate perché... Semplicemente non ci sono altre applicazioni universali nel pacchetto LTSC standard. Tieni presente che i riquadri del desktop si collegano ai collegamenti. Ora, spostando le tessere direttamente nel menu Start, separerò le tessere appuntate in due gruppi. Per creare un nuovo gruppo di tessere, trascina una tessera significativamente più in alto o più in basso rispetto alle altre tessere, il che evidenzierà un divisore intuitivo. Puoi nominare i gruppi a tua discrezione; per fare ciò, posiziona il cursore del mouse sopra il gruppo e quando appare la scritta "Nomina il gruppo", fai clic con il pulsante sinistro del mouse. Chiamerò il primo gruppo "Impostazioni", includerà i riquadri "Impostazioni" e "Sicurezza di Windows". Chiamerò il secondo gruppo “Applicazioni di Office”, che comprenderà tutti gli altri riquadri. A proposito, puoi spostare interi gruppi di tessere trascinandoli utilizzando le due strisce che si trovano in alto a destra del nome del gruppo.

Perché Nel riquadro "Sicurezza di Windows" il nome non si adatta completamente, cambierò le sue dimensioni in "Largo". Per modificare la dimensione di un riquadro, fare clic con il tasto destro del mouse sul riquadro e selezionare "Ridimensiona".

Dopo la configurazione, esportiamo lo stato corrente ed eseguiamo il comando nell'ambiente PowerShell – “Export-StartLayout – percorso C:SysprepStartLayout.xml”.

Successivamente, il modo più semplice non è creare tu stesso il file delle impostazioni, ma prendi un file di esempio da qui impostazioni: fai clic sul pulsante "Copia", incolla il contenuto nel blocco note e salva come "MultiAppKiosk.xml". Ora modifichiamo le impostazioni con le nostre. Per modificare le impostazioni dei riquadri allegati, copiare l'intero blocco "StartLayoutCollection" da "StartLayout.xml" a "MultiAppKiosk.xml". Per aggiungere applicazioni a quelle consentite, è necessario inserire gli identificatori universali delle applicazioni nella sezione "AllowedApps" e nello stesso blocco aggiungere il percorso completo dei file eseguibili delle applicazioni classiche, che è specificato nelle proprietà dei collegamenti a cui si le piastrelle si riferiscono. Per accedere rapidamente a un collegamento, fai clic con il pulsante destro del mouse su un riquadro aggiunto e vai su Altro > Vai alla posizione del file. Tieni presente che il parametro "AppUserModelId" viene utilizzato per specificare l'ID app universale e il parametro "DesktopAppPath" viene utilizzato per specificare il percorso completo dell'applicazione desktop. E un'altra piccola sfumatura, se prevedi di utilizzare IE su un sistema x64, nell'elenco delle applicazioni consentite devi specificare due percorsi per il file eseguibile "ProgrammiInternet Exploreriexplore.exe" e "Programmi (x86)Internet Exploreriexplore. exe".

Non darò accesso alle cartelle, quindi eliminerò la sezione "FileExplorerNamespaceRestrictions".

La visualizzazione della barra delle applicazioni non mi disturba, quindi lascio tutto com'è nella sezione “Barra delle applicazioni”.

Nell'esempio sono specificati due profili, ma avrò un solo profilo, quindi la sezione con il secondo profilo potrà essere eliminata. Prima di disinstallare, prestare attenzione all'esempio dell'avvio automatico di un'applicazione con argomenti.

Nella sezione "Configurazioni", gli account sono collegati ai profili; tieni presente che più account possono essere collegati a un profilo. Ma perché Sono interessato solo a un account, quindi eliminerò tutti i collegamenti tranne il primo: i blocchi "Config". Nella restante associazione scriverò il nome utente “User”.

Ho ottenuto questo file con i parametri

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>

Quando crei i file di configurazione XML, non dimenticare che ciascun profilo deve avere un ID univoco e non solo all'interno di un file XML, ma all'interno di un sistema operativo. Quelli. Idealmente, per evitare confusione, è possibile creare ogni volta un nuovo identificatore; ciò può essere fatto nell'ambiente PowerShell utilizzando il comando “[guid]::NewGuid()”. E assicurati di salvare il file con la codifica "UTF-8"; se il file viene salvato con la codifica "ANSI", durante la creazione del pacchetto di preparazione riceverai un errore se il file XML contiene cirillico.

Passaggio 6: applicazione delle impostazioni multikiosk

Diamo un'occhiata a due modi per applicare le impostazioni descritte nel file di configurazione. Il primo avviene attraverso un pacchetto di provisioning, che deve essere creato in ICD. Per alcuni, forse questo metodo sarà più familiare. Il secondo è utilizzare “MDM Bridge WMI Provider”, questo metodo mi è sembrato più conveniente.

Metodo # 1

Chi non ha un ICD? scarica ADK e installare. Installare ADK è molto semplice; l'insieme dei componenti può essere lasciato come predefinito.

Avvia ICD, fai clic sul riquadro "Preparazione avanzata", specifica il nome e la cartella del progetto e fai clic su "Avanti". Nella finestra successiva, seleziona "Tutte le edizioni del desktop Windows" e fai clic su "Avanti". Puoi saltare l'importazione del pacchetto di preparazione; fai clic su "Fine".

Espandi il menu a discesa "Impostazioni runtime", quindi espandi il sottomenu "AssignedAccess" e seleziona "MultiAppAssignedAccessSettings". Nella parte superiore della sezione centrale della finestra ICD, fare clic sul pulsante "Sfoglia" e indicare la posizione del file XML con le impostazioni. Per ogni evenienza, puoi salvare il progetto premendo "Ctrl+s". Nella parte in alto a sinistra dell'ICD, seleziona "Esporta" e seleziona "Pacchetto di provisioning" dal menu a discesa. Come proprietario, seleziona “Amministratore IT”; tutte le altre domande possono essere saltate facendo clic su “Avanti” e alla fine fare clic su “Crea” e “Fine”.

Nel sistema installato, non dimenticare di creare un utente “Utente”, non può essere aggiunto al gruppo “Amministratori”, altrimenti il ​​multikiosk non funzionerà. Ho creato un utente in Gestione Computer con una password che non scade mai.

Ora eseguiamo il pacchetto di preparazione sul sistema precedentemente installato. Dopo aver applicato il pacchetto di preparazione, il menu Start e il menu dell'amministratore cambieranno. Nella colonna iniziale di sinistra dovrebbero scomparire i pulsanti: “Documenti”, “Immagine”, “Opzioni”. Se il menu di avvio non è cambiato, significa che qualcosa è andato storto. Un pacchetto installato può essere rimosso aprendo la finestra Impostazioni > Account > Accesso all'account aziendale o dell'istituto di istruzione > Aggiungi o rimuovi pacchetto di provisioning.

Se il menu di avvio è cambiato, le impostazioni vengono applicate al sistema, accedi come utente per il quale è configurato il multikiosk e guarda il risultato.

Metodo # 2

Applicazione delle impostazioni utilizzando "Provider WMI MDM Bridge" descritto qui. La comodità di questo metodo sta nella sua flessibilità di utilizzo e nella possibilità di eliminare molte operazioni manuali necessarie per creare un pacchetto di preparazione. Qui ognuno può prendere una decisione che sarà conveniente per lui. Ho realizzato un paio di script per me stesso.

MiltiKiosk.bat – avvia lo script

@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 principale

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 vuoi utilizzare la mia soluzione, salva gli script sopra con i loro nomi originali in una cartella e inserisci il file "PsExec.exe" nella stessa cartella. Nella stessa cartella, crea una cartella “XML” e copia al suo interno i file XML per configurare il multikiosk. Utilizzerò lo stesso file del primo metodo.

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 po 'sulle caratteristiche della sceneggiatura. Lo script è progettato per utilizzare file XML con codifica "UTF8"; se desideri utilizzare la codifica "ANSI", rimuovi il parametro "codifica UTF8" dall'opzione di lettura del file. È necessario inserire i file XML nella cartella "XML" senza sostituire i caratteri; lo script stesso sostituirà i caratteri speciali con le designazioni appropriate. Per non confondersi nei GUID di collegamento degli utenti ai profili, è sufficiente indicare il numero o il nome dell'utente tra parentesi graffe; tutto il contenuto tra parentesi graffe verrà sostituito con i GUID.

Usare lo script è molto semplice, basta eseguirlo e selezionare l'elemento richiesto. Per cambiare la configurazione corrente con una nuova, non è necessario eliminare quella corrente; verrà sovrascritta. Non dimenticare di creare gli utenti specificati nel file di configurazione.

Quando si visualizza la configurazione corrente del multikiosk nella stessa sessione in cui è stata applicata, al posto dei caratteri speciali verranno visualizzate combinazioni di caratteri sostitutivi. Dopo aver modificato la sessione (riavviando lo script), tutti i caratteri speciali verranno visualizzati nella loro forma originale.

Passaggio 7: sigillatura del sistema

Il multichiosco funziona, ecco tutto, a quanto pare...

Se tutto va secondo i piani, allora non stai notando qualcosa.

Non dimenticare che dobbiamo ancora passare il sistema dalla modalità di controllo alla modalità di benvenuto. Bene, siamo pronti per questo, lanciamo “Sysprep.bat”, selezioniamo il punto 2, il sistema è sigillato. Accendiamo il dispositivo, il sistema si avvia, accediamo all'account utente per il quale è configurato il multikiosk, ma non riusciamo ad accedere. Dopo il messaggio “Benvenuto”, appare il messaggio “Logout”.

All'inizio volevo descrivere solo la soluzione al problema, ma in seguito ho deciso di descrivere i passaggi per identificare il problema e trovare la soluzione più semplice perché... Sicuramente molti lettori saranno tormentati da vaghi dubbi: “E se fosse così...”. Penso che descrivere i vari esperimenti ti farà risparmiare una notevole quantità di tempo se vuoi trovare un'altra soluzione. Per rendere le informazioni quanto più accurate possibile e per assicurarmi ancora una volta che non ci siano errori, descriverò gli esperimenti nel formato “fatto e registrato”. Quelli. Rifarò gli esperimenti descritti.

esperimenti

Cosa abbiamo fatto? Nel sistema sono presenti due account:

“Admin” – nel gruppo “Amministratori”.
“Utente” – nel gruppo “Utenti”.
In modalità di controllo, il multikiosk funzionava, ma una volta sigillato non funzionava.

esperimento 1

Eliminiamo il pacchetto di preparazione installato, nello snap-in "Gestione computer" eliminiamo l'utente "Utente" e creiamo un nuovo utente con il nome "Utente", applichiamo il pacchetto di preparazione, andiamo all'account "Utente" - lo fa non funziona. Andiamo sotto il nome "Admin", rimuoviamo l'utente "Utente" dal gruppo "Utenti", lo aggiungiamo al gruppo "Amministratori", andiamo sotto il nome "Utente" - non funziona. Effettuiamo l'accesso con il nome "Admin", eliminiamo il pacchetto di preparazione con il multikiosk, accediamo con il nome "Utente" - siamo riusciti ad accedere, ma ovviamente la modalità multikiosk non funziona perché Il pacchetto di provisioning è stato rimosso.

esperimento 2

Carichiamo l'immagine del sistema: russificata in modalità di controllo.

Il sistema operativo è stato caricato, premi "Win+r", perché La nostra finestra sysprep si è chiusa automaticamente, esegui il comando "sysprep" ed esegui "sysprep" nella finestra che si apre. Impostazioni Sysprep nella finestra: "Vai alla finestra di benvenuto del sistema (OOBE)", "Preparazione all'uso", "Riavvia". Fare clic su "OK" e attendere il saluto del sistema operativo. Rispondiamo alle domande al primo avvio del sistema: “Continua nella lingua selezionata?” - "russo"; regione – Russia; layout della tastiera: russo; aggiungi un secondo layout di tastiera - salta; “Connettiamoti alla rete” – “Salta per ora”; connettersi a Internet - no; contratto di licenza: accetta; “Chi utilizzerà questo computer” – “Test”; creazione di una password: lascia il campo vuoto; Comodo utilizzo su diversi dispositivi – no; Impostazioni sulla privacy – accetta. Il sistema operativo è stato caricato, nello snap-in “Gestione computer” creiamo un utente con il nome “Utente”, aggiungiamo il pacchetto di preparazione. Il risultato è che non funziona.

esperimento 3

Carichiamo l'immagine del sistema: russificata in modalità di controllo.

Il sistema operativo è stato caricato, connetti il ​​sistema a Internet, esegui il comando "gpedit.msc" e nella sezione "Windows Update" abilita l'opzione "Abilita aggiornamenti consigliati tramite aggiornamenti automatici", riavvia per ogni evenienza. Nel centro aggiornamenti, fai clic su "Verifica aggiornamenti" e riavvia finché non vengono installati tutti gli aggiornamenti. Disconnettere il sistema da Internet. Lanciamo “sysprep” in modalità grafica e ripetiamo tutti i passaggi descritti nel passaggio precedente dall'esecuzione dell'utilità “sysprep” all'aggiunta del pacchetto di preparazione. Il risultato è che non funziona.

esperimento 4

Carichiamo l'immagine del sistema: inglese in modalità di controllo.

Lanciamo “sysprep” in modalità grafica, sigilliamo il sistema operativo con gli stessi parametri dell'esperimento 2. Al primo avvio del sistema, selezioniamo gli stessi parametri dell'esperimento 2, ad eccezione dei parametri regionali e della lingua perché Non esiste la lingua russa. Allo stesso modo, crea un utente “Utente” e aggiungi un pacchetto di provisioning. Il risultato è che funziona. Quelli. Il problema è legato alla localizzazione.

esperimento 5

Carichiamo l'immagine del sistema: russificata in modalità di controllo.

Nello snap-in "Gestione computer", crea un utente "Utente", aggiungi un pacchetto di preparazione, vai all'account "Utente", il multi-chiosco funziona.

Esci dal tuo account e accedi con l'account "Amministratore". Lanciamo PowerShell con diritti di amministratore, eseguiamo il comando “Dism /online /Get-Intl” e vediamo “Lingua dell'interfaccia utente predefinita: en-US”.

Avviamo dall'unità flash in WinPE, il sistema operativo distribuito è sulla mia unità E. Eseguiamo il comando "Dism /image:E: /Set-UILang:ru-ru". Osserviamo il risultato, eseguiamo "Dism /image:E: /Get-Intl" e vediamo "Lingua dell'interfaccia utente del sistema predefinito: ru-RU".

Avviamo il sistema, accediamo all'account "Utente", il multikiosk non funziona.

Per stabilire chiaramente il rapporto di causa-effetto del problema, proviamo di nuovo a rendere il multi-chiosco funzionante e non funzionante.

Avviamo dall'unità flash in WinPE, il sistema operativo distribuito è sulla mia unità E. Eseguiamo il comando "Dism /image:E: /Set-UILang:en-us". Osserviamo il risultato, eseguiamo "Dism /image:E: /Get-Intl" e vediamo "Lingua dell'interfaccia utente del sistema predefinito: en-US".

Avviamo il sistema, accediamo all'account "Utente", il multikiosk funziona.

Avviamo dall'unità flash in WinPE, il sistema operativo distribuito è sulla mia unità E. Eseguiamo il comando "Dism /image:E: /Set-UILang:ru-ru". Osserviamo il risultato, eseguiamo "Dism /image:E: /Get-Intl" e vediamo "Lingua dell'interfaccia utente del sistema predefinito: ru-RU".

Avviamo il sistema, accediamo all'account "Utente", il multikiosk non funziona.

Quelli. puoi vedere una chiara dipendenza delle prestazioni del chiosco dalla lingua predefinita dell'interfaccia utente. Forse ci sono altri fattori che influenzano le prestazioni del multikiosk?

esperimento 6

Per la purezza dell'esperimento, riempiamo il sistema. Carichiamo l'immagine del sistema: russificata in modalità di controllo.

Lanciamo “sysprep” in modalità grafica, sigilliamo il sistema operativo con gli stessi parametri dell'esperimento 2. Aspettiamo che il sistema operativo ci saluti e risponda alle domande: “Continuare nella lingua selezionata?” - "Inglese (Stati Uniti)"; regione – Russia; Layout della tastiera: russo. Inoltre, tutti i parametri sono stati selezionati come nell'esperimento 2.

Diamo un'occhiata alle impostazioni predefinite della lingua dell'interfaccia utente. Eseguiamo il comando "Dism /online /Get-Intl" e vediamo "Lingua dell'interfaccia utente del sistema predefinito: en-US". Nello snap-in "Gestione computer", crea un utente "Utente", aggiungi un pacchetto di preparazione, vai all'account "Utente", il multi-chiosco funziona.

Stiamo cercando di rompere il chiosco modificando la lingua dell'interfaccia utente predefinita. Entriamo nell'utente "Test", che è stato creato al primo avvio del sistema e abilitiamo l'accesso automatico in modo che il sistema non si avvii immediatamente nell'account "Utente". Esegui "netplwiz", seleziona l'utente "Test", deseleziona la casella di controllo "Richiedi nome utente e password" e applica i parametri.

Avvia da un'unità flash in WinPE. Esegui il comando "Dism /image:E: /Set-UILang:ru-ru". Osserviamo il risultato, eseguiamo "Dism /image:E: /Get-Intl" e vediamo "Lingua dell'interfaccia utente del sistema predefinito: ru-RU".

Avviamo il sistema, proviamo ad accedere all'account "Utente", il multikiosk funziona. Quelli. non può essere rotto. È possibile farlo funzionare in questo modo?

esperimento 7

Carichiamo l'immagine del sistema: russificata in modalità di controllo.

Lanciamo “Sysprep.bat”, selezioniamo il punto 2. Avviamo il sistema, creiamo l'utente “Utente” nello snap-in “Gestione computer”, aggiungiamo il pacchetto di preparazione, andiamo all'account “Utente”, il multi- il chiosco non funziona.

Avvia da un'unità flash in WinPE. Esegui il comando “Dism /image:E: /Set-UILang:en-us”. Osserviamo il risultato, eseguiamo "Dism /image:E: /Get-Intl" e vediamo "Lingua dell'interfaccia utente del sistema predefinito: en-US".

Avviamo il sistema, proviamo ad accedere all'account "Utente", il multikiosk non funziona.

Si scopre che modificando l'impostazione predefinita della lingua dell'interfaccia utente, è possibile influenzare le prestazioni del multikiosk solo quando il sistema è in modalità di controllo o al primo avvio dopo aver sigillato il sistema. Ciò significa che dovrai sigillare il sistema con un file di risposta in cui la lingua del sistema sarà selezionata in inglese, quindi modificare le impostazioni del sistema in modo che l'interfaccia sia russa. Non è una buona soluzione. Forse il problema può essere risolto installando un Language Pack o installando Language Pack aggiuntivi?

esperimento 8

Carichiamo l'immagine del sistema: inglese in modalità di controllo.

Ci colleghiamo a Internet, nei parametri di sistema andiamo alla sezione “Lingua”, selezioniamo “Aggiungi lingua”, selezioniamo la lingua “Russo”, facciamo clic su “Avanti”, lasciamo i parametri di installazione come predefiniti, facciamo clic su “Installa”, dopo l'installazione il pacchetto linguistico riavviamo il sistema, ora su Russified. Disconnettere il sistema da Internet, eseguire “Sysprep.bat”, selezionare il punto 2.

Dopo aver caricato il sistema, nello snap-in “Gestione Computer”, creare l'utente “Utente”, aggiungere il pacchetto di preparazione, andare sull'account “Utente”, il multi-chiosco non funziona.

esperimento 9

Proviamo a russificare il sistema prima dell'installazione, in modalità offline. Contemporaneamente si svolgerà un breve programma educativo sulla localizzazione della distribuzione.

Prendo un'unità flash con una distribuzione originale pulita: X21-96381. Sarà l'unità "E". Per montare le immagini, creo le cartelle: “c:MountInstall”, “c:MountWinre”, “c:MountBoot”. Prendo una serie di pacchetti di localizzazione: X21-87814. E nella cartella "c:Mount" copio i pacchetti da essa: "Microsoft-Windows-Client-Language-Pack_x86_ru-ru.cab", "lp.cab", "WinPE-Setup_ru-ru.cab". Lancio la console con diritti di amministratore. Penso che ulteriori comandi saranno chiari senza commenti.

Comandi di localizzazione

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

Avviamo dall'unità flash, selezioniamo la lingua russa e installiamo il sistema su un disco vuoto. Quando il sistema ti chiede di selezionare una regione, premi "Ctrl+Shift+F3". Nello snap-in “Gestione computer”, crea un utente “Utente”, aggiungi un pacchetto di preparazione, vai all'account “Utente”, il multi-chiosco non funziona.

Avvia da un'unità flash in WinPE. Esegui il comando “Dism /image:E: /Set-UILang:en-us”.

Avviamo il sistema, proviamo ad accedere all'account "Utente", il multikiosk funziona.

Apparentemente il problema non è nei metodi di aggiunta di un pacchetto, proviamo ad aggiungere ulteriori pacchetti.

esperimento 10

Prendiamo l'unità flash che abbiamo preparato nel passaggio precedente.

Prendiamo il pacchetto “Feat on Demand” – X21-87815. Copio i pacchetti da esso nella cartella "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».

Avvia la console con diritti di amministratore ed esegui i comandi:

comandi

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

Avviamo dall'unità flash, selezioniamo la lingua russa e installiamo il sistema su un disco vuoto. Quando il sistema ti chiede di selezionare una regione, premi "Ctrl+Shift+F3". Nello snap-in "Gestione computer", crea l'utente "Utente", aggiungi il pacchetto di provisioning e accedi all'account "Utente". Ho ricevuto una schermata nera che è rimasta bloccata per molto tempo, quindi ho avviato il sistema a caldo.

Eliminiamo il pacchetto di preparazione, accediamo come “Utente”, riavviamo il sistema, aggiungiamo il pacchetto di preparazione, il multikiosk non funziona.

Avvia da un'unità flash in WinPE. Esegui il comando “Dism /image:E: /Set-UILang:en-us”.

Avviamo il sistema, proviamo ad accedere all'account "Utente", il multikiosk funziona.

Soluzione alternativa

Eroi normali. Fanno sempre una deviazione!

Vari metodi di installazione dei pacchetti di localizzazione non hanno risolto il problema, il che significa che dovrai installare la lingua "en-us" al primo avvio dopo la sigillatura e modificare le impostazioni della lingua dopo il primo avvio.

Carichiamo l'immagine del sistema: russificata in modalità di controllo.

Nel file “Unattend.xml”, inserisci “en-US” nel parametro, esegui “Sysprep.bat”, seleziona il punto 2 e guarda cosa abbiamo ottenuto. La schermata di benvenuto è in inglese, il multi-chiosco funziona. Ciò significa che è necessario aggiungere un comando a "Unattend.xml" per cambiare la lingua del saluto. E per fare ciò è necessario eseguire il comando “control intl.cpl,, /f:” indicando il file di configurazione, che specificherà la copia dei parametri correnti nella schermata di benvenuto. Il contenuto del file di configurazione sarà simile a questo.

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

Perché copierà le impostazioni dell'utente corrente, quindi il comando dovrà essere eseguito dopo che l'utente ha effettuato l'accesso, il che significa che avremo bisogno. C'è un piccolo "ma", l'esecuzione avverrà dopo che un utente con diritti di amministratore avrà effettuato l'accesso. E non vorrei creare un file aggiuntivo necessario affinché il comando venga eseguito correttamente. È meglio implementare l'intera soluzione in un unico file: "Unattend.xml". Per fare ciò, dovrai semplicemente eseguire un comando che crea un file di configurazione. Penso che creerò un file di configurazione utilizzando il comando "echo" nell'ambiente "cmd", ma deve sfuggire alle parentesi angolari con un accento circonflesso. Quelli. Per creare un file di configurazione si ottiene il seguente comando.

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

Ma dobbiamo inserire questo comando in XML, che ha i suoi requisiti per l'uso di caratteri speciali:

Carattere speciale
Valore di sostituzione

>
&gt;

<
&lt;

&
&amp;

'
&apos;

"
&quot;

Di conseguenza, per creare un file di configurazione, abbiamo ottenuto il seguente comando per "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;

Successivamente, eseguiamo il comando utilizzando il file di configurazione.

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

Successivamente, elimina il file creato in precedenza e riavvia il sistema. le modifiche avranno effetto dopo il riavvio.

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

Di conseguenza, ho ottenuto il seguente file di risposte per 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>

Controlliamo...

Carichiamo l'immagine del sistema: russificata in modalità di controllo.

Modifichiamo il file Unattend.xml con uno nuovo, eseguiamo “Sysprep.bat”, selezioniamo il punto 2 e vediamo cosa abbiamo ottenuto. Al primo avvio, la schermata di benvenuto è in inglese e il sistema si riavvia. La schermata di benvenuto è in russo, il multikiosk funziona.

In caso di domande sulla configurazione e sulla licenza di Windows 10 IoT Enterprise, contattare: [email protected] o al sito web quarta-embedded.ru.
Puoi trovare le risposte ad alcune domande in la nostra wiki o sul nostro Canale YouTube

Autore dell'articolo: Vladimir Borisenkov, esperto tecnico di Quarta Technologies.

Fonte: habr.com