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 sustava Windows 10. Izdanje ove verzije najavljeno je u rujnu 2018., odnosno ima verziju 1809, 18 je godina, 09 je mjesec. Mnogo je članaka napisano o novom izdanju sustava Windows 10 1809, ali većina ih je posvećena raznim "lukovima", "ljepotama" i raznim funkcionalnostima koje su tražene kod kuće.
Ovaj članak govorit će samo o funkcionalnosti koja bi mogla biti tražena među proizvođačima uređaja fiksne namjene. Naime, o novim mogućnostima “Kiosk” moda. Također će se dotaknuti tema promjene naziva servisnih shema za Windows izdanja poslovnog segmenta.

Stara shema usluge s novim imenom

Da počnem s kratkim objašnjenjem: u korporativnom segmentu Windows izdanja postoje dvije servisne sheme prema kojima Windows prima ažuriranja. Servisni dijagrami imaju slovnu oznaku. Trenutno se ogranci usluga zovu LTSC i SAC.

LTSC je kratica za Kanal dugoročnog servisiranja (uz dugotrajno održavanje). Prethodno se takav kanal zvao LTSB - Long Term Servicing Branch.Microsoft je jednostavno promijenio naziv servisnog kanala, sama usluga je ostala ista.

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

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

Malo o novom načinu 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. Sukladno tome, LTSC nema Edge preglednik, ali SAC ima. Ako prilikom postavljanja kioska odaberete preglednik Edge, sada su dostupna dva načina:

  1. Kao digitalni znak ili interaktivni zaslon
  2. Kao javni preglednik

Neću se zadržavati na postavljanju ovih modova, jer... Postavljanje je vrlo jednostavno i vrši se u grafičkom sučelju. Samo stvorite korisnika koji nije član grupe administratora, omogućite mu kiosk način rada koristeći EDGE i pogledajte kako ovi načini rade.

Kiosk s mnogo aplikacija

Neki ljudi misle da je licencirana uporaba Windows 10 IoT Enterprise podrazumijeva rad samo jedne aplikacije na uređaju, zapravo to nije tako. Uređaj mora biti dizajniran za obavljanje jednog poslovnog zadatka i korisnik ne smije imati pristup radnoj površini. Sada je sam Microsoft dao alat za korištenje mnogih aplikacija. Ovaj način rada naziva se "kiosk s više aplikacija"; u nastavku ću ga, radi sažetosti, zvati "multikiosk". U ovom ćemo članku pogledati postavljanje ovog načina rada pomoću softverskog paketa i neke značajke ovog načina rada.

Malo o načinu Multikiosk

Kada se prijavite na korisnički račun za koji je konfiguriran način rada s više kioska, sustav će raditi u načinu rada tableta. Izbornik Start proširit će se na cijeli zaslon, prikazujući pločice aplikacija.

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

  1. Postavljanje za više korisnika ili grupa
  2. Svakom korisniku ili grupi mogu se dodijeliti individualne 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 popisu dopuštenih
  6. Pristup mapama pomoću bijele liste

Vrijedno je obratiti pozornost na točku 5. Prema zadanim postavkama, samo će one aplikacije koje su potrebne za rad sustava moći raditi, ostale aplikacije moraju biti dodane na popis dopuštenih. Oni. Sada ne morate posebno konfigurirati AppLocker. Usput, kako biste izbjegli sukobe s postavkama AppLockera, u načinu rada s više kioska sva konfigurirana pravila AppLockera neće se primjenjivati.

Točka 6 označava dobru opciju, ali trenutno je moguće dati dopuštenje za pisanje samo u mapu “Preuzimanja”. Način vam omogućuje korištenje univerzalnih i klasičnih aplikacija. Sve postavke načina navedene su u XML datoteci, u kojoj također možete odrediti postavke za kiosk jedne aplikacije.

Sada pokušajmo sve to postaviti...

Što trebamo...

  1. Prije svega, potreban nam je sam sustav koji podržava multikiosk mod. Ovdje možete preuzeti demo verzija
  2. Upute za postavljanje multikioska
  3. Bilo koji XML editor
  4. Za primjenu multikiosk postavki:
    1. Za metodu broj 1 - ICD, koji je dio ADK. ADK je moguć Skraćeni naziv
    2. Za metodu br. 2 - uslužni program PsExec. Korisnost može biti Skraćeni naziv

Rekao je - "Idemo!"

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

Korak 1 – instalacija

Instalacija Win 10 IoT Enterprise ne razlikuje se od instalacije Win 10 Enterprise, stoga neću opisivati ​​cijeli postupak instalacije, govorit ću samo o nekim nijansama.

Za svaki slučaj, podsjetit ću vas, nemojte instalirati sustav iznad instaliranog. Kada instalater pita o mjestu instalacije sustava, obrišite sve particije na budućem disku sustava i navedite neparticionirani disk.

Instaliramo sustav bez internetske veze kako sustav ne bi povukao ništa nepotrebno.

Jer Stvorit ćemo slike sigurnosne kopije sustava i za to ćemo ga zapečatiti u modu revizije, a zatim možete uštedjeti vrijeme učitavanjem sustava u modu revizije odmah nakon instalacije. Da biste to učinili, kada sustav zatraži da odaberete regiju “Počnimo s regijom. Je li to točno" samo pritisnite "Ctrl+Shift+F3".

Korak 2 - izradite sliku sustava

Jer rugat ćemo se sustavu i isprobavati razne nove postavke, moguće je da će nešto poći po zlu pa ćemo trebati vratiti sustav u prvobitno stanje. A da biste se brzo vratili u prvobitno stanje, morate stvoriti sliku sustava. Jedino što ću učiniti je kopirati “džentlmenski pribor” - skriptu i datoteku odgovora. Sve moje datoteke nalaze se u mapi “Sysprep” koju kopiram u korijen diska sustava. I naravno, ovaj "džentlmenski set" podijelit ću s vama.

Sysprep.bat – za brtvljenje sustava.

@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 prisutnost "Admin" računa i stvoriti ga ako nedostaje. Račun će biti dodan u grupu Administratori.

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>

Prilikom zatvaranja u modu revizije, skripta će dodati naredbu u registar za završetak procesa "sysprep.exe" kako se ne bi svaki put ručno zatvarao prozor sysprep. Kada je zapečaćena u načinu pozdrava, 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 dizanje sustava bez interakcije korisnika i naredbu za brisanje mape “Sysprep” u korijenu pogona sustava.

Sada ću zapečatiti sustav u modu revizije pomoću "Sysprep.bat" i snimiti sliku sustava. Slikat ću sustav pomoću DISM-a i slikat ću samo volumen sustava. Ako ćete slikati samo volumen sustava, a ne cijeli disk, ne zaboravite kopirati sadržaj direktorija “WindowsSystem32Recovery” na prvi volumen u mapu “RecoveryWindowsRE” nakon postavljanja sustava. To ćete morati učiniti prije učitavanja OS-a. nakon učitavanja OS-a, direktorij "WindowsSystem32Recovery" već će biti prazan.

Korak 3 – Rusifikacija sustava

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

Microsoft slijedi svoj plan postupnog prijenosa postavki iz klasičnog izbornika u novi, pa u klasičnoj upravljačkoj ploči više nećete pronaći postavke za promjenu jezika i instaliranje jezičnog paketa. Te su postavke sada samo u parametrima sustava.

U modu revizije možete naići na problem pri otvaranju postavki sustava iz izbornika Start; za otvaranje postavki sustava pokrenite naredbu - “ms-settings:”, obratite pozornost na dvotočku na kraju naredbe, bez nje naredba će ne rade. Nakon što jednom otvorite parametre sustava ovom naredbom, isti se mogu otvoriti pomoću grafičkog izbornika.

Ali u postavkama sustava možete instalirati jezični paket ako je sustav spojen na internet, ne postoji mogućnost odabira instaliranja jezičnog paketa iz lokalne datoteke.

Neću opisivati ​​proces lokalizacije sustava jer... to će značajno zakomplicirati članak, pogotovo jer je proces lokalizacije detaljan ovdje opisano. Ali želio bih vam skrenuti pozornost na osobitost promjene jezika sustava nakon instaliranja jezičnog paketa pomoću konzole. Ova je značajka opisana u istom wikiju na koji sam ranije dao vezu, u pododjeljku "Dodavanje jezika na popis jezika".

Instalirat ću jezični paket bez internetske veze.

Nakon potpune lokalizacije sustava, svakako napravite sliku sustava.

Korak 4 - Instalirajte potrebne aplikacije

Jer Budući da LTSB i LTSC sustavi nemaju pohranu aplikacija, instaliranje aplikacija iz Microsoft Storea uzrokuje određene poteškoće, odnosno preuzimanje aplikacije. Za preuzimanje aplikacija, tvrtka Adguard napravila je vrlo praktičnu uslugu - "Adguard trgovina", s kojim možete dobiti privremene veze za preuzimanje aplikacija i njihovih komponenti.

Za instalaciju aplikacije trebat će vam datoteke s ekstenzijama “Appx” i “AppxBundle”. Prije instaliranja same aplikacije morate instalirati njezine komponente. U pravilu, komponente iz aplikacije mogu se intuitivno razlikovati po nazivu datoteke.

Kako članak ne bi bio predug, neću detaljno opisivati ​​proces instaliranja aplikacija, pogotovo jer postoje informacije o instalaciji detaljne upute. Ali ću dodati još jedan način za instaliranje aplikacija na vaš trenutni račun. Aplikacije se mogu instalirati pomoću programa "Instalator aplikacije", ali za instaliranje aplikacija trebat će vam internetska veza, ali aplikacije se mogu instalirati dvostrukim klikom i neće vam trebati njezine komponente, sve potrebne komponente će se preuzeti i instalirati "Instalator aplikacije".

I mali podsjetnik, kada instalirate aplikaciju na tekući račun, nećete moći zapečatiti sustav. Kako instalirati aplikacije tako da možete zapečatiti sustav, pogledajte gornje upute. A za provjeru rada multikioska sasvim su dovoljne postojeće aplikacije.

Korak 5 – stvaranje konfiguracijske datoteke za multikiosk

Sada dolazimo do najzanimljivijeg dijela - postavljanja kiosk moda. Pogledajmo uputa prema postavkama koje vidimo. Prije svega, morat ćemo izraditi 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 stvaranje konfiguracije prilagodbe XML pločica je izvesti svoje trenutno stanje.

Prije svega, dodajmo pločice aplikacija koje su nam potrebne u izbornik Start. Pozovite pretraživanje "Win+s", pronađite željenu aplikaciju, desnom tipkom miša kliknite na nju i odaberite "Pin to Start Screen".

Prikvačio sam sljedeće aplikacije:

  • bilježnica
  • kalkulator
  • Internet Explorer
  • obojiti
  • WordPad
  • Parametri
  • Sigurnost sustava Windows

Zadnje dvije aplikacije su prikvačene jer... Jednostavno nema drugih univerzalnih aplikacija u standardnom LTSC paketu. Imajte na umu da pločice radne površine povezuju s prečacima. Sada, pomicanjem pločica izravno u izborniku Start, razdvojit ću zakačene pločice u dvije grupe. Da biste stvorili 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 nazvat ću "Postavke", uključivat će pločice "Postavke" i "Sigurnost sustava Windows". Drugu grupu nazvat ću "Uredske aplikacije", koja će uključivati ​​sve ostale pločice. Usput, možete pomicati čitave skupine pločica povlačenjem pomoću dvije pruge koje se nalaze u gornjem desnom kutu naziva grupe.

Jer Na pločici "Sigurnost sustava Windows" naziv ne pristaje u potpunosti, promijenit ću njegovu veličinu u "Široko". Za promjenu veličine pločice desnom tipkom miša kliknite pločicu i odaberite "Promijeni veličinu".

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

