C++ 使用vbs//从WinPE:Legacy或UEFI检测BIOS,并将结果从.exe输出到.txt
以下是我的设想: 我的服务器有两种可能的配置:不需要特殊处理的2 TB HDD或需要UEFI BIOS和GPT分区来引导操作系统的3 TB HDD 我正在尝试创建一个安装USB密钥,它能够检测BIOS是“遗留”还是“UEFI”,并相应地执行部署脚本 我努力寻找一个WMI,可以作出区分,但没有用 我找到的最接近解决方案是以下帖子: detectefi.exe可以完美地检测BIOS类型,但我无法输出其结果,因此我不知道如何使用它 我有两个问题:C++ 使用vbs//从WinPE:Legacy或UEFI检测BIOS,并将结果从.exe输出到.txt,c++,legacy,bios,efi,C++,Legacy,Bios,Efi,以下是我的设想: 我的服务器有两种可能的配置:不需要特殊处理的2 TB HDD或需要UEFI BIOS和GPT分区来引导操作系统的3 TB HDD 我正在尝试创建一个安装USB密钥,它能够检测BIOS是“遗留”还是“UEFI”,并相应地执行部署脚本 我努力寻找一个WMI,可以作出区分,但没有用 我找到的最接近解决方案是以下帖子: detectefi.exe可以完美地检测BIOS类型,但我无法输出其结果,因此我不知道如何使用它 我有两个问题: 是否有任何WMI可用于区分我的两个设置 >P>(如
如果有人对我如何解决这个问题感兴趣。我刚刚创建了一个vbs链接到.exe
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
如果有人对我如何解决这个问题感兴趣。我刚刚创建了一个vbs链接到.exe
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
这非常容易检测,无需使用任何特殊实用程序和Windows操作系统自带的命令行
BCDEDIT/ENUM
将为您提供默认引导加载程序。这就是可以用来区分UEFI和BIOS机器的原因,如下所示:
path \EFI\Microsoft\Boot\bootmgfw.efi
然后,您可以如上所述使用oShell.Exec处理输出。这非常容易检测,无需使用任何特殊实用程序和Windows操作系统自带的命令行
BCDEDIT/ENUM
将为您提供默认引导加载程序。这就是可以用来区分UEFI和BIOS机器的原因,如下所示:
path \EFI\Microsoft\Boot\bootmgfw.efi
然后,您可以如上所述使用oShell.Exec处理输出。导入操作系统
如果操作系统路径存在(“/sys/firmware/efi”):
打印“uefi”
其他:
打印“bios”导入操作系统
如果操作系统路径存在(“/sys/firmware/efi”):
打印“uefi”
其他:
打印“bios”您能告诉我您是如何将vbs文件链接到exe的吗?我对VB知之甚少,但您的解决方案似乎正是我想要的。我一直在寻找一种工具,我们可以在工作中使用它来检测/确认系统运行UEFI的客户。谢谢,TBS您能告诉我您是如何将vbs文件链接到exe的吗?我对VB知之甚少,但您的解决方案似乎正是我想要的。我一直在寻找一种工具,我们可以在工作中使用它来检测/确认系统运行UEFI的客户。谢谢,此链接中的TBMy解决方案:此链接中的我的解决方案: