Windows 10 IoT Enterprise 2019 - način rada s više kioska

Uvod

Windows 10 IoT Enterprise 2019 je marketinški naziv za sljedeće izdanje Windowsa 10. Izdanje ove verzije je najavljeno u septembru 2018. godine, odnosno ima verziju 1809, 18 je godina, 09 je mjesec. O novom izdanju Windowsa 10 1809 napisano je mnogo članaka, ali većina njih je posvećena raznim "magovima", "ljepotama" i raznim funkcionalnostima koje su tražene kod kuće.
Ovaj članak će govoriti samo o funkcionalnosti koja može biti tražena među proizvođačima uređaja fiksne namjene. Naime, o novim mogućnostima režima „Kiosk“. Dotaknut će se i tema promjene naziva servisnih šema za Windows izdanja poslovnog segmenta.

Stara šema usluga s novim imenom

Dozvolite mi da počnem s kratkim objašnjenjem: u korporativnom segmentu Windows izdanja postoje dvije šeme usluga prema kojima Windows prima ažuriranja. Servisni dijagrami imaju slovnu oznaku. Trenutno se uslužne grane zovu LTSC i SAC.

LTSC je skraćenica za Dugoročni servisni kanal (sa dugotrajnim održavanjem). Ranije se takav kanal zvao LTSB - Long Term Servicing Branch.Microsoft je jednostavno promijenio naziv kanala usluge, a sam servis je ostao isti.

Microsoft je također promijenio naziv uslužne podružnice CBB - Current Branch for Business, sada se ova uslužna podružnica zove SAC - Polugodišnji kanal. Opet, samo se ime promijenilo.

Ali treba napomenuti da LTSC i SAC servisne grane koriste različite Windows distribucije.

Malo o novom načinu rada kioska u SAC-u

Kao što sam već rekao, LTSC i SAC imaju različite distribucije. LTSC nema standardne univerzalne aplikacije ili trgovinu aplikacija, ali SAC ima. Shodno tome, LTSC nema Edge pretraživač, ali SAC ima. Ako odaberete Edge pretraživač prilikom postavljanja kioska, tada su sada dostupna dva načina rada:

  1. Kao digitalni znak ili interaktivni displej
  2. Kao javni pretraživač

Neću se zadržavati na postavljanju ovih modova, jer... Podešavanje je vrlo jednostavno i radi se u grafičkom interfejsu. Samo kreirajte korisnika koji nije član grupe administratora, omogućite mu način rada kioska koristeći EDGE i pogledajte kako ovi načini funkcioniraju.

Kiosk sa mnogo aplikacija

Neki ljudi misle da je to licencirano korištenje Windows 10 IoT Enterprise podrazumijeva rad samo jedne aplikacije na uređaju, zapravo to nije slučaj. Uređaj mora biti dizajniran za obavljanje jednog poslovnog zadatka i korisnik ne smije imati pristup desktopu. Sada je sam Microsoft dao alat za korištenje mnogih aplikacija. Ovaj način rada naziva se „kiosk za više aplikacija“; u nastavku ću ga, radi sažetosti, zvati „multikiosk“. U ovom članku ćemo se osvrnuti na podešavanje ovog načina rada pomoću softverskog paketa i neke od karakteristika ovog načina rada.

Malo o Multikiosk modu

Kada se prijavite na korisnički nalog za koji je konfigurisan višekiosk režim, sistem će raditi u tablet režimu. Start meni će se proširiti na cijeli ekran, prikazujući pločice aplikacija.

Lista osnovnih postavki i mogućnosti načina rada:

  1. Podešavanje za više korisnika ili grupa
  2. Svakom korisniku ili grupi mogu se dodijeliti pojedinačne postavke
  3. Mogućnost korištenja univerzalnih i klasičnih aplikacija
  4. Mogućnost automatskog pokretanja jedne od aplikacija kada se korisnik prijavi
  5. Aplikacije na bijeloj listi
  6. Pristup folderima pomoću bijele liste

Vrijedi obratiti pažnju na tačku 5. Podrazumevano će biti dozvoljeno da rade samo one aplikacije koje su neophodne za rad sistema, dok se ostale aplikacije moraju dodati na listu dozvoljenih. One. Sada ne morate posebno da konfigurišete AppLocker. Usput, kako bi se izbjegli sukobi s postavkama AppLockera, u načinu rada s više kioska, sva konfigurirana pravila AppLockera neće se primjenjivati.

Tačka 6 ukazuje na dobru opciju, ali trenutno je moguće dati dozvolu za pisanje samo u folder “Preuzimanja”. Režim vam omogućava korištenje univerzalnih i klasičnih aplikacija. Sve postavke načina su navedene u XML datoteci, u kojoj također možete odrediti postavke za jedan kiosk aplikacije.

A sad da probamo da sve to podesimo...

