Obtendo dados do BCEDIT com o Powershell

1

Eu tenho que pegar alguns dados de uma entrada específica do BCD. A entrada que quero é a identificada pelo identificador {bootmgr} .

A partir dessa entrada, gostaria de obter o "G:". Veja a captura de tela.

Como analiso a saída para fazer isso?

AVISO: gostaria que funcionasse independentemente da Globalização do Sistema, seja em espanhol, inglês, chinês ...

Existe alguma maneira melhor de lidar com entradas BCD do que usando o BCDEDIT no PowerShell?

    
por SuperJMN 06.06.2018 / 17:40

2 respostas

1

Select-String processing bcdedit output deve ser independente do idioma.

Meu idioma alemão é produzido:

> bcdedit

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

Esta versão modificada do seu script:

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
}

retorna isso:

> GetBootMgrPartitionPath
\Device\HarddiskVolume1
    
por 06.06.2018 / 19:10
0

OK, descobri a mim mesmo:

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
}
    
por 06.06.2018 / 18:36