How to Upgrade Windows Clients with Multiple Languages installed to Windows 10
Published Apr 05 2019 12:25 PM 49.3K Views

First Published to TechNet on May 24. 2017

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


1.png

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)

  1. 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:


2.png
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)


3.png


After a reboot of the device we can verify our change.


4.png


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.
This is essential for a succesful upgrade with System Center Configuration Manager.

 

5.png

 

  1. 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-co...
    answers this question [/InstallLangPacks<location>]
  2. 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:\Windows\CCM\Logs directory matching the Scripts name.

Download Task Sequence export: OSD_MUI_UpgradeWindows10MUI.zip
Download OS Deployment Scripts: OSD_MUI_OSDScriptsMUI.zip (updated 2017-08-10)

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.

 

6.png


Following Steps with conditions have been added:

Run PowerShell Script: Detect MUI Settings


7.png
Command OSDDetectInstalledLP.ps1 with Execution policy Bypass
Condition:
There is no condition set

 


 

Group: Change System UILanguage


8.png

Condition:
Task Sequence Variable CurrentOSLanguage not equals en-US

 

9.png

 


Run Command Line: Supress User Logon after Reboot


10.png

Command line: powershell.exe -command "Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\smstsmgr -Name Start -Value 4 -Type DWord -Force; Set-ItemProperty -Path HKLM:\SYSTEM\Setup -Name SetupType -Value 2 -Type DWord -Force; Set-ItemProperty -Path HKLM:\SYSTEM\Setup -Name CmdLine -Value 'system32\osdsetuphook.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


11.png

Condition:
There is no condition set


 

Group: Apply en-US Language Pack


12.png


Condition:
Task Sequence Variable MUIdetected not exists

 

13.png

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)


14.png

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

 

15.png

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

 

16.png

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%


17.png

Command line: dism /image:%_OSDDetectedWinDrive% /set-uilang:en-us
Condition: There is no condition s...

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%

 

18.png
Command Line: cmd.exe /c copy %SystemDrive%\SMS\Bin\x64\osdsetuphook.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


19.png

Condition:
There is no condition set


 

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

 

20.png

Command Line: powershell.exe -command "Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\smstsmgr -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


21.png


Condition:
Task Sequence Variable MUIdetected exists

 

22.png


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

 

23.png

Condition: Task Sequence Variable de-DE exists

 

24.png


Set Task Sequence Variable: Include Language Packs for Upgrade

 

25.png
Set Task Sequence Variable: OSDSetupAdditionalUpgradeOptions
Value: /InstallLangPacks c:\LanguagePacks

Condition: If folder C:\LanguagePacks exists

 

26.png


Upgrade Operating System: Upgrade Operating System Enterprise

 

27.png

Condition: Task Sequence Variable OSSKU not equals PROFESSIONAL

 

28.png

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


29.png

Command OSDRegionalSettings.ps1 with Execution policy Bypass

Condition: Task Sequence Variable CurrentOSLanguage not equals en-US

 

30.png


Run Command Line: Remove c:\LanguagePacks


31.png

Command line: cmd.exe /c rd c:\LanguagePacks /s /q

Condition: If folder C:\LanguagePacks exists

 

32.png

 

Wilhelm J. Kocher
Senior PFE - EMEA

This post is provided "AS IS" with no warranties, and confers no rights. The solution is not officially supported. Any support provided by Microsoft regarding this solution may be limited. Microsoft does not guarantee the solution will work in all environments and/or scenarios.

13 Comments
Copper Contributor

Hi myself and a colleague have followed this and when running on a Windows 7 client which is currently no-NO language the step that reboots to Windows PE and sets the uilang to en-us and then reboots back into the full OS. After the reboot the OS just hangs configuring, if we disable the set-uilang to en-us the task sequence continues as normal. So there seems to be a problem when doing the offline set-uilang to en-us. Any ideas on where we can go from here?

Hi, 

 

Did you check if the English Language pack is available on your Windows 7 device? I added a dummy step to download ist, but of course will not have the file contents of the lp.cab file attached to it. Another thing to mention is that this task Sequence is designed to work from wired network connection. If you initiate it via WLAN the download of the language pack will not work. In this case just change the sequence to download the lp.cab in full OS and change the step to apply it using your temp download directory.

 

Hope this helps!

Will 

Copper Contributor

Hi @Wilhelm_J_Kocher 

First of all many thanks for this.  It's proving to be a must in my environment where I have clients all over the world and different installed OS.

 

