我正在尝试编写一个 EFI shell 脚本,该脚本会删除所有引导条目(如
bcfg dump boot
中所示),而不知道提前存在多少个引导条目。
该语言提供了一个循环构造,其模式来自于 Microsoft 的 shell:
for var in <set>
...
endfor
...但我不清楚是否有合理的方法将启动条目的数字标识符从
bcfg dump
获取到<set>
。
目前(UEFI Shell v2.1 和 UEFI v2.50)无法使用 UEFI Shell 解析
bcfg
输出。
UEFI Shell 脚本中唯一支持的解析方法是使用
parse
命令,该命令需要 Standard-Format Output
(似乎是 CSV)。不幸的是,通过使用 SFO
标志作为参数,只有 7 个命令可以生成 -sfo
。支持的命令有: ls
、map
、memmap
、date
、dh
、devices
、drivers
。
删除所有启动选项可以通过编写模仿 bcfg 行为的简单 C 应用程序来实现。我设法做到了这一点,并且可以在here找到示例代码。
请注意,删除所有启动选项在某些情况下可能很危险,并可能导致硬件状态无法恢复。确保你知道自己在做什么。
鉴于此启动选项列表(在我的系统上),
FS0:\> bcfg boot dump
Option: 00. Variable: Boot0004
Desc - UEFI: Built-in EFI Shell
DevPath - VenMedia(__ID__)
Optional- Y
Option: 01. Variable: Boot0001
Desc - ubuntu
DevPath - HD(1,GPT,__ID__,0x800,0x219800)/\EFI\UBUNTU\SHIMX64.EFI
Optional- Y
Option: 02. Variable: Boot0005
Desc - Hard Drive
DevPath - BBS(HD,)
Optional- Y
我运行编辑
my.nsh
并输入以下几行脚本,
echo -off
bcfg boot dump 1>v entries
for %e in %entries%
if /i %e == "variable:" then
echo "Removing boot option %prev%"
bcfg boot rm 0
endif
set -v prev "entry %e"
endfor
(警告如果您尝试此操作,它将会删除您当前的启动选项:)
我运行了
my.nsh
,输出显示-
FS0:\> echo -off
Removing boot entry 00.
Removing boot entry 01.
Removing boot entry 02.
运行上述命令后..它们都消失了 -
FS0:\> bcfg boot dump
No options found.
这里的shell版本是-
FS0:\> ver
UEFI Interactive Shell v2.2
EDK II
UEFI v2.80 (American Megatrends, 0x00050019)