將語言新增至 Windows 11 企業版映像
請務必確定組織中來自世界各地的使用者都可以使用您的 Azure 虛擬桌面部署。 這就是您可以自訂虛擬機器所使用的 Windows 11 企業版映像以擁有不同語言套件的原因。 從 Windows 11 開始,非系統管理員使用者帳戶現在可以同時新增顯示語言及其對應的語言功能。 此功能意謂著您不需要針對個人主機集區中的使用者預先安裝語言套件。 若是集區式主機集區,我們仍建議將您計劃加入的語言新增至自訂映像。 本文中的指示同時適用於 Windows 11 企業版的單一工作階段和多重工作階段版本。
如果您的組織包含多個不同語言的使用者時,您有兩個選項:
- 針對每個語言建立一個使用自訂映像的專用主機集區。
- 將不同語言的多個使用者放在同一主機集區中。
就資源和成本而言,第二個選項更有效率,但需要一些額外的步驟。 幸運的是,本文會逐步引導您建立映像以容納所有語言的使用者以及當地語系化需求。
必要條件
您必須先備妥下列項目,才能將語言新增至 Windows 11 企業版 VM:
- 已安裝 Windows 11 企業版的 Azure VM
- 映像所使用作業系統版本的語言和選用功能 ISO 和收件匣應用程式 ISO。 您可以在此下載:
- Azure 檔案儲存體共用或 Windows 檔案伺服器上的檔案共用
注意
必須可以從您要用來建立自訂映像的 Azure VM 存取檔案共用存放庫。
隨需建立語言套件和功能的內容存放庫
若要建立內容存放庫以用來將語言和功能新增至 VM:
在 Azure 中開啟您想要新增語言的 VM。
在 VM 上開啟並掛接您在上述先決條件一節中下載的 ISO 檔案。
在檔案共用上建立資料夾。
在 ISO 的 LanguagesAndOptionalFeatures 資料夾,將所有內容複製到您建立的資料夾。
注意
如果您使用的儲存體有限,您可以使用掛接的「語言和選用功能」ISO 作為存放庫。 若要了解如何建立存放庫,請參閱建立自訂 FOD 和語言套件存放庫。
重要
有些語言需要附屬套件中包含的額外字型,這些字型遵循不同的命名慣例。 例如,日文字型檔名包含 "Jpan"。
設定語言內容存放庫共用的權限,以便您在將用來建置自訂映像的 VM 中具有讀取權限。
手動建立自訂的 Windows 11 企業版映像
您可以遵循下列步驟建立自訂映像:
部署 Azure VM,然後移至 Azure 資源庫,選取您目前使用的 Windows 11 企業版版本。
部署 VM 之後,請使用 RDP 做為本機系統管理員來連線到 VM。
連線至您在「視需要建立語言套件和功能的內容存放庫」一節中建立的檔案共用存放庫,將存放庫掛接至磁碟機代號 (例如磁碟機 E)。
從提高權限的 PowerShell 工作階段執行下列 PowerShell 指令碼,在 Windows 11 企業版上安裝語言套件和附屬套件:
######################################################## ## Add Languages to running Windows Image for Capture## ######################################################## ##Disable Language Pack Cleanup## Disable-ScheduledTask -TaskPath "\Microsoft\Windows\AppxDeploymentClient\" -TaskName "Pre-staged app cleanup" Disable-ScheduledTask -TaskPath "\Microsoft\Windows\MUI\" -TaskName "LPRemove" Disable-ScheduledTask -TaskPath "\Microsoft\Windows\LanguageComponentsInstaller" -TaskName "Uninstallation" reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Control Panel\International" /v "BlockCleanupOfUnusedPreinstalledLangPacks" /t REG_DWORD /d 1 /f ##Set Language Pack Content Stores## $LIPContent = "E:" ##Set Path of CSV File## $CSVFile = "Windows-10-1809-FOD-to-LP-Mapping-Table.csv" $filePath = (Get-Location).Path + "\$CSVFile" ##Import Necesarry CSV File## $FODList = Import-Csv -Path $filePath -Delimiter ";" ##Set Language (Target)## $targetLanguage = "es-es" $sourceLanguage = (($FODList | Where-Object {$_.'Target Lang' -eq $targetLanguage}) | Where-Object {$_.'Source Lang' -ne $targetLanguage} | Select-Object -Property 'Source Lang' -Unique).'Source Lang' if(!($sourceLanguage)){ $sourceLanguage = $targetLanguage } $langGroup = (($FODList | Where-Object {$_.'Target Lang' -eq $targetLanguage}) | Where-Object {$_.'Lang Group:' -ne ""} | Select-Object -Property 'Lang Group:' -Unique).'Lang Group:' ##List of additional features to be installed## $additionalFODList = @( "$LIPContent\Microsoft-Windows-NetFx3-OnDemand-Package~31bf3856ad364e35~amd64~~.cab", "$LIPContent\Microsoft-Windows-MSPaint-FoD-Package~31bf3856ad364e35~amd64~$sourceLanguage~.cab", "$LIPContent\Microsoft-Windows-SnippingTool-FoD-Package~31bf3856ad364e35~amd64~$sourceLanguage~.cab", "$LIPContent\Microsoft-Windows-Lip-Language_x64_$sourceLanguage.cab" ##only if applicable## ) $additionalCapabilityList = @( "Language.Basic~~~$sourceLanguage~0.0.1.0", "Language.Handwriting~~~$sourceLanguage~0.0.1.0", "Language.OCR~~~$sourceLanguage~0.0.1.0", "Language.Speech~~~$sourceLanguage~0.0.1.0", "Language.TextToSpeech~~~$sourceLanguage~0.0.1.0" ) ##Install all FODs or fonts from the CSV file### Dism /Online /Add-Package /PackagePath:$LIPContent\Microsoft-Windows-Client-Language-Pack_x64_$sourceLanguage.cab Dism /Online /Add-Package /PackagePath:$LIPContent\Microsoft-Windows-Lip-Language-Pack_x64_$sourceLanguage.cab foreach($capability in $additionalCapabilityList){ Dism /Online /Add-Capability /CapabilityName:$capability /Source:$LIPContent } foreach($feature in $additionalFODList){ Dism /Online /Add-Package /PackagePath:$feature } if($langGroup){ Dism /Online /Add-Capability /CapabilityName:Language.Fonts.$langGroup~~~und-$langGroup~0.0.1.0 } ##Add installed language to language list## $LanguageList = Get-WinUserLanguageList $LanguageList.Add("$targetlanguage") Set-WinUserLanguageList $LanguageList -force
注意
此範例指令碼使用西班牙文 (es-es) 語言代碼。 若要針對不同的語言自動安裝適當的檔案,請將 $targetLanguage 參數變更為正確的語言代碼。 如需語言代碼清單,請參閱 Windows 的可用語言套件。
視您需要安裝的語言數目而定,指令碼可能需要一些時間才能完成。 您也可以在初始安裝之後再安裝其他語言,方法是再次執行指令碼搭配不同的 $targetLanguage 參數。
若要自動選取適當的安裝檔案,請下載 [可用的 Windows 10 1809 語言和功能隨選安裝資料表] 並儲存為 CSV 檔案,然後將檔案儲存在與 PowerShell 指令碼相同的資料夾中。
指令碼執行完成之後,請移至 [開始]>[設定]>[時間與語言]>[語言],檢查以確定已正確安裝語言套件。 如果該處有語言檔案,則表示您已就緒。
最後,如果 VM 在安裝語言時連線至網際網路,您必須執行清除程序,移除任何不必要的語言體驗套件。 若要清除檔案,請執行下列命令:
##Cleanup to prepare sysprep## Remove-AppxPackage -Package Microsoft.LanguageExperiencePackes-ES_22000.8.13.0_neutral__8wekyb3d8bbwe Remove-AppxPackage -Package Microsoft.OneDriveSync_22000.8.13.0_neutral__8wekyb3d8bbwe
若要清除不同的語言套件,請將「es-ES」取代為不同的語言代碼。
清除完畢之後,請中斷共用的連線。
完成自訂映像
安裝語言套件之後,您可以安裝您要新增至自訂映像的任何其他軟體。
完成自訂映像之後,您必須執行系統準備工具 (Sysprep)。
若要執行 sysprep:
開啟提高權限的命令提示字元,並執行下列命令將映像一般化:
C:\Windows\System32\Sysprep\sysprep.exe /oobe /generalize /shutdown
如果您遇到任何問題,請檢查位於磁碟機 C 的 [Windows]>[System32]>[Sysprep]>[Panther] 中的 SetupErr.log 檔案。 之後,請遵循 Microsoft Store 應用程式發生 Sysprep 失敗一文中的指示,針對您的設定進行疑難排解。
如果設定成功,請停止 VM,然後遵循在 Azure 中建立一般化 VM 的受控映像一文中的指示,將 VM 擷取在受控映像中。
您現在可以使用自訂映像來部署 Azure 虛擬桌面主機集區。 若要了解如何部署主機集區,請參閱教學課程:透過 Azure 入口網站建立主機集區。
注意
當使用者變更其顯示語言時,必須先登出其 Azure 虛擬桌面工作階段,然後再返回重新登入。 使用者必須從 [開始] 功能表登出。
下一步
在將語言套件新增至 Windows 10 多重工作階段映像一文中,了解如何針對 Windows 10 多重工作階段 VM 安裝語言套件。
如需已知問題清單,請參閱在 Windows 10 中新增語言:已知問題。