Remove Rogue Keyboard Layout From Windows Session Using PowerShell
Over the years I've been hit by having a US QWERTY keyboard layout added to my Windows session without knowing where it came from.
Today I decided to do something about it.
Using the International PowerShell module, we can get the list of user languages using the Get-WinUserLanguageList PowerShell CmdLet.
In my case (and en-US and pt-PT languages with Portuguese keyboard layout) that will usually be:
LanguageTag : en-US
Autonym : English (United States)
EnglishName : English
LocalizedName : English (United States)
ScriptName : Latin
InputMethodTips : {0409:00000816}
Spellchecking : True
Handwriting : False
LanguageTag : pt-PT
Autonym : Português (Portugal)
EnglishName : Portuguese
LocalizedName : Portuguese (Portugal)
ScriptName : Latin
InputMethodTips : {0816:00000816}
Spellchecking : True
Handwriting : False
However, sometimes I get into this situation:
LanguageTag : en-US
Autonym : English (United States)
EnglishName : English
LocalizedName : English (United States)
ScriptName : Latin
InputMethodTips : {0409:00000816, 0409:00000409}
Spellchecking : True
Handwriting : False
LanguageTag : pt-PT
Autonym : Português (Portugal)
EnglishName : Portuguese
LocalizedName : Portuguese (Portugal)
ScriptName : Latin
InputMethodTips : {0816:00000816}
Spellchecking : True
Handwriting : False
That extra input method can be removed from the list using this PowerShell script:
$WinUserLanguageList = Get-WinUserLanguageList
foreach ($WinUserLanguage in $WinUserLanguageList) {
$toRemove = $WinUserLanguage.InputMethodTips | Where-Object { $_ -notlike '*:00000816' }
foreach ($item in $toRemove) {
$null = $WinUserLanguage.InputMethodTips.Remove($item)
}
}
Set-WinUserLanguageList $WinUserLanguageList -Force
If you're into one-liners, here it is:
$WinUserLanguageList = Get-WinUserLanguageList; $WinUserLanguageList | % { $WinUserLanguage = $_; $toRemove=$WinUserLanguage.InputMethodTips | ? { $_ -notlike '*:00000816' }; $toRemove | % { $null = $WinUserLanguage.InputMethodTips.Remove($_) }}; Set-WinUserLanguageList $WinUserLanguageList -Force