Windows 10 IoT Enterprise 2019 – način večkioska

Predstavitev

Windows 10 IoT Enterprise 2019 je tržno ime za naslednjo izdajo sistema Windows 10. Izdaja te različice je bila objavljena septembra 2018, oziroma ima različico 1809, 18 je leto, 09 je mesec. O novi izdaji sistema Windows 10 1809 je bilo napisanih veliko člankov, večina pa je posvečena različnim "lokom", "lepotam" in različnim funkcionalnostim, ki so v povpraševanju doma.
Ta članek bo razpravljal samo o funkcionalnosti, po kateri lahko proizvajalci naprav za fiksni namen povprašujejo. In sicer o novih zmožnostih načina “Kiosk”. Dotaknila se bo tudi teme spreminjanja imen servisnih shem za izdaje sistema Windows poslovnega segmenta.

Stara shema storitev z novim imenom

Naj začnem s kratko razlago: v korporativnem segmentu Windows edicij obstajata dve servisni shemi, po katerih Windows prejema posodobitve. Servisni diagrami imajo črkovno oznako. Trenutno se storitveni podružnici imenujeta LTSC in SAC.

LTSC pomeni Dolgoročni servisni kanal (z dolgoročnim vzdrževanjem). Prej se je tak kanal imenoval LTSB - Long Term Servicing Branch, Microsoft je preprosto spremenil ime storitvenega kanala, sama storitev pa je ostala enaka.

Microsoft je spremenil tudi ime storitvene podružnice CBB - Current Branch for Business, zdaj se ta storitvena podružnica imenuje SAC - Polletni kanal. Spet se je spremenilo samo ime.

Vendar je treba omeniti, da servisni veji LTSC in SAC uporabljata različne distribucije Windows.

Nekaj ​​o novem načinu kioska pri SAC

Kot sem že rekel, imata LTSC in SAC različne distribucije. LTSC nima standardnih univerzalnih aplikacij ali trgovine z aplikacijami, ima pa SAC. Skladno s tem LTSC nima brskalnika Edge, SAC pa ga ima. Če pri nastavitvi kioska izberete brskalnik Edge, sta zdaj na voljo dva načina:

  1. Kot digitalni znak ali interaktivni zaslon
  2. Kot javni brskalnik

Ne bom se zadrževal pri nastavljanju teh načinov, ker ... Nastavitev je zelo enostavna in se izvede v grafičnem vmesniku. Samo ustvarite uporabnika, ki ni član skupine skrbnikov, mu omogočite način kioska z EDGE in si oglejte, kako ti načini delujejo.

Kiosk z veliko aplikacijami

Nekateri ljudje mislijo, da licencirana uporaba Windows 10 IoT Enterprise pomeni delovanje samo ene aplikacije na napravi, v resnici temu ni tako. Naprava mora biti zasnovana za opravljanje ene same poslovne naloge in uporabnik ne sme imeti dostopa do namizja. Zdaj je Microsoft sam dal orodje za uporabo številnih aplikacij. Ta način se imenuje »kiosk z več aplikacijami«; v nadaljevanju ga bom za kratkost imenoval »multikiosk«. V tem članku si bomo ogledali nastavitev tega načina s programskim paketom in nekatere funkcije tega načina.

Nekaj ​​o načinu Multikiosk

Ko se prijavite v uporabniški račun, za katerega je konfiguriran način več kiosk, bo sistem deloval v načinu tabličnega računalnika. Meni Start se bo razširil na celoten zaslon in prikazal ploščice aplikacij.

Seznam osnovnih nastavitev in zmožnosti načina:

  1. Nastavitev za več uporabnikov ali skupin
  2. Vsakemu uporabniku ali skupini lahko dodelite individualne nastavitve
  3. Sposobnost uporabe univerzalnih in klasičnih aplikacij
  4. Možnost samodejnega zagona ene od aplikacij, ko se uporabnik prijavi
  5. Aplikacije na beli listi
  6. Dostop do map z belim seznamom

Vredno je biti pozoren na točko 5. Privzeto bodo dovoljene samo tiste aplikacije, ki so potrebne za delovanje sistema, druge aplikacije pa je treba dodati na seznam dovoljenih. Tisti. Zdaj vam AppLockerja ni treba posebej konfigurirati. Mimogrede, da bi se izognili konfliktom z nastavitvami AppLocker, v načinu z več kioski vsa konfigurirana pravila AppLocker ne bodo veljala.

Točka 6 označuje dobro možnost, vendar je trenutno možno dati dovoljenje za pisanje samo v mapo »Prenosi«. Način omogoča uporabo univerzalnih in klasičnih aplikacij. Vse nastavitve načina so podane v datoteki XML, v kateri lahko določite tudi nastavitve za posamezen aplikacijski kiosk.

Zdaj pa poskusimo vse nastaviti ...

Kaj potrebujemo...

  1. Najprej potrebujemo sam sistem, ki podpira multikiosk način. Tukaj lahko prenesete demo različica
  2. Navodila za postavitev multikioska
  3. Vsak urejevalnik XML
  4. Če želite uporabiti nastavitve večkioska:
    1. Za metodo št. 1 - ICD, ki je del ADK. ADK je možen Prenesi tukaj
    2. Za metodo št. 2 - pripomoček PsExec. Pripomoček je lahko Prenesi tukaj

Rekel je - "Gremo!"

