pengantar
Windows 10 IoT Enterprise 2019 adalah nama pemasaran untuk rilis Windows 10. Rilis versi ini diumumkan pada September 2018, masing-masing memiliki versi 1809, 18 tahun, 09 bulan. Banyak artikel telah ditulis tentang rilis baru Windows 10 1809, tetapi kebanyakan dari mereka dikhususkan untuk berbagai "busur", "keindahan" dan berbagai fungsi yang diminati di rumah.
Artikel ini akan fokus hanya pada fungsionalitas yang mungkin dibutuhkan di antara produsen perangkat tujuan tetap. Yakni, soal fitur baru dari mode "Kios". Topik mengubah nama skema layanan untuk edisi Windows di segmen korporat juga akan dibahas.
Skema layanan lama dengan nama baru
Saya akan mulai dengan sedikit penjelasan, di segmen korporat edisi Windows ada dua skema layanan yang menurutnya Windows menerima pembaruan. Rencana layanan ditetapkan melalui surat. Cabang layanan sekarang disebut LTSC dan SAC.
LTSC adalah singkatan dari Long Term Servicing Channel . Sebelumnya, saluran seperti itu disebut LTSB - Cabang Layanan Jangka Panjang, Microsoft hanya mengubah nama saluran layanan, layanan itu sendiri tetap sama.
Selain itu, Microsoft telah mengubah nama cabang layanan CBB - Cabang Saat Ini untuk Bisnis, sekarang cabang layanan ini disebut SAC - Saluran Semi-Tahunan . Sekali lagi, hanya namanya yang berubah.
Tetapi harus disebutkan bahwa cabang layanan LTSC dan SAC menggunakan distribusi Windows yang berbeda.
SAC
, LTSC SAC . LTSC , SAC . , LTSC Edge, SAC . Edge, :
, .. . , «», EDGE .
, Windows 10 IoT Enterprise , . - . . «multi-app kiosk», «». .
«»
. «» , .
:
5. , , . .. AppLocker. , AppLocker’, AppLocker’ .
6 , «Downloads». . XML-, .
…
…
– «!»
Windows 10 IoT Enterprise 1809 LTSC x32 , . .. . 32 , .
1 –
Win 10 IoT Enterprise Win 10 Enterprise, , .
, . .
, .
.. , . , «Let’s start with region. Is this right» «Ctrl+Shift+F3».
2 –
.. , - . . , « » – . «Sysprep», . , « ».
@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 HKLM\Software\Microsoft\Windows\CurrentVersion\Run /v KillSysprep /t REG_SZ /d "taskkill /im sysprep.exe" /f
%SYSTEMROOT%\System32\Sysprep\sysprep.exe /audit /generalize /shutdown /quiet
goto :eof
:OOBE
call :ShowMessage "‡‡‡‡‡ "
reg delete HKLM\Software\Microsoft\Windows\CurrentVersion\Run /v KillSysprep /f
powershell -command "(Get-Content -path 'Unattend.xml' -Raw).Trim() -replace 'Architecture=""".+?"""','Architecture="""%PROCESSOR_ARCHITECTURE%"""' | Set-Content -path 'Unattend.xml'"
%SYSTEMROOT%\System32\Sysprep\sysprep.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
«Admin» . «».
<?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 HKLM\Software\Microsoft\Windows\CurrentVersion\Setup\OOBE /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 HKLM\Software\Microsoft\Windows\CurrentVersion\Setup\OOBE /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>
«sysprep.exe» sysprep’ . . «Sysprep» .
«Sysprep.bat» . DISM’ . , , «Windows\System32\Recovery» «Recovery\WindowsRE» . .. «Windows\System32\Recovery» .
3 –
, . , , . . Windows 10 1809 Windows 10 1809.
– , . .
«», – «ms-settings:», , . , .
, .
.. , . . , , « ».
.
.
4 –
.. LTSB LTSC , «Microsoft Store» , – . «Adguard» – «Adguard Store», .
«Appx» «AppxBundle». . .
, . . «App Installer», , , «App Installer».
, . . .
5 –
«» , . «Win+s», , « ».
:
- Internet Explorer
- Paint
- WordPad
- Windows
.. LTSC . , . «» . , . , , – « » . «», «» « Windows». « », . , , , .
.. « Windows» , «». « ».
, PowerShell – «Export-StartLayout – path C:\Sysprep\StartLayout.xml».
, – «Copy», «MultiAppKiosk.xml». . «StartLayoutCollection» «StartLayout.xml» «MultiAppKiosk.xml». «AllowedApps» , , . , « > ». , ID «AppUserModelId», «DesktopAppPath». , IE x64, «Program Files\Internet Explorer\iexplore.exe» «Program Files (x86)\Internet Explorer\iexplore.exe».
, «FileExplorerNamespaceRestrictions».
, «Taskbar» .
, , . .
«Configs» , , . .. , – «Config». «User».
<?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%\system32\notepad.exe" />
<App DesktopAppPath="C:\Program Files\Internet Explorer\iexplore.exe" />
<App DesktopAppPath="%windir%\system32\win32calc.exe" />
<App DesktopAppPath="%windir%\system32\mspaint.exe" />
<App DesktopAppPath="%ProgramFiles%\Windows NT\Accessories\wordpad.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%\Microsoft\Windows\Start Menu\Programs\Accessories\Wordpad.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationLinkPath="%APPDATA%\Microsoft\Windows\Start Menu\Programs\Accessories\Notepad.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Accessories\Calculator.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="2" DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Accessories\Paint.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="0" DesktopApplicationLinkPath="%APPDATA%\Microsoft\Windows\Start Menu\Programs\Accessories\Internet 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>
XML- , ID, XML-, . .. , PowerShell «[guid]::NewGuid()». «UTF-8», «ANSI», XML- .
6 –
, . – , ICD. -, , . – «MDM Bridge WMI Provider», .
№1
ICD, ADK . ADK , .
ICD, « », «». « Windows » «». , «».
« », «AssignedAccess» «MultiAppAssignedAccessSettings». ICD «» XML- . «Ctrl+s». ICD «» « ». «-» , «» «» «».
«User», «» . « » .
. . : «», «», «». , - . « > > > ».
, , , .
№2
«MDM Bridge WMI Provider» . , . , . .
@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%\Software\Sysinternals\PsExec /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
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="root\cimv2\mdm\dmmap"
$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
, «PsExec.exe». «XML» 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%\system32\notepad.exe" />
<App DesktopAppPath="C:\Program Files\Internet Explorer\iexplore.exe" />
<App DesktopAppPath="%windir%\system32\win32calc.exe" />
<App DesktopAppPath="%windir%\system32\mspaint.exe" />
<App DesktopAppPath="%ProgramFiles%\Windows NT\Accessories\wordpad.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%\Microsoft\Windows\Start Menu\Programs\Accessories\Wordpad.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationLinkPath="%APPDATA%\Microsoft\Windows\Start Menu\Programs\Accessories\Notepad.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Accessories\Calculator.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="2" DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Accessories\Paint.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="0" DesktopApplicationLinkPath="%APPDATA%\Microsoft\Windows\Start Menu\Programs\Accessories\Internet 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>
. XML- «UTF8», «ANSI», «encoding UTF8». «XML» XML- , . GUID’ , GUID’.
, . , . , .
, , . ( ), .
7 –
, , …
, - .
, . , «Sysprep.bat», 2, . , , . « » « ».
, .. – « …». , . , - , « – ». .. .
. :
«Admin» – «»
«User» – «»
, – .
1
, « » «User» «User», , «User» – . «Admin», «User» «», «», «User» – . «Admin», , «User» – , .. .
2
– .
, «Win+r», .. sysprep’ «sysprep», «sysprep». sysprep’a : « (OOBE)», « », «». «» . : «Continue in selected language?» – «»; – ; – ; – ; « » – « »; – ; – ; « » – «Test»; – ; – ; – . , « » «User», . – .
3
– .
, , «gpedit.msc» « Windows» « », . « » , . . «sysprep» , «sysprep» . – .
4
– .
«sysprep» , 2. 2, .. . «User» . – . .. .
5
– .
« » «User», , «User», .
, «Admin». PowerShell , «Dism /online /Get-Intl» « : en-US».
WinPE, E. «Dism /image:E:\ /Set-UILang:ru-ru». , «Dism /image:E:\ /Get-Intl» «Default system UI language: ru-RU».
, «User», .
- .
WinPE, E. «Dism /image:E:\ /Set-UILang:en-us». , «Dism /image:E:\ /Get-Intl» «Default system UI language: en-US».
, «User», .
WinPE, E. «Dism /image:E:\ /Set-UILang:ru-ru». , «Dism /image:E:\ /Get-Intl» «Default system UI language: ru-RU».
, «User», .
.. . - , ?
6
. – .
«sysprep» , 2. : «Continue in selected language?» – «English (United States)»; – ; – . 2.
. «Dism /online /Get-Intl» «Default system UI language: en-US». « » «User», , «User», .
. «Test», «User», . «netplwiz», «Test», « » .
WinPE. «Dism /image:E:\ /Set-UILang:ru-ru». , «Dism /image:E:\ /Get-Intl» «Default system UI language: ru-RU».
, «User», . .. . ?
7
– .
«Sysprep.bat», 2. , « » «User», , «User», .
WinPE. «Dism /image:E:\ /Set-UILang:en-us». , «Dism /image:E:\ /Get-Intl» «Default system UI language: en-US».
, «User», .
, . , , , . . ?
8
– .
, «Language» «Add language», «», «Next», , «Install», , . , «Sysprep.bat», 2.
« » «User», , «User», .
9
, . .
– X21-96381. «E». : «c:\Mount\Install», «c:\Mount\Winre», «c:\Mount\Boot». – X21-87814. «c:\Mount» : «Microsoft-Windows-Client-Language-Pack_x86_ru-ru.cab», «lp.cab», «WinPE-Setup_ru-ru.cab». . , .
cd c:\mount
dism /Mount-Wim /WimFile:e:\sources\install.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:Install\Windows\System32\Recovery\Winre.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:\sources\boot.wim /index:1 /mountdir:Bootcode
dism /Image:Boot /Add-Package /PackagePath:lp.cabcode
dism /Image:Bootcode /Set-AllIntl:ru-ru
copy e:\sources\lang.ini Boot\sources\lang.inicode
dism /Unmount-Image /MountDir:Boot /Commitcode
dism /mount-wim /wimfile:e:\sources\boot.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:\sources\lang.ini Boot\sources\lang.ini /ycode
dism /Unmount-Image /MountDir:Boot /Commit
, . «Ctrl+Shift+F3». « » «User», , «User», .
WinPE. «Dism /image:E:\ /Set-UILang:en-us».
, «User», .
, .
10
, .
«Feat on Demand» – X21-87815. «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».
:
cd c:\mount
dism /Mount-Wim /WimFile:e:\sources\install.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
, . «Ctrl+Shift+F3». « » «User», , «User». , , .
, «User», , , .
WinPE. «Dism /image:E:\ /Set-UILang:en-us».
, «User», .
. !
, «en-us», .
– .
«Unattend.xml» «en-US», «Sysprep.bat», 2 , . , – . «Unattend.xml» . «control intl.cpl,,/f:» , . .
<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend">
<gs:UserList>
<gs:User UserID="Current" CopySettingsToSystemAcct="true"/>
</gs:UserList>
</gs:GlobalizationServices>
.. , , , . «», . , . — «Unattend.xml». , . , «echo» «cmd», . .. .
echo ^<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend"^>^<gs:UserList^>^<gs:User UserID="Current" CopySettingsToSystemAcct="true"/^>^</gs:UserList^>^</gs:GlobalizationServices^>>Config.xml
XML, :
> | > |
< | < |
& | & |
‘ | ' |
“ | " |
«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"
.
control intl.cpl,,/f:"%TMP%\Config.xml"
.. .
cmd.exe /c del "%TMP%\Config.xml" /q&shutdown /r /f /t 00
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 HKLM\Software\Microsoft\Windows\CurrentVersion\Setup\OOBE /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 HKLM\Software\Microsoft\Windows\CurrentVersion\Setup\OOBE /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 ^<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend"^>^<gs:UserList^>^<gs:User UserID="Current" CopySettingsToSystemAcct="true"/^>^</gs:UserList^>^</gs:GlobalizationServices^>>"%TMP%\Config.xml"</CommandLine>
<Description>CreateConfig</Description>
<Order>1</Order>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>control intl.cpl,,/f:"%TMP%\Config.xml"</CommandLine>
<Description>UseConfig</Description>
<Order>2</Order>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>cmd.exe /c del "%TMP%\Config.xml" /q&shutdown /r /f /t 00</CommandLine>
<Description>DelConfig</Description>
<Order>3</Order>
</SynchronousCommand>
</FirstLogonCommands>
</component>
</settings>
…
– .
Unattend.xml , «Sysprep.bat», 2 , . , . , .
Windows 10 IoT Enterprise, mse@quarta.ru quarta-embedded.ru.
YouTube-
: , .