šta nam treba...

  1. Prije svega, potreban nam je sam sistem koji podržava multikiosk način rada. Ovdje možete preuzeti demo verzija
  2. Upute za postavljanje multikioska
  3. Bilo koji XML editor
  4. Za primjenu postavki multikioska:
    1. Za metodu br. 1 - ICD, koja je dio ADK. ADK je moguć preuzmite ovde
    2. Za metodu br. 2 - pomoćni program PsExec. Uslužni program može biti preuzmite ovde

Rekao je - "Idemo!"

Provešću sve eksperimente na Windows 10 IoT Enterprise 1809 LTSC x32 komercijalnoj verziji, a ne demo verziji. Sistem se neće aktivirati jer nedostatak aktivacije ne utiče na funkcionalnost sistema. Uzeo sam 32 bita samo zato što zauzima manje prostora i biće brže raditi sa sistemskim slikama.

Korak 1 – instalacija

Instalacija Win 10 IoT Enterprise se ne razlikuje od instaliranja Win 10 Enterprise, tako da neću opisivati ​​cijeli proces instalacije, samo ću govoriti o nekim nijansama.

Za svaki slučaj, da vas podsjetim, nemojte instalirati sistem preko instaliranog. Kada instalater pita za lokaciju instalacije sistema, izbrišite sve particije na budućem sistemskom disku i navedite neparticionirani disk.

Sistem instaliramo bez internet konekcije kako sistem ne bi povukao ništa nepotrebno.

Jer Napravićemo rezervne slike sistema i za to ćemo ga zatvoriti u režimu revizije, a zatim možete uštedeti neko vreme tako što ćete učitati sistem u režimu revizije odmah nakon instalacije. Da biste to učinili, kada sistem od vas zatraži da odaberete regiju “Počnimo s regijom. Da li je to tačno" samo pritisnite "Ctrl+Shift+F3".

Korak 2 - kreirajte sliku sistema

Jer rugaćemo se sistemu i isprobavati razne nove postavke, moguće je da nešto krene naopako i da ćemo morati da vratimo sistem u prvobitno stanje. A da biste se brzo vratili u prvobitno stanje, potrebno je da kreirate sliku sistema. Jedino što ću učiniti je kopirati "džentlmenski komplet" - skriptu i datoteku odgovora. Svi moji fajlovi se nalaze u fascikli „Sysprep“, koju kopiram u koren sistemskog diska. I naravno, podijelit ću ovaj "džentlmenski set" sa vama.

Sysprep.bat – za zaptivanje 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

Kada se pokrene, skripta će provjeriti prisustvo "Admin" naloga i kreirati ga ako nedostaje. Račun će biti dodan u grupu administratora.

Unattend.xml – datoteka odgovora za 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>

Kada se zapečati u režimu revizije, skripta će dodati naredbu u registrator za završetak procesa “sysprep.exe” kako ne bi svaki put ručno zatvorila prozor sysprep. Kada je zapečaćena u hello modu, skripta će ukloniti naredbu za zatvaranje prozora iz registra i sama će promijeniti vrijednost arhitekture u datoteci odgovora na trenutnu. Datoteka odgovora sadrži parametre za pokretanje sistema bez interakcije korisnika i komandu za brisanje fascikle “Sysprep” u korenu sistemskog diska.

Sada ću zatvoriti sistem u režimu revizije koristeći “Sysprep.bat” i snimiti sliku sistema. Slikat ću sistem koristeći DISM i prikazat ću samo jačinu sistema. Ako snimate samo sistemski volumen, a ne cijeli disk, onda ne zaboravite kopirati sadržaj direktorija “WindowsSystem32Recovery” na prvi volumen u folder “RecoveryWindowsRE” nakon postavljanja sistema. Ovo će se morati uraditi prije učitavanja OS-a. nakon učitavanja OS-a, direktorij “WindowsSystem32Recovery” će već biti prazan.

Korak 3 – Rusifikacija sistema

Jezički paket se može instalirati bez internetske veze ako imate ovaj paket. Ako nije, sam sistem će ga preuzeti sa interneta kada dodate jezik u postavkama. Samo ne morate preuzimati jezični paket iz prethodnih verzija OS-a. Za Windows 10 1809 mora postojati jezički paket posebno za Windows 10 1809.

Microsoft slijedi svoj plan da postupno prenosi postavke iz klasičnog menija u novi, tako da u klasičnoj kontrolnoj tabli više nećete pronaći postavke za promjenu jezika i instaliranje jezičnog paketa. Ove postavke su sada samo u sistemskim parametrima.

U režimu revizije možete naići na problem pri otvaranju sistemskih postavki iz menija Start; da biste otvorili sistemske postavke, pokrenite naredbu - “ms-settings:”, obratite pažnju na dvotočku na kraju naredbe, bez toga će komanda ne radi. Nakon otvaranja sistemskih parametara jednom upotrebom ove naredbe, može se otvoriti pomoću grafičkog menija.

Ali u sistemskim postavkama možete instalirati jezički paket ako je sistem povezan na Internet, ne postoji opcija da odaberete da instalirate jezički paket iz lokalne datoteke.

Neću opisivati ​​proces lokalizacije sistema jer... ovo će značajno zakomplicirati članak, pogotovo jer je proces lokalizacije detaljan opisano ovdje. Ali želim da vam skrenem pažnju na posebnost promene jezika sistema nakon instaliranja jezičkog paketa pomoću konzole. Ova funkcija je opisana u istom wikiju na koji sam ranije dao vezu, u pododjeljku "Dodavanje jezika na listu jezika".

Instalirat ću jezički paket bez internetske veze.

Nakon potpune lokalizacije sistema, obavezno kreirajte sliku sistema.

Korak 4 - Instalirajte potrebne aplikacije

Jer Pošto LTSB i LTSC sistemi nemaju skladište aplikacija, instaliranje aplikacija iz Microsoft Store-a izaziva određene poteškoće, odnosno preuzimanje aplikacije. Za preuzimanje aplikacija, kompanija Adguard je napravila vrlo zgodnu uslugu - "Adguard Store", uz koje možete dobiti privremene veze za preuzimanje aplikacija i njihovih komponenti.

Da biste instalirali aplikaciju, trebat će vam datoteke s ekstenzijama “Appx” i “AppxBundle”. Prije instaliranja same aplikacije, morate instalirati njene komponente. Po pravilu se komponente iz aplikacije mogu intuitivno razlikovati po imenu datoteke.

Kako članak ne bi bio predugačak, neću detaljno opisivati ​​proces instaliranja aplikacija, pogotovo jer postoje informacije o instalaciji detaljna uputstva. Ali ja ću dodati još jedan način za instaliranje aplikacija na vaš tekući račun. Aplikacije se mogu instalirati pomoću programa "Instalater aplikacija", ali za instaliranje aplikacija trebat će vam internet veza, ali aplikacije se mogu instalirati dvostrukim klikom i neće vam trebati njene komponente, sve potrebne komponente će se preuzeti i instalirati "Instalater aplikacija".

I mali podsjetnik, kada instalirate aplikaciju na tekući račun, nećete moći zapečatiti sistem. Kako instalirati aplikacije tako da možete zapečatiti sistem, pogledajte gornja uputstva. A da biste provjerili rad multikioska, postojeće aplikacije su sasvim dovoljne.

Korak 5 – kreiranje konfiguracionog fajla za multikiosk

Sada dolazimo do najzanimljivijeg dijela - podešavanja kiosk moda. Hajde da pogledamo uputstva prema postavkama koje vidimo. Prije svega, morat ćemo kreirati XML konfiguracijsku datoteku, čiji potpuni primjer možete pronaći ovdje. pogledajte ovdje.

Počnimo s postavljanjem rasporeda pločica. Najlakši način za kreiranje konfiguracije prilagođavanja XML pločica je izvoze svoje trenutno stanje.

Prije svega, dodajmo pločice aplikacija koje su nam potrebne u Start meni. Pozovite pretragu „Win+s“, pronađite željenu aplikaciju, kliknite desnim tasterom miša na nju i izaberite „Zakači na početni ekran“.

Zakačio sam sljedeće aplikacije:

  • Notebook
  • Kalkulator
  • Internet Explorer
  • boja
  • WordPad
  • parametri
  • Sigurnost operativnog sistema Windows

Zadnje dvije prijave su zakačene jer... Jednostavno ne postoje druge univerzalne aplikacije u standardnom LTSC paketu. Imajte na umu da pločice radne površine povezuju prečice. Sada, pomeranjem pločica direktno u Start meniju, razdvojit ću zakačene pločice u dve grupe. Da biste kreirali novu grupu pločica, povucite pločicu znatno više ili niže od ostalih pločica, što će istaknuti intuitivni razdjelnik. Grupe možete imenovati po vlastitom nahođenju; da biste to učinili, postavite pokazivač miša iznad grupe, a kada se pojavi natpis "Imenujte grupu", kliknite lijevu tipku miša. Prvu grupu ću nazvati "Postavke", ona će uključivati ​​pločice "Postavke" i "Windows Security". Drugu grupu nazvat ću “Office Applications”, koja će uključivati ​​sve ostale pločice. Usput, možete premjestiti cijele grupe pločica tako što ćete ih povući pomoću dvije trake koje se nalaze u gornjem desnom kutu naziva grupe.

Jer Na pločici “Windows Security” naziv se ne uklapa u potpunosti, promijenit ću njegovu veličinu u “Wide”. Da biste promijenili veličinu pločice, kliknite desnom tipkom miša na pločicu i odaberite "Promijeni veličinu".

Nakon konfiguracije, izvozimo trenutno stanje i izvršavamo naredbu u PowerShell okruženju – “Export-StartLayout – put C:SysprepStartLayout.xml”.

