2

这是我的场景:

我有一台具有 2 种可能配置的服务器:不需要特殊处理的 2 TB 硬盘或需要 UEFI BIOS 和 GPT 分区来启动操作系统的 3 TB 硬盘。

我正在尝试创建一个能够检测 BIOS 是“旧版”还是“UEFI”并相应地执行部署脚本的单一安装 USB 密钥。

我努力寻找可以区分但无济于事的 WMI。

我最接近解决方案的是这篇文章: http ://social.technet.microsoft.com/Forums/en-US/winserverManagement/thread/6cbb488d-3062-4aad-b712-7a9e4d045b13

detectefi.exe 在检测 BIOS 类型方面效果很好,但我无法输出它的结果,所以我不知道如何使用它。

我有两个问题:

  1. 是否有任何 WMI 可以用来区分我的 2 个设置。

  2. (如果问题 1 的答案是否定的)有没有办法将 C++ 编译的 .exe 文件的结果输出到 .txt 或任何其他形式并利用结果(我根本没有 C++ 技能)

4

3 回答 3

0

如果有人对我如何解决问题感兴趣。我刚刚创建了一个链接到 .exe 的 vbs

    Set objShell = CreateObject("WScript.Shell")
Set objWshScriptExec = objShell.Exec("detectefi.exe")
Set objStdOut = objWshScriptExec.StdOut

dim isLegacy
dim isUefi

isLegacy = false
isUefi = false

While Not objStdOut.AtEndOfStream
   strLine = objStdOut.ReadLine

   if strLine = "Legacy" then
      isLegacy = true
   end if

   if strLine = "UEFI" then
      isUefi = true
   end if
Wend


if isLegacy then
   wscript.echo "this is legacy"

    set objShell = Wscript.CreateObject("WScript.Shell")
    objShell.Run "2TBdeploy.cmd",1,True
    set objShell = Nothing

end if


if isUefi then
   wscript.echo "this is UEFI"

    set objShell = Wscript.CreateObject("WScript.Shell")
    objShell.Run "3TBdeploy.cmd",1,True
    set objShell = Nothing

end if
于 2012-06-05T20:22:14.543 回答
0

这很容易检测到,无需使用任何特殊实用程序并使用 Windows 操作系统原生的命令行。

BCDEDIT /ENUM将为您提供默认引导加载程序。这可以用来区分 UEFI 和 BIOS 机器,如下所示:

path                    \EFI\Microsoft\Boot\bootmgfw.efi

然后,您可以使用oShell.Exec上述方法处理输出。

于 2013-09-14T16:26:11.850 回答
-1

导入操作系统

if os.path.exists("/sys/firmware/efi"): print "uefi" else: print "bios"

于 2016-07-07T06:54:40.840 回答