【发布时间】:2018-03-05 09:31:49
【问题描述】:
我正在构建一个代码来修复 Windows 10 上的键盘布局情况。通过自动化解决方案,我决定使用 powershell。但问题是我对它很陌生并且面临某些问题。我设法挖掘了一个脚本来更改键盘布局,但是它只更改为一种语言。当我尝试用 2 种语言创建数组时:
$langlist=$lang_en,$lang_ru
set-winuserlanguagelist $langlist
它只是返回我下一个错误:
Set-WinUserLanguageList : Cannot convert 'Microsoft.InternationalSettings.Commands.WinUserLanguage' to the type
'Microsoft.InternationalSettings.Commands.WinUserLanguage' required by parameter 'LanguageList'. Specified method is
not supported.
At line:1 char:25
+ set-winuserlanguagelist $langlist
+ ~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Set-WinUserLanguageList], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgument,Microsoft.InternationalSettings.Commands.SetWinUserLanguageListCommand
当我尝试使用下一个命令:$test = Get-WinUserLanguageList 时,该命令与set-winuserlanguagelist 配合得很好。
完整的脚本:
$keys='0809:00020409', '0419:00000419'
$lang_en=new-winuserlanguagelist en-gb
$lang_en[0].inputmethodtips.clear()
$lang_en[0].inputmethodtips.add($keys[0])
$lang_ru=new-winuserlanguagelist ru
$lang_ru[0].inputmethodtips.clear()
$lang_ru[0].inputmethodtips.add($keys[1])
$langlist=$lang_en,$lang_ru
set-winuserlanguagelist $langlist
【问题讨论】:
-
问题不再实际。问题背后的原因是变量的类型。我以错误的方式宣布它。正确的方法是:
$langlist = New-Object "System.Collections.Generic.List[Microsoft.InternationalSettings.Commands.WinUserLanguage]" -
真正的问题是您创建了一个 lists 数组,而不是
[Microsoft.InternationalSettings.Commands.WinUserLanguage]实例数组。New-WinUserLanguageListcmdlet 的笨拙设计应归咎于此,这仍然值得在答案中解决。 -
P.S.:顺便说一句,请允许我给你一个语言提示:“实际”可能是指“不再相关”。 "actual" means something closer to "real"
-
感谢您的解释。当我试图更多地理解错误时,我理解了这个问题。创建一个列表列表解决了这个问题,并且 cmdlet 可以根据我的需要工作。是的,想结束问题,但不知道如何。但至少人们花时间向我解释事情,我真的很感激
-
很高兴听到这个消息。万一这不仅仅是一个错字:它不是创建一个解决问题的 lists 列表,而是一个
WinUserLanguage实例列表 - 这是New-WinUserLanguageList应该 允许您使用 多种 语言 - 但目前不允许。至于结束你的问题:你可以 delete 它,但是 - 在这种情况下 - 当答案已经发布时这不是一个好主意(并且,如前所述,你的问题很有用,因为其他人可能犯同样的错误)。
标签: powershell