Zatim, najlakši način nije da sami kreirate datoteku postavki, već uzmite primjer datoteke odavde postavke – kliknite na gumb “Kopiraj”, zalijepite sadržaj u notepad i spremite kao “MultiAppKiosk.xml”. Sada mijenjamo postavke na naše. Da biste promijenili postavke priloženih pločica, kopirajte cijeli blok “StartLayoutCollection” iz “StartLayout.xml” u “MultiAppKiosk.xml”. Za dodavanje aplikacija među dopuštene potrebno je u odjeljak “AllowedApps” umetnuti univerzalne identifikatore aplikacija te u istom bloku dodati puni put do izvršnih datoteka klasičnih aplikacija koji je naveden u svojstvima prečaca na koje pločice refer. Da biste brzo došli do prečaca, kliknite desnom tipkom miša na prikvačenu pločicu i idite na Više > Idi na lokaciju datoteke. Imajte na umu da se parametar "AppUserModelId" koristi za određivanje ID-a univerzalne aplikacije, a parametar "DesktopAppPath" za određivanje pune staze do aplikacije za stolno računalo. I još jedna mala nijansa, ako planirate koristiti IE na x64 sustavu, tada na popisu dopuštenih aplikacija morate navesti dva puta za izvršnu datoteku „Programske datotekeInternet Exploreriexplore.exe” i „Programske datoteke (x86)Internet Exploreriexplore. exe”.

Neću dopustiti pristup mapama, stoga brišem odjeljak "FileExplorerNamespaceRestrictions".

Prikazivanje programske trake me ne smeta, pa ostavljam sve kako jest u odjeljku "Traka sa zadacima".

U primjeru su navedena dva profila, ali ja ću imati samo jedan profil, tako da se odjeljak s drugim profilom može obrisati. Prije deinstalacije obratite pozornost na primjer automatskog pokretanja aplikacije s argumentima.

U odjeljku "Konfiguracije", računi su povezani s profilima; imajte na umu da se više računa može povezati s jednim profilom. Ali zbog Zanima me samo jedan račun, tada ću obrisati sva povezivanja osim prvog - blokovi "Config". U preostalom uvezu upisat ću korisničko ime “Korisnik”.

Dobio sam ovu datoteku s 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. Oni. U idealnom slučaju, da biste izbjegli zabunu, svaki put možete stvoriti novi identifikator; to se može učiniti u okruženju PowerShell pomoću naredbe “[guid]::NewGuid()”. I svakako spremite 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 putem paketa za pružanje usluga, koji se mora izraditi u ICD-u. Nekima će možda ova metoda biti poznatija. Drugi je korištenje "MDM Bridge WMI Provider", ova metoda mi se činila praktičnijom.

Metoda # 1

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

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

Proširite padajući izbornik "Postavke izvođenja", zatim proširite podizbornik "AssignedAccess" i odaberite "MultiAppAssignedAccessSettings". Na vrhu srednjeg dijela ICD prozora kliknite gumb "Pregledaj" i označite lokaciju XML datoteke s postavkama. Za svaki slučaj, možete spremiti projekt pritiskom na “Ctrl+s”. U gornjem lijevom dijelu ICD-a odaberite “Export” i odaberite “Provisioning Package” iz padajućeg izbornika. Kao vlasnik odaberite “IT administrator”, sva ostala pitanja možete preskočiti klikom na “Next” i na kraju klikom na “Build” i “Finish”.

U instaliranom sustavu ne zaboravite stvoriti korisnika "Korisnik", on se ne može dodati u grupu "Administratori", inače multikiosk neće raditi. Kreirao sam korisnika u Upravljanju računalom s lozinkom koja nikad ne ističe.

Sada pokrećemo pripremni paket na prethodno instaliranom sustavu. Nakon primjene pripremnog paketa mijenjaju se izbornik Start i izbornik administratora. U lijevom početnom stupcu trebali bi nestati gumbi: "Dokumenti", "Slika", "Opcije". Ako se početni izbornik nije promijenio, onda je nešto pošlo po zlu. Instalirani paket može se ukloniti otvaranjem prozora Postavke > Računi > Pristup radnom ili školskom računu > Dodaj ili ukloni paket za pružanje usluga.

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

Metoda # 2

