Windows 10 IoT Enterprise 2019 – režim více kiosků

úvod

Windows 10 IoT Enterprise 2019 je marketingový název pro další vydání Windows 10. Vydání této verze bylo oznámeno v září 2018, respektive má verzi 1809, 18 je rok, 09 měsíc. O novém vydání Windows 10 1809 bylo napsáno mnoho článků, ale většina z nich je věnována různým „mašličkám“, „krásnám“ a různým funkcím, které jsou doma žádané.
Tento článek se bude zabývat pouze funkcemi, které mohou být požadovány mezi výrobci zařízení pro pevné účely. Konkrétně o nových možnostech režimu „Kiosk“. Dotkne se také tématu změny názvů schémat služeb pro edice Windows podnikového segmentu.

Staré schéma služby s novým názvem

Začnu krátkým vysvětlením: ve firemním segmentu edic Windows existují dvě schémata služeb, podle kterých Windows přijímá aktualizace. Servisní diagramy mají písmenné označení. V současné době se servisní pobočky nazývají LTSC a SAC.

LTSC znamená Kanál dlouhodobé údržby (s dlouhodobou údržbou). Dříve se takový kanál jmenoval LTSB - Long Term Servicing Branch, Microsoft jednoduše změnil název servisního kanálu, samotná služba zůstala stejná.

Microsoft také změnil název servisní pobočky CBB - Current Branch for Business, nyní se tato servisní pobočka nazývá SAC - Pololetní kanál. Opět se změnil pouze název.

Je však třeba zmínit, že servisní větve LTSC a SAC používají různé distribuce Windows.

Něco málo o novém režimu kiosku v SAC

Jak jsem již řekl, LTSC a SAC mají různé distribuce. LTSC nemá standardní univerzální aplikace ani obchod s aplikacemi, ale SAC ano. Proto LTSC nemá prohlížeč Edge, ale SAC ano. Pokud při nastavování kiosku vyberete prohlížeč Edge, jsou nyní k dispozici dva režimy:

  1. Jako digitální znak nebo interaktivní displej
  2. Jako veřejný prohlížeč

Nebudu se zdržovat nastavením těchto režimů, protože... Nastavení je velmi jednoduché a provádí se v grafickém rozhraní. Stačí vytvořit uživatele, který není členem skupiny Administrators, povolit mu režim kiosku pomocí EDGE a podívat se, jak tyto režimy fungují.

Kiosk s mnoha aplikacemi

Někteří lidé si myslí, že licencované použití Windows 10 IoT Enterprise znamená provoz pouze jedné aplikace na zařízení, ve skutečnosti tomu tak není. Zařízení musí být navrženo tak, aby vykonávalo jeden obchodní úkol a uživatel nesmí mít přístup k pracovní ploše. Nyní samotný Microsoft dal nástroj k použití mnoha aplikací. Tento režim se nazývá „multi-app kiosk“; dále jej pro stručnost budu nazývat „multikiosk“. V tomto článku se podíváme na nastavení tohoto režimu pomocí softwarového balíčku a na některé funkce tohoto režimu.

Něco málo o režimu Multikiosk

Když se přihlásíte k uživatelskému účtu, pro který je nakonfigurován režim více kiosků, systém bude pracovat v režimu tabletu. Nabídka Start se rozbalí na celou obrazovku a zobrazí dlaždice aplikací.

Seznam základních nastavení a možností režimu:

  1. Nastavení pro více uživatelů nebo skupin
  2. Každému uživateli nebo skupině lze přiřadit individuální nastavení
  3. Možnost použití univerzálních i klasických aplikací
  4. Možnost automatického spuštění jedné z aplikací, když se uživatel přihlásí
  5. Aplikace na seznamu povolených
  6. Přístup ke složkám pomocí bílé listiny

Za pozornost stojí bod 5. Standardně budou povoleny pouze ty aplikace, které jsou nezbytné pro chod systému, ostatní aplikace je nutné přidat do seznamu povolených. Tito. Nyní již nemusíte konfigurovat AppLocker samostatně. Mimochodem, aby se předešlo konfliktům s nastavením AppLockeru, v režimu více kiosků nebudou platit všechna nakonfigurovaná pravidla AppLockeru.

Bod 6 označuje dobrou možnost, ale v tuto chvíli je možné udělit oprávnění k zápisu pouze do složky „Stahování“. Režim umožňuje používat univerzální i klasické aplikace. Všechna nastavení režimu jsou specifikována v souboru XML, ve kterém můžete také zadat nastavení pro jeden aplikační kiosek.

Teď to zkusíme vše nastavit...

Co potřebujeme...

  1. V první řadě potřebujeme samotný systém, který podporuje multikiosk režim. Zde si můžete stáhnout demo verze
  2. Pokyny pro nastavení multikiosku
  3. Jakýkoli XML editor
  4. Postup použití nastavení multikiosku:
    1. U metody č. 1 - ICD, která je součástí ADK. ADK je možné ke stažení zde
    2. Pro metodu č. 2 - utilita PsExec. Pomůcka může být ke stažení zde