Dalje, najlakši način nije da sami kreirate datoteku postavki, već uzmite primjer fajla odavde podešavanja – kliknite na dugme „Kopiraj“, nalepite sadržaj u beležnicu i sačuvajte kao „MultiAppKiosk.xml“. Sada mijenjamo postavke u naše. Da biste promijenili postavke priloženih pločica, kopirajte cijeli blok “StartLayoutCollection” iz “StartLayout.xml” u “MultiAppKiosk.xml”. Da biste dodali aplikacije dozvoljenim, potrebno je da unesete univerzalne identifikatore aplikacije u sekciju „AllowedApps“ iu istom bloku dodate punu putanju do izvršnih datoteka klasičnih aplikacija, koja je navedena u svojstvima prečica do kojih se pločice refer. Da biste brzo došli do prečice, kliknite desnim tasterom miša na zakačenu pločicu i idite na Više > Idi na lokaciju datoteke. Imajte na umu da se parametar "AppUserModelId" koristi za određivanje univerzalnog ID-a aplikacije, a parametar "DesktopAppPath" za određivanje pune putanje do desktop aplikacije. I još jedna mala nijansa, ako planirate koristiti IE na x64 sistemu, tada na listi dozvoljenih aplikacija morate navesti dvije putanje za izvršnu datoteku “Program FilesInternet Exploreriexplore.exe” i “Program Files (x86)Internet Exploreriexplore. exe”.

Neću dati pristup folderima, pa brišem odjeljak "FileExplorerNamespaceRestrictions".

Prikazivanje trake zadataka mi ne smeta, tako da ostavljam sve kako jeste u odjeljku "Taskbar".

U primjeru su navedena dva profila, ali ja ću imati samo jedan profil, tako da se dio sa drugim profilom može izbrisati. Prije deinstaliranja obratite pažnju na primjer automatskog pokretanja aplikacije s argumentima.

U odeljku „Konfiguracije“ nalozi su povezani sa profilima; imajte na umu da se više naloga može povezati sa jednim profilom. Ali zato Zanima me samo jedan nalog, onda ću obrisati sve veze osim prvog - blokove “Config”. U preostalom povezu upisat ću korisničko ime “Korisnik”.

Dobio sam ovaj fajl sa parametrima

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>

Kada pravite svoje XML konfiguracijske datoteke, ne zaboravite da svaki profil mora imati jedinstveni ID, i to ne samo unutar jedne XML datoteke, već unutar jednog OS-a. One. U idealnom slučaju, da biste izbjegli zabunu, svaki put možete kreirati novi identifikator; to se može učiniti u PowerShell okruženju pomoću naredbe “[guid]::NewGuid()”. I obavezno sačuvajte datoteku u “UTF-8” kodiranju; ako je datoteka spremljena u “ANSI” kodiranju, tada ćete prilikom izrade pripremnog paketa dobiti grešku ako XML datoteka sadrži ćirilicu.

Korak 6 – primjena postavki multikioska

Pogledajmo dva načina primjene postavki opisanih u konfiguracijskoj datoteci. Prvi je kroz paket za proviziju, koji se mora kreirati u ICD-u. Nekima će možda ova metoda biti poznatija. Drugi je korištenje “MDM Bridge WMI provajdera”, ovaj metod mi se činio zgodnijim.

Metod # 1

Ko nema ICD? preuzmi ADK i instalirati. Instalacija ADK-a je vrlo jednostavna; skup komponenti se može ostaviti kao zadani.

Pokrenite ICD, kliknite na pločicu „Napredna priprema“, navedite naziv i mapu projekta i kliknite na „Dalje“. U sljedećem prozoru odaberite “Sva izdanja Windows radne površine” i kliknite “Dalje”. Možete preskočiti uvoz pripremnog paketa; kliknite na „Završi“.

Proširite padajući meni “Runtime Settings”, zatim proširite podmeni “AssignedAccess” i odaberite “MultiAppAssignedAccessSettings”. Na vrhu srednjeg dijela prozora ICD kliknite na dugme “Pregledaj” i naznačite lokaciju XML datoteke s postavkama. Za svaki slučaj možete sačuvati projekat pritiskom na “Ctrl+s”. U gornjem lijevom dijelu ICD-a odaberite “Izvoz” i odaberite “Provisioning Package” iz padajućeg izbornika. Kao vlasnik, odaberite “IT administrator”; sva ostala pitanja možete preskočiti klikom na “Dalje” i na kraju kliknite “Build” i “Finish”.

U instaliranom sistemu ne zaboravite kreirati korisnika "Korisnik", on se ne može dodati u grupu "Administratori", inače multikiosk neće raditi. Kreirao sam korisnika u Computer Managementu sa lozinkom koja nikada ne ističe.

Sada pokrećemo pripremni paket na prethodno instaliranom sistemu. Nakon primjene pripremnog paketa, meni Start i meni administratora će se promijeniti. U lijevoj početnoj koloni treba da nestanu dugmad: “Dokumenti”, “Slika”, “Opcije”. Ako se početni meni nije promijenio, onda je nešto pošlo po zlu. Instalirani paket može se ukloniti otvaranjem prozora Postavke > Računi > Pristup poslovnom ili školskom računu > Dodaj ili ukloni paket za dostavljanje.

