2

これが私のシナリオです:

サーバーには 2 つの可能な構成があります。特別な処理を必要としない 2 TB HDD、または OS を起動するために UEFI BIOS と GPT パーティションを必要とする 3 TB HDD です。

BIOS が「レガシー」か「UEFI」かを検出し、それに応じて展開スクリプトを実行できる単一のインストール USB キーを作成しようとしています。

私は区別できる WMI を一生懸命探しましたが、役に立ちませんでした。

私が解決策に最も近いのは、次の投稿です

detectefi.exe は BIOS の種類を検出するのに完全に機能しますが、結果を出力できないため、使用方法がわかりません。

2 つの質問があります。

  1. 2 つのセットアップを区別するために使用できる WMI はありますか?

  2. (質問 1 の答えが「いいえ」の場合) C++ でコンパイルされた .exe ファイルの結果を .txt またはその他の形式に出力し、その結果を利用する方法はありますか (私には C++ のスキルがまったくありません)。

4

3 に答える 3

0

これは、特別なユーティリティを使用したり、Windows OS 固有のコマンド ラインを使用したりすることなく、非常に簡単に検出できます。

BCDEDIT /ENUMデフォルトのブートローダーを提供します。これは、次のように、UEFI マシンと BIOS マシンを区別するために使用できるものです。

path                    \EFI\Microsoft\Boot\bootmgfw.efi

oShell.Exec次に、上記のように使用して出力を処理できます。

于 2013-09-14T16:26:11.850 に答える
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 に答える
-1

OS のインポート

os.path.exists("/sys/firmware/efi") の場合: "uefi" を出力します。そうでない場合: "bios" を出力します。

于 2016-07-07T06:54:40.840 に答える