Jump to content




anyweb

How can I install Windows 10 language packs offline with an MDT Integrated Task Sequence in System Center Configuration Manager (Current Branch)



Recommended Posts

Introduction

 

At the start of this series of step by step guides you installed System Center Configuration Manager (Current Branch), then you configured discovery methods. Next you configured boundaries to get an understanding of how automatic site assignment and content location works. After that you learned how to update ConfigMgr with new features and fixes using a new ability called Updates and Servicing and you learned how to configure ConfigMgr to use Updates and Servicing in one of these two modes:

To prepare your environment for Windows 10 servicing (this guide) you learned how to setup Software Updates using an automated method (via a PowerShell script) or manually using the ConfigMgr console. Next you used a PowerShell script to prepare some device collections, then you configured client settings for your enterprise and finally you'll deployed the ConfigMgr client agent using the software updates method which is the least intensive method of deploying the Configuration Manager client agent.

 

As System Center Configuration Manager (current branch) is being delivered as a service now, version 1602 was made available (March 11th, 2016) and you used Updates and Servicing to do an in-place upgrade to that version as explained here. Next you learned about how to use the Upgrade task sequence to upgrade your Windows 7, Windows 8 (and 8.1) and even your Windows 10 devices to a later build of Windows 10.

 

You then learned about the new Windows 10 servicing features which use Servicing Plans in ConfigMgr (Current Branch). Next you integrated MDT 2013 update 2. MDT integration with ConfigMgr is useful as it provides additional functionality for operating system deployment scenarios such as Offline Language Package installation or User Driven Integration (UDI).

 

In this guide you'll learn how to deploy Language Packs offline for Windows 10.

 

Step 1. Get the language packs

Each release of Windows 10 comes with it's respective language packs, so a language pack released for Windows 10 x64 version 1507 (RTM) will not work with Windows 10 x64 version 1511 and vice versa. Therefore you should only download language packs that match the version of Windows 10 that you are deploying. In this guide, I use Windows 10 x64 version 1511, however I've verified all the steps here work fine with Windows 10 version 1607 as long as you use the correct language pack for the operating system.

 

If you are using Windows 10 version 1607 use the following ISO:

 

Windows 10 Language Pack, Version 1607 (Updated Jul 2016) (x86 and x64) - DVD (Multiple Languages)

 

File Name: mu_windows_10_language_pack_version_1607_updated_jul_2016_x86_x64_dvd_9058649.iso

 

If you are using Windows 10 version 1511 (as used in this guide) use the following ISO:

 

Windows 10 Language Pack, Version 1511 (x86 and x64) - DVD (Multiple Languages)

 

File Name: mu_windows_10_language_pack_version_1511_x86_x64_dvd_7224763.iso.

 

download language packs.png

 

Once downloaded, go ahead and mount the iso in Windows File Explorer. When you mount the iso you'll see two folders

  • x64
  • x86

As you are deploying Windows 10 x64, browse the x64 folder and navigate to x64\languages. For Windows 10 version 1511, there are 111 language packs.

 

111 language packs.png

 

Step 2. Create individual Language Pack packages

From the 111 language packs shown above, select one language pack (for example Swedish or sv-SE) and copy it to it's own folder like so:

 

swedish language pack copied.png

 

Now that you've copied the language pack files, create a package within ConfigMgr as follows:

 

In the ConfigMgr console select Software Library, then Applications, right click on Packages and choose Create Package.

 

create package.png

 

Fill in details about the actual package and include information about the operating system name and version, point the package source folder to the UNC path of the folder you created for that language pack

 

swedish language pack details.png

 

Choose Do not create a program

 

do not create a program.png

 

and continue through to the end of the wizard

 

package created.png

 

Note:- If you add multiple language packs in the same package then they will be deployed together. If you want to deploy different combinations of language packs, create multiple packages containing one language pack each.

 

Repeat the above process for each language you intend to add support for in your environment, making sure that the folder containing the language pack is itself contained in a folder eg:

Swedish\sv-se

Note: If you are using Windows 10 version 1607, the language pack files are named differently, previously they were simply named lp.cab. Below you can see examples of the difference between the Windows 10 version 1511 Danish Language Pack and the Windows 10 version 1607 Danish Language Pack.

 

Windows 10 versions 1507 and 1511

 

In Windows 10 versions 1507 and 1511 the language pack file is called lp.cab

 

Danish 1511.png

 

Windows 10 version 1607

 

In Windows 10 version 1607, it has a long name such as Microsoft-Windows-Client-Language-Pack_x64_da-dk.cab

 

Danish.png

 

Step 3. Distribute the language packs

