有关WMI Win32_WindowsProductActivation类和SetProductKey方法的问题

时间:2010-11-05 02:28:10

标签: vbscript wmi

我对Win32_WindowsProductActivation WMI类和SetProductKey方法有疑问。

当我运行使用WMi Code创建者生成的此代码(vbscript)时,执行失败并显示错误Invalid parameter

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
' Obtain an instance of the the class 
' using a key property value.
Set objShare = objWMIService.Get("Win32_WindowsProductActivation")

' Obtain an InParameters object specific
' to the method.
Set objInParam = objShare.Methods_("SetProductKey"). _
    inParameters.SpawnInstance_()


' Add the input parameters.
objInParam.Properties_.Item("ProductKey") =  "QW4HDDQCRGHM64M6GJRK8K83T"

' Execute the method and obtain the return status.
' The OutParameters object in objOutParams
' is created by the provider.
Set objOutParams = objWMIService.ExecMethod("Win32_WindowsProductActivation", "SetProductKey", objInParam)

' List OutParams
Wscript.Echo "Out Parameters: "
Wscript.echo "ReturnValue: " & objOutParams.ReturnValue

但如果我使用此代码,则可以使用InstancesOf方法。

Dim VOL_PROD_KEY
VOL_PROD_KEY =  "QW4HDDQCRGHM64M6GJRK8K83T"

for each Obj in GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf ("win32_WindowsProductActivation")

result = Obj.SetProductKey (VOL_PROD_KEY)

if err <> 0 then
WScript.Echo Err.Description, "0x" & Hex(Err.Number)
Err.Clear
end if

Next

静止是

为什么第一个代码失败了?或者为什么这个wmi类需要使用InstancesOf

执行此方法

1 个答案:

答案 0 :(得分:1)

您必须直接调用并直接传递SetProductKey方法的参数,而不使用SpawnInstance_,因为此方法非静态

规则是,如果执行的wmi方法是静态的,你可以使用SpawnInstance_否则调用直接传递参数的方法

这里有静态和非静态方法的描述。

  

静态方法仅适用于WMI   类而不是特定的实例   一堂课。例如,创建   Win32_Process类的方法是一个   静态方法因为用它来创建   没有实例的新流程   这个班。非静态方法适用   只对一个类的实例。对于   例如,Terminate方法   Win32_Process类是非静态的   方法因为它才有意义   如果是实例,则终止进程   那个过程存在。你可以确定   如果方法是静态的,通过检查是否   静态限定符是关联的   用这个方法。

此外,您可以查看此文章Calling a Provider Method