Ako se početni meni promijenio, tada se postavke primjenjuju na sistem, prijavite se kao korisnik za kojeg je konfiguriran multikiosk i pogledajte rezultat.

Metod # 2

Primjena postavki pomoću "MDM Bridge WMI provajdera" opisano ovdje. Pogodnost ove metode je njena fleksibilnost upotrebe i mogućnost da se riješi mnogih ručnih operacija koje su potrebne za kreiranje pripremnog paketa. Ovdje svako može za sebe donijeti odluku koja će mu odgovarati. Napravio sam nekoliko scenarija za sebe.

MiltiKiosk.bat – skripta za pokretanje

@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 – glavna skripta

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

Ako želite da koristite moje rešenje, onda sačuvajte gornje skripte sa njihovim originalnim imenima u jednu fasciklu i stavite datoteku „PsExec.exe“ u istu fasciklu. U istoj fascikli kreirajte fasciklu „XML“ i kopirajte XML datoteke da biste u nju konfigurisali multikiosk. Koristit ću isti fajl kao u prvoj metodi.

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>

Malo o karakteristikama skripte. Skripta je dizajnirana da koristi XML datoteke sa “UTF8” kodiranjem; ako želite da koristite “ANSI” kodiranje, uklonite parametar “kodiranje UTF8” iz opcije čitanja datoteke. Morate smjestiti XML datoteke u mapu “XML” bez zamjene znakova; sama skripta će zamijeniti posebne znakove odgovarajućim oznakama. Kako se ne biste zabunili u GUID-ovima povezivanja korisnika sa profilima, možete jednostavno navesti broj korisnika ili ime u vitičastim zagradama; sav sadržaj u vitičastim zagradama bit će zamijenjen GUID-ovima.

Korištenje skripte je vrlo jednostavno, samo je pokrenite i odaberite potrebnu stavku. Da biste promijenili trenutnu konfiguraciju u novu, nije potrebno brisati trenutnu, ona će biti prepisana. Ne zaboravite kreirati korisnike koji su navedeni u konfiguracijskoj datoteci.

Prilikom pregleda trenutne konfiguracije multikioska u istoj sesiji u kojoj je primijenjena, umjesto specijalnih znakova, prikazat će se kombinacije zamjenskih znakova. Nakon promjene sesije (ponovnog pokretanja skripte), svi specijalni znakovi će biti prikazani u svom originalnom obliku.

Korak 7 - Zaptivanje sistema

Multikiosk radi, pa, to je sve, čini se...

Ako sve ide po planu, onda nešto ne primjećujete.

Ne zaboravite da još uvijek moramo prebaciti sistem iz moda revizije u način dobrodošlice. Pa, spremni smo za ovo, pokrećemo “Sysprep.bat”, biramo tačku 2, sistem je zapečaćen. Uključujemo uređaj, sistem se pokreće, prijavljujemo se na korisnički nalog za koji je konfigurisan multikiosk, ali ne možemo da se prijavimo. Nakon poruke „Dobrodošli“, pojavljuje se poruka „Odjava“.

U početku sam htio opisati samo rješenje problema, ali sam kasnije odlučio da opišem korake za identifikaciju problema i pronalaženje najjednostavnijeg rješenja jer... Sigurno će mnoge čitaoce mučiti nejasne sumnje - "Šta ako je ovako...". Mislim da će vam opisivanje različitih eksperimenata uštedjeti značajnu količinu vremena ako želite pronaći drugo rješenje. Kako bi informacije bile što tačnije, i još jednom se uvjerio da nema grešaka, opisiću eksperimente u formatu “urađeno i snimljeno”. One. Ponovo ću raditi opisane eksperimente.

eksperimenti

sta smo uradili? U sistemu postoje dva naloga:

“Admin” – u grupi “Administratori”.
“Korisnik” – u grupi “Korisnici”.
U režimu revizije, multikiosk je radio, ali kada je zapečaćen, nije radio.

Eksperiment 1

Izbrišemo instalirani pripremni paket, u snap-inu „Upravljanje računarom“ izbrišemo korisnika „Korisnik“ i kreiramo novog korisnika sa imenom „Korisnik“, primenimo pripremni paket, idemo na „Korisnik“ nalog - radi ne radi. Idemo pod imenom "Admin", uklonimo korisnika "Korisnik" iz grupe "Korisnici", dodamo ga u grupu "Administratori", idemo pod imenom "Korisnik" - ne radi. Ulogujemo se pod imenom “Admin”, izbrišemo pripremni paket sa multikioskom, ulogujemo se pod imenom “Korisnik” - uspeli smo da se ulogujemo, ali naravno multikiosk režim ne radi jer Paket za proviziju je uklonjen.

Eksperiment 2

Učitavamo sliku sistema - rusifikovanu u režimu revizije.