In order to install the language packs they need to be on a distribution point, so in the ConfigMgr console, select all the language packs you created in Step 2 and right click, choose Distribute Content.

 

distribute content.png

 

The Distribute Content Wizard appears and lists all the language packages you selected, click next

 

distribute content wizard.png

 

select one or more distribution points by clicking on the Add drop down and select Distribution Points

 

add a distribution point.png

 

continue through that wizard until completion

 

content distributed.png

 

Step 4. Create an unattend.xml file

In this step you will create a custom unattend.xml file which will contain variables to help with installing the language packs. To do that use Windows System Image Manager (WSIM) which is part of the Windows ADK 10. You could simply use an already made unattend.xml file and paste in the variables section shown below if you prefer.

 

windows system image manager.png

 

when WSIM starts you'll see the interface

 

wsim.png

 

Click on File and select New Answer File, you'll be prompted to open a Windows Operating system image file.

 

open a windows image now.png

 

click on Yes and browse to the sources folder containing install.wim of the same version of Windows 10 that you downloaded language packs for, in this guide that's Windows 10 x64 version 1511

 

select a windows image.png

 

If it's the first time you've used WSIM on this image, you'll be prompted about creating a Windows catalog file, answer yes

 

create catalogue.png

 

this process will take a few minutes, but once it is done you'll see the following

 

wsim populated.png

 

Expand the Components node in the Windows image pane in the lower left pane, scroll down until you see x64_Microsoft-Windows-International-Core_10.0.10586.0_neutral right click on it and choose Add setting to Pass 7 oobeSystem

 

add setting to pass 7 oobe system.png

 

Fill in the following variables in the corresponding settings fields in the Microsoft-Windows-International-Core Properties node

  • %OSDInputLocale%
  • %OSDSystemLocale%
  • %OSDUILanguage%
  • %OSDUILanguageFallback%
  • %OSDUserLocale%

variables added.png

 

To verify the changes, click on Tools, Validate Answer File and verify that there are no errors reported in the Messages pane. Finally save the Unattend.xml file by clicking on File, Save Answer File As and give it a suitable name such as unattend.xml. Close Windows System Image Manager.

 

Note: Open the Unattend.xml file using Notepad and verify that the line containing <cpi:offlineImage cpi:source="wim: does not contain any %20, if it does, remove them and save the file. See this post for more details.

 

unattend in notepad.png

 

Create a folder in your ConfigMgr sources path, and drop the unattend.xml file into it.

 

Step 5. Create a unattend.xml package and distribute it

In Software Library, Application Management, Packages, right click and choose Create Package, give the package a suitable name and point it to the folder that you copied the unattend.xml file into.

 

create unattend xml package.png

 

do not create a program

 

do not create a program.png

 

and continue through the wizard until completion.

 

unattend xml package complete.png

 

Right click the package and choose Distribute Content, and distribute it to your distribution points.

 

distribute content unattend.png

 

Step 6. Edit a task sequence

Edit a previously created MDT task sequence by right clicking it and choose Edit.

 

edit task sequence.png

 

Locate the Apply Operating System Image step and modify it so that it uses the unattend.xml file created above

 

apply operating system image.png

 

Create a New Group called Apply Language Packs offline in the PostInstall section after that Apply Windows Settings and Apply Network Settings Steps. This group must go before the Setup Windows and ConfigMgr steps otherwise the Install Language Pack offline steps will fail.

 

apply Language Packs offline.png

 

Create a new Set Dynamic Variables step called Set regional options using Dynamic Variables, click on Add Rule and choose Task Sequence Variable from the options

 

task sequence variable.png

 

Fill in the following values:

 

Variable: RegionValue

Condition: Equals

Value: Swedish

 

regionvalue equals swedish.png

 

Click OK then select Add Variable, and Custom Variable from the menu

 

custom variables.png

 

Fill in the following values:

 

Variable: OSDInputLocale

Value: sv-se

 

click OK then add another Custom Variable

 

Variable: OSDSystemLocale

Value: sv-se

 

click OK then add another Custom Variable

 

Variable: OSDUserLocale

Value: sv-se

 

swedish regionvalue.png

 

repeat the above process for each language pack you intend to support

 

regionvalue added.png

 

Create a new Set Task Sequence Variable step called Set OSDUILanguageFallback and fill in the following values:

 

Task Sequence Variable: OSDUILanguageFallback

Value: en-US

 

osdlanguagefallback.png

 

Create a New Group with the name of the Language pack you are offering to install

 

Swedish group.png

 

click on the Options tab of that group and add a task sequence variable LanguageValue = Swedish

 

languagevalue equals swedish.png

 

In that group, create a new Set Task Sequence Variable step called Set OSDUILanguage and fill in the following values:

 

