Получение данных из BCEDIT с помощью Powershell
Я должен получить некоторые данные из указанной записи BCD. Запись, которую я хочу, - это запись, идентифицируемая идентификатором {bootmgr}.
Из этой записи я хотел бы получить "G:". Смотрите скриншот.
Как мне разобрать вывод, чтобы сделать это?
ВНИМАНИЕ: Я бы хотел, чтобы он работал независимо от глобализации системы, может быть, это испанский, английский, китайский...
Есть ли лучший способ работы с записями BCD, чем использование BCDEDIT в PowerShell?
2 ответа
Решение
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
ОК, узнал сам
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
}