Primjena postavki pomoću "MDM Bridge WMI Provider" ovdje opisano. Pogodnost ove metode je njezina fleksibilnost korištenja i mogućnost da se riješite mnogih ručnih operacija koje su potrebne za izradu paketa za pripremu. Ovdje svatko može donijeti odluku za sebe 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 koristiti moje rješenje, spremite gornje skripte s izvornim nazivima u jednu mapu i stavite datoteku "PsExec.exe" u istu mapu. U istoj mapi stvorite mapu "XML" i kopirajte XML datoteke za konfiguraciju multikioska u nju. Koristit ću istu datoteku 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 značajkama skripte. Skripta je dizajnirana za korištenje XML datoteka s "UTF8" kodiranjem; ako želite koristiti "ANSI" kodiranje, uklonite parametar "encoding UTF8" iz opcije čitanja datoteke. XML datoteke morate smjestiti u mapu “XML” bez zamjene znakova; skripta će sama zamijeniti posebne znakove odgovarajućim oznakama. Kako se ne biste zabunili u GUID-ovima povezivanja korisnika s profilima, možete jednostavno označiti korisnički broj 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 željenu stavku. Za promjenu trenutne konfiguracije u novu, nije potrebno brisati trenutnu; ona će biti prebrisana. Ne zaboravite stvoriti korisnike koji su navedeni u konfiguracijskoj datoteci.

Prilikom pregleda trenutne multikiosk konfiguracije u istoj sesiji u kojoj je primijenjena, umjesto posebnih znakova prikazat će se kombinacije zamjenskih znakova. Nakon promjene sesije (ponovnog pokretanja skripte), svi posebni znakovi bit će prikazani u izvornom obliku.

Korak 7 - Brtvljenje sustava

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 sustav iz načina revizije u način dobrodošlice. Pa, spremni smo za ovo, pokrećemo "Sysprep.bat", odabiremo točku 2, sustav je zapečaćen. Uključujemo uređaj, sustav se diže, prijavljujemo se na korisnički račun za koji je konfiguriran multikiosk, ali ne možemo se ulogirati. Nakon poruke "Dobrodošli", pojavljuje se poruka "Odjava".

Prvo sam htio opisati samo rješenje problema, ali kasnije sam odlučio opisati korake za identifikaciju problema i pronalazak najjednostavnijeg rješenja jer... Sigurno će mnoge čitatelje mučiti nejasne sumnje - "Što ako je ovako ...". Mislim da će vam opisivanje raznih eksperimenata uštedjeti znatnu količinu vremena ako želite pronaći drugo rješenje. Kako bi podaci bili što točniji i kako bismo se još jednom uvjerili da nema grešaka, opisat ću pokuse u formatu "urađeno i snimljeno". Oni. Ponovno ću napraviti opisane pokuse.

pokusi

Što smo učinili? Postoje dva računa u sustavu:

“Administrator” – u grupi “Administratori”.
“Korisnik” – u grupi “Korisnici”.
U modu revizije, multikiosk je radio, ali kada je zapečaćen, nije radio.

Eksperiment 1

Brišemo instalirani paket pripreme, u snap-inu "Upravljanje računalom" brišemo korisnika "Korisnik" i stvaramo novog korisnika s imenom "Korisnik", primjenjujemo paket pripreme, idemo na račun "Korisnik" - radi ne rade. Idemo pod imenom "Administrator", uklanjamo korisnika "Korisnik" iz grupe "Korisnici", dodajemo ga u grupu "Administratori", idemo pod imenom "Korisnik" - ne radi. Prijavljujemo se pod imenom “Admin”, brišemo pripremni paket s multikioskom, prijavljujemo se pod imenom “Korisnik” - uspjeli smo se ulogirati, ali naravno multikiosk mod ne radi jer Paket za dodjelu je uklonjen.

Eksperiment 2