OS se učitao, pritisnite “Win+r”, jer Naš sysprep prozor se automatski zatvorio, pokrenite naredbu “sysprep” i pokrenite “sysprep” u prozoru koji se otvori. Postavke Sysprep-a u prozoru: “Idite na prozor dobrodošlice sistema (OOBE)”, “Priprema za upotrebu”, “Ponovo pokrenite”. Kliknite na “OK” i pričekajte pozdrav OS. Odgovaramo na pitanja kada se sistem prvi put pokrene: "Nastaviti na odabranom jeziku?" - "ruski"; region – Rusija; raspored tastature – ruski; dodajte drugi raspored tastature - preskočite; “Hajde da vas povežemo na mrežu” – “Preskoči za sada”; povezivanje na Internet - ne; ugovor o licenci - prihvatiti; “Ko će koristiti ovaj računar” – “Test”; kreiranje lozinke - ostavite polje praznim; Pogodan rad na različitim uređajima – ne; Postavke privatnosti – prihvatiti. OS se učitao, u snap-inu „Upravljanje računarom“ kreiramo korisnika sa imenom „Korisnik“, dodajemo pripremni paket. Rezultat je da ne radi.

Eksperiment 3

Učitavamo sliku sistema - rusifikovanu u režimu revizije.

OS se učitao, povežite sistem na Internet, pokrenite komandu “gpedit.msc” i u odeljku “Windows Update” omogućite opciju “Omogući preporučena ažuriranja putem automatskih ažuriranja”, restartujte za svaki slučaj. U centru za ažuriranje kliknite na "Provjeri ažuriranja" i ponovo pokrenite dok se ne instaliraju sva ažuriranja. Isključite sistem sa interneta. Pokrećemo “sysprep” u grafičkom modu i ponavljamo sve korake opisane u prethodnom koraku od pokretanja uslužnog programa “sysprep” do dodavanja pripremnog paketa. Rezultat je da ne radi.

Eksperiment 4

Učitavamo sliku sistema - engleski u režimu revizije.

Pokrećemo “sysprep” u grafičkom režimu, zapečatimo OS sa istim parametrima kao i tokom eksperimenta 2. Kada se sistem prvi put pokrene, biramo iste parametre kao u eksperimentu 2, sa izuzetkom regionalnih i jezičkih parametara jer Ne postoji ruski jezik. Na isti način kreirajte korisnika "Korisnik" i dodajte paket za proviziju. Rezultat je da radi. One. Problem je vezan za lokalizaciju.

Eksperiment 5

Učitavamo sliku sistema - rusifikovanu u režimu revizije.

U dodatku „Upravljanje računarom“ kreirajte korisnika „Korisnik“, dodajte pripremni paket, idite na „Korisnički“ nalog, multi-kiosk radi.

Odjavite se sa svog naloga i prijavite se pod "Admin" nalogom. Pokrećemo PowerShell sa administratorskim pravima, izvršavamo naredbu “Dism /online /Get-Intl” i vidimo “Podrazumevani jezik korisničkog interfejsa: en-US”.

Dižemo sa fleš diska u WinPE, raspoređeni OS je na mom disku E. Izvršavamo naredbu “Dism /image:E: /Set-UILang:ru-ru”. Gledamo rezultat, izvršavamo "Dism /image:E: /Get-Intl" i vidimo "Podrazumevani jezik korisničkog interfejsa sistema: ru-RU".

Pokrećemo se u sistem, prijavite se na "Korisnički" nalog, multikiosk ne radi.

Da bismo jasno utvrdili uzročno-posledični odnos problema, pokušajmo ponovo da multi-kiosk radi i da ne radi.

Dižemo sa fleš diska u WinPE, raspoređeni OS je na mom disku E. Izvršavamo naredbu “Dism /image:E: /Set-UILang:en-us”. Gledamo rezultat, izvršavamo "Dism /image:E: /Get-Intl" i vidimo "Podrazumevani jezik korisničkog interfejsa sistema: en-US".

Pokrećemo se u sistem, prijavite se na "Korisnički" nalog, multikiosk radi.

Dižemo sa fleš diska u WinPE, raspoređeni OS je na mom disku E. Izvršavamo naredbu “Dism /image:E: /Set-UILang:ru-ru”. Gledamo rezultat, izvršavamo "Dism /image:E: /Get-Intl" i vidimo "Podrazumevani jezik korisničkog interfejsa sistema: ru-RU".

Pokrećemo se u sistem, prijavite se na "Korisnički" nalog, multikiosk ne radi.

One. možete vidjeti jasnu ovisnost performansi kioska od zadanog jezika korisničkog sučelja. Možda postoje neki drugi faktori koji utiču na performanse multikioska?

Eksperiment 6

Radi čistoće eksperimenta, dopunjavamo sistem. Učitavamo sliku sistema - rusifikovanu u režimu revizije.

