我通过使用英语语言在$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
时返回适当的列表。
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 BitsGet-WinUserLanguageList
返回的列表不包含字符串,所以"lt-LT"不在其中,并且"-eq"按引用比较,你的新对象与列表中的对象不同。您无需创建新列表。您需要做的是以某种方式获取要删除的内容,例如$x.remove(($x|where-object languagetag -eq 'lt'))
或$x.RemoveAt(1)
,这取决于您如何设计程序以及它将向用户询问什么。 - TessellatingHeckler