使用 Powershell 从 BCEDIT 获取数据

使用 Powershell 从 BCEDIT 获取数据

我必须从指定的 BCD 条目中获取一些数据。我想要的条目是由{启动管理器}編識字。

从该条目中,我想获取“G:”。请参阅屏幕截图。

我该如何解析输出来做到这一点?

注意:我希望它能够独立于系统全球化运行,无论是西班牙语、英语还是中文......

除了在 PowerShell 中使用 BCDEDIT 之外,有没有更好的方法来处理 BCD 条目?

在此处输入图片描述

答案1

Select-String处理bcdedit输出应该与语言无关。

我的德语区域设置输出:

> bcdedit

Windows-Start-Manager
---------------------
Bezeichner              {bootmgr}
device                  partition=\Device\HarddiskVolume1
description             Windows Boot Manager
locale                  de-DE
inherit                 {globalsettings}
default                 {current}
...snip...

脚本的修改版本如下:

function GetBootMgrPartitionPath() {
    $bootMgrPartitionPath = bcdedit /enum `{bootmgr`} | 
      Select-String -Pattern '\{bootmgr\}' -context 1|
        ForEach-Object { ($_.Context.PostContext.Split('=')[1]) }

    if ($bootMgrPartitionPath -eq $null){
        throw "Could not get the partition path of the {bootmgr} BCD entry"
    }
    return $bootMgrPartitionPath
}

返回此:

> GetBootMgrPartitionPath
\Device\HarddiskVolume1

答案2

好的,我自己发现了:

function GetBootMgrPartitionPath()
{
    $match = & bcdedit /enum `{bootmgr`} | Select-String  "device\s*partition=(?<path>[\w*\\]*)"
    $bootMgrPartitionPath = $match.Matches[0].Groups[1].Value

    if ($bootMgrPartitionPath -eq $null)
    {
        throw "Could not get the partition path of the {bootmgr} BCD entry"
    }

    return $bootMgrPartitionPath
}

相关内容