Řekl - "Pojďme!"

Všechny experimenty provedu na komerční verzi Windows 10 IoT Enterprise 1809 LTSC x32, nikoli na demoverzi. Systém nebude aktivován, protože nedostatek aktivace nemá vliv na funkčnost systému. 32 bitů jsem vzal jen proto, že zabírá méně místa a bude rychlejší pracovat s obrazy systému.

Krok 1 – instalace

Instalace Win 10 IoT Enterprise se neliší od instalace Win 10 Enterprise, takže nebudu popisovat celý proces instalace, budu mluvit pouze o některých nuancích.

Jen pro případ, dovolte mi připomenout, neinstalujte systém nad nainstalovaný. Když se instalační program zeptá na umístění instalace systému, odstraňte všechny diskové oddíly na budoucím systémovém disku a určete disk bez oddílů.

Systém instalujeme bez připojení k internetu, aby systém nic zbytečného nevytahoval.

Protože Vytvoříme záložní obrazy systému a za tímto účelem jej zapečetíme v režimu auditu, poté můžete ušetřit čas načtením systému v režimu auditu ihned po instalaci. Chcete-li to provést, když vás systém požádá o výběr regionu, „Začněme regionem. Je to správně“ stačí stisknout „Ctrl+Shift+F3“.

Krok 2 - vytvořte bitovou kopii systému

Protože budeme systém zesměšňovat a zkoušet různá nová nastavení, je možné, že se něco pokazí a budeme muset systém vrátit do původního stavu. A abyste se rychle vrátili do původního stavu, musíte vytvořit bitovou kopii systému. Jediné, co udělám, je zkopírovat „gentleman’s kit“ – skript a soubor odpovědí. Všechny mé soubory jsou umístěny ve složce „Sysprep“, kterou zkopíruji do kořenového adresáře systémového disku. A samozřejmě se s vámi o tento „gentleman’s set“ podělím.

Sysprep.bat – k utěsnění systému.

@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

Po spuštění skript zkontroluje přítomnost účtu „Admin“ a vytvoří jej, pokud chybí. Účet bude přidán do skupiny Administrators.

Unattend.xml – soubor odpovědí pro 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>

Při pečetění v režimu auditu skript přidá do registru příkaz k ukončení procesu „sysprep.exe“, aby se okno sysprep pokaždé nezavíralo ručně. Když je zapečetěno v ahoj režimu, skript odstraní příkaz k zavření okna z registru a sám změní hodnotu architektury v souboru odpovědí na aktuální. Soubor odpovědí obsahuje parametry pro spuštění systému bez zásahu uživatele a příkaz pro smazání složky „Sysprep“ v kořenovém adresáři systémové jednotky.

Nyní zapečetím systém v režimu auditu pomocí „Sysprep.bat“ a zachytím obraz systému. Vytvořím obraz systému pomocí DISM a zobrazím pouze systémový svazek. Pokud budete vytvářet image pouze systémového svazku a ne celého disku, pak po nasazení systému nezapomeňte zkopírovat obsah adresáře „WindowsSystem32Recovery“ do prvního svazku do složky „RecoveryWindowsRE“. To bude nutné provést před načtením OS. po načtení OS bude adresář „WindowsSystem32Recovery“ již prázdný.

Krok 3 – Rusifikace systému

Pokud máte tento balíček, lze jazykový balíček nainstalovat bez připojení k internetu. Pokud ne, systém si jej sám stáhne z internetu, když jazyk přidáte v nastavení. Jednoduše nemusíte přebírat jazykový balíček z předchozích verzí operačního systému. Pro Windows 10 1809 musí existovat jazykový balíček speciálně pro Windows 10 1809.

Microsoft jde podle svého plánu postupně přenést nastavení z klasického menu do nového, takže v klasickém ovládacím panelu již nenajdete nastavení pro změnu jazyka a instalaci jazykového balíčku. Tato nastavení jsou nyní pouze v parametrech systému.

V režimu auditu můžete narazit na problém s otevřením nastavení systému z nabídky Start, pro otevření nastavení systému spusťte příkaz - „ms-settings:“, věnujte pozornost dvojtečce na konci příkazu, bez ní se příkaz nefunguje. Po jednorázovém otevření parametrů systému pomocí tohoto příkazu je lze otevřít pomocí grafické nabídky.

Ale v nastavení systému můžete nainstalovat jazykový balíček, pokud je systém připojen k internetu, není zde možnost zvolit instalaci jazykového balíčku z místního souboru.