Vse poskuse bom izvedel na komercialni različici sistema Windows 10 IoT Enterprise 1809 LTSC x32, ne demo različici. Sistem ne bo aktiviran, ker pomanjkanje aktivacije ne vpliva na delovanje sistema. Vzel sem 32 bitov samo zato, ker zavzame manj prostora in bo hitreje delal s sistemskimi slikami.

1. korak – namestitev

Namestitev Win 10 IoT Enterprise se ne razlikuje od namestitve Win 10 Enterprise, zato ne bom opisal celotnega postopka namestitve, govoril bom le o nekaterih odtenkih.

Za vsak slučaj, naj vas spomnim, ne nameščajte sistema na nameščenega. Ko namestitveni program vpraša o mestu namestitve sistema, izbrišite vse particije na prihodnjem sistemskem disku in določite neparticioniran disk.

Sistem namestimo brez internetne povezave, da sistem ne potegne ničesar nepotrebnega.

Ker Ustvarili bomo varnostne kopije sistema in ga za to zapečatili v revizijskem načinu, nato pa lahko prihranite nekaj časa tako, da naložite sistem v revizijskem načinu takoj po namestitvi. Če želite to narediti, ko vas sistem vpraša, da izberete regijo, »Začnimo z regijo. Ali je to prav" samo pritisnite "Ctrl+Shift+F3".

2. korak - ustvarite sliko sistema

Ker se bomo norčevali iz sistema in preizkušali razne nove nastavitve, možno je, da bo šlo kaj narobe in bomo morali sistem vrniti v prvotno stanje. In da se hitro vrnete v prvotno stanje, morate ustvariti sliko sistema. Edina stvar, ki jo bom naredil, je, da kopiram "gentleman's kit" - skript in datoteko z odgovori. Vse moje datoteke se nahajajo v mapi “Sysprep”, ki jo kopiram v koren sistemskega diska. In seveda bom ta "gentleman's set" delil z vami.

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

Ko se zažene, bo skript preveril prisotnost »skrbniškega« računa in ga ustvaril, če manjka. Račun bo dodan v skupino skrbnikov.

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

Pri pečatenju v revizijskem načinu bo skript v register dodal ukaz za končanje postopka »sysprep.exe«, da ne bi vsakokrat ročno zaprl okna sysprep. Ko je zapečaten v pozdravnem načinu, bo skript odstranil ukaz za zapiranje okna iz registra in sam spremenil vrednost arhitekture v odgovorni datoteki na trenutno. Odgovorna datoteka vsebuje parametre za zagon sistema brez posredovanja uporabnika in ukaz za brisanje mape »Sysprep« v korenu sistemskega pogona.

Zdaj bom zaprl sistem v revizijskem načinu z uporabo »Sysprep.bat« in zajel sliko sistema. Sistem bom slikal s pomočjo DISM in bom slikal samo sistemski nosilec. Če boste posneli samo sistemski nosilec in ne celotnega diska, potem ne pozabite kopirati vsebine imenika »WindowsSystem32Recovery« na prvi nosilec v mapo »RecoveryWindowsRE« po uvedbi sistema. To bo treba storiti pred nalaganjem OS. po nalaganju operacijskega sistema bo imenik »WindowsSystem32Recovery« že prazen.

3. korak – rusifikacija sistema

Jezikovni paket je mogoče namestiti brez internetne povezave, če imate ta paket. V nasprotnem primeru ga bo sistem sam prenesel iz interneta, ko dodate jezik v nastavitvah. Samo ni vam treba vzeti jezikovnega paketa iz prejšnjih različic operacijskega sistema. Za Windows 10 1809 mora obstajati jezikovni paket posebej za Windows 10 1809.

Microsoft sledi svojemu načrtu postopnega prenosa nastavitev iz klasičnega menija v novega, zato v klasični nadzorni plošči ne boste več našli nastavitev za spreminjanje jezika in namestitev jezikovnega paketa. Te nastavitve so zdaj samo v sistemskih parametrih.

V načinu revizije lahko naletite na težavo pri odpiranju sistemskih nastavitev v meniju Start; za odpiranje sistemskih nastavitev zaženite ukaz - “ms-settings:”, bodite pozorni na dvopičje na koncu ukaza, brez njega bo ukaz ne deluje. Ko sistemske parametre enkrat odprete s tem ukazom, jih lahko odprete z grafičnim menijem.

Toda v sistemskih nastavitvah lahko namestite jezikovni paket, če je sistem povezan z internetom, ni možnosti izbire namestitve jezikovnega paketa iz lokalne datoteke.

Ne bom opisoval postopka lokalizacije sistema, ker... to bo znatno zapletlo članek, še posebej, ker je postopek lokalizacije podroben opisano tukaj. Vendar bi vas rad opozoril na posebnost spreminjanja sistemskega jezika po namestitvi jezikovnega paketa s konzolo. Ta funkcija je opisana v istem wikiju, do katerega sem prej dal povezavo, v pododdelku "Dodajanje jezika na seznam jezikov".

Jezikovni paket bom namestil brez internetne povezave.

Po popolni lokalizaciji sistema obvezno ustvarite sliko sistema.

4. korak - Namestite potrebne aplikacije

Ker Ker sistema LTSB in LTSC nimata shrambe aplikacij, nameščanje aplikacij iz trgovine Microsoft Store povzroča nekaj težav, namreč nalaganje aplikacije. Za prenos aplikacij je podjetje Adguard naredilo zelo priročno storitev - "Trgovina Adguard", s katerim lahko dobite začasne povezave za prenos aplikacij in njihovih komponent.