Pokrećemo “sysprep” u grafičkom modu, zapečatimo OS istim parametrima kao i tokom eksperimenta 2. Čekamo da nas OS pozdravi i odgovori na pitanja: “Nastaviti na odabranom jeziku?” – “Engleski (Sjedinjene Američke Države)”; region – Rusija; Raspored tastature – ruski. Nadalje, svi parametri su odabrani kao u eksperimentu 2.

Pogledajmo zadane postavke jezika korisničkog interfejsa. Izvršavamo naredbu “Dism /online /Get-Intl” i vidimo “Podrazumevani jezik korisničkog interfejsa sistema: en-US”. U dodatku „Upravljanje računarom“ kreirajte korisnika „Korisnik“, dodajte pripremni paket, idite na „Korisnički“ nalog, multi-kiosk radi.

Pokušavamo da razbijemo kiosk promjenom podrazumevanog jezika korisničkog interfejsa. Ulazimo u „Test“ korisnika, koji je kreiran prilikom prvog pokretanja sistema i omogućavamo automatsku prijavu za njega kako se sistem ne bi odmah pokrenuo na „Korisnički“ nalog. Izvršite “netplwiz”, odaberite “Test” korisnika, poništite izbor u polju za potvrdu “Zahtijevaj korisničko ime i lozinku” i primijenite parametre.

Pokrenite sistem sa fleš diska u WinPE. Izvršite naredbu “Dism /image:E: /Set-UILang:ru-ru”. Gledamo rezultat, izvršavamo "Dism /image:E: /Get-Intl" i vidimo "Podrazumevani jezik korisničkog interfejsa sistema: ru-RU".

Pokrećemo se u sistem, pokušavamo se prijaviti na "Korisnički" račun, multikiosk radi. One. ne može se slomiti. Da li je moguće da to funkcionira na ovaj način?

Eksperiment 7

Učitavamo sliku sistema - rusifikovanu u režimu revizije.

Pokrećemo “Sysprep.bat”, biramo tačku 2. Pokrećemo sistem, kreiramo korisnika “Korisnik” u snap-inu “Upravljanje računarom”, dodamo pripremni paket, idemo na nalog “Korisnik”, multi- kiosk ne radi.

Pokrenite sistem sa fleš diska u WinPE. Izvršite naredbu “Dism /image:E: /Set-UILang:en-us”. Gledamo rezultat, izvršavamo "Dism /image:E: /Get-Intl" i vidimo "Podrazumevani jezik korisničkog interfejsa sistema: en-US".

Pokrećemo se u sistem, pokušavamo se prijaviti na "Korisnički" račun, multikiosk ne radi.

Ispostavilo se da promenom podrazumevane postavke jezika korisničkog interfejsa možete uticati na performanse multikioska samo kada je sistem u režimu revizije ili pri prvom pokretanju nakon zaptivanja sistema. To znači da ćete morati da zapečatite sistem datotekom odgovora u kojoj će se izabrati jezik sistema na engleskom, a zatim promeniti sistemske postavke tako da interfejs bude ruski. Nije baš dobro rješenje. Možda se problem može riješiti instaliranjem jezičnog paketa ili instaliranjem dodatnih jezičkih paketa?

Eksperiment 8

Učitavamo sliku sistema - engleski u režimu revizije.

Povezujemo se na Internet, u sistemskim parametrima idite na odjeljak "Jezik", odaberite "Dodaj jezik", odaberite jezik "ruski", kliknite "Dalje", ostavite parametre instalacije kao zadane, kliknite "Instaliraj", nakon instalacije jezički paket ponovo pokrećemo sistem, sada na rusifikovanom. Isključite sistem sa Interneta, pokrenite “Sysprep.bat”, odaberite tačku 2.

Nakon učitavanja sistema, u snap-inu „Upravljanje računarom“ kreirajte korisnika „Korisnik“, dodajte pripremni paket, idite na „Korisnički“ nalog, multi-kiosk ne radi.

Eksperiment 9

Pokušajmo rusificirati sistem prije instalacije, u offline modu. Istovremeno će se održati i kratak edukativni program o lokalizaciji distribucije.

Uzimam fleš disk sa čistom originalnom distribucijom - X21-96381. To će biti pogon "E". Da montiram slike, kreiram foldere: “c:MountInstall”, “c:MountWinre”, “c:MountBoot”. Uzimam set lokalizacijskih paketa - X21-87814. I u folder “c:Mount” kopiram pakete iz njega: “Microsoft-Windows-Client-Language-Pack_x86_ru-ru.cab”, “lp.cab”, “WinPE-Setup_ru-ru.cab”. Pokrećem konzolu sa administratorskim pravima. Mislim da će dalje komande biti jasne bez komentara.

Naredbe za lokalizaciju

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

Pokrećemo se sa fleš diska, biramo ruski jezik i instaliramo sistem na prazan disk. Kada sistem od vas zatraži da odaberete regiju, pritisnite “Ctrl+Shift+F3”. U dodatku „Upravljanje računarom“ kreirajte korisnika „Korisnik“, dodajte pripremni paket, idite na „Korisnički“ nalog, multi-kiosk ne radi.

