使用PowerShell在Windows 10中删除语言

12
我想使用Powershell在Windows 10中添加或删除语言,并将键盘布局从左到右或从右到左更改。我编写了代码来添加语言,但找不到指南来再次删除它或更改布局。我还想询问用户是否要添加或删除语言。
这是我的代码:
$List = Get-WinUserLanguageList
$List.Add("lt-LT")
Set-WinUserLanguageList $List

提前感谢您。


3
我已经编写了添加语言的代码,但找不到删除语言的指南。你可以通过以下步骤来删除语言:获取语言列表,将其更改为您想要的内容(删除不需要的项),并设置新列表,与添加语言的方式相同。 - TessellatingHeckler
1
@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
1
@BaconBits 这不是因为它是一个通用列表,而是由于Get-WinUserLanguageList返回的列表不包含字符串,所以"lt-LT"不在其中,并且"-eq"按引用比较,你的新对象与列表中的对象不同。您无需创建新列表。您需要做的是以某种方式获取要删除的内容,例如 $x.remove(($x|where-object languagetag -eq 'lt'))$x.RemoveAt(1),这取决于您如何设计程序以及它将向用户询问什么。 - TessellatingHeckler
我尝试了$list.Remove("lt-LT"),但没有起作用。 - Daina Hodges
1个回答

13

我通过使用英语语言在$List数组中的索引结合Set-WinUserLanguageList cmdlet来实现这一点。 我发现不能简单地通过使用$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时返回适当的列表。


我该如何删除语言呢? - Daina Hodges
运行 $list = Get-WinUserLanguageList 然后 Set-WinUserLanguageList $($list[0]) 如上所述。 - Bryce McDonald
2
在这种情况下,您可以创建一个新变量,并将其设置为您想要保留的两个列表。如果英语和立陶宛语在数组中分别为0和1,则可以使用以下代码:$x = ($list[0], $list[1]),然后运行Set-WinUserLanguageList $x - Bryce McDonald
它运行得很好,谢谢。 根据用户的答案,是否可能将添加和删除组合成一个脚本? - Daina Hodges
没问题!如果你遇到任何问题,请再次发布,或者如果你有任何问题,请联系我们。 - Bryce McDonald
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接