Prenosimo sliku sustava - rusificiranu u načinu 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: “Idi na prozor dobrodošlice sustava (OOBE)”, “Priprema za upotrebu”, “Ponovo pokreni”. Kliknite "OK" i pričekajte pozdrav OS-a. Odgovaramo na pitanja kada se sustav prvi put diže: “Nastaviti na odabranom jeziku?” - "ruski"; regija – Rusija; raspored tipkovnice – ruski; dodajte drugi raspored tipkovnice - preskočite; "Spojimo vas na mrežu" - "Preskoči za sada"; povezivanje s internetom - ne; licencni ugovor - prihvatiti; “Tko će koristiti ovo računalo” – “Test”; kreiranje lozinke - ostavite polje prazno; Pogodan rad na različitim uređajima – ne; Postavke privatnosti – prihvatiti. OS se učitao, u snap-inu "Upravljanje računalom" kreiramo korisnika s imenom "Korisnik", dodamo paket za pripremu. Rezultat je da ne radi.

Eksperiment 3

Prenosimo sliku sustava - rusificiranu u načinu revizije.

OS se učitao, spojite sustav na Internet, pokrenite naredbu “gpedit.msc” i u odjeljku “Windows Update” uključite opciju “Omogući preporučena ažuriranja putem automatskih ažuriranja”, ponovno pokrenite sustav za svaki slučaj. U centru za ažuriranje kliknite "Provjeri ažuriranja" i ponovno pokrenite dok se sva ažuriranja ne instaliraju. Odspojite sustav s interneta. Pokrećemo “sysprep” u grafičkom načinu rada 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 sustava - engleski u modu revizije.

Pokrećemo "sysprep" u grafičkom načinu rada, zapečatimo OS s istim parametrima kao tijekom eksperimenta 2. Kada se sustav prvi put podigne, odabiremo iste parametre kao u eksperimentu 2, s izuzetkom regionalnih i jezičnih parametara jer Ne postoji ruski jezik. Na isti način stvorite korisnika "Korisnik" i dodajte paket za dodjelu. Rezultat je da djeluje. Oni. Problem je povezan s lokalizacijom.

Eksperiment 5

Prenosimo sliku sustava - rusificiranu u načinu revizije.

U snap-inu "Upravljanje računalom" kreirajte korisnika "Korisnik", dodajte paket za pripremu, idite na račun "Korisnik", multi-kiosk radi.

Odjavite se sa svog računa i prijavite se pod “Administratorskim” računom. Pokrećemo PowerShell s administratorskim pravima, izvršavamo naredbu “Dism /online /Get-Intl” i vidimo “Default user interface language: en-US”.

Pokrećemo se s flash pogona u WinPE, postavljeni OS je na mom pogonu E. Izvršavamo naredbu “Dism /image:E: /Set-UILang:ru-ru”. Gledamo rezultat, izvršavamo “Dism /image:E: /Get-Intl” i vidimo “Default system UI language: ru-RU”.

Pokrećemo se u sustav, prijavljujemo se na "Korisnički" račun, multikiosk ne radi.

Da bismo jasno utvrdili uzročno-posljedičnu vezu problema, pokušajmo ponovno učiniti da multi-kiosk radi i ne radi.

Pokrećemo s flash pogona u WinPE, implementirani 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 “Default system UI language: en-US”.

Pokrećemo se u sustav, prijavljujemo se na "Korisnički" račun, multikiosk radi.

Pokrećemo se s flash pogona u WinPE, postavljeni OS je na mom pogonu E. Izvršavamo naredbu “Dism /image:E: /Set-UILang:ru-ru”. Gledamo rezultat, izvršavamo “Dism /image:E: /Get-Intl” i vidimo “Default system UI language: ru-RU”.

Pokrećemo se u sustav, prijavljujemo se na "Korisnički" račun, multikiosk ne radi.

Oni. možete vidjeti jasnu ovisnost performansi kioska o zadanom jeziku korisničkog sučelja. Možda postoje neki drugi čimbenici koji utječu na performanse multikioska?

Eksperiment 6

Radi čistoće eksperimenta, ponovno punimo sustav. Prenosimo sliku sustava - rusificiranu u načinu revizije.

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

Pogledajmo zadane postavke jezika korisničkog sučelja. Izvršavamo naredbu “Dism /online /Get-Intl” i vidimo “Default system UI language: en-US”. U snap-inu "Upravljanje računalom" kreirajte korisnika "Korisnik", dodajte paket za pripremu, idite na račun "Korisnik", multi-kiosk radi.

