Windows 10 IoT Enterprise 2019 - multi-kiosk-läge

Inledning

Windows 10 IoT Enterprise 2019 är marknadsföringsnamnet för nästa version av Windows 10. Releasen av denna version tillkännagavs i september 2018, den har version 1809, 18 är året, 09 är månaden. Många artiklar har skrivits om den nya versionen av Windows 10 1809, men de flesta av dem ägnas åt olika "bågar", "skönheter" och olika funktioner som efterfrågas hemma.
Den här artikeln kommer bara att diskutera funktionalitet som kan vara efterfrågad bland tillverkare av fasta enheter. Nämligen om de nya funktionerna i "Kiosk" -läget. Ämnet om att byta namn på servicescheman för Windows-utgåvor av företagssegmentet kommer också att beröras.

Gammalt serviceschema med nytt namn

Låt mig börja med en kort förklaring: i företagssegmentet av Windows-utgåvor finns det två servicescheman enligt vilka Windows tar emot uppdateringar. Servicediagram har en bokstavsbeteckning. För närvarande heter tjänstegrenarna LTSC och SAC.

LTSC står för Långsiktig servicekanal (med långsiktigt underhåll). Tidigare hette en sådan kanal LTSB - Long Term Servicing Branch, Microsoft bytte helt enkelt namnet på tjänstekanalen, själva tjänsten förblev densamma.

Microsoft ändrade även namnet på tjänstegrenen CBB - Current Branch for Business, nu heter denna tjänstegren SAC - Halvårig kanal. Återigen, bara namnet har ändrats.

Men det bör nämnas att LTSC- och SAC-servicegrenarna använder olika Windows-distributioner.

Lite om det nya kioskläget på SAC

Som jag redan sa har LTSC och SAC olika distributioner. LTSC har inga vanliga universella appar eller en appbutik, men det har SAC. Följaktligen har LTSC ingen Edge-webbläsare, men SAC har det. Om du väljer Edge-webbläsaren när du ställer in en kiosk, är två lägen nu tillgängliga:

  1. Som en digital skylt eller interaktiv display
  2. Som en offentlig webbläsare

Jag tänker inte ägna mig åt att ställa in dessa lägen, eftersom... Installationen är mycket enkel och görs i ett grafiskt gränssnitt. Skapa bara en användare som inte är medlem i administratörsgruppen, aktivera kioskläge för honom med EDGE och se hur dessa lägen fungerar.

Kiosk med många applikationer

Vissa människor tror att licensierad användning Windows 10 IoT Enterprise innebär driften av endast en applikation på enheten, i själva verket är detta inte fallet. Enheten måste vara designad för att utföra en enda affärsuppgift och användaren får inte ha tillgång till ett skrivbord. Nu har Microsoft själva gett verktyget för att använda många applikationer. Detta läge kallas "multi-app kiosk"; hädanefter, för korthetens skull, kommer jag att kalla det "multikiosk". I den här artikeln kommer vi att titta på att ställa in det här läget med hjälp av mjukvarupaketet och några av funktionerna i detta läge.

Lite om Multikiosk-läget

När du loggar in på ett användarkonto för vilket multi-kiosk-läge är konfigurerat kommer systemet att fungera i surfplatta-läge. Startmenyn expanderas till helskärm och visar programrutor.

Lista över grundläggande inställningar och lägesfunktioner:

  1. Konfigurera för flera användare eller grupper
  2. Varje användare eller grupp kan tilldelas individuella inställningar
  3. Möjlighet att använda universella och klassiska applikationer
  4. Möjligheten att automatiskt starta en av applikationerna när användaren loggar in
  5. Vitlistade applikationer
  6. Åtkomst till mappar med hjälp av en vit lista

Det är värt att uppmärksamma punkt 5. Som standard tillåts endast de applikationer som är nödvändiga för att systemet ska fungera, andra applikationer måste läggas till i listan över tillåtna. De där. Nu behöver du inte konfigurera AppLocker separat. Förresten, för att undvika konflikter med AppLocker-inställningarna, i multi-kiosk-läge, kommer inte alla konfigurerade AppLocker-regler att gälla.

Punkt 6 indikerar ett bra alternativ, men för närvarande är det bara möjligt att ge skrivbehörighet till mappen "Nedladdningar". Läget låter dig använda universella och klassiska applikationer. Alla lägesinställningar anges i en XML-fil, där du också kan ange inställningar för en enskild programkiosk.

Nu ska vi försöka ställa in allt...

Vad behöver vi...

  1. Först och främst behöver vi själva systemet, som stöder multikiosk-läge. Här kan du ladda ner demoversion
  2. Instruktioner för att sätta upp en multikiosk
  3. Alla XML-redigerare
  4. Så här tillämpar du multikioskinställningar:
    1. För metod nr 1 - ICD, som är en del av ADK. ADK är möjligt ladda ner här
    2. För metod nr 2 - PsExec-verktyget. Verktyget kan vara ladda ner här

Han sa - "Låt oss gå!"

Jag kommer att utföra alla experiment på Windows 10 IoT Enterprise 1809 LTSC x32 kommersiell version, inte en demoversion. Systemet kommer inte att aktiveras pga avsaknad av aktivering påverkar inte systemets funktionalitet. Jag tog 32 bitar bara för att det tar mindre plats och det blir snabbare att arbeta med systembilder.

Steg 1 – installation

Att installera Win 10 IoT Enterprise skiljer sig inte från att installera Win 10 Enterprise, så jag kommer inte att beskriva hela installationsprocessen, jag kommer bara att prata om några av nyanserna.

För säkerhets skull, låt mig påminna dig, installera inte systemet ovanpå det installerade. När installationsprogrammet frågar om installationsplatsen för systemet, ta bort alla partitioner på den framtida systemdisken och ange en opartitionerad disk.

Vi installerar systemet utan internetuppkoppling så att systemet inte drar upp något onödigt.

Därför att Vi kommer att skapa backup-bilder av systemet och för detta försluter vi det i granskningsläge, sedan kan du spara lite tid genom att ladda systemet i granskningsläge direkt efter installationen. För att göra detta, när systemet ber dig att välja en region "Låt oss börja med region. Är detta rätt" tryck bara på "Ctrl+Skift+F3".

Steg 2 - skapa en systemavbildning

Därför att vi kommer att håna systemet och prova olika nya inställningar, det är möjligt att något kommer att gå fel och vi kommer att behöva återställa systemet till dess ursprungliga tillstånd. Och för att snabbt återgå till sitt ursprungliga tillstånd måste du skapa en systembild. Det enda jag kommer att göra är att kopiera "gentleman's kit" - manuset och svarsfilen. Alla mina filer finns i mappen "Sysprep", som jag kopierar till roten på systemdisken. Och naturligtvis kommer jag att dela denna "gentleman's set" med dig.

Sysprep.bat – för att försegla systemet.

@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

När det lanseras kommer skriptet att kontrollera om det finns ett "Admin"-konto och skapa ett om det saknas. Kontot kommer att läggas till i gruppen Administratörer.

Unattend.xml – svarsfil för 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>

Vid försegling i granskningsläge kommer skriptet att lägga till ett kommando till registret för att avsluta "sysprep.exe"-processen för att inte stänga sysprep-fönstret manuellt varje gång. När det är förseglat i hej-läge kommer skriptet att ta bort kommandot för att stänga fönstret från registret och ändrar självt arkitekturvärdet i svarsfilen till det nuvarande. Svarsfilen innehåller parametrar för att starta upp systemet utan användarinteraktion och ett kommando för att ta bort mappen "Sysprep" i roten på systemenheten.

Nu ska jag försegla systemet i revisionsläge med "Sysprep.bat" och ta en bild av systemet. Jag kommer att avbilda systemet med DISM och bara avbilda systemvolymen. Om du bara kommer att avbilda systemvolymen och inte hela disken, glöm inte att kopiera innehållet i "WindowsSystem32Recovery"-katalogen till den första volymen till mappen "RecoveryWindowsRE" efter att du har distribuerat systemet. Detta måste göras innan operativsystemet laddas. efter att operativsystemet har laddats kommer katalogen "WindowsSystem32Recovery" redan att vara tom.

Steg 3 – Förryskning av systemet

Språkpaketet kan installeras utan internetanslutning om du har detta paket. Om inte kommer systemet själv att ladda ner det från Internet när du lägger till språket i inställningarna. Behöver bara inte ta språkpaketet från tidigare versioner av operativsystemet. För Windows 10 1809 måste det finnas ett språkpaket specifikt för Windows 10 1809.

Microsoft följer sin plan att gradvis överföra inställningar från den klassiska menyn till den nya, så i den klassiska kontrollpanelen hittar du inte längre inställningar för att byta språk och installera ett språkpaket. Dessa inställningar finns nu endast i systemparametrarna.

I granskningsläge kan du stöta på ett problem med att öppna systeminställningar från Start-menyn; för att öppna systeminställningar, kör kommandot - "ms-inställningar:", var uppmärksam på kolon i slutet av kommandot, utan det kommer kommandot att inte arbete. Efter att ha öppnat systemparametrarna en gång med detta kommando, kan det öppnas med den grafiska menyn.