Task Sequence Variable: OSDUILanguage

Value: sv-SE

 

install language packs offline.png

 

And next, add an MDT task sequence step called Install Language Packs Offline

 

and select the corresponding language package, Windows 10 x64 Language Pack - sv-se

 

swedish lp selected.png

 

Repeat the above process for each language that you intend to make available and Apply your changes when done.

 

lps added to task sequence.png

 

Step 7. Set variables on a collection

To decide what language packages get installed on a computer you only need to set two variables

  • RegionValue (for the keyboard layout)
  • LanguageValue (for the language pack)

You can set these variables on a computer, on a collection, via a HTA frontend (like this one) or whichever method suits you best, In this guide we'll set the variables via a collections properties. Create a device collection called OSD <language> and replace <language> with the name of the language pack you intend to install.

 

Right click on the newly created collection and choose Collection Variables, add the two values below

 

RegionValue=Swedish

LanguageValue=Swedish

 

collection variables.png

 

Modify the Membership Rules of the Collection Properties to add any computers that you want installed with that language pack and regional settings

 

Repeat this process and create a new Device Collection for each language you intend to support

 

osd collections.png

 

Step 8. Deploy the task sequence to the language specific collections

Deploy the task sequence with a purpose of Available, and available to media and PXE to each of the collections you create for Language Pack usage.

 

deploy the task sequence.png

 

Step 9. Review the changes

Start a new OSD deployment using the task sequence you just edited.

 

start ts.png

 

after the task sequence starts you can open smsts.log in CMTrace and see the variables are set

 

variables set in ts.png

 

the install language packs offline step is in progress (and revealed in the smsts.log file)

 

swedish language pack is installing.png

 

and after a while, all is done !

 

swedish windows.png

 

 

Troubleshooting

  • Use the log files, in particular ztipatches.log which documents what happens when the process uses DISM to inject the changes
  • Use at least 2 GB ram in your virtual machines otherwise the step will fail to install any language packs (may run out of ram).
  • If regional settings (keyboard layout) are not being applied, make sure you added the unattend.xml file to your Apply Operating System Image step

After the Install Language Pack Offline step the following will be created in C:\_SMSTaskSequence\

  • Packages<dir>
  • ZTIPatches.tmp
  • packageGroups.xml

in the Packages directory you’ll have more sub-directories based on how many language packs’s you included, one language pack, one dir, 4 language packs in your Language Package, 4 dirs...

You may also see a directory called C:\_SMSTaskSequence\SMSOSD\OSDLOGS and in there are three files including a log file called BDD_PKGMGR.LOG, analyze it if you are having issues deploying Language packs offline as it will reveal the success or failure of the DISM operations.

You can press F8 in WinPE and browse to the locations below and use notepad to examine the changes to the unattend.xml file.

Note: The unattend.xml file and/or C:\Windows\Panther\Unattend folder may not appear in your image until directly after the Apply Operating System Image step and the contents of that file depends on whether or not an unattend.xml file was specified in that step.

Before the Setup Windows and ConfigMgr step is complete you can monitor C:\Windows\Panther\Unattend\unattend.xml to see what is happening in relation to your modifications taking place or not

After the Setup Windows and ConfigMgr step is complete, you’ll see the following has been added to your C:\Windows\Panther\unattend.xml file. If it is not added or if there are no changes to the %OSD...% variables then something has failed and it's time to troubleshoot.

Note: The above locations are during the WinPE phase. After the Setup Windows and ConfigMgr step is complete it will reboot your computer (unless you have a command prompt open in WinPE), and after that reboot, the unattend.xml file will have been removed (by the Setup Windows and ConfigMgr step).

 

Summary

Using MDT integrated task sequences gives you new abilities in System Center Configuration Manager (Current Branch) such as the ability to install language packs offline.

 

Related Reading

Downloads

You can download a Microsoft Word copy of this guide here dated 2016/05/01 Installing language packs offline with MDT integrated task sequence in System Center Configuration Manager (Current Branch).zip

 

Here is a copy of the unattend.xml file I created above unattend.xml

  • Thanks 1

Share this post


Link to post
Share on other sites


Niall,

 

Great tutorial! quick question: what if the computer is member of two collections (english and french)... What's the end result? computer installs both or just the first?

 

Thanks!

Share this post


Link to post
Share on other sites

if the computer is in two collections then the one with the highest priority will win, you can place priorities on variables

  • Like 1

Share this post


Link to post
Share on other sites

if the computer is in two collections then the one with the highest priority will win, you can place priorities on variables

Thank you very much!

Share this post


Link to post
Share on other sites

