A year ago, I wrote “Managing Windows 11 languages and region settings (Part 1),” which explained the details of each setting and the results of PowerShell commands.
But let’s take a look at these three scenarios, the main idea is the Operating System, and everything should be in English, and we want to Finnish keyboard and Finland as the Region. Wait… isn’t this just one scenario? Why do I say three?
Option 1:
Multiple preferred languages, I normally see this if I were using an English Operating System, and during Autopilot, I choose Finland as the Region, and Finnish as the keyboard, it will then show up like this.
Some customers don’t like it because users might accidentally switch the keyboard language, and they just want to remove everything else but Finnish. So I won’t spend time talking about how to configure this with code. Let’s jump to Option 2.

Option 2:
Preferred languages are only Finnish, and also the input method is Finnish, as you see the PowerShell Get-WinUserLanguageList output “InputMethodTips” shows {040B:0000040B}
If you use this setting, some applications will pick up your preferred language, can change the application UI based on your choice. Example “Company Portal” will be changed to Finnish as “Yritysportaali”.
Okay, how about if I still want “Company Portal” as “Company Portal”, the only thing I want is just the keyboard layout to be Finnish? Let’s see option 3.


Here is the code on how to configure it.
# A list of input locales can be found here: https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/default-input-locales-for-windows-language-packs?view=windows-11#input-locales $InputlocaleRegion = "fi-FI" # Geographical ID we want to set. GeoID can be found here: https://learn.microsoft.com/en-us/windows/win32/intl/table-of-geographical-locations $geoId = "77" # adding the input locale language to the preferred language list, and make it as the first of the list. Set-WinUserLanguageList -LanguageList $InputlocaleRegion -Force # Set Win Home Location, sets the home location setting for the current user. This is for Region location Set-WinHomeLocation -GeoId $geoId # Set Culture, sets the user culture for the current user account. This is for Region format Set-Culture -CultureInfo $InputlocaleRegion #Only needed If you run this script as System Context, copy user international settings to system, so welcome screen, and all new user profile will use the same language settings Copy-UserInternationalSettingsToSystem -WelcomeScreen $True -NewUser $True
Option 3:
The preferred languages have only English (United States), but it also has only one keyboard as Finnish. See the PowerShell Get-WinUserLanguageList output InputMethodTips {0409:0000040B}



Unfortunately, I didn’t find any PowerShell command that I can use in Windows 11 to configure InputMethodTips, everything I have tried has failed. The only way I got it to work is to use the good old XML method
# Set system locale to en-US, because we want the default system locale to be English (United States) for compatibility with various applications. Set-WinSystemLocale en-US # Set user preferred language to English (United States), because we want the default user preferred language to be English (United States) for compatibility with various applications. Set-WinUserLanguageList en-US -Force # Set the input method to Finnish # Create the InputPreferenes.xml file in the current directory $InputPreferenesXmlContent = @' <gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend"> <!-- user list --> <gs:UserList> <gs:User UserID="Current"/> </gs:UserList> <!-- input preferences --> <gs:InputPreferences> <gs:InputLanguageID Action="add" ID="0409:0000040B"/> <gs:InputLanguageID Action="remove" ID="0409:00000409"/> </gs:InputPreferences> </gs:GlobalizationServices> '@ $InputPreferenesXmlPath = Join-Path -Path $env:Temp -ChildPath "InputPreferenes.xml" $InputPreferenesXmlContent | Set-Content -Path $InputPreferenesXmlPath -Encoding UTF8 #Change Language Bar settings to legacy mode, needed for the InputPreferenes.xml to work correctly Set-WinLanguageBarOption -UseLegacySwitchMode:$true -UseLegacyLanguageBar:$true start-sleep 2 # Set the input preferences using the InputPreferenes.xml file & $env:SystemRoot\System32\control.exe "intl.cpl,,/f:`"$InputPreferenesXmlPath`"" Start-sleep 2 # Remove the InputPreferenes.xml file after use Remove-Item -Path $InputPreferenesXmlPath -Force -ErrorAction SilentlyContinue # Change Language Bar settings back to non-legacy mode Set-WinLanguageBarOption -UseLegacySwitchMode:$false -UseLegacyLanguageBar:$false # Set the location to Finland Set-WinHomeLocation -GeoId 77 # Set date/time formats to Finnish Set-Culture -CultureInfo "fi-fi" #Only needed If you run this script as System Context, copy user international settings to system, so welcome screen, and all new user profile will use the same language settings Copy-UserInternationalSettingsToSystem -WelcomeScreen $True -NewUser $True
About Autopilot
Depending on how you provision your device:
If you are using Pre-provisioning or Self-deploy Autopilot, the PowerShell script should run during pre-provisioning. In this case, the script should run as System Context, and you should keep the last line for copying user settings.
Copy-UserInternationalSettingsToSystem -WelcomeScreen $True -NewUser $True
In Option 3, since it is using XML, you can also replace line 14 with this to copy user settings; it does the same as the PowerShell command above.
<gs:User UserID="Current" CopySettingsToDefaultUserAcct="true" CopySettingsToSystemAcct="true"/>
If you are using User-driven Autopilot provisioning, or if some devices are already enrolled before you consider changing the keyboard layout, you will need to deploy the script in the user context as well, to change the existing user’s settings. In this case, the user context script should remove the last line Copy-UserInternationalSettingsToSystem
One more important note, as I mentioned in Part 1, the copy user settings requires a reboot to take effect.
I normally use two scripts. One script runs on System Context with the Copy User setting, and one script runs on User Context without the Copy User setting.
Hope this helps some of you.
Add comment