Za namestitev aplikacije boste potrebovali datoteke s končnicami »Appx« in »AppxBundle«. Pred namestitvijo same aplikacije morate namestiti njene komponente. Praviloma lahko komponente iz aplikacije intuitivno ločimo po imenu datoteke.

Da ne bo članek predolg, ne bom podrobno opisal postopka namestitve aplikacij, še posebej, ker obstajajo informacije o namestitvi podrobna navodila. Vendar bom dodal še en način za namestitev aplikacij v vaš trenutni račun. Aplikacije lahko namestite s pomočjo programa "Namestitveni program", vendar za namestitev aplikacij potrebujete internetno povezavo, vendar lahko aplikacije namestite z dvojnim klikom in ne boste potrebovali njenih komponent, vse potrebne komponente se bodo prenesle in namestile "Namestitveni program".

In majhen opomnik, ko namestite aplikacijo na tekoči račun, ne boste mogli zapečatiti sistema. Kako namestiti aplikacije, da lahko zapečatite sistem, glejte zgornja navodila. In za preverjanje delovanja multikioska povsem zadostujejo obstoječe aplikacije.

5. korak – ustvarjanje konfiguracijske datoteke za multikiosk

Zdaj smo pri najbolj zanimivem delu - nastavitvi načina kioska. Poglejmo si navodilo glede na nastavitve, ki jih vidimo. Najprej bomo morali ustvariti konfiguracijsko datoteko XML, katere celoten primer lahko najdete tukaj. poglej sem.

Začnimo z nastavitvijo postavitve ploščic. Najlažji način za ustvarjanje konfiguracije za prilagajanje ploščice XML je izvozijo svoje trenutno stanje.

Najprej dodamo ploščice aplikacij, ki jih potrebujemo v meni Start. Prikličite iskalnik »Win+s«, poiščite želeno aplikacijo, jo kliknite z desno tipko miške in izberite »Pripni na začetni zaslon«.

Pripel sem naslednje aplikacije:

  • Notepad
  • Kalkulator
  • Internet Explorer
  • Paint
  • WordPad
  • Parametri
  • Varnost sistema Windows

Zadnji dve prijavi sta bili pripeti, ker... V standardnem paketu LTSC preprosto ni drugih univerzalnih aplikacij. Upoštevajte, da se ploščice namizja povezujejo z bližnjicami. Zdaj bom s premikanjem ploščic neposredno v meniju Start razdelil pripete ploščice v dve skupini. Če želite ustvariti novo skupino ploščic, povlecite ploščico znatno višje ali nižje od drugih ploščic, kar bo poudarilo intuitivno ločnico. Skupine lahko poimenujete po lastni presoji; za to postavite kazalec miške nad skupino in ko se pojavi napis »Poimenuj skupino«, kliknite levi gumb miške. Prvo skupino bom imenoval »Nastavitve«, vključevala bo ploščici »Nastavitve« in »Varnost sistema Windows«. Drugo skupino bom imenoval »Pisarniške aplikacije«, ki bo vključevala vse ostale ploščice. Mimogrede, lahko premikate celotne skupine ploščic tako, da jih povlečete z dvema črtama, ki se nahajata zgoraj desno od imena skupine.

Ker Na ploščici »Varnost Windows« se ime ne prilega popolnoma, njegovo velikost bom spremenil v »Široko«. Če želite spremeniti velikost ploščice, z desno miškino tipko kliknite ploščico in izberite »Spremeni velikost«.

Po konfiguraciji izvozimo trenutno stanje in izvedemo ukaz v okolju PowerShell – ​​“Export-StartLayout – path C:SysprepStartLayout.xml”.

Nato najlažji način ni, da sami ustvarite datoteko z nastavitvami, ampak vzemite primer datoteke od tukaj nastavitve – kliknite na gumb “Kopiraj”, prilepite vsebino v beležnico in shranite kot “MultiAppKiosk.xml”. Zdaj spremenimo nastavitve na svoje. Če želite spremeniti nastavitve priloženih ploščic, kopirajte celoten blok »StartLayoutCollection« iz »StartLayout.xml« v »MultiAppKiosk.xml«. Če želite aplikacije dodati med dovoljene, morate v razdelek “AllowedApps” vnesti univerzalne identifikatorje aplikacij in v istem bloku dodati celotno pot do izvedljivih datotek klasičnih aplikacij, ki je podana v lastnostih bližnjic, do katerih ploščice se nanašajo. Če želite hitro priti do bližnjice, z desno miškino tipko kliknite pripeto ploščico in pojdite na Več > Pojdi na lokacijo datoteke. Upoštevajte, da se parameter »AppUserModelId« uporablja za podajanje ID-ja univerzalne aplikacije, parameter »DesktopAppPath« pa za podajanje celotne poti do namizne aplikacije. In še en majhen odtenek, če nameravate uporabljati IE v sistemu x64, morate na seznamu dovoljenih aplikacij določiti dve poti za izvedljivo datoteko »Program FilesInternet Exploreriexplore.exe« in »Programske datoteke (x86)Internet Exploreriexplore. exe".

Ne bom omogočil dostopa do map, zato brišem razdelek »FileExplorerNamespaceRestrictions«.

Prikaz opravilne vrstice me ne moti, zato v razdelku »Opravilna vrstica« pustim vse tako, kot je.