Men i systeminställningarna kan du installera ett språkpaket om systemet är anslutet till Internet, det finns ingen möjlighet att välja att installera ett språkpaket från en lokal fil.

Jag kommer inte att beskriva processen att lokalisera systemet eftersom... detta kommer att komplicera artikeln avsevärt, särskilt eftersom lokaliseringsprocessen är detaljerad beskrivs här. Men jag skulle vilja uppmärksamma dig på det speciella med att ändra systemspråket efter att ha installerat ett språkpaket med hjälp av konsolen. Denna funktion beskrivs i samma wiki som jag gav en länk till tidigare, i underavsnittet "Lägga till ett språk i listan över språk".

Jag kommer att installera språkpaketet utan internetanslutning.

Efter fullständig lokalisering av systemet, se till att skapa en bild av systemet.

Steg 4 - Installera nödvändiga applikationer

Därför att Eftersom LTSB- och LTSC-system inte har en applikationsbutik, orsakar installation av applikationer från Microsoft Store vissa svårigheter, nämligen att ladda ner applikationen. För att ladda ner applikationer har Adguard-företaget gjort en mycket bekväm tjänst - "Adguard Store", med vilken du kan få tillfälliga nedladdningslänkar för applikationer och deras komponenter.

För att installera programmet behöver du filer med tilläggen "Appx" och "AppxBundle". Innan du installerar själva programmet måste du installera dess komponenter. Som regel kan komponenter från en applikation intuitivt särskiljas med filnamnet.

För att inte göra artikeln för lång kommer jag inte att beskriva i detalj processen för att installera applikationer, särskilt eftersom det finns information om installation detaljerade instruktioner. Men jag kommer att lägga till ytterligare ett sätt att installera applikationer på ditt nuvarande konto. Applikationer kan installeras med hjälp av programmet "App Installer", men för att installera applikationer behöver du en internetanslutning, men applikationer kan installeras med ett dubbelklick och du behöver inte dess komponenter, alla nödvändiga komponenter kommer att laddas ner och installeras "App Installer".

Och en liten påminnelse, när du installerar applikationen på det aktuella kontot kommer du inte att kunna försegla systemet. Hur du installerar applikationer så att du kan försegla systemet, se instruktionerna ovan. Och för att kontrollera multikioskens funktion är befintliga applikationer ganska tillräckliga.

Steg 5 – skapa en konfigurationsfil för multikiosken

Nu kommer vi till den mest intressanta delen - att ställa in kioskläget. Låt oss titta på instruktion enligt de inställningar vi ser. Först och främst måste vi skapa en XML-konfigurationsfil, ett fullständigt exempel på det finns här. kolla här.

Låt oss börja med att ställa in bricklayouten. Det enklaste sättet att skapa en konfiguration för anpassning av XML-brickor är exportera deras nuvarande tillstånd.

Först av allt, låt oss lägga till brickor av de applikationer som vi behöver till Start-menyn. Öppna sökningen "Win+s", hitta önskad applikation, högerklicka på den och välj "Pin to Start Screen".

Jag har fäst följande appar:

  • anteckningsbok
  • Kalkylatorn
  • Internet Explorer
  • måla
  • WordPad
  • Parametrar
  • Windows säkerhet

De två senaste ansökningarna fästes eftersom... Det finns helt enkelt inga andra universella applikationer i standardpaketet LTSC. Observera att skrivbordsplattor länkar till genvägar. Nu, genom att flytta brickorna direkt i Start-menyn, kommer jag att dela upp de fästa brickorna i två grupper. För att skapa en ny grupp av brickor, dra en bricka betydligt högre eller lägre än andra brickor, vilket kommer att markera en intuitiv avdelare. Du kan namnge grupperna efter eget gottfinnande; för att göra detta, placera muspekaren ovanför gruppen, och när inskriptionen "Namnge gruppen" visas klickar du på vänster musknapp. Jag kommer att kalla den första gruppen för "Inställningar", den kommer att innehålla brickorna "Inställningar" och "Windows Säkerhet". Jag kommer att kalla den andra gruppen "Office Applications", som kommer att inkludera alla andra brickor. Förresten, du kan flytta hela grupper av brickor genom att dra dem med hjälp av de två ränderna som finns längst upp till höger i gruppnamnet.

Därför att På "Windows Security"-brickan passar namnet inte helt, jag kommer att ändra dess storlek till "Wide". För att ändra storleken på en bricka, högerklicka på brickan och välj "Ändra storlek".

