-
Notifications
You must be signed in to change notification settings - Fork 5
/
Get-BCDEdit.ps1
52 lines (46 loc) · 1.36 KB
/
Get-BCDEdit.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
function Get-BCDEdit {
[cmdletbinding()]
Param(
[parameter()]
[ValidateSet('Enum','V')]
[string]$Output = 'Enum',
[parameter()]
[switch]$Current
)
$ErrorActionPreference = 'Stop'
try{
$result = bcdedit /$Output | where {$_ -match "^[^-|^ ]"}
if(!$?){
Write-Warning "BCD command failed. Are you running as admin?"
break
}
$null = $result | ForEach-Object -Begin {$props = $null} -Process {
$key,$value = $_.Split(' ',2).trim()
if($key -eq 'Windows'){
if($props.keys.Count -gt 0){
[pscustomobject]$props
}
$props = [ordered]@{
"BCD Entry" = $value
}
}
else{
$props.Add($key,$value)
}
} -End {[pscustomobject]$props} -OutVariable bcd
if($Current){
if($Output -eq 'v'){
$bcd | Where-Object recoverysequence -eq (Get-BCDEdit -Output Enum | Where-Object identifier -match 'current').recoverysequence
}
else{
$bcd | Where-Object identifier -match 'current'
}
}
else{
$bcd
}
}
catch{
Write-Warning "Error getting BCD info: $($result)"
}
}