V primeru sta podana dva profila, vendar bom imel samo enega profila, tako da lahko razdelek z drugim profilom izbrišem. Pred odstranitvijo bodite pozorni na primer samodejnega zagona aplikacije z argumenti.

V razdelku »Konfiguracije« so računi povezani s profili; upoštevajte, da je z enim profilom mogoče povezati več računov. Ampak ker Zanima me samo en račun, potem bom izbrisal vse vezave razen prve - blokov "Config". V preostalo vezavo bom napisal uporabniško ime “Uporabnik”.

Dobil sem to datoteko s parametri

MultiAppKiosk.xml

<?xml version="1.0" encoding="utf-8" ?>
<AssignedAccessConfiguration 
  xmlns="http://schemas.microsoft.com/AssignedAccess/2017/config"
  xmlns:rs5="http://schemas.microsoft.com/AssignedAccess/201810/config"
  >
  <Profiles>
      <Profile Id="{9A2A490F-10F6-4764-974A-43B19E722C23}">
          <AllAppsList>
              <AllowedApps>
                  <App AppUserModelId="WINDOWS.IMMERSIVECONTROLPANEL_CW5N1H2TXYEWY!MICROSOFT.WINDOWS.IMMERSIVECONTROLPANEL" />
                  <App AppUserModelId="Microsoft.Windows.SecHealthUI_cw5n1h2txyewy!SecHealthUI" />
                  <App DesktopAppPath="%windir%system32notepad.exe" />
                  <App DesktopAppPath="C:Program FilesInternet Exploreriexplore.exe" />
                  <App DesktopAppPath="%windir%system32win32calc.exe" />
                  <App DesktopAppPath="%windir%system32mspaint.exe" />
                  <App DesktopAppPath="%ProgramFiles%Windows NTAccessorieswordpad.exe" />
              </AllowedApps>
          </AllAppsList>
          <StartLayout>
              <![CDATA[<LayoutModificationTemplate xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout" Version="1" xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification">
                    <LayoutOptions StartTileGroupCellWidth="6" />
                    <DefaultLayoutOverride>
                      <StartLayoutCollection>
                        <defaultlayout:StartLayout GroupCellWidth="6">
                          <start:Group Name="Настройки">
                            <start:Tile Size="2x2" Column="0" Row="0" AppUserModelID="WINDOWS.IMMERSIVECONTROLPANEL_CW5N1H2TXYEWY!MICROSOFT.WINDOWS.IMMERSIVECONTROLPANEL" />
                            <start:Tile Size="4x2" Column="2" Row="0" AppUserModelID="Microsoft.Windows.SecHealthUI_cw5n1h2txyewy!SecHealthUI" />
                          </start:Group>
                          <start:Group Name="Офисные приложения">
                            <start:DesktopApplicationTile Size="2x2" Column="2" Row="2" DesktopApplicationLinkPath="%ALLUSERSPROFILE%MicrosoftWindowsStart MenuProgramsAccessoriesWordpad.lnk" />
                            <start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationLinkPath="%APPDATA%MicrosoftWindowsStart MenuProgramsAccessoriesNotepad.lnk" />
                            <start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationLinkPath="%ALLUSERSPROFILE%MicrosoftWindowsStart MenuProgramsAccessoriesCalculator.lnk" />
                            <start:DesktopApplicationTile Size="2x2" Column="0" Row="2" DesktopApplicationLinkPath="%ALLUSERSPROFILE%MicrosoftWindowsStart MenuProgramsAccessoriesPaint.lnk" />
                            <start:DesktopApplicationTile Size="2x2" Column="4" Row="0" DesktopApplicationLinkPath="%APPDATA%MicrosoftWindowsStart MenuProgramsAccessoriesInternet Explorer.lnk" />
                          </start:Group>
                        </defaultlayout:StartLayout>
                      </StartLayoutCollection>
                    </DefaultLayoutOverride>
                  </LayoutModificationTemplate>
              ]]>
          </StartLayout>
          <Taskbar ShowTaskbar="true"/>
      </Profile>
  </Profiles>
  <Configs>
      <Config>
          <Account>User</Account>
          <DefaultProfile Id="{9A2A490F-10F6-4764-974A-43B19E722C23}"/>
      </Config>
  </Configs>
</AssignedAccessConfiguration>

Ko izdelujete konfiguracijske datoteke XML, ne pozabite, da mora imeti vsak profil edinstven ID, in ne samo znotraj ene datoteke XML, ampak znotraj enega operacijskega sistema. Tisti. V idealnem primeru lahko, da se izognete zmedi, vsakič ustvarite nov identifikator; to lahko storite v okolju PowerShell z ukazom “[guid]::NewGuid()”. Pazite, da datoteko shranite v kodiranju "UTF-8"; če je datoteka shranjena v kodiranju "ANSI", boste pri gradnji pripravljalnega paketa prejeli napako, če datoteka XML vsebuje cirilico.

6. korak – uporaba nastavitev multikioska

Oglejmo si dva načina za uporabo nastavitev, opisanih v konfiguracijski datoteki. Prvi je prek paketa za zagotavljanje, ki ga je treba ustvariti v ICD. Nekaterim bo morda ta metoda bolj domača. Drugi je uporaba "MDM Bridge WMI Provider", ta metoda se mi je zdela bolj priročna.

Metoda # 1