Pokrenite sistem sa fleš diska u WinPE. Izvršite naredbu “Dism /image:E: /Set-UILang:en-us”.

Pokrećemo se u sistem, pokušavamo se prijaviti na "Korisnički" račun, multikiosk radi.

Očigledno problem nije u metodama dodavanja paketa, hajde da probamo dodati dodatne pakete.

Eksperiment 10

Uzimamo fleš disk koji smo pripremili u prethodnom koraku.

Uzimamo paket “Feat on Demand” – X21-87815. Kopiram pakete iz njega u folder “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».

Pokrenite konzolu sa administratorskim pravima i izvršite naredbe:

Komande

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

Pokrećemo se sa fleš diska, biramo ruski jezik i instaliramo sistem na prazan disk. Kada sistem od vas zatraži da odaberete regiju, pritisnite “Ctrl+Shift+F3”. U dodatku „Upravljanje računarom“ kreirajte korisnika „Korisnik“, dodajte paket za obezbeđivanje i prijavite se na „Korisnički“ nalog. Dobio sam crni ekran koji je visio dugo vremena, pa sam pokrenuo sistem.

Izbrišemo pripremni paket, ulogujemo se kao “Korisnik”, restartujemo sistem, dodamo pripremni paket, multikiosk ne radi.

Pokrenite sistem sa fleš diska u WinPE. Izvršite naredbu “Dism /image:E: /Set-UILang:en-us”.

Pokrećemo se u sistem, pokušavamo se prijaviti na "Korisnički" račun, multikiosk radi.

Zaobilazno rješenje

Normalni heroji. Uvek idu zaobilaznim putem!

Različiti načini instaliranja lokalizacijskih paketa nisu riješili problem, što znači da ćete morati instalirati “en-us” jezik pri prvom pokretanju nakon zatvaranja, a promijeniti jezične postavke nakon prvog pokretanja.

Učitavamo sliku sistema - rusifikovanu u režimu revizije.

U fajlu “Unattend.xml” unesite “en-US” u parametar, pokrenite “Sysprep.bat”, odaberite tačku 2 i pogledajte šta smo dobili. Ekran dobrodošlice je na engleskom, multi-kiosk radi. To znači da morate dodati komandu u “Unattend.xml” da promijenite jezik pozdrava. A da biste to učinili, potrebno je pokrenuti naredbu “control intl.cpl,, /f:” koja označava konfiguracijsku datoteku, koja će specificirati kopiranje trenutnih parametara na ekran dobrodošlice. Sadržaj konfiguracijske datoteke će izgledati ovako.

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

Jer će kopirati postavke trenutnog korisnika, onda se naredba mora izvršiti nakon što se korisnik prijavi, što znači da će nam trebati. Postoji jedno malo “ali”, izvršenje će se dogoditi nakon što se korisnik s administratorskim pravima prijavi. I ne bih želio da kreiram dodatnu datoteku koja bi bila potrebna da bi se naredba uspješno pokrenula. Bolje je implementirati cijelo rješenje u jednom fajlu - “Unattend.xml”. Da biste to učinili, jednostavno ćete morati pokrenuti naredbu koja kreira konfiguracijski fajl. Mislim da ću kreirati konfiguracionu datoteku koristeći komandu "echo" u okruženju "cmd", ali treba da izbegne ugaone zagrade pomoću cirkumfleksa. One. Za kreiranje konfiguracijske datoteke dobija se sljedeća naredba.

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

Ali moramo ovu naredbu smjestiti u XML, koji ima svoje zahtjeve za korištenje posebnih znakova:

Poseban karakter
Zamjenska vrijednost

>
&gt;

<
&lt;

&
&amp;

'
&apos;

"
&quot;

Kao rezultat toga, za kreiranje konfiguracijske datoteke, dobili smo sljedeću naredbu za “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;

Zatim izvršavamo naredbu koristeći konfiguracijski fajl.

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

Zatim izbrišite prethodno kreiranu datoteku i ponovo pokrenite sistem. promjene će stupiti na snagu nakon ponovnog pokretanja.

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

Kao rezultat, završio sam sa sljedećom datotekom odgovora za 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>

hajde da proverimo...

Učitavamo sliku sistema - rusifikovanu u režimu revizije.

Mijenjamo datoteku Unattend.xml u novu, pokrećemo “Sysprep.bat”, odabiremo tačku 2 i vidimo šta smo dobili. Kada prvi put pokrenete, ekran dobrodošlice je na engleskom i sistem se ponovo pokreće. Ekran dobrodošlice je na ruskom, multikiosk radi.

Ako imate bilo kakvih pitanja o postavljanju i licenciranju Windows 10 IoT Enterprise, kontaktirajte: [email zaštićen] ili na web stranicu quarta-embedded.ru.
Odgovore na neka pitanja možete pronaći u naš wiki ili na našem YouTube kanali

Autor članka: Vladimir Borisenkov, tehnički stručnjak u Quarta Technologies.

izvor: www.habr.com