Nebudu popisovat proces lokalizace systému, protože... to výrazně zkomplikuje článek, zejména proto, že proces lokalizace je podrobný popsáno zde. Ale rád bych vás upozornil na zvláštnost změny jazyka systému po instalaci jazykového balíčku pomocí konzole. Tato funkce je popsána na stejné wiki, na kterou jsem uvedl odkaz dříve, v podsekci "Přidání jazyka do seznamu jazyků".

Nainstaluji jazykový balíček bez připojení k internetu.

Po kompletní lokalizaci systému nezapomeňte vytvořit image systému.

Krok 4 – Nainstalujte potřebné aplikace

Protože Vzhledem k tomu, že systémy LTSB a LTSC nemají úložiště aplikací, instalace aplikací z obchodu Microsoft Store způsobuje určité potíže, konkrétně stahování aplikace. Pro stahování aplikací vytvořila společnost Adguard velmi pohodlnou službu - "Adguard Store", pomocí kterého můžete získat dočasné odkazy ke stažení aplikací a jejich součástí.

K instalaci aplikace budete potřebovat soubory s příponami „Appx“ a „AppxBundle“. Před instalací samotné aplikace je nutné nainstalovat její součásti. Komponenty z aplikace lze zpravidla intuitivně odlišit podle názvu souboru.

Aby článek nebyl příliš dlouhý, nebudu podrobně popisovat proces instalace aplikací, zejména proto, že jsou zde informace o instalaci podrobné pokyny. Ale přidám ještě jeden způsob instalace aplikací do vašeho aktuálního účtu. Aplikace lze instalovat pomocí programu "Instalátor aplikací", ale k instalaci aplikací budete potřebovat připojení k internetu, ale aplikace lze nainstalovat dvojitým kliknutím a nebudete potřebovat jeho součásti, všechny potřebné součásti se stahují a nainstalují "Instalátor aplikací".

A malá připomínka, při instalaci aplikace do běžného účtu se vám nepodaří zapečetit systém. Jak nainstalovat aplikace, abyste mohli zapečetit systém, viz výše uvedené pokyny. A pro kontrolu fungování multikiosku zcela postačí stávající aplikace.

Krok 5 – vytvoření konfiguračního souboru pro multikiosk

Nyní se dostáváme k nejzajímavější části – nastavení režimu kiosku. Pojďme se podívat instrukce podle nastavení, které vidíme. Nejprve si budeme muset vytvořit konfigurační soubor XML, jehož úplný příklad naleznete zde. podívejte se sem.

Začněme nastavením rozložení dlaždic. Nejjednodušší způsob, jak vytvořit konfiguraci přizpůsobení dlaždic XML, je exportovat jejich aktuální stav.

Nejprve si do nabídky Start přidejte dlaždice aplikací, které potřebujeme. Vyvolejte vyhledávání „Win+s“, najděte požadovanou aplikaci, klikněte na ni pravým tlačítkem myši a vyberte „Připnout na úvodní obrazovku“.

Připnul jsem následující aplikace:

  • Poznámkový blok
  • Kalkulačka
  • Internet Explorer
  • Malovat
  • WordPad
  • Parametry
  • Zabezpečení Windows

Poslední dvě aplikace byly připnuté, protože... Ve standardním balíčku LTSC prostě žádné jiné univerzální aplikace nejsou. Všimněte si, že dlaždice na ploše odkazují na zástupce. Nyní přesunutím dlaždic přímo v nabídce Start rozdělím připnuté dlaždice do dvou skupin. Chcete-li vytvořit novou skupinu dlaždic, přetáhněte dlaždici výrazně výše nebo níže než ostatní dlaždice, což zvýrazní intuitivní oddělovač. Skupiny si můžete pojmenovat podle svého uvážení, umístěte kurzor myši nad skupinu, a když se objeví nápis „Pojmenujte skupinu“, klikněte levým tlačítkem myši. První skupinu nazvu „Nastavení“, bude obsahovat dlaždice „Nastavení“ a „Zabezpečení Windows“. Druhou skupinu nazvu „Kancelářské aplikace“, která bude zahrnovat všechny ostatní dlaždice. Mimochodem, celé skupiny dlaždic můžete přesouvat přetažením pomocí dvou pruhů, které se nacházejí vpravo nahoře od názvu skupiny.

Protože Na dlaždici „Zabezpečení Windows“ název úplně nesedí, změním jeho velikost na „Široký“. Chcete-li změnit velikost dlaždice, klikněte na dlaždici pravým tlačítkem a vyberte „Změnit velikost“.

Po konfiguraci vyexportujeme aktuální stav a provedeme příkaz v prostředí PowerShell – „Export-StartLayout – cesta C:SysprepStartLayout.xml“.