Kdo nima ICD? prenesite ADK in namestite. Namestitev ADK je zelo preprosta, nabor komponent lahko pustite privzet.

Zaženite ICD, kliknite ploščico »Napredna priprava«, določite ime in mapo projekta in kliknite »Naprej«. V naslednjem oknu izberite »Vse izdaje namizja Windows« in kliknite »Naprej«. Uvoz pripravljalnega paketa lahko preskočite; kliknite »Dokončaj«.

Razširite spustni meni »Nastavitve izvajalnega časa«, nato razširite podmeni »AssignedAccess« in izberite »MultiAppAssignedAccessSettings«. Na vrhu srednjega dela okna ICD kliknite gumb »Prebrskaj« in označite lokacijo datoteke XML z nastavitvami. Za vsak slučaj lahko projekt shranite s pritiskom na “Ctrl+s”. V zgornjem levem delu ICD izberite “Export” in v spustnem meniju izberite “Provisioning Package”. Kot lastnik izberite “IT administrator”, vsa ostala vprašanja lahko preskočite s klikom na “Next” in na koncu kliknite “Build” in “Finish”.

V nameščenem sistemu ne pozabite ustvariti uporabnika »Uporabnik«; ni ga mogoče dodati v skupino »Skrbniki«, sicer multikiosk ne bo deloval. Ustvaril sem uporabnika v Computer Management z geslom, ki nikoli ne poteče.

Zdaj zaženemo pripravljalni paket na predhodno nameščenem sistemu. Po uporabi pripravljalnega paketa se spremenita meni Start in skrbniški meni. V levem začetnem stolpcu bi morali izginiti gumbi: »Dokumenti«, »Slika«, »Možnosti«. Če se začetni meni ni spremenil, je šlo nekaj narobe. Nameščeni paket lahko odstranite tako, da odprete okno Nastavitve > Računi > Dostop do službenega ali šolskega računa > Dodaj ali odstrani paket za zagotavljanje.

Če se je začetni meni spremenil, so nastavitve uporabljene v sistemu, prijavite se kot uporabnik, za katerega je multikiosk konfiguriran, in si oglejte rezultat.

Metoda # 2

Uporaba nastavitev z uporabo "MDM Bridge WMI Provider" opisano tukaj. Priročnost te metode je njena fleksibilnost uporabe in možnost, da se znebite številnih ročnih operacij, ki so potrebne za ustvarjanje pripravljalnega paketa. Tukaj lahko vsak zase sprejme odločitev, ki bo ustrezala njemu. Naredil sem nekaj scenarijev zase.

MiltiKiosk.bat – zagonski skript

@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 – glavni skript

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

Če želite uporabiti mojo rešitev, shranite zgornje skripte z izvirnimi imeni v eno mapo in v isto mapo postavite datoteko »PsExec.exe«. V isti mapi ustvarite mapo »XML« in kopirajte datoteke XML, da vanjo konfigurirate multikiosk. Uporabil bom isto datoteko kot pri prvi 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čilnostih scenarija. Skript je zasnovan za uporabo datotek XML s kodiranjem "UTF8"; če želite uporabiti kodiranje "ANSI", odstranite parameter "kodiranje UTF8" iz možnosti branja datoteke. Datoteke XML morate postaviti v mapo “XML” brez zamenjave znakov; skript bo sam zamenjal posebne znake z ustreznimi oznakami. Da ne bi prišlo do zmede pri GUID-ih povezovanja uporabnikov s profili, lahko preprosto označite številko ali ime uporabnika v zavitih oklepajih; vsa vsebina v zavitih oklepajih bo zamenjana z GUID-ji.

Uporaba skripta je zelo preprosta, samo zaženite ga in izberite želeni element. Če želite spremeniti trenutno konfiguracijo v novo, ni treba izbrisati trenutne, saj bo prepisana. Ne pozabite ustvariti uporabnikov, ki so navedeni v konfiguracijski datoteki.

Pri ogledu trenutne konfiguracije multikioska v isti seji, v kateri je bila uporabljena, bodo namesto posebnih znakov prikazane kombinacije nadomestnih znakov. Po spremembi seje (ponovnem zagonu skripta) bodo vsi posebni znaki prikazani v izvirni obliki.

Korak 7 - Tesnjenje sistema

Multikiosk deluje, no, to je vse, zgleda ...

Če gre vse po načrtu, potem nečesa ne opazite.

Ne pozabite, da moramo še vedno preklopiti sistem iz načina revizije v način dobrodošlice. No, pripravljeni smo na to, zaženemo "Sysprep.bat", izberemo točko 2, sistem je zapečaten. Vklopimo napravo, sistem se zažene, prijavimo se v uporabniški račun, za katerega je konfiguriran multikiosk, vendar se ne moremo prijaviti. Po pozdravnem sporočilu se prikaže sporočilo »Odjava«.

Sprva sem želel opisati samo rešitev problema, kasneje pa sem se odločil opisati korake za prepoznavanje problema in iskanje najenostavnejše rešitve, ker... Zagotovo bodo mnoge bralce mučili nejasni dvomi - "Kaj pa, če je tako ...". Menim, da vam bo opisovanje različnih poskusov prihranilo veliko časa, če želite najti drugo rešitev. Da bi bili podatki čim bolj točni in da bi se še enkrat prepričali, da ni napak, bom poskuse opisal v formatu “storjeno in posneto”. Tisti. Ponovno bom naredil opisane poskuse.

poskusi

Kaj smo storili? V sistemu sta dva računa:

“Admin” – v skupini “Administratorji”.
“Uporabnik” – v skupini “Uporabniki”.
V načinu revizije je multikiosk deloval, ko pa je bil zapečaten, ni deloval.

Poskus 1

Izbrišemo nameščeni pripravljalni paket, v snap-inu »Upravljanje računalnika« izbrišemo uporabnika »Uporabnik« in ustvarimo novega uporabnika z imenom »Uporabnik«, uporabimo pripravljalni paket, pojdimo na račun »Uporabnik« - naredi ne deluje. Gremo pod imenom »Admin«, odstranimo uporabnika »Uporabnik« iz skupine »Uporabniki«, ga dodamo v skupino »Administratorji«, pojdimo pod imenom »Uporabnik« - ne deluje. Prijavimo se pod imenom “Admin”, izbrišemo pripravljalni paket z multikioskom, prijavimo se pod imenom “Uporabnik” - uspeli smo se prijaviti, seveda pa multikiosk način ne deluje, ker Paket za zagotavljanje je bil odstranjen.

Poskus 2

Naložimo sliko sistema - rusificirano v revizijskem načinu.

OS se je naložil, pritisnite "Win+r", ker Naše okno sysprep se je samodejno zaprlo, zaženite ukaz »sysprep« in v oknu, ki se odpre, zaženite »sysprep«. Nastavitve Sysprep v oknu: »Pojdi na pozdravno okno sistema (OOBE)«, »Priprava na uporabo«, »Ponovni zagon«. Kliknite »V redu« in počakajte na pozdrav OS. Ob prvem zagonu sistema odgovorimo na vprašanje: »Nadaljevati v izbranem jeziku?« - "ruski"; regija – Rusija; postavitev tipkovnice – ruščina; dodajte drugo razporeditev tipkovnice - preskočite; »Povežimo vas z omrežjem« – »Preskoči za zdaj«; povezava z internetom - ne; licenčna pogodba - sprejmem; “Kdo bo uporabljal ta računalnik” – “Test”; ustvarjanje gesla - pustite polje prazno; Priročno delovanje na različnih napravah – ne; Nastavitve zasebnosti – sprejmi. OS se je naložil, v snap-inu »Upravljanje računalnika« ustvarimo uporabnika z imenom »Uporabnik«, dodamo pripravljalni paket. Rezultat je, da ne deluje.

Poskus 3

Naložimo sliko sistema - rusificirano v revizijskem načinu.

OS se je naložil, povežite sistem z internetom, zaženite ukaz "gpedit.msc" in v razdelku "Windows Update" omogočite možnost "Omogoči priporočene posodobitve prek samodejnih posodobitev", znova zaženite za vsak slučaj. V središču za posodobitve kliknite »Preveri posodobitve« in znova zaženite, dokler niso nameščene vse posodobitve. Odklopite sistem iz interneta. Zaženemo “sysprep” v grafičnem načinu in ponovimo vse korake, opisane v prejšnjem koraku od zagona pripomočka “sysprep” do dodajanja pripravljalnega paketa. Rezultat je, da ne deluje.

Poskus 4

Naložimo sliko sistema - angleščina v revizijskem načinu.

Zaženemo »sysprep« v grafičnem načinu, zapremo OS z enakimi parametri kot med poskusom 2. Ko se sistem prvič zažene, izberemo enake parametre kot v poskusu 2, z izjemo regionalnih in jezikovnih parametrov, ker Ruskega jezika ni. Na enak način ustvarite uporabnika »Uporabnik« in dodajte paket za zagotavljanje. Rezultat je, da deluje. Tisti. Težava je povezana z lokalizacijo.

Poskus 5

Naložimo sliko sistema - rusificirano v revizijskem načinu.

V snap-inu »Upravljanje računalnika« ustvarite uporabnika »Uporabnik«, dodajte pripravljalni paket, pojdite na račun »Uporabnik«, večkiosk deluje.

Odjavite se iz svojega računa in se prijavite pod računom »Admin«. Zaženemo PowerShell s skrbniškimi pravicami, izvedemo ukaz “Dism /online /Get-Intl” in vidimo “Privzeti jezik uporabniškega vmesnika: en-US”.

Z bliskovnega pogona se zaženemo v WinPE, nameščen OS je na mojem pogonu E. Izvedemo ukaz "Dism /image:E: /Set-UILang:ru-ru". Pogledamo rezultat, izvedemo “Dism /image:E: /Get-Intl” in vidimo “Privzeti sistemski jezik uporabniškega vmesnika: ru-RU”.

Zaženemo se v sistem, prijavimo se v račun »Uporabnik«, multikiosk ne deluje.

Da bi jasno ugotovili vzročno-posledično razmerje težave, poskusimo znova narediti večkiosk delujoč in nedelujoč.

Z bliskovnega pogona se zaženemo v WinPE, nameščen OS je na mojem pogonu E. Izvedemo ukaz "Dism /image:E: /Set-UILang:en-us". Pogledamo rezultat, izvedemo »Dism /image:E: /Get-Intl« in vidimo »Privzeti sistemski jezik uporabniškega vmesnika: en-US«.

Zaženemo se v sistem, prijavimo se v uporabniški račun, multikiosk deluje.