Pokušavamo razbiti kiosk promjenom zadanog jezika korisničkog sučelja. Idemo u “Test” korisnika koji je kreiran pri prvom dizanju sustava i omogućujemo mu automatsku prijavu tako da se sustav ne diže odmah na “Korisnički” račun. Izvršite “netplwiz”, odaberite korisnika “Test”, poništite potvrdni okvir “Zahtijevaj korisničko ime i lozinku” i primijenite parametre.

Pokrenite s flash pogona u WinPE. Izvršite naredbu “Dism /image:E: /Set-UILang:ru-ru”. Gledamo rezultat, izvršavamo “Dism /image:E: /Get-Intl” i vidimo “Default system UI language: ru-RU”.

Pokrećemo se u sustav, pokušavamo se prijaviti na "Korisnički" račun, multikiosk radi. Oni. ne može se slomiti. Je li moguće učiniti da funkcionira na ovaj način?

Eksperiment 7

Prenosimo sliku sustava - rusificiranu u načinu revizije.

Pokrećemo "Sysprep.bat", odabiremo točku 2. Pokrećemo sustav, stvaramo korisnika "Korisnik" u snap-inu "Upravljanje računalom", dodajemo pripremni paket, idemo na "Korisnički" račun, multi- kiosk ne radi.

Pokrenite s flash pogona u WinPE. Izvršite naredbu “Dism /image:E: /Set-UILang:en-us”. Gledamo rezultat, izvršavamo “Dism /image:E: /Get-Intl” i vidimo “Default system UI language: en-US”.

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

Ispostavilo se da promjenom zadane postavke jezika korisničkog sučelja možete utjecati na performanse multikioska samo kada je sustav u modu revizije ili pri prvom pokretanju nakon zatvaranja sustava. To znači da ćete morati zapečatiti sustav datotekom odgovora u kojoj će jezik sustava biti odabran na engleskom, a zatim promijeniti postavke sustava tako da sučelje bude ruski. Nije baš dobro rješenje. Možda se problem može riješiti instaliranjem jezičnog paketa ili instaliranjem dodatnih jezičnih paketa?

Eksperiment 8

Učitavamo sliku sustava - engleski u modu revizije.

Povezujemo se s internetom, u parametrima sustava idite na odjeljak "Jezik", odaberite "Dodaj jezik", odaberite jezik "ruski", kliknite "Dalje", ostavite instalacijske parametre kao zadane, kliknite "Instaliraj", nakon instalacije jezični paket ponovno pokrećemo sustav, sada na Russified. Odspojite sustav s interneta, pokrenite "Sysprep.bat", odaberite točku 2.

Nakon učitavanja sustava, u snap-inu "Upravljanje računalom" kreirajte korisnika "Korisnik", dodajte paket za pripremu, idite na račun "Korisnik", multi-kiosk ne radi.

Eksperiment 9

Pokušajmo rusificirati sustav prije instalacije, u izvanmrežnom načinu rada. Istovremeno će se održati kratki edukacijski program o lokalizaciji distribucije.

Uzimam flash pogon s čistom originalnom distribucijom - X21-96381. Bit će to pogon "E". Za montiranje slika stvaram mape: “c:MountInstall”, “c:MountWinre”, “c:MountBoot”. Uzimam set lokalizacijskih paketa - X21-87814. I u mapu “c:Mount” kopiram pakete iz nje: “Microsoft-Windows-Client-Language-Pack_x86_ru-ru.cab”, “lp.cab”, “WinPE-Setup_ru-ru.cab”. Pokrećem konzolu s administratorskim pravima. Mislim da će daljnje naredbe biti jasne bez komentara.

Naredbe lokalizacije

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 s flash pogona, odabiremo ruski jezik i instaliramo sustav na prazan disk. Kada vas sustav zatraži da odaberete regiju, pritisnite “Ctrl+Shift+F3”. U snap-inu "Upravljanje računalom" kreirajte korisnika "Korisnik", dodajte paket za pripremu, idite na račun "Korisnik", multi-kiosk ne radi.