Dále je nejjednodušší nevytvářet soubor nastavení sami, ale vzít příklad souboru odtud nastavení – klikněte na tlačítko „Kopírovat“, vložte obsah do poznámkového bloku a uložte jako „MultiAppKiosk.xml“. Nyní změníme nastavení na naše vlastní. Chcete-li změnit nastavení připojených dlaždic, zkopírujte celý blok „StartLayoutCollection“ z „StartLayout.xml“ do „MultiAppKiosk.xml“. Pro přidání aplikací k povoleným je potřeba vložit univerzální identifikátory aplikací do sekce „AllowedApps“ a ve stejném bloku přidat úplnou cestu ke spustitelným souborům klasických aplikací, která je uvedena ve vlastnostech zástupců, ke kterým se dlaždice odkazují. Chcete-li se rychle dostat ke zkratce, klikněte pravým tlačítkem na připnutou dlaždici a přejděte na Více > Přejít na umístění souboru. Všimněte si, že parametr "AppUserModelId" se používá k určení univerzálního ID aplikace a parametr "DesktopAppPath" se používá k určení úplné cesty k aplikaci pro stolní počítače. A ještě jedna malá nuance, pokud plánujete používat IE na systému x64, pak v seznamu povolených aplikací musíte zadat dvě cesty pro spustitelný soubor „Program FilesInternet Exploreriexplore.exe“ a „Program Files (x86)Internet Exploreriexplore. exe“.

Neposkytnu přístup ke složkám, takže mažu sekci „FileExplorerNamespaceRestrictions“.

Zobrazení hlavního panelu mě neobtěžuje, takže vše nechávám tak, jak je v sekci „Hlavní panel“.

Příklad obsahuje dva profily, ale já budu mít pouze jeden profil, takže sekci s druhým profilem lze smazat. Před odinstalací věnujte pozornost příkladu automatického spuštění aplikace s argumenty.

V sekci „Konfigurace“ jsou účty propojeny s profily; uvědomte si, že s jedním profilem lze propojit více účtů. Ale protože Mám zájem pouze o jeden účet, poté smažu všechny vazby kromě prvního - bloky „Config“. Do zbývající vazby napíšu uživatelské jméno „Uživatel“.

Dostal jsem tento soubor s parametry

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>

Při vytváření konfiguračních souborů XML nezapomeňte, že každý profil musí mít jedinečné ID, a to nejen v rámci jednoho souboru XML, ale v rámci jednoho OS. Tito. V ideálním případě, abyste předešli zmatkům, můžete pokaždé vytvořit nový identifikátor; to lze provést v prostředí PowerShell pomocí příkazu „[guid]::NewGuid()“. A nezapomeňte uložit soubor v kódování „UTF-8“; pokud je soubor uložen v kódování „ANSI“, pak se při sestavování přípravného balíčku zobrazí chyba, pokud soubor XML obsahuje azbuku.

Krok 6 – použití nastavení multikiosku

Podívejme se na dva způsoby použití nastavení popsaného v konfiguračním souboru. První je prostřednictvím zřizovacího balíčku, který musí být vytvořen v ICD. Někomu možná bude tato metoda známější. Druhým je použití „MDM Bridge WMI Provider“, tato metoda se mi zdála pohodlnější.

Metoda # 1

Kdo nemá ICD? stáhnout ADK a nainstalovat. Instalace ADK je velmi jednoduchá, sadu komponent lze ponechat jako výchozí.

Spusťte ICD, klikněte na dlaždici „Pokročilá příprava“, zadejte název a složku projektu a klikněte na „Další“. V dalším okně vyberte „Všechny edice plochy Windows“ a klikněte na „Další“. Import balíčku přípravy můžete přeskočit, klikněte na „Dokončit“.

Rozbalte rozevírací nabídku „Nastavení runtime“, poté rozbalte podnabídku „AssignedAccess“ a vyberte „MultiAppAssignedAccessSettings“. V horní části střední části okna ICD klikněte na tlačítko „Procházet“ a uveďte umístění souboru XML s nastavením. Pro každý případ můžete projekt uložit stisknutím „Ctrl+s“. V levé horní části ICD vyberte „Export“ a z rozbalovací nabídky vyberte „Provisioning Package“. Jako vlastník vyberte „správce IT“, všechny ostatní otázky lze přeskočit kliknutím na „Další“ a na konci kliknutím na „Vytvořit“ a „Dokončit“.

V nainstalovaném systému nezapomeňte vytvořit uživatele „Uživatel“, nelze jej přidat do skupiny „Správci“, jinak multikiosk nebude fungovat. Vytvořil jsem uživatele v Správa počítače s heslem, které nikdy nevyprší.

Nyní spustíme přípravný balíček na dříve nainstalovaném systému. Po aplikaci přípravného balíčku se změní nabídka Start a nabídka administrátora. V levém úvodním sloupci by měla zmizet tlačítka: „Dokumenty“, „Obrázek“, „Možnosti“. Pokud se nabídka Start nezměnila, pak se něco pokazilo. Nainstalovaný balíček lze odebrat otevřením okna Nastavení > Účty > Přístup k pracovnímu nebo školnímu účtu > Přidat nebo odebrat zřizovací balíček.

