In my earlier blog, I talked about creating an MSI that can be used to help configure Windows 10 with things that can't easily be done via MDM policies. Based on feedback, I added a few new items that you may also be interested in:
- Install language packs. You can embed language pack CAB files into the MSI (place them into the LPs folder), and each will be automatically installed. (In a perfect world, these would be pulled from Windows Update, but there's no simple way to do that, hence the need to include these in the MSI. You can download the language pack ISO from MSDN or VLSC.)
- Install features on demand (FOD). Specify a list of features that you want to install, from the list at https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/features-on-demand-non-language-fod. The needed components will be downloaded from Windows Update automatically and added to the running OS.
- Configure language settings. Adding a language pack isn't enough - you have to tell Windows that you want it to be configured for all users. This is done through an XML file fed to INTL.CPL; customize the file as needed. (Note this is commented out by default in the Config.xml file. See https://support.microsoft.com/en-us/help/2764405/how-to-automate-regional-and-language-settings-in-windows-vista-window for the gory details of how to set this up. Yes, it's the same process that's been around since Windows XP.)
At the same time, I also added the "packages" folder that wasn't included before (so if you tried to use the Make.cmd it would complain that the PowerShellWixExtension wasn't found - if you are a NuGet expert you could fix that yourself, but there aren't many NuGet IT pro experts out there).
If you cloned the GitHub repository at https://github.com/mtniehaus/AutopilotBranding, just sync to get the latest changes.
I should probably talk a little more about the language packs too. First, I recommend you read this article for an overview of the process and terminology. Then, some additional comments:
- Language packs are delivered as CAB files. You need to inject one of these to add a new language. (As I mentioned previously, these aren't easily pulled from Windows Update; you can get them from VLSC or MSDN.)
- The language pack by itself isn't enough. You also should add the necessary Features on Demand packages for each language (described at the link above). If you don't do this, Windows 10 will try to install them when the user first logs on. (If your users don't have admin rights, this can cause a prompt for elevation when they sign on to Windows 10 1803 and 1809; this behavior is fixed in Windows 10 1903, and will be fixed via a cumulative update for the previous versions. That doesn't mean the problem goes away - it just means the prompt will no longer happen and the language support is still incomplete for that language until an admin signs on to install the missing FODs.)
- Adding a language pack CAB to Windows 10 doesn't actually make the language show up - if you only do that, you would log on, open Settings, and only see the original language. If you add the (already-installed) language, it is smart enough to not download it again, but otherwise, it's just like adding a language that wasn't already present. To work around that, you need to use the INTL.CPL with an XML file to force that language to be added. You can at the same time change the default user UI language, without touching the system UI language. (The system UI language can't be changed online; it's typically only set offline before booting the device for the first time. But you really don't want to change it, as that leads to feature update complications later if you are using media.)
- You might notice some things still show up in the original language. For example, when I tested this I added the Spanish language pack (es-es) to an English (en-us) OS, then configured the OS to make Spanish (es-es) the default user UI language. Office, which was being installed in parallel to all of this, said to "match" the OS language. At the time, Spanish wasn't yet there, so Office ended up in English. (You could work around that by forcing Office to install Spanish too.) Also, the in-box apps are still in English, and any notifications sent before the UI language default was changed will also show up in English.
- I didn't try to configure keyboard layouts (it will use the default for the language), but that can be done via the XML.
One final note: I wouldn't expect everyone to want to use all pieces of this. I've tried to make the different configurations optional via the Config.xml file. If you don't include any <App> entries, it won't remove apps. If you have a blank TimeZone value, it won't set the time zone. If you don't specify any <Feature> entries, it won't install any features. If you don't include any CAB files, it won't install language packs. If you don't specify the name of the Language.xml file to use, it won't reconfigure the languages. So you can pick and choose, and customize as needed.
As before, feel free to provide feedback via e-mail, GitHub, Twitter, etc. Pull requests via GitHub will be considered as well.