Efter konfiguration exporterar vi det aktuella tillståndet och kör kommandot i PowerShell-miljön - "Export-StartLayout - sökväg C:SysprepStartLayout.xml".

Därefter är det enklaste sättet att inte skapa inställningsfilen själv, utan ta en exempelfil härifrån inställningar – klicka på knappen "Kopiera", klistra in innehållet i anteckningsblocket och spara som "MultiAppKiosk.xml". Nu ändrar vi inställningarna till våra egna. För att ändra inställningarna för bifogade brickor, kopiera hela "StartLayoutCollection"-blocket från "StartLayout.xml" till "MultiAppKiosk.xml". För att lägga till applikationer till de tillåtna måste du infoga universella applikationsidentifierare i avsnittet "Tillåtna appar" och i samma block lägga till den fullständiga sökvägen till de körbara filerna för klassiska applikationer, vilket anges i egenskaperna för genvägarna till vilka kakel hänvisar. För att snabbt komma till en genväg högerklickar du på en fäst bricka och går till Mer > Gå till filplats. Observera att parametern "AppUserModelId" används för att ange Universal App ID, och parametern "DesktopAppPath" används för att ange hela sökvägen till skrivbordsapplikationen. Och en liten nyans till, om du planerar att använda IE på ett x64-system, måste du i listan över tillåtna applikationer ange två sökvägar för den körbara filen "Program FilesInternet Exploreriexplore.exe" och "Program Files (x86)Internet Exploreriexplore. exe”.

Jag ger inte åtkomst till mappar, så jag tar bort avsnittet "FileExplorerNamespaceRestrictions".

Att visa aktivitetsfältet stör mig inte, så jag lämnar allt som det är i avsnittet "Aktivitetsfältet".

I exemplet anges två profiler, men jag kommer bara att ha en profil, så avsnittet med den andra profilen kan tas bort. Innan du avinstallerar, var uppmärksam på exemplet med att automatiskt starta ett program med argument.

I avsnittet "Konfigurationer" är konton länkade till profiler; observera att flera konton kan länkas till en profil. Men eftersom Jag är bara intresserad av ett konto, då tar jag bort alla bindningar utom det första - "Config"-blocken. I den återstående bindningen kommer jag att skriva användarnamnet "Användare".

Jag fick den här filen med parametrar

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>

När du skapar dina XML-konfigurationsfiler, glöm inte att varje profil måste ha ett unikt ID, och inte bara inom en XML-fil, utan inom ett OS. De där. Helst, för att undvika förvirring, kan du skapa en ny identifierare varje gång; detta kan göras i PowerShell-miljön med kommandot "[guid]::NewGuid()". Och se till att spara filen i "UTF-8"-kodning; om filen är sparad i "ANSI"-kodning kommer du att få ett felmeddelande när du bygger förberedelsepaketet om XML-filen innehåller kyrilliska.

Steg 6 – tillämpa multikioskinställningar

Låt oss titta på två sätt att tillämpa inställningarna som beskrivs i konfigurationsfilen. Den första är genom ett provisioneringspaket, som måste skapas i ICD. För vissa kanske den här metoden är mer bekant. Den andra är att använda "MDM Bridge WMI Provider", den här metoden verkade bekvämare för mig.

Metod # 1

Vem har inte en ICD? ladda ner ADK och installera. Att installera ADK är mycket enkelt; uppsättningen komponenter kan lämnas som standard.

Starta ICD, klicka på rutan "Avancerad förberedelse", ange namnet och mappen för projektet och klicka på "Nästa". I nästa fönster väljer du "Alla versioner av Windows skrivbord" och klickar på "Nästa". Du kan hoppa över import av förberedelsepaketet; klicka på "Slutför".

Expandera rullgardinsmenyn "Runtime Settings", expandera sedan undermenyn "AssignedAccess" och välj "MultiAppAssignedAccessSettings". Högst upp i mittsektionen av ICD-fönstret, klicka på "Bläddra"-knappen och ange platsen för XML-filen med inställningarna. För säkerhets skull kan du spara projektet genom att trycka på "Ctrl+s". I den övre vänstra delen av ICD:n, välj "Exportera" och välj "Provisioning Package" från rullgardinsmenyn. Som ägare väljer du "IT-administratör"; alla andra frågor kan hoppas över genom att klicka på "Nästa" och i slutet klicka på "Bygg" och "Slutför".

I det installerade systemet, glöm inte att skapa en användare "Användare"; han kan inte läggas till i gruppen "Administratörer", annars fungerar inte multikiosken. Jag skapade en användare i Computer Management med ett lösenord som aldrig upphör att gälla.

Nu kör vi förberedelsepaketet på det tidigare installerade systemet. Efter applicering av förberedelsepaketet kommer Start-menyn och administratörens meny att ändras. I den vänstra startkolumnen ska knapparna försvinna: "Dokument", "Bild", "Alternativ". Om startmenyn inte har ändrats har något gått fel. Ett installerat paket kan tas bort genom att öppna fönstret Inställningar > Konton > Arbets- eller skolkontoåtkomst > Lägg till eller ta bort provisioneringspaket.

Om startmenyn har ändrats tillämpas inställningarna på systemet, logga in som användaren som multikiosken är konfigurerad för och titta på resultatet.

Metod # 2

Tillämpa inställningar med "MDM Bridge WMI Provider" beskrivs här. Bekvämligheten med denna metod är dess flexibilitet i användningen och förmågan att bli av med många manuella operationer som behövs för att skapa ett förberedelsepaket. Här kan var och en fatta ett beslut som passar dem. Jag gjorde ett par manus åt mig själv.

MiltiKiosk.bat – startskript

@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 – huvudmanus

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

Om du vill använda min lösning, spara sedan ovanstående skript med deras ursprungliga namn i en mapp och lägg filen "PsExec.exe" i samma mapp. Skapa en "XML"-mapp i samma mapp och kopiera XML-filerna för att konfigurera multikiosken till den. Jag kommer att använda samma fil som i den första metoden.

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>

Lite om funktionerna i manuset. Skriptet är utformat för att använda XML-filer med "UTF8"-kodning; om du vill använda "ANSI"-kodning, ta bort parametern "encoding UTF8" från filläsningsalternativet. Du måste placera XML-filer i mappen "XML" utan att ersätta tecken; själva skriptet kommer att ersätta specialtecken med lämpliga beteckningar. För att inte bli förvirrad i GUID:erna för att länka användare till profiler, kan du helt enkelt ange användarnumret eller namnet i hängslen; allt innehåll i hängslen kommer att ersättas med GUID.

Att använda skriptet är väldigt enkelt, bara kör det och välj önskat objekt. För att ändra den nuvarande konfigurationen till en ny, är det inte nödvändigt att ta bort den nuvarande, den kommer att skrivas över. Glöm inte att skapa användare som anges i konfigurationsfilen.

När du visar den aktuella multikioskkonfigurationen i samma session som den användes i, istället för specialtecken, kommer kombinationer av ersättningstecken att visas. Efter att ha ändrat sessionen (omstart av skriptet) kommer alla specialtecken att visas i sin ursprungliga form.

Steg 7 - Tätning av systemet

Multikiosken fungerar, ja, det är allt, det verkar...

Om allt går enligt planerna, då märker du inget.

Glöm inte att vi fortfarande behöver byta systemet från revisionsläge till välkomstläge. Tja, vi är redo för detta, vi startar "Sysprep.bat", välj punkt 2, systemet är förseglat. Vi slår på enheten, systemet startar, vi loggar in på användarkontot som multikiosken är konfigurerad för, men vi kan inte logga in. Efter meddelandet "Välkommen" visas meddelandet "Logga ut".

Först ville jag bara beskriva lösningen på problemet, men senare bestämde jag mig för att beskriva stegen för att identifiera problemet och hitta den enklaste lösningen eftersom... Säkert kommer många läsare att plågas av vaga tvivel - "Tänk om det är så här...". Jag tror att en beskrivning av de olika experimenten kommer att spara en hel del tid om du vill hitta en annan lösning. För att göra informationen så korrekt som möjligt, och för att återigen se till att det inte finns några fel, kommer jag att beskriva experimenten i formatet "gjort och registrerat". De där. Jag kommer att göra de beskrivna experimenten igen.

experiment

Vad gjorde vi? Det finns två konton i systemet:

"Admin" - i gruppen "Administratörer".
"Användare" - i gruppen "Användare".
I granskningsläge fungerade multikiosken, men när den var förseglad fungerade den inte.

Experiment 1

Vi tar bort det installerade förberedelsepaketet, i snap-in "Datorhantering" tar vi bort användaren "Användare" och skapar en ny användare med namnet "Användare", tillämpar förberedelsepaketet, gå till "Användare" -kontot - det gör det inte arbete. Vi går under namnet "Admin", tar bort användaren "Användare" från gruppen "Användare", lägg till den i gruppen "Administratörer", går under namnet "Användare" - det fungerar inte. Vi loggar in under namnet "Admin", raderar förberedelsepaketet med multikiosken, loggar in under namnet "Användare" - vi lyckades logga in, men multikioskläget fungerar förstås inte p.g.a. Provisioneringspaketet har tagits bort.

Experiment 2

Vi laddar upp systembilden - Russified i revisionsläge.

OS har laddats, tryck på "Win+r", eftersom Vårt sysprep-fönster har stängts automatiskt, kör kommandot "sysprep" och kör "sysprep" i fönstret som öppnas. Sysprep-inställningar i fönstret: "Gå till systemets välkomstfönster (OOBE)", "Förbereder för användning", "Starta om". Klicka på "OK" och vänta på OS-hälsningen. Vi svarar på frågorna när systemet startar för första gången: "Fortsätt på valt språk?" - "ryska"; region – Ryssland; tangentbordslayout – ryska; lägg till en andra tangentbordslayout - hoppa över; "Låt oss ansluta dig till nätverket" - "Hoppa över nu"; anslut till Internet - nej; licensavtal - acceptera; "Vem kommer att använda den här datorn" - "Test"; skapa ett lösenord - lämna fältet tomt; Bekväm drift på olika enheter – nej; Sekretessinställningar – acceptera. OS har laddats, i snap-in "Datorhantering" skapar vi en användare med namnet "Användare", lägg till förberedelsepaketet. Resultatet är att det inte fungerar.

Experiment 3

Vi laddar upp systembilden - Russified i revisionsläge.

Operativsystemet har laddats, anslut systemet till Internet, kör kommandot "gpedit.msc" och i avsnittet "Windows Update" aktivera alternativet "Aktivera rekommenderade uppdateringar genom automatiska uppdateringar", starta om i alla fall. I uppdateringscentret, klicka på "Sök efter uppdateringar" och starta om tills alla uppdateringar är installerade. Koppla bort systemet från Internet. Vi startar "sysprep" i grafiskt läge och upprepar alla steg som beskrivs i föregående steg från att köra "sysprep"-verktyget till att lägga till förberedelsepaketet. Resultatet är att det inte fungerar.

Experiment 4

Vi laddar upp systembilden - engelska i revisionsläge.

Vi lanserar "sysprep" i grafiskt läge, förseglar operativsystemet med samma parametrar som under experiment 2. När systemet startar första gången väljer vi samma parametrar som i experiment 2, med undantag för regionala och språkparametrar eftersom Det finns inget ryskt språk. På samma sätt, skapa en användare "Användare" och lägg till ett provisioneringspaket. Resultatet är att det fungerar. De där. Problemet är relaterat till lokalisering.

Experiment 5

Vi laddar upp systembilden - Russified i revisionsläge.

I snapin-modulen "Datorhantering", skapa en användare "Användare", lägg till ett förberedelsepaket, gå till kontot "Användare", multikiosken fungerar.

Logga ut från ditt konto och logga in under "Admin"-kontot. Vi startar PowerShell med administratörsrättigheter, kör kommandot "Dism /online /Get-Intl" och se "Standardspråk för användargränssnitt: sv-US".

Vi startar från flashenheten till WinPE, det utplacerade operativsystemet finns på min E-enhet. Vi kör kommandot "Dism /image:E: /Set-UILang:ru-ru". Vi tittar på resultatet, kör "Dism /image:E: /Get-Intl" och ser "Default system UI language: ru-RU".

Vi startar in i systemet, loggar in på "Användare" -kontot, multikiosken fungerar inte.

För att tydligt fastställa orsak-och-verkan-sambandet för problemet, låt oss försöka igen att få multi-kiosken att fungera och inte fungera.

Vi startar från flashenheten till WinPE, det installerade operativsystemet finns på min E-enhet. Vi kör kommandot "Dism /image:E: /Set-UILang:en-us". Vi tittar på resultatet, kör "Dism /image:E: /Get-Intl" och ser "Default system UI language: en-US".

Vi startar in i systemet, loggar in på "Användare" -kontot, multikiosken fungerar.

Vi startar från flashenheten till WinPE, det utplacerade operativsystemet finns på min E-enhet. Vi kör kommandot "Dism /image:E: /Set-UILang:ru-ru". Vi tittar på resultatet, kör "Dism /image:E: /Get-Intl" och ser "Default system UI language: ru-RU".

Vi startar in i systemet, loggar in på "Användare" -kontot, multikiosken fungerar inte.

De där. du kan se ett tydligt beroende av kioskens prestanda på standardspråket för användargränssnittet. Kanske finns det några andra faktorer som påverkar multikioskens prestanda?

Experiment 6

För experimentets renhet fyller vi på systemet. Vi laddar upp systembilden - Russified i revisionsläge.

Vi lanserar "sysprep" i grafiskt läge, förseglar operativsystemet med samma parametrar som under experiment 2. Vi väntar på att OS ska hälsa på oss och svara på frågorna: "Fortsätt på valt språk?" - "Engelska Förenta Staterna)"; region – Ryssland; Tangentbordslayout – ryska. Vidare valdes alla parametrar som i experiment 2.

Låt oss titta på standardinställningarna för användargränssnittet. Vi kör kommandot "Dism /online /Get-Intl" och se "Default system UI language: en-US". I snapin-modulen "Datorhantering", skapa en användare "Användare", lägg till ett förberedelsepaket, gå till kontot "Användare", multikiosken fungerar.

Vi försöker bryta kiosken genom att ändra standardspråket för användargränssnittet. Vi går in på "Test"-användaren, som skapades när systemet startade första gången och aktiverar automatisk inloggning för den så att systemet inte startar upp på "Användar"-kontot direkt. Kör "netplwiz", välj "Test"-användaren, avmarkera kryssrutan "Kräv användarnamn och lösenord" och använd parametrarna.

Starta från en flashenhet till WinPE. Kör kommandot "Dism /image:E: /Set-UILang:ru-ru". Vi tittar på resultatet, kör "Dism /image:E: /Get-Intl" och ser "Default system UI language: ru-RU".

Vi startar in i systemet, försöker logga in på "Användare" -kontot, multikiosken fungerar. De där. den kan inte brytas. Är det möjligt att få det att fungera på det här sättet?

Experiment 7

Vi laddar upp systembilden - Russified i revisionsläge.

Vi startar "Sysprep.bat", väljer punkt 2. Vi startar in i systemet, skapar användaren "Användare" i snapin-modulen "Datorhantering", lägger till förberedelsepaketet, går till kontot "Användare", multi- kiosken fungerar inte.

Starta från en flashenhet till WinPE. Kör kommandot "Dism /image:E: /Set-UILang:en-us". Vi tittar på resultatet, kör "Dism /image:E: /Get-Intl" och ser "Default system UI language: en-US".

Vi startar in i systemet, försöker logga in på "Användare" -kontot, multikiosken fungerar inte.

Det visar sig att genom att ändra standardinställningen för användargränssnittet kan du bara påverka multikioskens prestanda när systemet är i granskningsläge eller vid den första uppstarten efter att systemet har förseglats. Det betyder att du måste försegla systemet med en svarsfil där systemspråket väljs på engelska och sedan ändra systeminställningarna så att gränssnittet blir ryska. Inte en särskilt bra lösning. Kanske kan problemet lösas genom att installera ett språkpaket eller installera ytterligare språkpaket?

Experiment 8

Vi laddar upp systembilden - engelska i revisionsläge.

Vi ansluter till Internet, i systemparametrarna gå till avsnittet "Språk", välj "Lägg till språk", välj språket "ryska", klicka på "Nästa", lämna installationsparametrarna som standard, klicka på "Installera", efter installationen språkpaketet startar vi om systemet, nu på Russified. Koppla bort systemet från Internet, kör "Sysprep.bat", välj punkt 2.

Efter att ha laddat systemet, i snap-in "Datorhantering", skapa "Användare" -användaren, lägg till förberedelsepaketet, gå till "Användare" -kontot, multi-kiosken fungerar inte.

Experiment 9

Låt oss försöka rusifiera systemet före installationen, i offlineläge. Samtidigt kommer det att finnas ett kort utbildningsprogram om lokalisering av distributionen.

Jag tar en flash-enhet med en ren originaldistribution - X21-96381. Det blir körning "E". För att montera bilder skapar jag mappar: "c:MountInstall", "c:MountWinre", "c:MountBoot". Jag tar en uppsättning lokaliseringspaket - X21-87814. Och till mappen "c:Mount" kopierar jag paketen från den: "Microsoft-Windows-Client-Language-Pack_x86_ru-ru.cab", "lp.cab", "WinPE-Setup_ru-ru.cab". Jag startar konsolen med administratörsrättigheter. Jag tror att ytterligare kommandon kommer att vara tydliga utan kommentarer.

Lokaliseringskommandon

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