Pokud se změnila nabídka start, pak se nastavení aplikuje do systému, přihlaste se jako uživatel, pro kterého je multikiosk nakonfigurován, a podívejte se na výsledek.

Metoda # 2

Použití nastavení pomocí "poskytovatele WMI MDM Bridge" popsané zde. Výhodou této metody je flexibilita použití a možnost zbavit se mnoha manuálních operací, které jsou potřeba k vytvoření balíčku přípravy. Zde se každý může rozhodnout sám za sebe, které mu bude vyhovovat. Udělal jsem si pro sebe pár scénářů.

MiltiKiosk.bat – spouštěcí 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 – hlavní 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

Pokud chcete použít mé řešení, uložte výše uvedené skripty s jejich původními názvy do jedné složky a do stejné složky vložte soubor „PsExec.exe“. Ve stejné složce vytvořte složku „XML“ a zkopírujte do ní soubory XML pro konfiguraci multikiosku. Použiji stejný soubor jako v první metodě.

MultiAppKiosk.xml

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

Něco málo o vlastnostech skriptu. Skript je navržen pro použití souborů XML s kódováním „UTF8“; pokud chcete použít kódování „ANSI“, odeberte parametr „kódování UTF8“ z možnosti čtení souboru. Soubory XML musíte umístit do složky „XML“ bez nahrazování znaků; skript sám nahradí speciální znaky příslušným označením. Abyste se nepletli v identifikátorech GUID při propojování uživatelů s profily, můžete jednoduše uvést číslo nebo jméno uživatele ve složených závorkách; veškerý obsah ve složených závorkách bude nahrazen identifikátory GUID.

Použití skriptu je velmi jednoduché, stačí jej spustit a vybrat požadovanou položku. Pro změnu aktuální konfigurace na novou není nutné aktuální konfiguraci mazat, bude přepsána. Nezapomeňte vytvořit uživatele, kteří jsou uvedeni v konfiguračním souboru.

Při prohlížení aktuální konfigurace multikiosku ve stejné relaci, ve které byla použita, se místo speciálních znaků zobrazí kombinace náhradních znaků. Po změně relace (restartování skriptu) se všechny speciální znaky zobrazí v původní podobě.

Krok 7 - Utěsnění systému

Multikiosk funguje, no, to je vše, zdálo by se...

Pokud jde vše podle plánu, pak si něčeho nevšimnete.

Nezapomeňte, že musíme ještě přepnout systém z režimu auditu do režimu uvítacího režimu. No, jsme na to připraveni, spustíme „Sysprep.bat“, vybereme bod 2, systém je zapečetěný. Zapneme zařízení, naběhne systém, přihlásíme se k uživatelskému účtu, pro který je multikiosk nakonfigurován, ale nemůžeme se přihlásit. Po zprávě „Vítejte“ se zobrazí zpráva „Odhlásit se“.

Nejprve jsem chtěl popsat pouze řešení problému, ale později jsem se rozhodl popsat kroky k identifikaci problému a nalezení nejjednoduššího řešení, protože... Mnoho čtenářů bude jistě mučit neurčité pochybnosti - „Co když je to takhle...“. Myslím, že popisování různých experimentů vám ušetří značné množství času, pokud chcete najít jiné řešení. Aby byly informace co nejpřesnější a ještě jednou se ujistil, že tam nejsou chyby, popíšu experimenty ve formátu „hotovo a zaznamenáno“. Tito. Popsané pokusy provedu znovu.

pokusy

co jsme udělali? V systému jsou dva účty:

„Admin“ – ve skupině „Správci“.
„Uživatel“ – ve skupině „Uživatelé“.
V režimu auditu multikiosk fungoval, ale když byl zapečetěn, nefungoval.

Experiment 1

Smažeme nainstalovaný přípravný balíček, v modulu snap-in „Správa počítače“ smažeme uživatele „Uživatel“ a vytvoříme nového uživatele se jménem „Uživatel“, použijeme přípravný balíček, přejděte na účet „Uživatel“ – provede nefunguje. Jdeme pod názvem „Admin“, odebereme uživatele „Uživatel“ ze skupiny „Uživatelé“, přidáme jej do skupiny „Správci“, jdeme pod názvem „Uživatel“ - nefunguje to. Přihlásíme se pod jménem “Admin”, smažeme přípravný balíček s multikiosk, přihlásíme se pod jménem “Uživatel” - přihlášení se nám podařilo, ale režim multikiosku samozřejmě nefunguje, protože Zřizovací balíček byl odebrán.

Experiment 2

Nahrajeme obraz systému - Russified v režimu auditu.