Z bliskovnega pogona se zaženemo v WinPE, nameščen OS je na mojem pogonu E. Izvedemo ukaz "Dism /image:E: /Set-UILang:ru-ru". Pogledamo rezultat, izvedemo “Dism /image:E: /Get-Intl” in vidimo “Privzeti sistemski jezik uporabniškega vmesnika: ru-RU”.

Zaženemo se v sistem, prijavimo se v račun »Uporabnik«, multikiosk ne deluje.

Tisti. lahko vidite jasno odvisnost delovanja kioska od privzetega jezika uporabniškega vmesnika. Mogoče obstajajo še kakšni drugi dejavniki, ki vplivajo na delovanje multikioska?

Poskus 6

Zaradi čistosti eksperimenta ponovno napolnimo sistem. Naložimo sliko sistema - rusificirano v revizijskem načinu.

Zaženemo “sysprep” v grafičnem načinu, OS zapečatimo z enakimi parametri kot med poskusom 2. Počakamo, da nas OS pozdravi in ​​odgovori na vprašanja: “Nadaljuj v izbranem jeziku?” – »angleščina (Združene države)«; regija – Rusija; Razporeditev tipkovnice - ruščina. Nadalje so bili vsi parametri izbrani kot v poskusu 2.

Oglejmo si privzete nastavitve jezika uporabniškega vmesnika. Izvedemo ukaz “Dism /online /Get-Intl” in vidimo “Default system UI language: en-US”. V snap-inu »Upravljanje računalnika« ustvarite uporabnika »Uporabnik«, dodajte pripravljalni paket, pojdite na račun »Uporabnik«, večkiosk deluje.

Kiosk poskušamo zlomiti s spreminjanjem privzetega jezika uporabniškega vmesnika. Gremo v »Test« uporabnika, ki je bil ustvarjen ob prvem zagonu sistema in mu omogočimo samodejno prijavo, da se sistem ne zažene takoj v »Uporabniški« račun. Izvedite »netplwiz«, izberite uporabnika »Test«, počistite potrditveno polje »Require username and password« in uporabite parametre.

Zagon z bliskovnega pogona v WinPE. Izvedite ukaz “Dism /image:E: /Set-UILang:ru-ru”. Pogledamo rezultat, izvedemo “Dism /image:E: /Get-Intl” in vidimo “Privzeti sistemski jezik uporabniškega vmesnika: ru-RU”.

Zaženemo se v sistem, poskusimo se prijaviti v račun »Uporabnik«, multikiosk deluje. Tisti. ni ga mogoče zlomiti. Ali je možno, da deluje na ta način?

Poskus 7

Naložimo sliko sistema - rusificirano v revizijskem načinu.

Zaženemo »Sysprep.bat«, izberemo točko 2. Zaženemo sistem, ustvarimo uporabnika »Uporabnik« v snap-inu »Upravljanje računalnika«, dodamo pripravljalni paket, gremo na račun »Uporabnik«, multi- kiosk ne dela.

Zagon z bliskovnega pogona v WinPE. Izvedite ukaz “Dism /image:E: /Set-UILang:en-us”. Pogledamo rezultat, izvedemo »Dism /image:E: /Get-Intl« in vidimo »Privzeti sistemski jezik uporabniškega vmesnika: en-US«.

Zaženemo se v sistem, poskusimo se prijaviti v račun »Uporabnik«, multikiosk ne deluje.

Izkazalo se je, da lahko s spreminjanjem privzete nastavitve jezika uporabniškega vmesnika vplivate na delovanje multikioska le, ko je sistem v načinu revizije ali ob prvem zagonu po zapiranju sistema. To pomeni, da boste morali sistem zapreti z odzivno datoteko, v kateri bo sistemski jezik izbran v angleščini, nato pa spremeniti sistemske nastavitve tako, da bo vmesnik ruski. Ni zelo dobra rešitev. Morda je težavo mogoče rešiti z namestitvijo jezikovnega paketa ali namestitvijo dodatnih jezikovnih paketov?

Poskus 8

Naložimo sliko sistema - angleščina v revizijskem načinu.

Povezujemo se z internetom, v sistemskih parametrih pojdite na razdelek »Jezik«, izberite »Dodaj jezik«, izberite jezik »Ruščina«, kliknite »Naprej«, pustite namestitvene parametre kot privzete, kliknite »Namesti«, po namestitvi jezikovni paket znova zaženemo sistem, zdaj na Russified. Odklopite sistem iz interneta, zaženite "Sysprep.bat", izberite točko 2.

Po nalaganju sistema v snap-inu »Upravljanje računalnika« ustvarite uporabnika »Uporabnik«, dodajte pripravljalni paket, pojdite na račun »Uporabnik«, večkiosk ne deluje.

Poskus 9

Poskusimo rusificirati sistem pred namestitvijo v načinu brez povezave. Hkrati bo potekal krajši izobraževalni program o lokalizaciji distribucije.

Vzamem bliskovni pogon s čisto originalno distribucijo - X21-96381. To bo pogon "E". Za namestitev slik ustvarim mape: “c:MountInstall”, “c:MountWinre”, “c:MountBoot”. Vzamem komplet lokalizacijskih paketov - X21-87814. In v mapo “c:Mount” kopiram pakete iz nje: “Microsoft-Windows-Client-Language-Pack_x86_ru-ru.cab”, “lp.cab”, “WinPE-Setup_ru-ru.cab”. Konzolo zaženem z skrbniškimi pravicami. Mislim, da bodo nadaljnji ukazi jasni brez komentarja.