this can be used for bare metal or refresh installations with language packs, so if you want a particular language pack installed, make sure to set the variables listed above in Step 7, otherwise you'll get Windows 10 in English.

Share this post


Link to post
Share on other sites

Thanks for your reply, how can I set variables if I am using this task sequence on bare metal.

 

for example :- I have added 6 to 7 different language pack in this task sequence, I have deployed this task sequence on all unknown computers collection as I am doing bare-metal deployment. now how can I control which language pack should install,like for system that have ip range 192.168.x.x they should install French, for machine having ip range of 172.10.x.x should install Spanish.

 

or I have to create different task sequence for different language pack while doing bare-metal deployment.

Share this post


Link to post
Share on other sites

you could use Set Dynamic variable steps that only run based on detected gateway and use them to set the variables required.

Share this post


Link to post
Share on other sites

I am new to sccm so I am not much familiar with task sequence variables, Could you please share screen shot how to Set Dynamic variable for gateway detection

Thanks in advance

Share this post


Link to post
Share on other sites

here's an example of what I mean...

 

set dynamic variables.png

Share this post


Link to post
Share on other sites

So "Default Gateway" is a variable that we declared in the collection, correct?

Share this post


Link to post
Share on other sites

no, default gateway is (for example) the value displayed when you type ipconfig,

so computers that are booted in different vlans (Locations), will probably have different Default Gateways

 

the set dynamic variables can check for the value of your default gateway and based on it do different things

 

to get 'default gateway' select the Add Rule dropdown then select Location from the list of options, it will prompt you to enter a default gateway

  • Like 1

Share this post


Link to post
Share on other sites

no, default gateway is (for example) the value displayed when you type ipconfig,

so computers that are booted in different vlans (Locations), will probably have different Default Gateways

 

the set dynamic variables can check for the value of your default gateway and based on it do different things

 

to get 'default gateway' select the Add Rule dropdown then select Location from the list of options, it will prompt you to enter a default gateway

 

so instead declaring variables on collections, we can read the information on certain variables and apply different type of applications/packages and also language, on a larger scale, if we use this variable "default gateway", Thanks Niall, as always!

Share this post


Link to post
Share on other sites

yes you can use Set Dynamic Variables to do all sorts of magic, it's very cool actually !

Share this post


Link to post
Share on other sites

yes you can use Set Dynamic Variables to do all sorts of magic, it's very cool actually !

Do you know if there is a document from Microsoft with all variables that we can use/edit during the TS?

Share this post


Link to post
Share on other sites

Thanks Niall, for your response all of your post are very help-full and very knowledgeable as always.

 

 

 

you are welcome !

Share this post


Link to post
Share on other sites

Hello Niall,

 

I have set the default gateway variables for bare metal installation, i have set 192.168.0.1 gateway variable for Swedish language.

 

the task sequence completed without any error and i ended up with English language , instead of Swedish.

 

i have attached the smsts logs and screen capture of my Task sequence, seeking for your guidance.

 

smsts.zip

post-25760-0-56262500-1472366802.png

Share this post


Link to post
Share on other sites

the step (and Swedish group) works just fine see here

 

true.png

 

which means that your problem lies elsewhere, such as the apply operating system step or your unattend.xml file

 

cheers

niall

Share this post


Link to post
Share on other sites

Thanks for your reply.

 

i have not added any variable on the targeted collection ( i have targeted unknown collection for my task sequence) is that an issue.

 

i have attached the unattend.xml file please let me know if something is missing there.

 

Also when i monitor the Deployment status from SCCM Console --> Monitoring --> Deployment the status show that the condition was evaluated to be false. i have attached the screen capture.

 

But the SMSTS logs says condition was evaluated to be True, As you mention.

unattend.xml

post-25760-0-97345000-1472623301.png

Share this post


Link to post
Share on other sites

yes because it has to evaluate each of the dynamic steps and there were 5

 

so:

 

true (for 192.168.0.1)

false

false

false

false

 

further examination of your task sequence reveals the failure to apply swedish is because it applies en-us instead, look here

 

en us.png

 

 

and that takes place in the group called German

 

so take a look at your settings for that group....

 

also, the group options for Swedish are set to false, so what options do you have on your groups ?

 

 

Share this post


Link to post
Share on other sites

In your Swedish group, set osduilanguage it's set to en-us in your screenshot, that's wrong, obviously, don't you want sv-se instead as in my screenshot for the same step?

 

you should then double check all the other groups that the settings are correct...

Share this post


Link to post
Share on other sites

Thanks Niall,

 

you have rightly said, i have set the osduilanguage to en-us instead of sv-se, once i have change this to sv-se i ended up with Swedish language pack installed.

 

Thanks once again for your guidance.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×