OS se načetl, stiskněte „Win+r“, protože Naše okno sysprep se automaticky zavřelo, spusťte příkaz „sysprep“ a v okně, které se otevře, spusťte „sysprep“. Nastavení Sysprep v okně: „Přejít do uvítacího okna systému (OOBE)“, „Příprava k použití“, „Restartovat“. Klikněte na „OK“ a počkejte na pozdrav OS. Při prvním spuštění systému odpovídáme na otázky: "Pokračovat ve vybraném jazyce?" - "Ruština"; region – Rusko; rozložení klávesnice – ruština; přidat druhé rozložení klávesnice - přeskočit; „Připojíme vás k síti“ – „Prozatím přeskočte“; připojit se k internetu - ne; licenční smlouva - přijmout; „Kdo bude tento počítač používat“ – „Test“; vytvoření hesla - pole nechte prázdné; Pohodlné ovládání na různých zařízeních – ne; Nastavení soukromí – přijmout. OS se načetl, v modulu snap-in „Správa počítače“ vytvoříme uživatele s názvem „Uživatel“, přidáme balíček přípravy. Výsledkem je, že to nefunguje.

Experiment 3

Nahrajeme obraz systému - Russified v režimu auditu.

OS se načetl, připojte systém k internetu, spusťte příkaz „gpedit.msc“ a v části „Windows Update“ povolte možnost „Povolit doporučené aktualizace prostřednictvím automatických aktualizací“, pro každý případ restartujte. V centru aktualizací klikněte na „Vyhledat aktualizace“ a restartujte počítač, dokud nebudou nainstalovány všechny aktualizace. Odpojte systém od internetu. Spustíme „sysprep“ v grafickém režimu a zopakujeme všechny kroky popsané v předchozím kroku od spuštění nástroje „sysprep“ až po přidání přípravného balíčku. Výsledkem je, že to nefunguje.

Experiment 4

Nahrajeme obrázek systému - angličtina v režimu auditu.

Spustíme „sysprep“ v grafickém režimu, zapečetíme OS stejnými parametry jako při experimentu 2. Při prvním spuštění systému vybereme stejné parametry jako v experimentu 2, s výjimkou regionálních a jazykových parametrů, protože Neexistuje žádný ruský jazyk. Stejným způsobem vytvořte uživatele „Uživatel“ a přidejte zřizovací balíček. Výsledkem je, že to funguje. Tito. Problém souvisí s lokalizací.

Experiment 5

Nahrajeme obraz systému - Russified v režimu auditu.

V modulu snap-in „Správa počítače“ vytvořte uživatele „Uživatel“, přidejte přípravný balíček, přejděte na účet „Uživatel“, multikiosk funguje.

Odhlaste se ze svého účtu a přihlaste se pod účtem „Admin“. Spustíme PowerShell s právy správce, provedeme příkaz „Dism /online /Get-Intl“ a podíváme se na „Výchozí jazyk uživatelského rozhraní: en-US“.

Nabootujeme z flash disku do WinPE, nasazený OS je na mém disku E. Spustíme příkaz „Dism /image:E: /Set-UILang:ru-ru“. Podíváme se na výsledek, spustíme „Dism /image:E: /Get-Intl“ a podíváme se na „Výchozí jazyk uživatelského rozhraní systému: ru-RU“.

Nabootujeme do systému, přihlásíme se k účtu „Uživatel“, multikiosk nefunguje.

Abychom jasně stanovili vztah příčiny a následku problému, zkusme znovu, aby multikiosk fungoval a nefungoval.

Nabootujeme z flash disku do WinPE, nasazený OS je na mém disku E. Spustíme příkaz „Dism /image:E: /Set-UILang:en-us“. Podíváme se na výsledek, spustíme „Dism /image:E: /Get-Intl“ a podíváme se na „Výchozí jazyk uživatelského rozhraní systému: en-US“.

Nabootujeme do systému, přihlásíme se k účtu „Uživatel“, multikiosk funguje.

Nabootujeme z flash disku do WinPE, nasazený OS je na mém disku E. Spustíme příkaz „Dism /image:E: /Set-UILang:ru-ru“. Podíváme se na výsledek, spustíme „Dism /image:E: /Get-Intl“ a podíváme se na „Výchozí jazyk uživatelského rozhraní systému: ru-RU“.

Nabootujeme do systému, přihlásíme se k účtu „Uživatel“, multikiosk nefunguje.

Tito. můžete vidět jasnou závislost výkonu kiosku na výchozím jazyce uživatelského rozhraní. Možná existují nějaké další faktory, které ovlivňují výkon multikiosku?

Experiment 6

Pro čistotu experimentu systém doplňujeme. Nahrajeme obraz systému - Russified v režimu auditu.

Spustíme „sysprep“ v grafickém režimu, zapečetíme OS stejnými parametry jako při experimentu 2. Počkáme, až nás OS přivítá a odpoví na otázky: „Pokračovat ve vybraném jazyce?“ - "Anglicky Spojené státy)"; region – Rusko; Rozložení klávesnice – ruština. Dále byly všechny parametry vybrány jako v experimentu 2.

