Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用vbs//从WinPE:Legacy或UEFI检测BIOS,并将结果从.exe输出到.txt_C++_Legacy_Bios_Efi - Fatal编程技术网

C++ 使用vbs//从WinPE:Legacy或UEFI检测BIOS,并将结果从.exe输出到.txt

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>(如

以下是我的设想:

我的服务器有两种可能的配置:不需要特殊处理的2 TB HDD或需要UEFI BIOS和GPT分区来引导操作系统的3 TB HDD

我正在尝试创建一个安装USB密钥,它能够检测BIOS是“遗留”还是“UEFI”,并相应地执行部署脚本

我努力寻找一个WMI,可以作出区分,但没有用

我找到的最接近解决方案是以下帖子:

detectefi.exe可以完美地检测BIOS类型,但我无法输出其结果,因此我不知道如何使用它

我有两个问题:

  • 是否有任何WMI可用于区分我的两个设置

  • >P>(如果问题1的答案为否),有一种方法将结果从C++编译的exe文件输出到.txt或其他任何形式,并利用结果(我根本没有C++技巧)


    如果有人对我如何解决这个问题感兴趣。我刚刚创建了一个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解决方案:此链接中的我的解决方案: