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

How to pass arguments to a WMI method via WMIC command line?

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

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

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 执行此操作。有许多关于如何使用各种语言的脚本执行此操作的示例。但是我需要从组策略或在 OS 部署期间执行它,而不必依赖客户端可以看到它的某个地方可用的脚本文件,并且这个 应该 成为我可以用一个命令完成的事情。

我相信以下内容:

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)