簡體   English   中英

Powershell和bcdedit:確定恢復分區

[英]Powershell & bcdedit: Identify recovery partitions

我正在嘗試編寫消除/備份OEM分區的腳本(這會將系統帶回到沒有實際用途的過時版本)。

在許多系統上,使用DISKPART list partition將返回更多recovery類型的分區:一個是官方的Microsoft恢復工具分區(WinRE),另一個是來自OEM的分區。

第一步是安全地確定WinRE分區的位置。 除了以下以外,我在bcdedit或PS中沒有找到任何直接方法:

$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分區的正確過程嗎?

還有更直接和/或更佳的方法嗎?

除了使用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]

在路徑中有一個名為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,但是值得一看的是,它的DeviceIOControl帶有IOCTL_DISK_GET_PARTITION_INFO_EX的控制代碼。 如果您不使用C或定義聯合的某種語言,這很麻煩。 返回的結構隨磁盤是GPT還是MBR格式而異。

如果磁盤是MBR,則返回的分區類型將為0x27,如果它是GPT驅動器,則分區類型將為GUID: de94bba4-06d1-4d40-a16a-bfd50179d6ac

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM