【问题标题】:Powershell & bcdedit: Identify recovery partitionsPowershell & bcdedit:识别恢复分区
【发布时间】:2018-02-06 22:40:12
【问题描述】:

我正在尝试编写 OEM 分区的消除/备份脚本(这只会使系统恢复到没有实际用途的过时版本)。

在许多系统上,使用 DISKPART list partition 会返回更多 recovery 类型的分区:一个是官方的 Microsoft 恢复工具分区 (WinRE),其他来自 OEM。

第一步是安全地识别 WinRE 分区的位置。除了:

$renv=(bcdedit /enum "{default}" | Select-String "^recoverysequence" | Out-String | Select-String "{.+}").Matches.Value
(bcdedit /enum $renv | Select-String "^device" | Out-String | Select-String "\[.+\]").Matches.Value

这会返回一个字符串,如:

[\Device\HarddiskVolume1]

其中卷号是Diskpart 中使用的分区。 (剩余的恢复分区和OEM类型的分区可以备份)。

这是识别 WinRE 分区的正确过程吗?

还有更直接和/或更好的方法吗?

【问题讨论】:

    标签: powershell recovery disaster-recovery bcdedit bcdstore


    【解决方案1】:

    有一个名为 ReagentC 的命令行工具,它位于路径中,因此您可以从任何管理命令提示符调用它。

    reagentc /info
    

    ...会产生一些输出,例如:

    Windows RE status:         Enabled
    Windows RE location:       \\?\GLOBALROOT\device\harddisk0\partition4\Recovery\WindowsRE
    Boot Configuration Data (BCD) identifier: 496c58c4-71cb-11e9-af8f-001c42903d2e
    Recovery image location:   
    Recovery image index:      0
    Custom image location:     
    Custom image index:        0
    

    另外,如果您正在编写代码来完成这项工作,您可以通过调用 winapi 函数来发现恢复分区来完成这项工作。这是一个令人讨厌的复杂 api 调用......但它的价值在于,它是 DeviceIOControlIOCTL_DISK_GET_PARTITION_INFO_EX 的控制代码。如果您不使用 C 或某些定义联合的语言,这会很痛苦。您返回的结构因磁盘是 GPT 格式还是 MBR 格式而异。

    如果磁盘是 MBR,则返回的分区类型将为 0x27,如果是 GPT 驱动器,则分区类型将为 guid:de94bba4-06d1-4d40-a16a-bfd50179d6ac

    【讨论】:

      【解决方案2】:

      除了使用 Lookbehind-RE 简化 Select-String
      我没有看到更好的方法 ATM。

      $renv=(bcdedit /enum "{default}" | Select-String "(?<=^recoverysequence\s+)({.+})").Matches.Value
      (bcdedit /enum $renv | Select-String "(?<=^device.+)\[.+\]").Matches.Value
      [\Device\HarddiskVolume5]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多