Podívejme se na výchozí nastavení jazyka uživatelského rozhraní. Spustíme příkaz „Dism /online /Get-Intl“ a prohlédneme si „Výchozí jazyk uživatelského rozhraní systému: en-US“. V modulu snap-in „Správa počítače“ vytvořte uživatele „Uživatel“, přidejte zřizovací balíček, přejděte na účet „Uživatel“, multikiosk funguje.

Snažíme se rozbít kiosk změnou výchozího jazyka uživatelského rozhraní. Přejdeme do „Testovacího“ uživatele, který byl vytvořen při prvním spuštění systému, a povolíme mu automatické přihlášení, aby se systém hned nespustil do „Uživatelského“ účtu. Spusťte „netplwiz“, vyberte uživatele „Test“, zrušte zaškrtnutí políčka „Vyžadovat uživatelské jméno a heslo“ a použijte parametry.

Spusťte z flash disku do WinPE. Proveďte příkaz „Dism /image:E: /Set-UILang:ru-ru“. Podíváme se na výsledek, spustíme „Dism /image:E: /Get-Intl“ a podíváme se na „Výchozí jazyk uživatelského rozhraní systému: ru-RU“.

Nabootujeme do systému, pokusíme se přihlásit k účtu „Uživatel“, multikiosk funguje. Tito. nejde to zlomit. Je možné, aby to takto fungovalo?

Experiment 7

Nahrajeme obraz systému - Russified v režimu auditu.

Spustíme „Sysprep.bat“, vybereme bod 2. Nabootujeme do systému, vytvoříme uživatele „Uživatel“ v modulu snap-in „Správa počítače“, přidáme přípravný balíček, přejdeme na účet „Uživatel“, multi- kiosek nefunguje.

Spusťte z flash disku do WinPE. Proveďte příkaz „Dism /image:E: /Set-UILang:en-us“. Podíváme se na výsledek, spustíme „Dism /image:E: /Get-Intl“ a podíváme se na „Výchozí jazyk uživatelského rozhraní systému: en-US“.

Nabootujeme do systému, pokusíme se přihlásit k účtu „Uživatel“, multikiosk nefunguje.

Ukazuje se, že změnou výchozího nastavení jazyka uživatelského rozhraní můžete ovlivnit výkon multikiosku pouze tehdy, když je systém v režimu auditu nebo při prvním spuštění po zapečetění systému. To znamená, že budete muset zapečetit systém souborem odpovědí, ve kterém bude jazyk systému vybrán v angličtině, a poté změnit nastavení systému tak, aby rozhraní bylo ruské. Není to moc dobré řešení. Možná lze problém vyřešit instalací jazykového balíčku nebo instalací dalších jazykových balíčků?

Experiment 8

Nahrajeme obrázek systému - angličtina v režimu auditu.

Připojíme se k internetu, v parametrech systému přejděte do sekce „Jazyk“, vyberte „Přidat jazyk“, vyberte jazyk „Ruština“, klikněte na „Další“, ponechte parametry instalace jako výchozí, po instalaci klikněte na „Instalovat“ jazykový balíček restartujeme systém, nyní na Russified. Odpojte systém od internetu, spusťte „Sysprep.bat“, vyberte bod 2.

Po načtení systému v modulu snap-in „Správa počítače“ vytvořte uživatele „Uživatel“, přidejte přípravný balíček, přejděte na účet „Uživatel“, multikiosk nefunguje.

Experiment 9

Zkusme před instalací Russify systém v offline režimu. Zároveň proběhne krátký vzdělávací program o lokalizaci distribuce.

Beru flash disk s čistou originální distribucí - X21-96381. Bude to jednotka "E". Pro připojení obrazů vytvářím složky: „c:MountInstall“, „c:MountWinre“, „c:MountBoot“. Beru sadu lokalizačních balíčků - X21-87814. A do složky „c:Mount“ z ní zkopíruji balíčky: „Microsoft-Windows-Client-Language-Pack_x86_ru-ru.cab“, „lp.cab“, „WinPE-Setup_ru-ru.cab“. Spouštím konzoli s administrátorskými právy. Myslím, že další příkazy budou jasné bez komentáře.

Lokalizační příkazy

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

Spustíme systém z flash disku, vybereme ruský jazyk a nainstalujeme systém na prázdný disk. Když vás systém požádá o výběr oblasti, stiskněte „Ctrl+Shift+F3“. V modulu snap-in „Správa počítače“ vytvořte uživatele „Uživatel“, přidejte přípravný balíček, přejděte na účet „Uživatel“, multikiosk nefunguje.

Spusťte z flash disku do WinPE. Proveďte příkaz „Dism /image:E: /Set-UILang:en-us“.

Nabootujeme do systému, pokusíme se přihlásit k účtu „Uživatel“, multikiosk funguje.

Problém zřejmě není v metodách přidávání balíčku, zkusme přidat další balíčky.

Experiment 10

Vezmeme flash disk, který jsme připravili v předchozím kroku.

Bereme balíček „Feat on Demand“ – X21-87815. Zkopíruji z něj balíčky do složky „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».

Spusťte konzolu s právy správce a proveďte příkazy:

Týmy

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

Spustíme systém z flash disku, vybereme ruský jazyk a nainstalujeme systém na prázdný disk. Když vás systém požádá o výběr oblasti, stiskněte „Ctrl+Shift+F3“. V modulu snap-in „Správa počítače“ vytvořte uživatele „Uživatel“, přidejte zřizovací balíček a přihlaste se k účtu „Uživatel“. Dostal jsem černou obrazovku, která dlouho visela, tak jsem za tepla zavedl systém.

Smažeme přípravný balíček, přihlásíme se jako „Uživatel“, restartujeme systém, přidáme přípravný balíček, multikiosk nefunguje.

Spusťte z flash disku do WinPE. Proveďte příkaz „Dism /image:E: /Set-UILang:en-us“.

Nabootujeme do systému, pokusíme se přihlásit k účtu „Uživatel“, multikiosk funguje.

Řešení

Normální hrdinové. Vždy jedou oklikou!

Různé metody instalace lokalizačních balíčků problém nevyřešily, což znamená, že budete muset nainstalovat jazyk „en-us“ při prvním spuštění po uzavření a změnit nastavení jazyka po prvním spuštění.

Nahrajeme obraz systému - Russified v režimu auditu.

V souboru „Unattend.xml“ zadejte do parametru „en-US“, spusťte „Sysprep.bat“, vyberte bod 2 a podívejte se, co máme. Uvítací obrazovka je v angličtině, funguje multikiosk. To znamená, že musíte přidat příkaz do „Unattend.xml“, abyste změnili jazyk pozdravu. A k tomu je potřeba spustit příkaz „control intl.cpl,, /f:“ označující konfigurační soubor, který určí zkopírování aktuálních parametrů na uvítací obrazovku. Obsah konfiguračního souboru bude vypadat takto.

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

Protože zkopíruje nastavení aktuálního uživatele, pak musí být příkaz proveden po přihlášení uživatele, což znamená, že budeme potřebovat. Je tu jedno malé „ale“, spuštění proběhne po přihlášení uživatele s administrátorskými právy. A nechtěl bych vytvářet další soubor, který by byl potřeba pro úspěšné spuštění příkazu. Je lepší implementovat celé řešení do jediného souboru – „Unattend.xml“. K tomu budete muset jednoduše spustit příkaz, který vytvoří konfigurační soubor. Myslím, že vytvořím konfigurační soubor pomocí příkazu „echo“ v prostředí „cmd“, ale je třeba opustit lomené závorky circumflexem. Tito. Chcete-li vytvořit konfigurační soubor, získáte následující příkaz.

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

Tento příkaz ale musíme umístit do XML, které má své vlastní požadavky na použití speciálních znaků:

Zvláštní charakter
Náhradní hodnota

>
&gt;

<
&lt;

&
&amp;

"
&apos;

"
&quot;

V důsledku toho jsme pro vytvoření konfiguračního souboru dostali následující příkaz pro „FirstLogonCommands“.

cmd.exe /c echo ^&lt;gs:GlobalizationServices xmlns:gs=&quot;urn:longhornGlobalizationUnattend&quot;^&gt;^&lt;gs:UserList^&gt;^&lt;gs:User UserID=&quot;Current&quot; CopySettingsToSystemAcct=&quot;true&quot;/^&gt;^&lt;/gs:UserList^&gt;^&lt;/gs:GlobalizationServices^&gt;&gt;&quot;%TMP%Config.xml&quot;

Dále provedeme příkaz pomocí konfiguračního souboru.

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

Dále odstraňte dříve vytvořený soubor a restartujte systém. změny se projeví po restartu.

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

V důsledku toho jsem skončil s následujícím souborem odpovědí pro 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>

Pojďme zkontrolovat...

Nahrajeme obraz systému - Russified v režimu auditu.

Změníme soubor Unattend.xml na nový, spustíme „Sysprep.bat“, vybereme bod 2 a uvidíme, co máme. Při prvním spuštění je uvítací obrazovka v angličtině a systém se restartuje. Uvítací obrazovka je v ruštině, multikiosk funguje.

Pokud máte nějaké dotazy ohledně nastavení a licencování Windows 10 IoT Enterprise, kontaktujte: [chráněno e-mailem] nebo na webovou stránku quarta-embedded.ru.
Odpovědi na některé otázky najdete v naše wiki nebo na našem Kanál YouTube

Autor článku: Vladimir Borisenkov, technický expert společnosti Quarta Technologies.

Zdroj: www.habr.com