如何通过WMIC命令行将参数传递给WMI方法?

时间:2018-01-23 20:09:13

标签: windows command-line wmi wmic

我正在尝试使用WMIC命令从SetCustomShell类执行WESL_UserSetting方法。该类位于Windows 10 Enterprise中的非默认\\root\StandardCimv2\Embedded命名空间中。

我已经启用了自定义shell功能,并且我知道该类已正确安装,因为命令:

wmic /namespace:\\root\StandardCimv2\Embedded CLASS WESL_UserSetting CALL SetCustomShell /?

生成此输出:

Call                    [ In/Out ]Params&type                         Status
====                    =====================                         ======
SetCustomShell          [IN ]CustomReturnCodes(array of sint32)       Implemented
                        [IN ]CustomReturnCodesAction(array of sint32)
                        [IN ]DefaultAction(sint32)
                        [IN ]Shell(string)
                        [IN ]Sid(string)
                        [OUT]ReturnValue(uint32)

这也对应Microsoft's documentation,(除了它列出参数的顺序不同),所以我认为我在这里的正确轨道上。但是我试图以多种不同的方式传递论据,而wmic似乎并不能理解我想要做的事情。

我尝试过命名参数(即shell = xxx,Sid = xxx等),将整个列表括在引号中,仅将值括在引号中,用括号调用,然后用逗号进行爆破 - 分开的值。似乎没什么用。我总是最喜欢:

Invalid named parameter list.
Hint: <named param list> ::= <named param> | <named param> <named param list> where <named param> ::= <param name>=<param value>

或者:

Invalid format.
Hint: <paramlist> = <param> [, <paramlist>].

如何正确调用此方法?

具有讽刺意味的是,我知道如何使用VBScript或PowerShell执行此操作。有很多关于如何使用各种语言的脚本执行此操作的示例。但是我需要从组策略或操作系统部署中执行它,而不必依赖客户端可以看到的脚本文件,而应该是我可以用的单一命令。

1 个答案:

答案 0 :(得分:0)

我相信以下内容:

wmic /namespace:\\root\StandardCimv2\Embedded CLASS WESL_UserSetting CALL SetCustomShell Sid="s-1-*" Shell="cmd.exe" DefaultAction=0 CustomReturnCodes=(0,1,2) CustomReturnCodesAction=(0,1,2)