I'm currently doing a Win 7 to Win 10 with language conversions.  It's working great so far, it's half way past the TS, but there is this weird issue where the TS is stuck or running a disabled step.  See the following screenshot.  So if I have several disabled or conditioned steps, it gets stuck on it for a good 3-5 minutes.  And if you have loads of those steps, this can accumulate to hours.  Is there any way around this? (except deleting the steps) But some of the steps have conditions, for example the languages, FODs.

 

ArshadJugon07_0-1589207280857.png

 

Many thanks @Wilhelm_J_Kocher 

Hi @ArshadJugon07,

disabled steps should not run in any case, so there is no need of deleting them. Additionally this step should only be applicable (if enabled) to systems where you have a Spanish language pack on the old Windows OS version. The template in my article is really old and you can imagine that I made several improvements and updates to this Task Sequence.
A tip from my field experience: add a version number to your Task Sequence to see if the client did pick up the latest release. From you screenshot I assume you are testing on a virtual machine which you revert back to the initial state. Ensure to run a machine policy update before restarting the ts as it might have your old version cached in your snapshot.

I hope this helps,

Will

Copper Contributor

@Wilhelm_J_Kocher Could you share the new Task Sequence pretty please?

 

I found out why it was stuck on the disabled steps, it was because it couldn't contact my MP.  Any ideas what would have caused this? All my previous Win7toWin10 IPU TS works fine (en-US to en-US). 

 

Also the TS failed. The error is 'Failed to put client into provisioning mode before requesting the reboot'.

 

I'm guessing it's because of the step 'Re-enable Task Sequence Service after reboot' that you have in your sample.  I have disabled that, and running it again.

 

ArshadJugon07_0-1589214687751.png

ArshadJugon07_1-1589214713764.png

 

 

Copper Contributor

@Wilhelm_J_Kocher Also, Windows 7 Professional doesn't support installation of MUI.  So I'm stuck.

Copper Contributor

Hi @Wilhelm_J_Kocher 

 

Please see the following screenshot.  There is no LAN connection at that point.  Any ideas why?

ArshadJugon07_0-1589297034707.png

 

Copper Contributor

I've got a question regarding how you detect when to apply a different OS language.

 

As a condition on the task sequence step, you use "CurrentOSLanguage -ne en-US". In the script, that task sequence variable comes from the cmdlet "(Get-UICulture).Name".

 

But, as far as I can see, that above cmdlet does not get the installed default UI language, i.e. what sabotages you being able to use English patch files. It instead returns the language the logon GUI is set in. If you want to get the installed default UI language, you have to use "([CultureInfo]::InstalledUICulture).Name"

 

Is there a reason you pick the language like this?

Copper Contributor

Hi Wilhem

 

When the upgrade fails, it fails to revert back to the original language. Any ideas please?  This is deal breaker right now for me.  Many thanks

ui1.PNGui2.PNG

 

 

Copper Contributor

@Wilhelm_J_Kocher Could you share the new Task Sequence pretty please?

Agreed, would be great to see improvements.

 

When the upgrade fails, it fails to revert back to the original language. Any ideas please?  This is deal breaker right now for me.  Many thanks

@Arshad07 I am running into this issue as well, I noticed that the command line shows "dism /image:%_OSDDetectedWinDrive% /set-uilang:%OSDUILangiuage%" and %OSDUILangiuage% looks to have a spelling error, I think it should be %OSDUILanguage% instead. I still can't figure out why my upgrade is failing however. Works just fine when computer is already on en-US, but if it's another language it just fails on upgrade.

Copper Contributor

Hi All,

I've got a dark site (No internet) and need to upgrade 1809 to 1909 Ent, with 3 different languages.

When I try and download the TS or Scripts, I get this?

<Error>
<Code>ResourceNotFound</Code>
<Message>The specified resource does not exist. RequestId:076c0efd-a01e-0044-0f64-58e405000000 Time:2021-06-03T10:39:11.3267547Z</Message>
</Error>
Am registered and tried Edge and Chrome! Same result.
Any ideas?
Copper Contributor

Yeah it looks like the downloads broke, they don't work for me either. I don't have the task sequence zip file myself, but I uploaded the scripts here if you want https://exar.ch/files/OSDScripts.zip

Copper Contributor

Hi @Wilhelm_J_Kocher ,

 

I downloaded these task sequence in 2020 while I was working in a different company, I changed the company ,I forgot to the TS content to keep with me . I got the similar scenario ( in place upgrade Windows 10 --> Windows 11) , 

I recalled this article from my old notes , but now the reference contents are not downloading , could you pls help ? 

 

 

 

Download Task Sequence export: OSD_MUI_UpgradeWindows10MUI.zip
Download OS Deployment Scripts: OSD_MUI_OSDScriptsMUI.zip (updated 2017-08-10)

Version history
Last update:
‎Apr 05 2019 12:25 PM
Updated by: