Добавление языковых пакетов в образ Windows 10 multi-session

Виртуальный рабочий стол Azure — это служба, которую пользователи могут развертывать в любое время в любом месте. Поэтому важно, чтобы пользователи могли настраивать на каком языке будет отображаться образ Windows 10 Enterprise multi-session.

Существует два способа, которыми можно обеспечить требования пользователей к языкам:

  • Создать отдельные пулы узлов, образ которых будет настроен для каждого языка.
  • Разместить пользователей с различными требованиями к языкам и локализации в одном пуле узлов, но настроить их образы так, чтобы обеспечить им возможность выбирать нужный язык.

Последний способ является гораздо более эффективным и экономичным. Тем не менее, вам нужно решить, какой способ лучше подходит для ваших нужд. В этой статье показано, как вам настроить языки для ваших образов.

Необходимые компоненты

Чтобы настроить образы Windows 10 Enterprise multi-session для добавления нескольких языков, необходимо обеспечить следующее:

Примечание.

Общая папка (репозиторий) должна быть доступна из виртуальной машины Azure, которую вы планируете использовать для создания пользовательского образа.

Создание репозитория содержимого для языковых пакетов и функций по требованию

Чтобы создать репозиторий содержимого для языковых пакетов и FOD, а также репозиторий для пакетов Inbox Apps, выполните следующие действия:

  1. На виртуальной машине Azure Скачайте многоязыковые ISO для Windows 10, пакеты FOD и Inbox Apps для образов Windows 10 Enterprise multi-session, версии 1903/1909 и 2004, используя ссылки в пункте Предварительные условия.

  2. Откройте и подключите ISO-файлы на виртуальной машине.

  3. Перейдите к ISO-образу языкового пакета и скопируйте содержимое из папок LocalExperiencePacks и x64\langpacks, а затем вставьте содержимое в общую папку.

  4. Перейдите к файлу FOD ISO, скопируйте все его содержимое, а затем вставьте его в общую папку.

  5. Перейдите в папку amd64fre на ISO пакета Inbox Apps и скопируйте содержимое в подготовленный вами репозиторий для Inbox Apps.

    Примечание.

    Если вы работаете с ограниченным объемом хранилища, копируйте файлы только для тех языков, которые нужны вашим пользователям. Отделить нужные файлы можно взглянув на коды языка в именах файлов. Например, файл с французским языков содержит код "fr-FR" в своем имени. Полный список кодов языков для всех имеющихся языков см. в разделе Доступные языковые пакеты для Windows.

    Важно!

    Для некоторых языков требуются дополнительные шрифты, содержащиеся в вспомогательных пакетах, в имена файлов этих пакетов включаются различные условные обозначения. Например, имена файлов японского шрифта включают "Jpan".

    An example of the Japanese language packs with the

  6. Задайте разрешения для общей папки репозитория содержимого языка, чтобы у вас был доступ на чтение с виртуальной машины, которая будет использоваться для создания пользовательского образа.

Создание пользовательского образа Windows 10 Enterprise multi-session вручную

Чтобы создать пользовательский образ Windows 10 Enterprise multi-session вручную:

  1. Разверните виртуальную машину Azure, перейдите в Azure Gallery и выберите версию Windows 10 Enterprise multi-session, которую вы используете в настоящий момент.

  2. После развертывания виртуальной машины подключитесь к ней, используя RDP в качестве локального администратора.

  3. Убедитесь, что на виртуальной машине установлены все последние обновления Windows. При необходимости скачайте обновления и перезапустите виртуальную машину.

    Важно!

    После установки языкового пакета необходимо переустановить последнее накопительное обновление, установленное на образе. Если не переустановить последнее накопительное обновление, могут возникнуть ошибки. Если последнее накопительное обновление уже установлено, клиентский компонент Центра обновления Windows не предлагает его снова; его необходимо переустановить вручную. См. сведения о языковых тегах.

  4. Подключитесь к репозиторию языковых пакетов, пакетов FOD и Inbox Apps и подключите его к определенному диску, указав его литеру (например, диске E).

Создание пользовательского образа Windows 10 Enterprise multi-session автоматически

Если вы предпочитаете устанавливать языки с помощью автоматизированного процесса, можно настроить такой скрипт в PowerShell. Приведенный ниже пример скрипта можно использовать для установки языковых пакетов испанского (Spain), французского (France) и китайского (PRC) языков, а также и вспомогательных пакетов к ним, на Windows 10 Enterprise multi-session, версия 2004. Данный скрипт интегрирует пакет интерфейса языка и все необходимые вспомогательные пакеты в образ. Однако этот скрипт также можно изменить и для установки других языков. Просто убедитесь, что сценарий запущен из сеанса PowerShell с повышенными привилегиями, или в противном случае он не будет работать.

########################################################
## Add Languages to running Windows Image for Capture ##
########################################################

