【问题标题】:How do i get SerialNumber of BaseBoard with WMI?如何使用 WMI 获取基板的序列号?
【发布时间】:2019-04-29 03:29:39
【问题描述】:

一个很好的例子是在 Powerbuilder 中使用 WMI 来终止正在运行的进程。

同样的技术可以用来获取BaseBoardSerialNumber。我需要扩展相同的代码来处理 WQL 查询的返回值。

我要执行的 WQL 查询是:

SELECT Product, SerialNumber FROM Win32_BaseBoard

我可以执行上面的查询,但不知道如何在调用 ExecuteStatement() 函数后将 SerialNumber 保存在变量中。

请查看完整 PowerBuilder 代码的链接。 How to terminate a process if it has specific folder name in its path?

以下是从上面的链接中获取的用于显示该功能的示例代码的一部分。

wsh = CREATE OleObject
wsh.ConnectToNewObject("MSScriptControl.ScriptControl")
wsh.Language = "VBScript"
wsh.AddCode(TheCode)
TRY
    wsh.ExecuteStatement(FunctionName)
CATCH (RunTimeError Re01)
    MessageBox("Query Error", "Following code has some problems.~r~n~r~n" +                 TheCode, StopSign!)
END TRY
wsh.DisconnectObject()

DESTROY wsh

重要的函数调用 wsh.ExecuteStatement(FunctionName)

在调用该函数以使用返回的 SerialNumber of BaseBoard 设置我的PowerBuilder 局部变量之后要做什么?

【问题讨论】:

    标签: wmi powerbuilder wql


    【解决方案1】:
    OLEObject ole_wsh
    Any la_baseboard[]
    string ls_message
    
     ole_wsh = CREATE OLEObject
     ole_wsh.ConnectToNewObject("MSScriptControl.ScriptControl")
     ole_wsh.Language = "vbscript"
     ole_wsh.AddCode('Function rtnBaseBoard()~r~n' &
     + 'DIM objBaseBoard(2)~r~n'  &
     + 'strComputer = "."~r~n'  &
     + 'Set objWMIService ='  &
     + '   GetObject("winmgmts:\\" & strComputer & "\root\cimv2")~r~n' &
     + 'Set colItems =' &
     + '    objWMIService.ExecQuery("SELECT Product, SerialNumber FROM Win32_BaseBoard")~r~n' &
     + 'For Each objItem in colItems~r~n' &
     + 'objBaseBoard(0) = objItem.Product~r~n' &
     + 'objBaseBoard(1) = objItem.SerialNumber~r~n' &
     + 'Next~r~n' &
     + 'rtnBaseBoard = objBaseBoard~r~n' &
     + 'End Function')
     la_baseboard[] = ole_wsh.Eval("rtnBaseBoard")
     ole_wsh.DisconnectObject()
     DESTROY ole_wsh
    
    ls_message = "Product: " + string(la_baseboard[1]) + "~r~n" + &
    + "SerialNumber: " + string(la_baseboard[2]) + "~r~n" 
    MessageBox("Win32 BaseBoard",ls_message)
    

    查看更多使用WMI from Powerbuilder的示例

    【讨论】:

    • 我正在尝试执行此操作 + 'objProcessor(thecounter) = CStr(objItem(thecounter))~r~n' 然后继续递增循环计数器,但在执行此行时执行 la_processor = ole_wsh .Eval("rtnProcessor") 我得到运行时错误。如何避免像'objBaseBoard(0)= objItem.Product~r~n'这样的语句中的特定属性名称并获取PowerBuilder的任何数组中的所有属性?并不是真的需要显示所有内容,只是想知道是否有可能。谢谢
    • 我无法理解如何将 Windows 脚本宿主作为 OLE 对象运行以执行 VBscript 以执行 WMI 查询是解决此问题的最佳答案。 WMI 有自己的 COM 对象接口,这不是更直接吗? PB 的 OLE 对象接口有什么东西让这不可能吗?
    猜你喜欢
    • 1970-01-01
    • 2011-06-01
    • 2016-08-28
    • 2017-09-14
    • 2010-12-17
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 2011-04-06
    相关资源
    最近更新 更多