问题 使用PowerShell从Windows 10中删除语言


我想在Windows 10中使用Powershell添加或删除语言并从左到右或从右到左更改键盘布局。我编写了添加语言的代码,但我找不到再次删除它或更改布局。我还想询问用户是否要添加或删除语言。

这是我的代码:

$List = Get-WinUserLanguageList
$List.Add("lt-LT")
Set-WinUserLanguageList $List

先谢谢你。


7240
2017-11-28 19:18


起源

“我写了代码来添加语言,但我找不到再次删除它的指南“ - 与添加它的方式相同;获取列表,将其更改为您希望的列表(删除你不想要的东西)并设置新列表。 - TessellatingHeckler
@TessellatingHeckler问题在于 它不是一个数组。它是 List<WinUserLanguage>。该 List.Remove() 方法似乎永远不会起作用。尝试 $L = New-WinUserLanguageList lt-LT; $L.Remove('lt-LT');  你还有 lt-LT 在列表中。即使你打电话 $L.Remove([Microsoft.InternationalSettings.Commands.WinUserLanguage]'lt-LT') 它不会删除它,因为 $L[0] -eq [Microsoft.InternationalSettings.Commands.WinUserLanguage]'lt-LT' 是 false 即使 $L[0].GetType() -eq [Microsoft.InternationalSettings.Commands.WinUserLanguage] 是 true。你必须制作一个新的清单。 - Bacon Bits
@BaconBits那不是因为它是一个通用列表,那是因为列表从它返回时不包含字符串 Get-WinUserLanguageList所以 "lt-LT" 不在其中,因为 -eq 通过引用进行比较,您的新obj与列表中的obj不同。您不必创建新列表。你需要做的就是以某种方式得到想要移除的东西,例如: $x.remove(($x|where-object languagetag -eq 'lt')) 要么 $x.RemoveAt(1),这取决于你如何设计程序以及它将要求用户提供什么。 - TessellatingHeckler
我试过$ list.Remove(“lt-LT”)但它没有用 - Daina Hodges


答案:


我设法通过使用英语的索引来实现这一点 $List 数组与结合 Set-WinUserLanguageList 小命令。我发现很奇怪,我不能简单地通过使用 $list.remove("lt-LT") 方法,因为它返回 False,所以我开始以另一种方式重新创建列表。

在将“lt-LT”添加到列表后,我再次运行第一个cmdlet以查看我们正在使用的内容:

$list = Get-WinUserLanguageList

返回了一个包含两个对象的数组。 $list[0] 回

LanguageTag     : en-US
Autonym         : English (United States)
EnglishName     : English
LocalizedName   : English (United States)
ScriptName      : Latin script
InputMethodTips : {0409:00000409}
Spellchecking   : True
Handwriting     : False

$list[1] 回

LanguageTag     : lt
Autonym         : lietuvių
EnglishName     : Lithuanian
LocalizedName   : Lithuanian
ScriptName      : Latin script
InputMethodTips : {0427:00010427}
Spellchecking   : True
Handwriting     : False

所以我们需要做的就是确保这一点 Set-WinUserLanguageList 只有一个输入。我运行了以下内容,它适当地设置了语言列表。

Set-WinUserLanguageList $($list[0])

现在运行时只返回相应的列表 Get-WinUserLanguageList


12
2017-11-28 19:42



我该如何删除该语言? - Daina Hodges
跑 $list = Get-WinUserLanguageList 然后 Set-WinUserLanguageList $($list[0]) 如上所述。 - Bryce McDonald
我有3种语言英语,俄语和立陶宛语我想添加和删除使用该脚本的立陶宛语。该解决方案只添加一种语言 - Daina Hodges
在这种情况下,您可以创建一个新变量并将其设置为您要保留的两个列表。如果数组中的英语和立陶宛语为0和1,则可以使用以下内容: $x = ($list[0], $list[1]) 然后 Set-WinUserLanguageList $x - Bryce McDonald
它工作得很好,谢谢。是否可以在一个脚本中组合添加和删除取决于用户的答案? - Daina Hodges