Úvod
– marketingové jméno další verze Windows 10. Vydání této verze bylo oznámeno v září 2018, příslušně má verzi 1809, 18 – rok, 09 – měsíc. O nové verzi Windows 10 1809 bylo napsáno mnoho článků, ale většina z nich se věnuje různým "zkrášlovacím" prvkům a různým funkcím, které jsou poptávány v domácím prostředí.
V tomto článku se bude hovořit pouze o funkcionalitě, která může být požadována mezi výrobci zařízení pro specifické účely. A to o nových možnostech režimu "Kiosek". Také se dotkneme tématu změn názvů servisních schémat edic Windows pro firemní segment.
Staré servisní schéma s novým názvem
Začnu s malým vysvětlením, v firemním segmentu edic Windows existují dvě servisní schémata, podle kterých Windows získává aktualizace. Servisní schémata mají písmenkové označení. Nyní se větve servisu nazývají LTSC a SAC.
LTSC – znamená (s dlouhodobou údržbou). Dříve se tento kanál nazýval LTSB – Long Term Servicing Branch, Microsoft pouze změnil název tohoto kanálu údržby, samotná údržba zůstala stejná.
Také Microsoft změnil název větve údržby CBB – Current Branch for Business, nyní se tato větev údržby nazývá SAC – . Opět se změnilo pouze jméno.
Je však třeba zmínit, že pro větve údržby LTSC a SAC se používají různé distribuce Windows.
Trochu o novém režimu kiosku v SAC
Jak jsem již zmínil, LTSC a SAC mají různé distribuce. V LTSC nejsou standardní univerzální aplikace a obchod s aplikacemi, zatímco v SAC jsou. Proto v LTSC není prohlížeč Edge, zatímco v SAC je. Pokud při nastavení kiosku vyberete prohlížeč Edge, nyní existují dva režimy přístupu:
- Jako digitální znak nebo interaktivní displej
- Jako veřejný prohlížeč
Nebudu se zastavovat na nastavení 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í ve skupině "Administrátoři", zapnout pro něj režim kiosku s použitím EDGE a podívat se na provoz těchto režimů.
Kiosek s mnoha aplikacemi
Někteří si myslí, že licencované používání znamená, že zařízení má pracovat pouze s jednou aplikací, ale ve skutečnosti to tak není. Zařízení by mělo být určeno k vykonávání jedné obchodní úlohy a uživatel by neměl mít přístup na plochu. Nyní Microsoft sám poskytl nástroj pro použití mnoha aplikací. Tento režim se nazývá «multi-app kiosk», pro stručnost ho budu nazývat «multy kiosk». V tomto článku si přiblížíme nastavení tohoto režimu pomocí instalačního balíčku a některé zvláštnosti tohoto režimu.
Něco o režimu «Multy kiosk»
Při přihlášení do uživatelského účtu, pro který je nastaven režim multy kiosk, bude systém pracovat v režimu tabletu. Nabídka «Start» bude roztažena na celou obrazovku, kde se budou zobrazovat dlaždice aplikací.
Seznam hlavních nastavení a možností režimu:
- Nastavení pro více uživatelů nebo skupin
- Každému uživateli nebo skupině lze přiřadit individuální nastavení
- Možnost používání univerzálních a klasických aplikací
- Možnost automatického spuštění jedné z aplikací při přihlášení uživatele do systému
- Fungování aplikací podle bílého seznamu
- Přístup k složkám podle bílého seznamu
Je třeba věnovat pozornost bodu 5. Podle výchozího nastavení bude povoleno fungování pouze těch aplikací, které jsou nezbytné pro chod systému, ostatní aplikace je třeba přidat do seznamu povolených. Tedy nyní není nutné samostatně nastavovat AppLocker. Mimochodem, aby se předešlo konfliktu nastavení AppLockeru, v režimu multy kiosk všechny nastavené pravidla AppLockeru nebudou platit.
V bodě 6 je zmíněna dobrá možnost, ale v současnosti je možné udělit povolení pro zápis pouze pro složku «Downloads». Režim umožňuje používat univerzální a klasické aplikace. Všechna nastavení režimu jsou uvedena v XML souboru, ve kterém lze také specifikovat nastavení pro kiosk s jednou aplikací.
A teď se pokusíme to všechno nastavit…
Co budeme potřebovat…
- Především budeme potřebovat samotný systém, který podporuje režim multy kiosk. demonstrační verzi
- Jakýkoli XML editor
- Pro aplikaci nastavení multy kiosku:
- Pro způsob č. 1 — ICD, který je součástí ADK. ADK lze
- Pro způsob č. 2 – utilita PsExec. Utilitu lze
Řekl – „Vyražme!“
Všechny experimenty budu provádět na Windows 10 IoT Enterprise 1809 LTSC x32 komerční verzi, nikoli na demonstrační verzi. Systém bude bez aktivace, protože absence aktivace nemá vliv na funkčnost systému. Vzal jsem 32 bity pouze proto, že zabírá méně místa a práce s obrazy systému bude rychlejší.
Krok 1 – instalace
Instalace Win 10 IoT Enterprise se nijak neliší od instalace Win 10 Enterprise, takže proces instalace podrobně popisovat nebudu, pouze uvedu některé nuance.
Pro jistotu připomínám, neinstalujte systém na již nainstalovaný. Když se instalátor zeptá na místo instalace systému, odstraňte všechny oddíly na budoucím systémovém disku a zadejte nerozdělený disk.
Instalujeme systém bez připojení k internetu, aby systém nestáhl nic navíc.
Jelikož budeme vytvářet záložní obrazy systému a pro to jej budeme pečetit v režimu auditu, můžeme ušetřit trochu času načtením systému v režimu auditu hned po instalaci. K tomu, když vás systém požádá vybrat region „Začněme s regionem. Je to tak správně“ stiskněte prostě „Ctrl + Shift + F3“.
Krok 2 – vytváříme obraz systému
Jelikož budeme systém testovat a zkoušet různé nové nastavení, je možné, že něco nepůjde podle plánu a bude nutné vrátit systém do výchozího stavu. Pro rychlý návrat do výchozího stavu je nutné vytvořit obraz systému. Jediné, co udělám, je zkopírovat „gentlemanský balíček“ – skript a odpovědní soubor. Všechny soubory mám ve složce „Sysprep“, kterou zkopíruji do kořene systémového disku. A samozřejmě se s vámi podělím o tento „gentlemanský balíček“.
Sysprep.bat – pro pečetě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 minName%>nul 2>nul
if %errorLevel% neq 0 (call :AddAdmin "minName%")
if %errorLevel% neq 0 (call :ShowMessage "‡‡‡Chyba při vytváření nového administrátorského účtu "minName%"‡‡Stiskněte libovolnou klávesu pro ukončení skriptu"&pause>nul&exit)
pushd "%~dp0"
cls
call :ShowMessage ‡‡‡‡‡‡‡‡‡‡
echo 1 - Štípnout systém v režimu auditu
echo 2 - Štípnout systém v režimu OOBE
:Select
set /p Choice="Zadejte číslo položky menu: "
if "%Choice%"=="1" (goto Audit)
if "%Choice%"=="2" (goto OOBE)
echo.&echo Byla vybrána neplatná hodnota.&goto Select
exit
:Audit
call :ShowMessage "‡‡‡‡‡Štípání systému v režimu auditu"
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 "‡‡‡‡‡Štípání systému v režimu OOBE"
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 Není zadané uživatelské jméno&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 minGroup% %UserName% /add
net localgroup %UserGroup% %UserName% /delete
endlocal&exit /b 0
goto :eof
:GetGroupName
if "%~1"=="" (echo Není uveden SID skupiny&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 Chyba při určování názvu skupiny podle 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 :eofPři spuštění skriptu se zkontroluje přítomnost uživatelského účtu "Admin" a pokud neexistuje, bude vytvořen. Uživatelský účet bude přidán do skupiny "Administrátoři".
Unattend.xml – odpovědní soubor pro sysprep.
reg add HKLMSoftwareMicrosoftWindowsCurrentVersionSetupOOBE /v SetupDisplayedProductKey /t REG_DWORD /d 1 /f
1
Nepořit stránku s klíčem
reg add HKLMSoftwareMicrosoftWindowsCurrentVersionSetupOOBE /v UnattendCreatedUser /t REG_DWORD /d 1 /f
2
Vytvořit účet
cmd.exe /c rd %systemdrive%Sysprep /s /q
3
Smazat složku
true
Admin
en-US; ru-RU
ru-RU
ru-RU
ru-RU
true
true
true
true
true
1Při zaplombování v režimu auditu skript přidá do registru příkaz k ukončení procesu „sysprep.exe“, aby se okno sysprepa při každém ručním zavření nezavíralo. Při zaplombování v režimu uvítání skript odstraní z registru příkaz pro zavření okna a sám změní hodnotu architektury v odpovědním souboru na aktuální. Odpovědní soubor obsahuje parametry pro načtení systému bez účasti uživatele a příkaz pro odstranění složky „Sysprep“ v kořenovém adresáři systémového disku.
Nyní zaplombuji systém v režimu auditu pomocí „Sysprep.bat“ a vytvořím obraz systému. Obraz systému vytvořím pomocí DISM a budu pořizovat obraz pouze systémového svazku. Pokud budete pořizovat obraz pouze systémového svazku, a ne celého disku, nezapomeňte zkopírovat obsah adresáře „WindowsSystem32Recovery“ na první svazek do složky „RecoveryWindowsRE“ po nasazení systému. To bude nutné udělat před spuštěním OS, protože po spuštění OS bude adresář „WindowsSystem32Recovery“ již prázdný.
Krok 3 – lokalizace systému
Jazykový balíček lze nainstalovat bez připojení k internetu, pokud tento balíček máte. Pokud ne, systém si jej sám stáhne z internetu, když jazyk přidáte v nastavení. Jen nezapomeňte brát jazykový balíček pro předchozí verze OS. Pro Windows 10 1809 musí být jazykový balíček právě pro Windows 10 1809.
Microsoft se drží svého plánu – postupného převodu 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 systémových parametrech.
V režimu auditu se můžete setkat s problémem otevření parametrů systému z menu „Start“, pro otevření parametrů systému proveďte příkaz – „ms-settings:“, pozorně si dejte pozor na dvojtečku na konci příkazu, bez ní příkaz nebude fungovat. Po jednom otevření parametrů systému pomocí tohoto příkazu je možné je znovu otevírat pomocí grafického menu.
Ale v parametrech systému můžete nainstalovat jazykový balíček, pokud je systém připojen k internetu, není tam možnost výběru instalace jazykového balíčku z místního souboru.
Nebudu popisovat proces lokalizace systému, protože by to podstatně ztížilo článek, navíc je proces lokalizace podrobně . Rád bych však upozornil na zvláštnost změny jazyka systému po instalaci jazykového balíčku prostřednictvím konzole. Tato zvláštnost je popsána ve stejné Wikipedii, na kterou jsem odkázal dříve, v pododdílu .
Nainstaluji jazykový balíček bez připojení k internetu.
Po úplné lokalizaci systému nezapomeňte vytvořit obraz systému.
Krok 4 – instalace potřebných aplikací
V systémech LTSB a LTSC není obchod s aplikacemi, takže instalace aplikací z „Microsoft Store“ vyvolává určité potíže, konkrétně – stažení aplikace. Pro stažení aplikací vytvořila společnost „Adguard“ velmi užitečnou službu – , pomocí které můžete získat dočasné odkazy na stažení aplikací a jejich komponent.
Pro instalaci aplikace budete potřebovat soubory s příponami „Appx“ a „AppxBundle“. Před instalací samotné aplikace je nutné nainstalovat její komponenty. Obvykle lze komponenty aplikace intuitivně rozpoznat podle názvu souboru.
Abych článek neudělal příliš dlouhý, nebudu podrobně popisovat proces instalace aplikací, navíc existuje . Přidám však ještě jeden způsob instalace aplikací do aktuálního účtu. Aplikace lze nainstalovat pomocí programu , ale pro instalaci aplikací bude potřeba připojení k internetu, zato aplikace lze nainstalovat dvojitým kliknutím myši a nebudete potřebovat její komponenty, všechny potřebné komponenty stáhne a nainstaluje .
A malé připomenutí, při instalaci aplikace do aktuálního účtu nebude možné systém zapečetit. Jak nainstalovat aplikace, abyste měli možnost systém zapečetit, viz výše zmíněný návod. A pro kontrolu funkčnosti multiservisu bude již několik existujících aplikací zcela dostačujících.
Krok 5 – vytvoření konfiguračního souboru pro multiservis
A jsme u toho nejzajímavějšího – nastavení režimu kiosku. Podíváme se na nastavení a vidíme. Především je třeba vytvořit konfigurační XML soubor, jehož úplný příklad lze .
Začněme s nastavením umístění dlaždic. Nejjednodušší způsob, jak vytvořit XML konfiguraci pro nastavení dlaždic, je .
Nejdříve přidáme do nabídky Start dlaždice těch aplikací, které potřebujeme. Spustíme hledání pomocí „Win+s“, najdeme požadovanou aplikaci, klikneme na ni pravým tlačítkem myši a vybereme možnost „Připnout na úvodní obrazovku“.
Připnul jsem následující aplikace:
- Poznámkový blok
- Kalkulačka
- Internet Explorer
- Barva
- WordPad
- Parametry
- Windows zabezpečení
Poslední dvě aplikace byly připnuty, protože ve standardním vydání LTSC nejsou žádné jiné univerzální aplikace. Všimněte si, že dlaždice klasických aplikací odkazují na zástupce. Nyní pomocí přetahování dlaždic přímo v nabídce Start rozdělím připnuté dlaždice do dvou skupin. Pro vytvoření nové skupiny dlaždic přetáhněte dlaždici výrazně výše nebo níže na ostatní dlaždice, přičemž se zobrazí intuitivně srozumitelný oddělovač. Můžete skupiny pojmenovat podle svých představ, k tomu umístěte kurzor myši nad skupinu a když se objeví nápis „Pojmenovat skupinu“, klikněte levým tlačítkem myši. První skupinu nazvu „Nastavení“, do které budou patřit dlaždice „Nastavení“ a „Windows zabezpečení“. Druhou skupinu nazvu „Kancelářské aplikace“, do které budou patřit všechny ostatní dlaždice. Mimochodem, můžete přesouvat celé skupiny dlaždic přetahováním za dvě pruhy, které se nacházejí vpravo nahoře od názvu skupiny.
Protože se název dlaždice „Windows zabezpečení“ nevejde celý, změním její velikost na „Širokou“. Pro změnu velikosti dlaždice je potřeba kliknout na dlaždici pravým tlačítkem myši a vybrat možnost „Změnit velikost“.
Po nastavení exportujeme aktuální stav pomocí příkazu v prostředí PowerShell – „Export-StartLayout – path C:SysprepStartLayout.xml“.
Dále je nejjednodušší nevytvářet soubor nastavení samostatně, ale Nastavení – klikněte na tlačítko „Copy“, vložte obsah do textového editoru a uložte jako „MultiAppKiosk.xml“. Nyní změňte nastavení podle svých požadavků. Pro úpravu nastavení připojených dlaždic zkopírujte celý blok „StartLayoutCollection“ z „StartLayout.xml“ do „MultiAppKiosk.xml“. Pro přidání aplikací do povolených je třeba vložit identifikátory univerzálních aplikací do sekce „AllowedApps“ a do toho bloku přidat úplnou cestu k spustitelným souborům klasických aplikací, která je uvedena v vlastnostech zástupců, na které odkazují dlaždice. Pro rychlý přechod k zástupci klikněte pravým tlačítkem myši na připnutou dlaždici a projděte menu „Další > Přejít na umístění souboru“. Všimněte si, že pro uvedení ID univerzální aplikace se používá parametr „AppUserModelId“, a pro uvedení úplné cesty ke klasické aplikaci se používá parametr „DesktopAppPath“. A ještě jeden malý detail, pokud plánujete používat IE v systému x64, pak v seznamu povolených aplikací je třeba uvést dvě cesty pro spustitelný soubor „Program FilesInternet Exploreriexplore.exe“ a „Program Files (x86)Internet Exploreriexplore.exe“.
Přístup k složkám nedám, takže sekci „FileExplorerNamespaceRestrictions“ odstraním.
Zobrazení panelu úloh mi nevadí, takže v sekci „Taskbar“ ponechám vše, jak je.
V příkladu jsou uvedeny dva profily, ale já budu mít pouze jeden profil, takže sekci s druhým profilem mohu odstranit. Před odstraněním věnujte pozornost příkladu automatického spuštění aplikace s argumenty.
V sekci „Configs“ jsou účty přiřazeny k profilům, mějte na paměti, že k jednomu profilu lze přiřadit mnoho účtů. Ale protože mě zajímá pouze jeden účet, odstraním všechna přiřazení kromě prvního – bloky „Config“. V zbývajícím přiřazení uvedu uživatelské jméno „User“.
Toto je můj soubor s parametry
MultiAppKiosk.xml
<![CDATA[
]]>
UserPři vytváření svých XML konfiguračních souborů nezapomeňte, že každý profil musí mít unikátní ID, a to nejen v rámci jednoho XML souboru, ale i v rámci jednoho operačního systému. Ideálně, abyste se neztratili, můžete pokaždé vytvořit nový identifikátor, což lze udělat v prostředí PowerShell pomocí příkazu „[guid]::NewGuid()“. A nezapomeňte soubor uložit v kódování „UTF-8“, pokud bude soubor uložen v kódování „ANSI“, dojde při sestavování přípravného balíčku k chybě, pokud v XML souboru bude cyrilice.
Krok 6 – aplikace nastavení multi-kiosku
Podíváme se na dva způsoby aplikace nastavení popsaných v konfiguračním souboru. První – s pomocí přípravného balíčku, který je třeba vytvářet v ICD. Pro někoho může být tento způsob více obvyklý. Druhý – pomocí „MDM Bridge WMI Provider“, tento způsob se mi zdál pohodlnější.
Způsob č. 1
Pokud nemáte ICD, a nainstalujte. Instalace ADK je velmi jednoduchá, soubor komponentů můžete nechat ve výchozím stavu.
Spusťte ICD, klikněte na dlaždici „Další příprava“, zadejte název a složku projektu a klikněte na „Další“. V dalším okně vyberte „Všechny verze Windows pro stolní počítače“ a klikněte na „Další“. Import přípravného balíčku můžete přeskočit, klikněte na „Dokončit“.
Otevřete rozbalovací menu „Parametry prostředí runtime“, poté rozbalte podmenu „AssignedAccess“ a vyberte položku „MultiAppAssignedAccessSettings“. V horní části střední sekce okna ICD klikněte na tlačítko „Procházet“ a zadejte umístění XML souboru s nastaveními. Pro jistotu můžete projekt uložit stisknutím „Ctrl+s“. V levém horním rohu ICD vyberte „Export“ a v rozbalovacím menu vyberte položku „Příprava balíčku“. Jako vlastníka vyberte „IT administrátor“, ostatní otázky můžete přeskočit kliknutím na „Další“ a na závěr klikněte na „Sestavit“ a „Dokončit“.
V nainstalovaném systému nezapomeňte vytvořit uživatele „User“, nelze jej přidat do skupiny „Administrátoři“, jinak multi-kiosk nebude fungovat. Já jsem vytvořil uživatele v nástroji „Správa počítače“ s neomezenou platností hesla.
Nyní spouštíme přípravném balíčku v dříve nainstalovaném systému. Po aplikaci balíčku se změní nabídka Start a u administrátora. V levém sloupci nabídky Start by měly zmizet tlačítka: „Dokumenty“, „Obrázky“, „Nastavení“. Pokud se nabídka Start nezměnila, něco šlo špatně. Nainstalovaný balíček lze odstranit, pokud otevřete okno „Nastavení > Účty > Přístup k pracovnímu nebo školnímu účtu > Přidání nebo odstranění přípravy balíčku“.
Pokud se nabídka Start změnila, nastavení byla aplikována na systém, přihlaste se jako uživatel, pro kterého je nastaven MultiKiosk, a podívejte se na výsledky.
Metoda č. 2
Aplikování nastavení pomocí „MDM Bridge WMI Provider“ . Výhodou této metody je flexibilita použití a možnost zbavit se mnoha ručních operací, které jsou potřebné pro vytvoření přípravy balíčku. Zde si každý může vytvořit řešení, které mu bude vyhovovat. Já jsem si pro sebe vytvořil takový pár skriptů.
MiltiKiosk.bat – skript pro spuštění
@echo off
chcp 1251>nul
if not exist "%~dp0psexec.exe" call :ShowMessage "‡‡‡‡‡‡‡‡‡‡‡‡‡Pro fungování skriptu je vyžadován soubor psexec.exe‡‡Pro ukončení skriptu stiskněte libovolnou klávesu"&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 Nebyly nalezeny PS soubory začínající názvem - "%~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 :eofMiltiKiosk_Ver.12.ps1 – hlavní skript
Funkce 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, ''}
}
Funkce ShowMessage ($Message='', $Align=0) {
Try {$Align = [decimal]$Align} Catch {Return 'Pro parametr Align lze zadat pouze číslo' | 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, 'Chyba při získávání objektu nastavení', 2, 'Stiskněte "Enter" pro ukončení práce skriptu') -Align 2; Read-Host; Exit}
Funkce MainMenu() {
ShowMessage (13, ' 0 - Odchod', ' 1 - Vybrat XML soubor pro instalaci', ' 2 - Zobrazit aktuální konfiguraci multikiosku', ' 3 - Smazat nastavení multikiosku', 1)
$local:PromptText = 'Vyberte akci'
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, 'Začátek konfigurace') -Align 2; Write-Host $MultiAppKiosk.Configuration; ShowMessage -Message ('Konec konfigurace', 1, 'Pro návrat do menu stiskněte "Enter"', 1) -Align 2; Read-Host}
3 {$MultiAppKiosk.Configuration = $Null; Set-CimInstance -CimInstance $MultiAppKiosk; ShowMessage -Message (1, 'Příkaz pro smazání nastavení byl proveden', 1) -Align 2}
DEFAULT {ShowMessage 'Byla zvolena neplatná hodnota'}
}
if ($Selections -contains $Select) {Clear-Host; ShowMessage (15, ' 0 - Odchod', ' 1 - Vybrat XML soubor pro instalaci', ' 2 - Zobrazit aktuální konfiguraci multikiosku', ' 3 - Smazat nastavení multikiosku', 1)}
}
}
Funkce XMLSelection() {
Clear-Host
if (!(Test-Path -Path $PSScriptRoot'XML')) {ShowMessage -Message (13, 'Nebylo nalezeno příslušné adresář', $('"'+$PSScriptRoot+'XML"'), 1, 'Stiskněte "Enter" pro návrat do předchozího menu') -Align 2; Read-Host; Return}
$local:XMLList = @()
$XMLList += Get-ChildItem -Path $PSScriptRoot'XML' -name -filter '*.xml'
if ($XMLList.Count -eq 0) {ShowMessage -Message (13, 'Nebyl nalezen žádný XML soubor v adresáři', $('"'+$PSScriptRoot+'XML"'), 1, 'Stiskněte "Enter" pro návrat do předchozího menu') -Align 2; Read-Host; Return}
[int]$local:Indent = 13 - $XMLList.Count / 2; if ($Indent -lt 1) {$Indent = 1}
ShowMessage ($Indent, ' 0 - Návrat do předchozího menu')
for ($i=0; $i -le $XMLList.GetUpperBound(0); $i++) {Write-Host $(' '+($i+1)+' - '+$XMLList[$i])}
Write-Host
$local:PromptText = 'Vyberte soubor pro instalaci'
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 $('Tento příkaz pro použití nastavení ze souboru '+$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 ('Byla zvolena neplatná hodnota')}
}
}
}
MainMenuPokud chcete použít moje řešení, uložte do jedné složky výše uvedené skripty s jejich původními názvy a do této stejné složky dejte soubor „PsExec.exe“. V této složce vytvořte složku „XML“ a zkopírujte do ní XML soubory pro nastavení multimediálního kiosku. Použiji ten samý soubor jako v prvním způsobu.
MultiAppKiosk.xml
<![CDATA[
]]>
UserNěco málo o vlastnostech skriptu. Skript je navržen pro použití XML souborů s kódováním „UTF8“, pokud chcete použít kódování „ANSI“, odstraňte parametr „encoding UTF8“ z parametru pro čtení souboru. Do složky „XML“ je nutné umístit XML soubory bez nahrazování znaků, skript sám nahradí speciální znaky odpovídajícími označeními. Aby se člověk nezapletl v GUID’ech vazby uživatelů na 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 GUID’emi.
Použití skriptu je velmi snadné, spustíte ho a vyberete potřebnou možnost. Pro změnu aktuální konfigurace na novou není nutné odstraňovat aktuální, bude přepsána. Nezapomínejte vytvářet uživatele, kteří jsou uvedeni v konfiguračním souboru.
Při zobrazení aktuální konfigurace multimediálního kiosku ve stejné relaci, ve které byla aplikována, místo speciálních znaků se zobrazí kombinace nahrazujících symbolů. Po změně relace (restartování skriptu) se všechny speciální znaky zobrazí v originální podobě.
Krok 7 – zapečetění systému
Multimediální kiosk funguje, a to je vše, zdálo by se...
Pokud vše probíhá podle plánu, něco si nevšimáte.
Nezapomněli jsme, že musíme ještě převést systém z režimu auditu do uvítacího režimu. No, jsme na to připraveni, spouštíme „Sysprep.bat“, vybíráme možnost 2, systém se zapečeťuje. Zapínáme zařízení, systém se spouští, přihlašujeme se do uživatelského účtu, pro který je multimediální kiosk nastaven a nemůžeme se přihlásit. Po nápisu „Vítejte“ se objeví nápis „Odhlášení“.
Nejdříve jsem chtěl popsat pouze řešení problému, ale později jsem se rozhodl popsat kroky k identifikaci problému a hledání nejjednoduššího řešení, protože jistě mnohé z vás trápí nejasné pochybnosti – "A když takto…". Myslím, že popis různých experimentů vám ušetří značnou část času, pokud byste chtěli najít jiné řešení. Aby byla informace co nejpřesnější a abych se ještě jednou ujistil o absenci jakýchkoli chyb, popis experimentů provedu ve formátu "udělal – zapsal". Tedy experimenty, které popisuji, provedu znovu.
Experimenty
Co jsme tedy získali. V systému jsou dva uživatelské účty:
„Admin“ – ve skupině „Administrátoři“
„User“ – ve skupině „Uživatelé“
V režimu auditu multikiosk fungoval, uzamkli jsme – nefunguje.
Experiment 1
Odstraníme nainstalovaný přípravek, v nástroji „Správa počítače“ odstraníme uživatele „User“ a vytvoříme nového uživatele s názvem „User“, aplikujeme přípravek, přihlásíme se k účtu „User“ – nefunguje. Přihlásíme se pod názvem „Admin“, odstraníme uživatele „User“ ze skupiny „Uživatelé“, přidáme ho do skupiny „Administrátoři“, přihlásíme se pod názvem „User“ – nefunguje. Přihlásíme se pod názvem „Admin“, odstraníme přípravek s multikioskem, přihlásíme se pod názvem „User“ – podařilo se mi přihlásit, ale režim multikiosku samozřejmě nefunguje, protože byl odstraněn přípravek.
Experiment 2
Nahráváme obraz systému – lokalizovaný v režimu auditu.
OS se spustila, stiskněte „Win+r“, protože okno sysprep se automaticky zavřelo, zadejte příkaz „sysprep“, v otevřeném okně spusťte „sysprep“. Nastavení sysprepu v okně: „Přechod do okna uvítání systému (OOBE)“, „Příprava k použití“, „Restartování“. Stiskněte „OK“ a počkejte na uvítání OS. Odpovězte na otázky při prvním spuštění systému: „Pokračovat ve zvoleném jazyce?“ – „český“; region – Česká republika; klávesnice – Česká; přidat druhou klávesnici – vynechat; „Pojďme Vás připojit k síti“ – „dočasně vynechat“; připojte se k internetu – ne; licenční smlouva – přijmout; „Kdo bude používat tento počítač“ – „Test“; vytvoření hesla – ponechat prázdné; pohodlná práce na různých zařízeních – ne; nastavení ochrany soukromí – přijmout. OS se spustila, v nástroji „Správa počítače“ vytvořte uživatele s názvem „User“, přidejte instalační balíček. Výsledkem je - nefunguje.
Experiment 3
Nahráváme obraz systému – lokalizovaný v režimu auditu.
OS se spustila, připojte systém k internetu, zadejte příkaz „gpedit.msc“ a v sekci „Centrum aktualizací Windows“ zapněte možnost „Povolit doporučené aktualizace prostřednictvím automatických aktualizací“, pro jistotu restartujte. V centru aktualizací klikněte na „Zkontrolovat dostupnost aktualizací“ a restartujte, dokud nebudou všechny aktualizace nainstalovány. Odpojte systém od internetu. Spusťte „sysprep“ v grafickém režimu a opakujte všechny akce, které byly popsány v předchozím kroku od spuštění nástroje „sysprep“ až po přidání instalačního balíčku. Výsledek – nefunguje.
Experiment 4
Nahrávání systému – anglická verze v auditním režimu.
Spusťte „sysprep“ v grafickém režimu, zapečeťte OS se stejnými parametry jako během experimentu 2. Při prvním spuštění systému vyberte stejné parametry jako v experimentu 2, kromě regionálních a jazykových parametrů, protože čeština není k dispozici. Stejným způsobem vytvořte uživatele „User“ a přidejte instalační balíček. Výsledek – funguje. Tedy problém souvisí s lokalizací.
Experiment 5
Nahráváme obraz systému – lokalizovaný v režimu auditu.
V nástroji „Správa počítače“ vytvořte uživatele „User“, přidejte instalační balíček, přihlaste se do účtu „User“, funkce multikiosk funguje.
Odhlásíme se z účtu a přihlásíme se pod účtem „Admin“. Spustíme PowerShell s právy správce, spustíme příkaz „Dism /online /Get-Intl“ a vidíme „Implicitní jazyk uživatelského rozhraní: en-US“.
Načteme se z flashdisku do WinPE, rozšířený OS mám na 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 vidíme „Implicitní jazyk systémového UI: ru-RU“.
Načteme se do systému, přihlásíme se do účtu „User“, multifunkční kiosk nefunguje.
Abychom jasně zdokumentovali příčinnou souvislost mezi vznikem problému, pokusíme se znovu udělat multifunkční kiosk funkční i nefunkční.
Načteme se z flashdisku do WinPE, rozšířený OS mám na 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 vidíme „Implicitní jazyk systémového UI: en-US“.
Načteme se do systému, přihlásíme se do účtu „User“, multifunkční kiosk funguje.
Načteme se z flashdisku do WinPE, rozšířený OS mám na 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 vidíme „Implicitní jazyk systémového UI: ru-RU“.
Načteme se do systému, přihlásíme se do účtu „User“, multifunkční kiosk nefunguje.
T.j. můžeme vidět jasnou závislost funkčnosti kiosku na hodnotě implicitního jazyka uživatelského rozhraní. Existují nějaké další faktory, které ovlivňují funkčnost multifunkčního kiosku?
Experiment 6
Pro čistotu experimentu přeinstalujeme systém. Načteme obraz systému – lokalizovaný v režimu auditu.
Spustíme „sysprep“ v grafickém režimu, zapečetíme OS se stejnými parametry, jaké byly během experimentu 2. Čekáme na uvítání OS a odpovídáme na otázky: „Pokračovat ve vybraném jazyce?“ – „English (United States)“; region – Rusko; rozložení klávesnice – Ruské. Dále jsou všechny parametry vybrány tak, jak byly v experimentu 2.
Podíváme se na hodnoty implicitního jazyka uživatelského rozhraní. Spustíme příkaz „Dism /online /Get-Intl“ a vidíme „Implicitní jazyk systémového UI: en-US“. V aplikaci „Správa počítače“ vytvoříme uživatele „User“, přidáme přípravný balík, přihlásíme se do účtu „User“, multifunkční kiosk funguje.
Pokoušíme se rozbít kiosk změnou implicitního jazyka uživatelského rozhraní. Přihlásíme se k uživateli „Test“, který byl vytvořen při prvním spuštění systému, a nastavíme mu automatické přihlášení, aby se systém okamžitě nenačítal do účtu „User“. Spustíme „netplwiz“, vybereme uživatele „Test“, zrušíme zaškrtnutí „Požadovat zadání uživatelského jména a hesla“ a použijeme parametry.
Zavádíme z flash disku do WinPE. Provádíme příkaz „Dism /image:E: /Set-UILang:cs-cz“. Sledujeme výsledek, vykonáme „Dism /image:E: /Get-Intl“ a vidíme „Výchozí jazyk uživatelského rozhraní: cs-CZ“.
Zavádíme do systému, snažíme se přihlásit k účtu „User“, multikiosk funguje. Tedy se ho nedaří prolomit. Můžeme ho takto přinutit pracovat?
Experiment 7
Nahráváme obraz systému – lokalizovaný v režimu auditu.
Spouštíme „Sysprep.bat“, vybíráme bod 2. Zavádíme do systému, v nástroji „Správa počítače“ vytváříme uživatele „User“, přidáváme balíček přípravy, přihlásíme se do účtu „User“, multikiosk nefunguje.
Zavádíme z flash disku do WinPE. Provádíme příkaz „Dism /image:E: /Set-UILang:en-us“. Sledujeme výsledek, vykonáme „Dism /image:E: /Get-Intl“ a vidíme „Výchozí jazyk uživatelského rozhraní: en-US“.
Zavádíme do systému, snažíme se přihlásit k účtu „User“, multikiosk nefunguje.
Ukazuje se, že změnou nastavení výchozího jazyka uživatelského rozhraní lze ovlivnit funkčnost multikiosku pouze tehdy, když je systém v auditním režimu nebo při prvním spuštění po zapečetění systému. To znamená, že je nutné zapečetit systém s odpovědním souborem, ve kterém bude vybrán jazyk systému anglický, a poté měnit nastavení systému, aby bylo rozhraní ruské. To není moc dobré řešení. Možná se problém dá vyřešit způsobem instalace jazykového balíčku nebo instalací dalších jazykových balíčků?
Experiment 8
Nahrávání systému – anglická verze v auditním režimu.
Připojujeme se k internetu, v nastavení systému přecházíme do sekce „Jazyk“, vybíráme „Přidat jazyk“, vybíráme jazyk „Čeština“, klikáme na „Další“, instalační možnosti necháváme jako výchozí, klikáme na „Instalovat“, po nainstalování jazykového balíčku restartujeme systém, nyní je lokalizovaný do češtiny. Odpojujeme systém od internetu, spouštíme „Sysprep.bat“, vybíráme bod 2.
Po zavedení systému v nástroji „Správa počítače“ vytváříme uživatele „User“, přidáváme balíček přípravy, přihlásíme se do účtu „User“, multikiosk nefunguje.
Experiment 9
Zkusíme lokalizovat systém před instalací, v offline režimu. Zároveň to bude krátký přehled o lokalizaci distribuce.
Vezmu flešku s čistým originálním distribučním souborem – X21-96381. Bude označena jako disk „E“. Pro připojení obrazů vytvářím složky: „c:MountInstall“, „c:MountWinre“, „c:MountBoot“. Vezmu sadu lokalizačních balíčků – X21-87814. A do složky „c:Mount“ z něj kopíruji balíčky: „Microsoft-Windows-Client-Language-Pack_x86_cs-cz.cab“, „lp.cab“, „WinPE-Setup_cs-cz.cab“. Spouštím konzoli s právy administrátora. Myslím, že další příkazy budou srozumitelné bez komentářů.
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_cs-cz.cabcode
dism /Image:Installcode /Set-AllIntl:cs-cz
dism /Image:Install /Set-TimeZone:"Central European 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:cs-cz
dism /Image:Winre /Set-TimeZone:"Central European Standard Time"code
dism /Unmount-Image /MountDir:Winre /Commitcode
dism /Image:Install /Gen-LangINI /distribution:E: /Set-AllIntl:cs-CZcode
dism /image:Install /Set-SetupUILang:CS-cz /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:cs-cz
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_cs-cz.cabcode
dism /Image:Bootcode /Set-AllIntl:cs-cz
copy e:sourceslang.ini Bootsourceslang.ini /ycode
dism /Unmount-Image /MountDir:Boot /CommitSpouštíme se z flešky, vybíráme český jazyk a instalujeme systém na čistý disk. Když systém žádá o výběr regionu, stiskneme „Ctrl+Shift+F3“. V nástroji „Správa počítače“ vytvoříme uživatele „User“, přidáme přípravným balíček, přihlásíme se do účtu „User“, multilanguage kiosk nefunguje.
Spouštíme se z flešky do WinPE. Vykonáváme příkaz „Dism /image:E: /Set-UILang:en-us“.
Spouštíme se do systému, snažíme se přihlásit do účtu „User“, multilanguage kiosk funguje.
Zřejmě problém není v metodách přidávání balíčku, zkusíme přidat další balíčky.
Experiment 10
Vezmeme flešku, kterou jsme připravili v předchozím kroku.
Vezmeme balíček „Feat on Demand“ – X21-87815. Do složky „c:Mount“ kopíruji z něj balíčky: „Microsoft-Windows-LanguageFeatures-Basic-cs-cz-Package~31bf3856ad364e35~x86~~.cab“, „Microsoft-Windows-LanguageFeatures-OCR-cs-cz-Package~31bf3856ad364e35~x86~~.cab“, „Microsoft-Windows-LanguageFeatures-Handwriting-cs-cz-Package~31bf3856ad364e35~x86~~.cab“, „Microsoft-Windows-LanguageFeatures-TextToSpeech-cs-cz-Package~31bf3856ad364e35~x86~~.cab“.
Bereme balíček „Feat on Demand RDX Updt“ – X21-99781. Do složky „c:Mount“ kopíruji z něj balíky: „Microsoft-Windows-RetailDemo-OfflineContent-Content-Package~31bf3856ad364e35~x86~~.cab“, „Microsoft-Windows-RetailDemo-OfflineContent-Content-cs-cz-Package~31bf3856ad364e35~x86~~.cab“.
Spouštíme konzoli s právy administrátora a provádíme příkazy:
Příkazy
cd c:mount
dism /Mount-Wim /WimFile:e:sourcesinstall.wim /index:1 /MountDir:Install
dism /Add-Package /Image:Install /PackagePath:Microsoft-Windows-LanguageFeatures-Basic-cs-cz-Package~31bf3856ad364e35~x86~~.cab
dism /Add-Package /Image:Install /PackagePath:Microsoft-Windows-LanguageFeatures-OCR-cs-cz-Package~31bf3856ad364e35~x86~~.cab
dism /Add-Package /Image:Install /PackagePath:Microsoft-Windows-LanguageFeatures-Handwriting-cs-cz-Package~31bf3856ad364e35~x86~~.cab
dism /Add-Package /Image:Install /PackagePath:Microsoft-Windows-LanguageFeatures-TextToSpeech-cs-cz-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-cs-cz-Package~31bf3856ad364e35~x86~~.cab
dism /Unmount-Image /MountDir:Install /CommitZatěžujeme se z flash disků, vybíráme český jazyk a instalujeme systém na čistý disk. Když systém žádá vybrat region, stiskneme „Ctrl+Shift+F3“. V nástroji „Správa počítače“ vytvoříme uživatele „User“, přidáváme balíček přípravy a přihlásíme se do uživatelského účtu „User“. Dostali jsme černou obrazovku, která dlouho visela, proto jsem provedl horký restart systému.
Odstraňujeme balíček přípravy, přihlašujeme se jako uživatel „User“, restartujeme systém, přidáváme balíček přípravy, multikiosk nefunguje.
Spouštíme se z flešky do WinPE. Vykonáváme příkaz „Dism /image:E: /Set-UILang:en-us“.
Spouštíme se do systému, snažíme se přihlásit do účtu „User“, multilanguage kiosk funguje.
Obejití problému
Normální hrdinové. Vždy hledají obchvat!
Různé metody instalace jazykových balíčků nevyřešily problém, takže při prvním spuštění po zapěchování bude nutné nainstalovat jazyk „en-us“ a po prvním spuštění měnit jazyková nastavení.
Nahráváme obraz systému – lokalizovaný v režimu auditu.
V souboru „Unattend.xml“ v parametru zapíšeme „en-US“, spouštíme „Sysprep.bat“, vybíráme bod 2 a sledujeme, co jsme získali. Přihlašovací obrazovka je v angličtině, multikiosk – funguje. To znamená, že je třeba přidat do „Unattend.xml“ příkaz na změnu jazyka přihlašovací obrazovky. K tomu je třeba provést příkaz „control intl.cpl,,/f:“ s uvedením konfiguračního souboru, ve kterém bude napsáno kopírování aktuálních nastavení na přihlašovací obrazovku. Obsah konfiguračního souboru bude vypadat takto.
Jelikož bude kopírování nastavení aktuálního uživatele, je nutné provést příkaz až po přihlášení uživatele do systému, což znamená, že je budeme potřebovat. Je tu jedno malé „ale“, příkaz bude proveden po přihlášení uživatele s administrátorskými právy. A nechtěl bych vytvářet další soubor, který by byl potřebný pro úspěšné provedení příkazu. Lepší je celou funkčnost realizovat v jednom souboru – „Unattend.xml“. K tomu stačí provést příkaz, který vytvoří konfigurační soubor. Myslím, že vytvořím konfigurační soubor pomocí příkazu „echo“ v prostředí „cmd“, ale v něm je potřeba escapovat úhlové závorky circumflexem. Tedy pro vytvoření konfiguračního souboru dostaneme takový příkaz.
echo ^<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend"^>^<gs:UserList^>^<gs:User UserID="Current" CopySettingsToSystemAcct="true"/^>^<\/gs:UserList^>^<\/gs:GlobalizationServices^>>Config.xmlAle tento příkaz musíme umístit do XML, které má své vlastní požadavky na použití speciálních znaků:
Speciální znak
Zastupující hodnota
>
>
<
<
&&
&
‘
'
“
"
Nakonec pro vytvoření konfiguračního souboru vznikl takový příkaz pro „FirstLogonCommands“.
cmd.exe /c echo ^<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend"^>^<gs:UserList^>^<gs:User UserID="Current" CopySettingsToSystemAcct="true" /^>^<\/gs:UserList^>^<\/gs:GlobalizationServices^>>"%TMP%Config.xml"Dále vykonáme příkaz s použitím konfiguračního souboru.
control intl.cpl,,/f:"%TMP%Config.xml"Dále odstraníme dříve vytvořený soubor a restartujeme systém, protože změny vstoupí v platnost po restartování.
cmd.exe /c del "%TMP%Config.xml" /q&shutdown /r /f /t 00Výsledkem je, že jsem získal takovýto odpovědní soubor pro sysprep.
Unattend.xml
reg add HKLMSoftwareMicrosoftWindowsCurrentVersionSetupOOBE /v SetupDisplayedProductKey /t REG_DWORD /d 1 /f
1
Nezobrazovat stránku s klíčem
reg add HKLMSoftwareMicrosoftWindowsCurrentVersionSetupOOBE /v UnattendCreatedUser /t REG_DWORD /d 1 /f
2
Nevytvářet účet
cmd.exe /c rd %systemdrive%Sysprep /s /q
3
Odstranit složku
true
Admin
en-US; cs-CZ
cs-CZ
en-US
cs-CZ
true
true
true
true
true
1
cmd.exe /c echo ^<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend"^>^<gs:UserList^>^<gs:User UserID="Current" CopySettingsToSystemAcct="true" /^>^</gs:UserList^>^</gs:GlobalizationServices^>"%TMP%Config.xml"
VytvořitConfig
1
control intl.cpl,,/f:"%TMP%Config.xml"
PoužítConfig
2
cmd.exe /c del "%TMP%Config.xml" /q&shutdown /r /f /t 00
OdstranitConfig
3Kontrolujeme…
Nahráváme obraz systému – lokalizovaný v režimu auditu.
Vyměňujeme soubor Unattend.xml za nový, spouštíme Sysprep.bat, vybíráme bod 2 a sledujeme, co jsme získali. Při prvním spuštění se uvítací obrazovka zobrazuje v angličtině, systém se restartuje. Uvítací obrazovka v ruštině, režim mulitkiosku funguje.
Pokud máte další dotazy ohledně nastavení a licencování Windows 10 IoT Enterprise, kontaktujte nás na adrese nebo na webu .
Odpovědi na některé otázky můžete najít v nebo na našem
Autor článku: Borisenkov Vladimír, technický expert společnosti Kvarťá Technologie.
Zdroj: habr.com
