【问题标题】:Can't get motherboard serial number无法获取主板序列号
【发布时间】:2021-11-07 04:46:38
【问题描述】:

我使用以下代码获取主板序列号。但我得到了 o/p 结果为空。我在这段代码中犯了什么错误?

      File file = File.createTempFile("realhowto",".vbs");
      file.deleteOnExit();
      FileWriter fw = new java.io.FileWriter(file);

      String vbs =
         "Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")\n"
        + "Set colItems = objWMIService.ExecQuery _ \n"
        + "   (\"Select * from Win32_BaseBoard\") \n"
        + "For Each objItem in colItems \n"
        + "    Wscript.Echo objItem.SerialNumber \n"
        + "    exit for  ' do the first cpu only! \n"
        + "Next \n";

      fw.write(vbs);
      fw.close();
      Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
      BufferedReader input =
        new BufferedReader
          (new InputStreamReader(p.getInputStream()));
      String line;
      while ((line = input.readLine()) != null) {
         result += line;
      }
       if(result.equalEgnoreCase(" ") {
           System.out.println("Result is empty"); 
       } else {
       System.out.println("Result :>"+result);
      }
      input.close();
    }

【问题讨论】:

  • 我会寻找一种不意味着从 Java 执行 VBScript 的方法。你知道COM4J吗?我很确定您可以从中使用 WMI。
  • @zneak:我以前没用过。从哪里获得 com4j.jar 文件?因为 java.net 上缺少 com4j site.
  • 这很尴尬。上次我检查下载链接是否有效;对不起,我帮不了你。

标签: java windows vbscript


【解决方案1】:

我可以确认 VBS 端在我的机器上运行良好;但是,我得到的输出是:

MB-1234567890

这似乎不是特别独特或有用。不过,如果这是您所追求的,请尝试以下操作。将 VBS 粘贴到 .vbs 文件中并使用 cscript <myfile>.vbs 运行它:

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery _ 
   ("Select * from Win32_BaseBoard") 
For Each objItem in colItems
    Wscript.Echo objItem.SerialNumber 
    exit for  ' do the first cpu only!
Next

如果这样可行,那就是 Java 出了问题(我怀疑它出于某种原因没有捕获进程输出)。否则,是 VBS 脚本失败了。

this thread 上还有一些提示和技巧,可能会给您一些不同的策略。

【讨论】:

    【解决方案2】:
        Process p = Runtime.getRuntime().exec("wmic baseboard get serialnumber"); 
    

        Process p = Runtime.getRuntime().exec("wmic /node:"HOST" bios get serialnumber"); 
    

    而不是 HOST ,给你的 hostname,可以在 cmd 提示符中输入 hostname

    【讨论】:

    • 他知道输出是空的。他正在寻找解决方案。
    • @bhakki:试试这个,让我知道,
    • 我用过,但没有得到结果。还有其他方法吗?
    • 奇怪,它在win7上工作(从java运行),但它在windows xp上挂起,wmic.exe只能通过命令提示符工作)
    猜你喜欢
    • 2017-09-14
    • 2011-05-12
    • 2011-10-16
    • 2011-04-06
    • 2010-12-17
    • 1970-01-01
    • 2011-01-30
    • 2016-06-12
    • 1970-01-01
    相关资源
    最近更新 更多