Обнаружение BIOS из WinPE: Legacy или UEFI с помощью vbs // Вывод результатов из .exe в .txt

Вот мой сценарий:

У меня есть сервер с двумя возможными конфигурациями: жесткий диск на 2 ТБ, который не требует специальной обработки, или жесткий диск на 3 ТБ, для которого требуется UEFI BIOS и раздел GPT для загрузки ОС.

Я пытаюсь создать единый установочный USB-ключ, который может определить, является ли BIOS «устаревшим» или «UEFI», и соответственно выполнить сценарий развертывания.

Я упорно искал WMI, который мог бы сделать различие, но безрезультатно.

Ближе всего к решению я пришел к этому сообщению: ="nofollow">http://social.technet.microsoft.com/Forums/en-US/winserverManagement/thread/6cbb488d-3062-4aad-b712-7a9e4d045b13

Detefi.exe отлично определяет тип BIOS, но я не могу вывести его результат, поэтому не знаю, как его использовать.

У меня есть 2 вопроса:

  1. есть ли какой-либо WMI, который я могу использовать, чтобы различать мои 2 настройки.

  2. (если ответ на вопрос 1 отрицательный) есть ли способ вывести результаты из .exe-файла, скомпилированного на C++, в .txt или любую другую форму и использовать результат (у меня вообще нет навыков C++)


person ToastMan    schedule 04.06.2012    source источник
comment
Мое решение по этой ссылке: stackoverflow.com/questions/38273847/   -  person CompMaster    schedule 09.08.2016


Ответы (3)


Если кому интересно как я решил проблему. Я только что создал 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
person ToastMan    schedule 05.06.2012
comment
Не могли бы вы рассказать мне, как именно вы связали файл vbs с exe? У меня очень мало знаний в VB, но ваше решение, похоже, именно то, что я искал. Я искал инструмент, который мы можем использовать на работе для обнаружения/подтверждения клиентов с системами, работающими под управлением UEFI. Спасибо, ТБ - person Ted; 19.12.2012

Это очень легко обнаружить без использования каких-либо специальных утилит и командной строки, встроенной в ОС Windows.

BCDEDIT /ENUM предоставит вам загрузчик по умолчанию. Это то, что можно использовать для различения машин UEFI и BIOS, например:

path                    \EFI\Microsoft\Boot\bootmgfw.efi

Затем вы можете обработать вывод, используя oShell.Exec, как описано выше.

person MaverickAsc    schedule 14.09.2013

импорт ОС

если os.path.exists("/sys/firmware/efi"): напечатать "uefi", иначе: напечатать "bios"

person Sweetu Ghadage    schedule 07.07.2016