Я все еще немного шаткий, когда имею дело с WMI, но вот сценарий. У моей компании несколько моделей ноутбуков HP, развернутых по всему домену, и нам нужно изменить настройку тега ресурса в BIOS. Этот код работает для всех наших EliteBooks HP:WMI: Как определить InstanceName активного экземпляра?
Set objWMIService = objSWbemLocator.ConnectServer(_
strComputer, "root\HP\InstrumentedBIOS")
'We have to search for the exact bios tag name because it varies by model
Set colItems = objWMIService.ExecQuery("SELECT * FROM HPBIOS_BIOSString", , 48)
For Each objItem In colItems
If InStr(1, objItem.Name, "Asset") Then strName = objItem.Name
Next
' Obtain an instance of the the class using a key property value.
Set objShare = objWMIService.Get(_
"HPBIOS_BIOSSettingInterface.InstanceName='ACPI\PNP0C14\0_0'")
' Obtain an InParameters object specific to the method.
Set objInParam = objShare.Methods("SetBIOSSetting").InParameters.SpawnInstance_()
' Add the input parameters.
objInParam.Properties_.item("Name") = strName
objInParam.Properties_.item("Value") = strAssetTag
objInParam.Properties_.item("Password") = "<utf-16/>" & strPassword
' Execute the method and obtain the return status.
' The OutParameters object in objOutParams is created by the provider.
Set objOutParams = objWMIService.ExecMethod(_
"HPBIOS_BIOSSettingInterface.InstanceName='ACPI\PNP0C14\0_0'", _
"SetBIOSSetting", objInParam)
Select Case objOutParams.return
Case 0
strReturn = "Success. Asset Tag " & strAssetTag & _
" will be configured the next time you reboot " & _
strComputer & "."
Case 1
strReturn = "1: Not Supported"
Case 2
strReturn = "2: Unspecified Error"
Case 3
strReturn = "3: Timeout"
Case 4
strReturn = "4: Failed"
Case 5
strReturn = "5: Invalid Parameter"
Case 6
strReturn = "6: Access Denied"
Case Else
strReturn = "..."
End Select
Проблема заключается в том, что HP ZBooks, то InstaneName является ACPI\PNP0C14\1_0
. Поэтому изменение строки в правильном экземпляре заставляет ее работать для ZBooks, но ломает ее для EliteBooks. Например:
Set objShare = objWMIService.Get(_
"HPBIOS_BIOSSettingInterface.InstanceName='ACPI\PNP0C14\1_0'")
я мог бы создать два сценария, один для EliteBooks и один для ZBooks, но так как всегда есть только один экземпляр Active
, я предпочел бы создать один сценарий, который получает этот активный экземпляр. Например (не рабочий код, который я хотел работал):
Set objShare = objWMIService.Get(_
"HPBIOS_BIOSSettingInterface.Active='True'")
Итак, как я могу найти InstanceName
Активной HPBIOS_BIOSSettingInterface
?