##Disable Language Pack Cleanup##
Disable-ScheduledTask -TaskPath "\Microsoft\Windows\AppxDeploymentClient\" -TaskName "Pre-staged app cleanup"

##Set Language Pack Content Stores##
[string]$LIPContent = "E:"

##Spanish##
Add-AppProvisionedPackage -Online -PackagePath $LIPContent\es-es\LanguageExperiencePack.es-es.Neutral.appx -LicensePath $LIPContent\es-es\License.xml
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-Client-Language-Pack_x64_es-es.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-LanguageFeatures-Basic-es-es-Package~31bf3856ad364e35~amd64~~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-LanguageFeatures-Handwriting-es-es-Package~31bf3856ad364e35~amd64~~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-LanguageFeatures-OCR-es-es-Package~31bf3856ad364e35~amd64~~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-LanguageFeatures-Speech-es-es-Package~31bf3856ad364e35~amd64~~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-LanguageFeatures-TextToSpeech-es-es-Package~31bf3856ad364e35~amd64~~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-NetFx3-OnDemand-Package~31bf3856ad364e35~amd64~es-es~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-InternetExplorer-Optional-Package~31bf3856ad364e35~amd64~es-es~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-MSPaint-FoD-Package~31bf3856ad364e35~amd64~es-es~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-Notepad-FoD-Package~31bf3856ad364e35~amd64~es-es~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-PowerShell-ISE-FOD-Package~31bf3856ad364e35~amd64~es-es~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-Printing-WFS-FoD-Package~31bf3856ad364e35~amd64~es-es~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-StepsRecorder-Package~31bf3856ad364e35~amd64~es-es~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-WordPad-FoD-Package~31bf3856ad364e35~amd64~es-es~.cab
$LanguageList = Get-WinUserLanguageList
$LanguageList.Add("es-es")
Set-WinUserLanguageList $LanguageList -force

##French##
Add-AppProvisionedPackage -Online -PackagePath $LIPContent\fr-fr\LanguageExperiencePack.fr-fr.Neutral.appx -LicensePath $LIPContent\fr-fr\License.xml
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-Client-Language-Pack_x64_fr-fr.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-LanguageFeatures-Basic-fr-fr-Package~31bf3856ad364e35~amd64~~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-LanguageFeatures-Handwriting-fr-fr-Package~31bf3856ad364e35~amd64~~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-LanguageFeatures-OCR-fr-fr-Package~31bf3856ad364e35~amd64~~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-LanguageFeatures-Speech-fr-fr-Package~31bf3856ad364e35~amd64~~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-LanguageFeatures-TextToSpeech-fr-fr-Package~31bf3856ad364e35~amd64~~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-NetFx3-OnDemand-Package~31bf3856ad364e35~amd64~fr-fr~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-InternetExplorer-Optional-Package~31bf3856ad364e35~amd64~fr-FR~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-MSPaint-FoD-Package~31bf3856ad364e35~amd64~fr-FR~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-Notepad-FoD-Package~31bf3856ad364e35~amd64~fr-FR~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-PowerShell-ISE-FOD-Package~31bf3856ad364e35~amd64~fr-FR~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-Printing-WFS-FoD-Package~31bf3856ad364e35~amd64~fr-FR~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-StepsRecorder-Package~31bf3856ad364e35~amd64~fr-FR~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-WordPad-FoD-Package~31bf3856ad364e35~amd64~fr-FR~.cab
$LanguageList = Get-WinUserLanguageList
$LanguageList.Add("fr-fr")
Set-WinUserLanguageList $LanguageList -force

##Chinese(PRC)##
Add-AppProvisionedPackage -Online -PackagePath $LIPContent\zh-cn\LanguageExperiencePack.zh-cn.Neutral.appx -LicensePath $LIPContent\zh-cn\License.xml
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-Client-Language-Pack_x64_zh-cn.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-LanguageFeatures-Basic-zh-cn-Package~31bf3856ad364e35~amd64~~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-LanguageFeatures-Fonts-Hans-Package~31bf3856ad364e35~amd64~~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-LanguageFeatures-Handwriting-zh-cn-Package~31bf3856ad364e35~amd64~~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-LanguageFeatures-OCR-zh-cn-Package~31bf3856ad364e35~amd64~~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-LanguageFeatures-Speech-zh-cn-Package~31bf3856ad364e35~amd64~~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-LanguageFeatures-TextToSpeech-zh-cn-Package~31bf3856ad364e35~amd64~~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-NetFx3-OnDemand-Package~31bf3856ad364e35~amd64~zh-cn~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-InternetExplorer-Optional-Package~31bf3856ad364e35~amd64~zh-cn~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-MSPaint-FoD-Package~31bf3856ad364e35~amd64~zh-cn~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-Notepad-FoD-Package~31bf3856ad364e35~amd64~zh-cn~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-PowerShell-ISE-FOD-Package~31bf3856ad364e35~amd64~zh-cn~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-Printing-WFS-FoD-Package~31bf3856ad364e35~amd64~zh-cn~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-StepsRecorder-Package~31bf3856ad364e35~amd64~zh-cn~.cab
Add-WindowsPackage -Online -PackagePath $LIPContent\Microsoft-Windows-WordPad-FoD-Package~31bf3856ad364e35~amd64~zh-cn~.cab
$LanguageList = Get-WinUserLanguageList
$LanguageList.Add("zh-cn")
Set-WinUserLanguageList $LanguageList -force

Скрипт может занять какое-то время, в зависимости от числа языков, которые необходимо установить.

После завершения работы скрипта убедитесь, что языковые пакеты установлены правильно, перейдя: Пуск>Параметры>Время и язык>Язык. Если языковые файлы находятся там, это значит все они настроены.

После добавления дополнительных языков в образ Windows также необходимо обновить Inbox Apps, для поддержки добавленных языков. Это можно сделать, обновив предварительно установленные приложения с содержимым из ISO пакета Inbox Apps. Чтобы выполнить это обновление в среде, в которой виртуальная машина не имеет доступа к Интернету, можно использовать следующий шаблон скрипта PowerShell для автоматизации процесса и обновления только установленных версий Inbox Apps.

#########################################
## Update Inbox Apps for Multi Language##
#########################################
##Set Inbox App Package Content Stores##
[string] $AppsContent = "F:\"

##Update installed Inbox Store Apps##
foreach ($App in (Get-AppxProvisionedPackage -Online)) {
	$AppPath = $AppsContent + $App.DisplayName + '_' + $App.PublisherId
	Write-Host "Handling $AppPath"
	$licFile = Get-Item $AppPath*.xml
	if ($licFile.Count) {
		$lic = $true
		$licFilePath = $licFile.FullName
	} else {
		$lic = $false
	}
	$appxFile = Get-Item $AppPath*.appx*
	if ($appxFile.Count) {
		$appxFilePath = $appxFile.FullName
		if ($lic) {
			Add-AppxProvisionedPackage -Online -PackagePath $appxFilePath -LicensePath $licFilePath 
		} else {
			Add-AppxProvisionedPackage -Online -PackagePath $appxFilePath -skiplicense
		}
	}
}

Важно!

Приложения, входящие в состав ISO пакета Inbox Apps не являются последними версиями предварительно установленных приложений Windows. Чтобы получить последнюю версию всех приложений, необходимо обновить приложения с помощью Windows Store App и, после установки дополнительных языков, выполнить поиск обновлений вручную.

Когда все будет готово, не забудьте отключить общую папку.

Завершение настройки пользовательского образа

После установки языковых пакетов можно установить любое другое программное обеспечение, которое нужно добавить в пользовательский образ.

После завершения настройки пользовательского образа необходимо запустить средство подготовки системы (Sysprep).

Чтобы запустить Sysprep:

  1. Откройте командную строку с повышенными привилегиями и, чтобы распространить образ, выполните следующую команду:

    C:\Windows\System32\Sysprep\sysprep.exe /oobe /generalize /shutdown
    
  2. Остановите виртуальную машину, а затем запишите ее в управляемый образ, следуя инструкциям в статье Создание управляемого образа распространяемой виртуальной машины в Azure.

  3. Теперь вы можете использовать настроенный образ для развертывания пула узлов Виртуальных рабочих столов Azure. Сведения о развертывании пула узлов см. в разделе Учебник: Создание пула узлов с помощью портала Azure.

Включение языков в "Параметры" Windows

Наконец, после развертывания пула узлов необходимо добавить язык в список языков каждого пользователя, чтобы он мог выбрать предпочитаемый язык в меню "Параметры".

Чтобы пользователи могли выбрать установленные языки, войдите в систему от имени пользователя, а затем выполните следующий командлет PowerShell на добавление установленных языковых пакетов в меню "Языки". Этот скрипт также можно установить как автоматизированную задачу или как скрипт входа, который активируется при входе пользователя в сеанс.

$LanguageList = Get-WinUserLanguageList
$LanguageList.Add("es-es")
$LanguageList.Add("fr-fr")
$LanguageList.Add("zh-cn")
Set-WinUserLanguageList $LanguageList -force

После того как пользователь изменит параметры языка, ему потребуется выйти из сеанса Виртуального рабочего стола Azure и снова войти, чтобы изменения вступили в силу.

Следующие шаги

Если вы хотите узнать об известных проблемах, связанных с языковыми пакетами, см. статью Добавление языковых пакетов в Windows 10, версия 1803 и более поздние версии: известные проблемы.

Если у вас есть вопросы о Windows 10 Enterprise multi-session, читайте раздел Часто задаваемые вопросы.