共用方式為


將語言套件新增至 Windows 10 多工作階段映像

Azure 虛擬桌面是一項使用者可以隨時隨地部署的服務。 這就是為什麼使用者能夠自訂其 Windows 10 企業版多工作階段映像所顯示的語言非常重要的原因。

您可以使用兩種方式來滿足使用者的語言需求:

  • 建立專用主機集區搭配每個語言的自訂映像。
  • 讓不同語言和當地語系化需求的使用者放置在相同主機集區中,但自訂使用者的映像可確保使用者可以選取所需的語言。

後者的方法更有效率且符合成本效益。 不過,您可以決定哪一種方法最符合您的需求。 本文將示範如何自訂映像的語言。

必要條件

您需要下列內容來自訂 Windows 10 企業版多工作階段映像,以新增多種語言:

注意

檔案共用 (存放庫) 必須可從您打算用來建立自訂映像的 Azure VM 存取。

隨需建立語言套件和功能的內容存放庫

若要建立語言套件和 FOD 的內容存放庫,以及 [收件匣應用程式] 套件的存放庫:

  1. 在 Azure VM 上,從 [先決條件] 的連結下載適用於 Windows 10 企業版多工作階段第 1903/1909 和 2004 版映像的 Windows 10 多語言 ISO、FOD 和收件匣應用程式。

  2. 在 VM 上開啟並掛接 ISO 檔案。

  3. 移至語言套件 ISO,並複製 LocalExperiencePacksx64\langpacks 資料夾中的內容,然後將內容貼到檔案共用。

  4. 移至 [FOD ISO 檔案]、複製其所有內容,然後將其貼到檔案共用。

  5. 移至 [收件匣應用程式 ISO] 上的 amd64fre 資料夾,然後複製您所備妥收件匣應用程式存放庫中的內容。

    注意

    如果您使用有限的儲存體,請僅複製使用者所需語言的檔案。 您可以透過查看其檔案名稱中的語言代碼來區分檔案。 例如,法文檔案的名稱中有「fr-FR」程式碼。 如需所有可用語言的語言代碼完整清單,請參閱適用於 Windows 的可用語言套件

    重要

    有些語言需要附屬套件中包含的額外字型,這些字型遵循不同的命名慣例。 例如,日文字型檔名包含「Jpan」。

    An example of the Japanese language packs with the

  6. 設定語言內容存放庫共用的權限,以便您在將用來建置自訂映像的 VM 中具有讀取權限。

手動建立自訂 Windows 10 企業版多工作階段映像

若要手動建立自訂 Windows 10 企業版多工作階段映像:

  1. 部署 Azure VM,然後移至 Azure 資源庫,並選取您所使用 Windows 10 企業版多工作階段的目前版本。

  2. 部署 VM 之後,請使用 RDP 做為本機系統管理員來連線到 VM。

  3. 請確定您的 VM 具有所有最新的 Windows Update。 視需要下載更新並重新啟動 VM。

    重要

    安裝語言套件後,您必須重新安裝映像上安裝的最新累積更新。 如果您未重新安裝最新累積更新,可能會發生錯誤。 如果已安裝最新累積更新,則 Windows Update 不會再次提供該更新;您必須手動重新安裝。 如需詳細資訊,請參閱語言概觀

  4. 連線至語言套件、FOD 和收件匣應用程式檔案共用存放庫,並將其掛接至字母磁碟機 (例如磁碟機 E)。

自動建立自訂 Windows 10 企業版多工作階段映像

如果您想要透過自動化流程安裝語言,您可以在 PowerShell 中設定指令碼。 您可以使用下列指令碼安裝適用於 Windows 10 企業版多工作階段 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 映像之後,收件匣應用程式也需要更新以支援新增的語言。 這可以透過使用收件匣應用程式 ISO 中的內容重新整理預先安裝應用程式來完成。 若要在 VM 無法存取網際網路的環境中執行此重新整理,您可以使用下列 PowerShell 指令碼範本來自動執行此流程,並僅更新已安裝的收件匣應用程式版本。

#########################################
## 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 中包含的收件匣應用程式不是預先安裝 Windows 應用程式的最新版本。 若要取得所有應用程式的最新版本,您需要使用 Windows 市集應用程式更新應用程式,並在安裝其他語言後執行手動搜尋更新。

完成後,請務必中斷共用連線。

完成自訂映像

安裝語言套件之後,您可以安裝您要新增至自訂映像的任何其他軟體。

完成自訂映像之後,您必須執行系統準備工具 (Sysprep)。

若要執行 sysprep:

  1. 開啟提高權限的命令提示字元,並執行下列命令將映像一般化:

    C:\Windows\System32\Sysprep\sysprep.exe /oobe /generalize /shutdown
    
  2. 請停止 VM,然後遵循在 Azure 中建立一般化 VM 的受控映像一文中的指示,將 VM 擷取在受控映像中。

  3. 您現在可以使用自訂映像來部署 Azure 虛擬桌面主機集區。 若要了解如何部署主機集區,請參閱教學課程:透過 Azure 入口網站建立主機集區

啟用 Windows 設定應用程式中的語言

最後,在您部署主機集區之後,必須將語言新增至每個使用者的語言清單,讓他們可以在 [設定] 功能表中選取其慣用的語言。

若要確保您的使用者可以選取您所安裝的語言,請以使用者身分登入,然後執行下列 PowerShell Cmdlet,將已安裝的語言套件新增至 [語言] 功能表。 您也可以將此指令碼設定為自動化工作或登入指令碼 (當使用者登入其工作階段時啟動)。

$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 企業版多工作階段的問題,請參閱我們的常見問題