Vi startar från flashenheten, väljer det ryska språket och installerar systemet på en tom disk. När systemet ber dig att välja en region, tryck på "Ctrl+Skift+F3". I snapin-modulen "Datorhantering", skapa en användare "Användare", lägg till ett förberedelsepaket, gå till kontot "Användare", multikiosken fungerar inte.

Starta från en flashenhet till WinPE. Kör kommandot "Dism /image:E: /Set-UILang:en-us".

Vi startar in i systemet, försöker logga in på "Användare" -kontot, multikiosken fungerar.

Tydligen ligger problemet inte i metoderna för att lägga till ett paket, låt oss försöka lägga till ytterligare paket.

Experiment 10

Vi tar flashenheten som vi förberedde i föregående steg.

Vi tar paketet "Feat on Demand" - X21-87815. Jag kopierar paketen från den till mappen "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».

Starta konsolen med administratörsrättigheter och kör kommandona:

kommandon

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

Vi startar från flashenheten, väljer det ryska språket och installerar systemet på en tom disk. När systemet ber dig att välja en region, tryck på "Ctrl+Skift+F3". I snapin-modulen "Computer Management", skapa "User"-användaren, lägg till provisioneringspaketet och logga in på "User"-kontot. Jag fick en svart skärm som hängde länge, så jag hotbootade systemet.

Vi tar bort förberedelsepaketet, loggar in som "Användare", startar om systemet, lägger till förberedelsepaketet, multikiosken fungerar inte.

Starta från en flashenhet till WinPE. Kör kommandot "Dism /image:E: /Set-UILang:en-us".

Vi startar in i systemet, försöker logga in på "Användare" -kontot, multikiosken fungerar.

Jobba runt

Normala hjältar. De tar alltid en omväg!

Olika metoder för att installera lokaliseringspaket löste inte problemet, vilket innebär att du måste installera "en-us"-språket vid den första uppstarten efter försegling, och ändra språkinställningarna efter den första uppstarten.

Vi laddar upp systembilden - Russified i revisionsläge.

I filen "Unattend.xml", skriv in "en-US" i parametern, kör "Sysprep.bat", välj punkt 2 och se vad vi har. Välkomstskärmen är på engelska, multikiosken fungerar. Det betyder att du måste lägga till ett kommando till "Unattend.xml" för att ändra hälsningsspråket. Och för att göra detta måste du köra kommandot "control intl.cpl,, /f:" som indikerar konfigurationsfilen, som kommer att specificera kopieringen av de aktuella parametrarna till välkomstskärmen. Innehållet i konfigurationsfilen kommer att se ut så här.

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

Därför att kommer att kopiera inställningarna för den aktuella användaren, då måste kommandot utföras efter att användaren har loggat in, vilket betyder att vi kommer att behöva. Det finns ett litet "men", körning kommer att ske efter att en användare med administratörsrättigheter loggar in. Och jag skulle inte vilja skapa en ytterligare fil som skulle behövas för att kommandot ska köras framgångsrikt. Det är bättre att implementera hela lösningen i en enda fil - "Unattend.xml". För att göra detta behöver du helt enkelt köra ett kommando som skapar en konfigurationsfil. Jag tror att jag kommer att skapa en konfigurationsfil med kommandot "echo" i "cmd"-miljön, men den måste undvika vinkelparenteserna med en cirkumflex. De där. För att skapa en konfigurationsfil erhålls följande kommando.

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

Men vi måste placera detta kommando i XML, som har sina egna krav för användning av specialtecken:

Speciell karaktär
Ersättningsvärde

>
&gt;

<
&lt;

&
&amp;

'
&apos;

"
&quot;

Som ett resultat, för att skapa en konfigurationsfil, fick vi följande kommando för "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;

Därefter kör vi kommandot med hjälp av konfigurationsfilen.

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

Ta sedan bort den tidigare skapade filen och starta om systemet. ändringarna träder i kraft efter en omstart.

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

Som ett resultat fick jag följande svarsfil för 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>

Låt oss kolla...

Vi laddar upp systembilden - Russified i revisionsläge.

Vi ändrar filen Unattend.xml till en ny, kör “Sysprep.bat”, väljer punkt 2 och ser vad vi har. När du startar första gången är välkomstskärmen på engelska och systemet startas om. Välkomstskärmen är på ryska, multikiosken fungerar.

Om du har några frågor om att installera och licensiera Windows 10 IoT Enterprise, vänligen kontakta: [e-postskyddad] eller till webbplatsen quarta-embedded.ru.
Du kan hitta svar på några frågor i vår wiki eller på vår Youtube-kanal

Författare till artikeln: Vladimir Borisenkov, teknisk expert på Quarta Technologies.

Källa: will.com