Pokrenite s flash pogona u WinPE. Izvršite naredbu “Dism /image:E: /Set-UILang:en-us”.

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

Navodno problem nije u metodama dodavanja paketa, pokušajmo dodati dodatne pakete.

Eksperiment 10

Uzimamo flash pogon koji smo pripremili u prethodnom koraku.

Uzimamo paket “Feat on Demand” – X21-87815. Kopiram pakete iz njega u mapu “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 s administratorskim pravima i izvršite naredbe:

naredbe

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 s flash pogona, odabiremo ruski jezik i instaliramo sustav na prazan disk. Kada vas sustav zatraži da odaberete regiju, pritisnite “Ctrl+Shift+F3”. U dodatku "Upravljanje računalom" stvorite korisnika "Korisnik", dodajte paket za dodjelu i prijavite se na račun "Korisnik". Dobio sam crni ekran koji je visio dugo vremena, pa sam vruće pokrenuo sustav.

Brišemo pripremni paket, logiramo se kao “Korisnik”, ponovno dižemo sustav, dodamo pripremni paket, multikiosk ne radi.

Pokrenite s flash pogona u WinPE. Izvršite naredbu “Dism /image:E: /Set-UILang:en-us”.

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

Raditi okolo

Normalni heroji. Uvijek idu zaobilaznim putem!

Različite metode instaliranja lokalizacijskih paketa nisu riješile problem, što znači da ćete morati instalirati “en-us” jezik pri prvom pokretanju nakon brtvljenja, te promijeniti jezične postavke nakon prvog pokretanja.

Prenosimo sliku sustava - rusificiranu u načinu revizije.

U datoteci “Unattend.xml” unesite “en-US” u parametar, pokrenite “Sysprep.bat”, odaberite točku 2 i pogledajte što smo dobili. Ekran dobrodošlice je na engleskom, multikiosk radi. To znači da trebate dodati naredbu u “Unattend.xml” da promijenite jezik pozdrava. A da biste to učinili, morate pokrenuti naredbu “control intl.cpl,, /f:” označavajući konfiguracijsku datoteku, koja će odrediti kopiranje trenutnih parametara na ekran dobrodošlice. Sadržaj konfiguracijske datoteke izgledat će 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, tada se naredba mora izvršiti nakon što se korisnik prijavi, što znači da će nam trebati. Postoji jedan mali "ali", izvršenje će se dogoditi nakon što se korisnik s administratorskim pravima prijavi. I ne bih želio stvoriti dodatnu datoteku koja bi bila potrebna za uspješno izvođenje naredbe. Bolje je implementirati cijelo rješenje u jednoj datoteci - “Unattend.xml”. Da biste to učinili, jednostavno ćete morati pokrenuti naredbu koja stvara konfiguracijsku datoteku. Mislim da ću kreirati konfiguracijsku datoteku pomoću naredbe "echo" u okruženju "cmd", ali treba izbjeći kutne zagrade cirkumfleksom. Oni. Za izradu konfiguracijske datoteke dobiva 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 ovu naredbu moramo 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 izradu 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 pomoću konfiguracijske datoteke.

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

Zatim izbrišite prethodno stvorenu datoteku i ponovno pokrenite sustav. 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 toga, dobio sam sljedeću datoteku 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>

Provjerimo...

Prenosimo sliku sustava - rusificiranu u načinu revizije.

Mijenjamo datoteku Unattend.xml u novu, pokrećemo “Sysprep.bat”, odabiremo točku 2 i vidimo što smo dobili. Prilikom prvog pokretanja, zaslon dobrodošlice je na engleskom i sustav se ponovno pokreće. Ekran dobrodošlice je na ruskom, multikiosk radi.

Ako imate pitanja o postavljanju i licenciranju Windows 10 IoT Enterprise, kontaktirajte: [e-pošta zaštićena] ili na web stranicu quarta-embedded.ru.
Odgovore na neka pitanja možete pronaći u naš wiki ili na našem YouTube-kanale

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

Izvor: www.habr.com