Ukazi za lokalizacijo

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

Zaženemo se z bliskovnega pogona, izberemo ruski jezik in namestimo sistem na prazen disk. Ko vas sistem vpraša, da izberete regijo, pritisnite »Ctrl+Shift+F3«. V snap-inu »Upravljanje računalnika« ustvarite uporabnika »Uporabnik«, dodajte pripravljalni paket, pojdite na račun »Uporabnik«, večkiosk ne deluje.

Zagon z bliskovnega pogona v WinPE. Izvedite ukaz “Dism /image:E: /Set-UILang:en-us”.

Zaženemo se v sistem, poskusimo se prijaviti v račun »Uporabnik«, multikiosk deluje.

Očitno težava ni v metodah dodajanja paketa, poskusimo dodati dodatne pakete.

Poskus 10

Vzamemo bliskovni pogon, ki smo ga pripravili v prejšnjem koraku.

Vzamemo paket “Feat on Demand” – X21-87815. Kopiram pakete iz njega v mapo “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».

Zaženite konzolo s skrbniškimi pravicami in izvedite ukaze:

Ekipe

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

Zaženemo se z bliskovnega pogona, izberemo ruski jezik in namestimo sistem na prazen disk. Ko vas sistem vpraša, da izberete regijo, pritisnite »Ctrl+Shift+F3«. V snap-inu »Upravljanje računalnika« ustvarite uporabnika »Uporabnik«, dodajte paket za zagotavljanje in se prijavite v račun »Uporabnik«. Dobil sem črn zaslon, ki je dolgo visel, zato sem sistem zagnal vroče.

Izbrišemo pripravljalni paket, prijavimo se kot “Uporabnik”, ponovno zaženemo sistem, dodamo pripravljalni paket, multikiosk ne deluje.

Zagon z bliskovnega pogona v WinPE. Izvedite ukaz “Dism /image:E: /Set-UILang:en-us”.

Zaženemo se v sistem, poskusimo se prijaviti v račun »Uporabnik«, multikiosk deluje.

Rešitev

Normalni junaki. Vedno uberejo ovinek!

Različni načini namestitve lokalizacijskih paketov niso rešili težave, kar pomeni, da boste morali ob prvem zagonu po pečatenju namestiti jezik »en-us« in po prvem zagonu spremeniti jezikovne nastavitve.

Naložimo sliko sistema - rusificirano v revizijskem načinu.

V datoteki “Unattend.xml” v parameter vnesemo “en-US”, poženemo “Sysprep.bat”, izberemo točko 2 in vidimo, kaj imamo. Pozdravni zaslon je v angleščini, večkiosk deluje. To pomeni, da morate v »Unattend.xml« dodati ukaz, da spremenite jezik pozdrava. Če želite to narediti, morate zagnati ukaz “control intl.cpl,, /f:”, ki označuje konfiguracijsko datoteko, ki bo določila kopiranje trenutnih parametrov na pozdravni zaslon. Vsebina konfiguracijske datoteke bo videti takole.

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

Ker bo kopiral nastavitve trenutnega uporabnika, potem mora biti ukaz izveden, ko se uporabnik prijavi, kar pomeni, da bomo potrebovali. Obstaja en majhen "ampak", izvedba se bo zgodila po prijavi uporabnika s skrbniškimi pravicami. In ne bi želel ustvariti dodatne datoteke, ki bi bila potrebna za uspešno izvajanje ukaza. Bolje je implementirati celotno rešitev v eni sami datoteki - “Unattend.xml”. Če želite to narediti, boste morali preprosto zagnati ukaz, ki ustvari konfiguracijsko datoteko. Mislim, da bom ustvaril konfiguracijsko datoteko z ukazom "echo" v okolju "cmd", vendar se mora izogniti oglatim oklepajem s cirkumfleksom. Tisti. Za ustvarjanje konfiguracijske datoteke se pridobi naslednji ukaz.

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

Toda ta ukaz moramo postaviti v XML, ki ima svoje zahteve za uporabo posebnih znakov:

Poseben značaj
Nadomestna vrednost

>
&gt;

<
&lt;

&
&amp;

"
&apos;

"
&quot;

Posledično smo za ustvarjanje konfiguracijske datoteke dobili naslednji ukaz 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;

Nato izvedemo ukaz z uporabo konfiguracijske datoteke.

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

Nato izbrišite predhodno ustvarjeno datoteko in znova zaženite sistem. spremembe bodo začele veljati po ponovnem zagonu.

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

Posledično sem dobil naslednjo odgovorno datoteko 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>

Preverimo...

Naložimo sliko sistema - rusificirano v revizijskem načinu.

Datoteko Unattend.xml spremenimo v novo, zaženemo “Sysprep.bat”, izberemo točko 2 in vidimo, kaj imamo. Ob prvem zagonu je pozdravni zaslon v angleščini in sistem se znova zažene. Pozdravni zaslon je v ruščini, multikiosk deluje.

Če imate kakršna koli vprašanja o nastavitvi in ​​licenciranju sistema Windows 10 IoT Enterprise, se obrnite na: [e-pošta zaščitena] ali na spletno stran quarta-embedded.ru.
Odgovore na nekatera vprašanja najdete v naš wiki ali na našem YouTube-kanale

Avtor članka: Vladimir Borisenkov, tehnični strokovnjak pri Quarta Technologies.

Vir: www.habr.com