Quantcast
Channel: TechNet Blogs
Viewing all articles
Browse latest Browse all 34890

How to Upgrade Windows Clients with Multiple Languages installed to Windows 10

$
0
0

 

Consider following scenario:
Your corporate Standard Desktop Client has Multiple Language Packs installed and you have planned to go with Windows 10.

If you want to skip the introduction you can jump to the automated solution section.

You have now the following challenges:

  1. Which Language Packs are Currently installed on the Device your Upgrade Task will run?
    This can be verified using following command line
    dism.exe /Online /Get-Intl
    image
    In this Sample we have a Windows 7 Installation with English and German Language Packs installed.
    The default OS Language is set to German (de-DE)
  2. Which Default OS UI Language is set on the device? This question is essential as Windows Setup will only provide all in place Upgrade options if the OS UI Language matches the Windows Setup Media Language used. Using an English (en-US) Windows 10 Setup Media on the sample device will provide us these options:
    image
    This can be solved using following method:
    Boot from your Windows 10 Setup Media
    At the first screen press and hold SHIFT + F10 key to open an command prompt
    run dism.exe /image:d: /set-uilang:en-us against your Windows Installation (d: would be the drive where your Windows 7 Installation is found in Windows PE, this can be another drive letter as well depending on your Disk Partitioning)
    image
    Restart your Device

    Let us verify our change
    image
    Default System UI Language is now English (en-US)

    Running Windows Setup again on the same device allows us finally to keep personal files and settings
    image

  3. How to include additional Language Packs during the Windows Setup Upgrade process?
    Windows 10 Setup Command Line parameters
    https://msdn.microsoft.com/en-us/windows/hardware/commercialize/manufacture/desktop/windows-setup-command-line-options
    answers this question [/InstallLangPacks<location>]
  4. How will it be possible to configure the default user Language Settings and keep the Devices UI Language on English (en-US) for future Servicing?
    Windows Vista Command Line Configuration of International Settings https://msdn.microsoft.com/en-us/goglobal/bb964650(en-us).aspx has an answer for this one.

 

A lot of manual tasks which are not enterprise friendly. That is why I decided to provide some sample scripts and a Task Sequence Template to help our Enterprise customers archiving this goal.

Automated solution

There are two PowerShell Scripts needed plus some Condition based Task Sequence Steps to get this done.

The first script in use is OSDDetectInstalledLP.ps1 will enumerate all Languages installed and which UI Language the OS has currently.
Following variables will be Set via this Script:

  • CurrentOSLanguage – the Value will be set to the Language found. For example de-DE (German)
  • MUIdetected – the Value will be True if at least 1 additional Language is found.
  • OSDDefaultUILanguage – the Value will be set to the Language found. This will only apply if OSDRegionalSettings.ps1 script did run on this device.
  • plus Variables matching the Languages found with a Value of True. For example de-DE (German)

The second script in use OSDRegionalSettings.ps1 will configure the Regional Settings.
Following variable can be set for this Script:

  • OSDUILanguage – will set the UI Language matching the provided Value for Example de-DE (German). If Variable CurrentOSLanguage or OSDDefaultUILanguage is found it will use its Value. This is the only mandatory Variable for this script.
  • OSDUserLocale – will set UserLocale matching the provided Value for Example de-AT (Austria). Userlocale specifies the per-user settings that are used for formatting dates, times, currency, and numbers in a Windows installation.
  • OSDSystemLocale – will set SystemLocale matching the provided Value for Example de-AT (Austria). SystemLocale specifies the default language to use for non-Unicode programs.
  • OSDInputLocale – will set InputLocale matching the provided Value for Example 0c07:00000407 for German (Austria) http://go.microsoft.com/fwlink/?LinkId=206622 
  • OSDGeoID – allows to configure the Geographical Location for example 14 for Austria.
    A list of valid Geographical Location values can be found here https://msdn.microsoft.com/en-us/library/windows/desktop/dd374073(v=vs.85).aspx

Note each script will write a Log file which will be located in C:WindowsCCMLogs directory matching the Scripts name.

Download Task Sequence export: OSD_MUI_UpgradeWindows10MUI.zip
Download OS Deployment Scripts: OSD_MUI_OSDScriptsMUI.zip

The Task Sequence is based on the default Template “Upgrade an Operating System from an Upgrade Package” and has been created in a System Center Configuration Manager Current Branch 1702 environment.

01_Detect_Mui


Following Steps with conditions have been added:

Run PowerShell Script: Detect MUI Settings
image
Command OSDDetectInstalledLP.ps1 with Execution policy Bypass

Condition:
There is no condition set



Group: Change System UILanguage

image

Condition:
Task Sequence Variable CurrentOSLanguage not equals en-US
image



Run Command Line: Supress User Logon after Reboot
OSD_MUI_Suppress
Command line: powershell.exe -command “Set-ItemProperty -Path HKLM:SYSTEMCurrentControlSetServicessmstsmgr -Name Start -Value 4 -Type DWord -Force; Set-ItemProperty -Path HKLM:SYSTEMSetup -Name SetupType -Value 2 -Type DWord -Force; Set-ItemProperty -Path HKLM:SYSTEMSetup -Name CmdLine -Value ‘system32osdsetuphook.exe /execute’ -Type String -Force”

Condition: There is no condition set

Note: This is step 1 of 3 steps which will suppress the Logon Screen to the end user as long as this Task Sequence is running. In case you detect issues, disable this step before you raise a support case.


Restart Computer: Restart Computer into Windows PE
image

Condition:
There is no condition set

Group: Apply en-US Language Pack

OSD_MUI_ApplyENUSGroup

Condition:
Task Sequence Variable MUIdetected not exists
OSD_MUI_ApplyENUSGroupCondition

Note: The purpose of this group is to support native localized Windows installations which have no en-US language pack installed.


Run Command Line: Appy Language Pack W7.0 x64 (en-us)
OSD_MUI_AppyLanguagePackW7x64
Command line: dism.exe /image:%_OSDDetectedWinDrive% /ScratchDir:%_OSDDetectedWinDir%Temp /Add-Package /PackagePath:.

Condition: If all conditions are met
OSArchitecture equals 64-bit
OSVersion
equals 6.1.7601

OSD_MUI_AppyLanguagePackW7x64_Condition

Note: This step requires that your Language Pack (*.cab) files are located in the root of the Package source folder.
Steps for Windows 8.1 and Windows 10 are similar, except the OSVersion 6.3.9600 for Windows 8.1 and 10.0.10586 for Windows 10 build 1511


Set Task Sequence Variable: Set Task Sequence Variable MUIdetected
OSD_MUI_Set_Task_Sequence_Variable_MUIdetected

Condition: There is no condition set

Note: This is required for a step Download additional Language Packs, otherwise your device will be en-US at the end.



Run Command Line: Set UILang en-US on %_OSDDetectedWinDrive%
OSD_MUI_Set_UILang_en-US_on_OSDDetectedWinDrive
Command line: dism /image:%_OSDDetectedWinDrive% /set-uilang:en-us
Condition: There is no condition set

Note: This will change the Windows UILanguage of the current installed OS, as described in the beginning of this article.


Run Command Line: Copy OSDSetupHook to %_OSDDetectedWinDir%

OSD_MUI_Copy_OSDSetupHook_to_OSDDetectedWinDir
Command Line: cmd.exe /c copy %SystemDrive%SMSBinx64osdsetuphook.exe %_OSDDetectedWinDir%system32

Note: This is step 2 of 3 steps which will suppress the Logon Screen to the end user as long as this Task Sequence is running. In case you detect issues, disable this step before you raise a support case.


Restart Computer: Restart Computer back to Full OS
image

Condition:
There is no condition set


Run Command Line: Re-Enable Task Sequence Service after Reboot

OSD_MUI_Re-Enable_Task_Sequence_Service_after_Reboot

Command Line: powershell.exe -command “Set-ItemProperty -Path HKLM:SYSTEMCurrentControlSetServicessmstsmgr -Name Start -Value 3 -Type DWord -Force”

Note: This is step 3 of 3 steps which will suppress the Logon Screen to the end user as long as this Task Sequence is running. In case you detect issues, disable this step before you raise a support case.


Group: Download additional Language Packs
image

Condition:
Task Sequence Variable MUIdetected exists
image


Download Package Content: Download Language Pack de-DE to c:LanguagePacks

image

Condition: Task Sequence Variable de-DE exists
image


Set Task Sequence Variable: Include Language Packs for Upgrade

image
Set Task Sequence Variable: OSDSetupAdditionalUpgradeOptions
Value: /InstallLangPacks c:LanguagePacks

Condition: If folder C:LanguagePacks exists
image


Upgrade Operating System: Upgrade Operating System Enterprise

OSD_MUI_Upgrade_Operating_System_Enterprise

Condition: Task Sequence Variable OSSKU not equals PROFESSIONAL

OSD_MUI_Upgrade_Operating_System_Enterprise_Condition

Note: This Task Sequence sample allows to distinguish between Professional and Enterprise Edition upgrades. It is very important for an upgrade from Professinal to Professional to provide a KMS or MAK Product Key. A lot of devices have OEM KEYS preinstalled within their Bios, which is detected from Windows Setup during the Upgrade and would cause the process to stop right after Upgrade Operating System step. A OEM KEY prevents Windows to execute the SetupComplete.cmd script which is essential in this process to re-enable the Configuration Manager client agent.


Run PowerShell Script: Set UILangage back for Logon Screen Language
image
Command OSDRegionalSettings.ps1 with Execution policy Bypass

Condition: Task Sequence Variable CurrentOSLanguage not equals en-US

image


Run Command Line: Remove c:LanguagePacks
image
Command line: cmd.exe /c rd c:LanguagePacks /s /q

Condition: If folder C:LanguagePacks exists
image


Viewing all articles
Browse latest Browse all 34890

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>