首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bcdedit、bcdstore和powershell

bcdedit、bcdstore和powershell
EN

Stack Overflow用户
提问于 2013-06-04 02:32:37
回答 2查看 15.2K关注 0票数 4

因此,我可以在powershell脚本中编写bcd命令,就像在cmd提示符中一样,例如:

代码语言:javascript
复制
bcdedit /default '{current}'

但是,我需要一个执行此操作的脚本:

代码语言:javascript
复制
bcdedit /default '{current}'
bcdedit /set '{otherboot}' description "my description"

如果它不这样做,它将是另一种方式:

代码语言:javascript
复制
bcdedit /default '{otherboot}'
bcdedit /set '{current}' description "my description"

我需要做的是在powershell中找到另一个引导的标识符,但我不确定如何找到。所有的谷歌搜索都会说这样做:

代码语言:javascript
复制
$bcdStore=gwmi -name root\wmi -list bcdstore -enableall
$bcdStore|gm
$result=$bcdStore.OpenStore("") # can also use explicit file name.
$store=$result.Store

但我不知道如何使用商店一旦我有它,这似乎有点太复杂了。我的意思是应该有更简单的方法..。不是吗?

EN

回答 2

Stack Overflow用户

发布于 2021-10-11 18:13:19

队友们!

我写了BCDEdit解析器。我认为这将是有用的。

代码语言:javascript
复制
$Configs   = @() #Array contains the parsed objects
$NameArray = @()

$Pattern = '^(?<name>[a-z]*)?\s*(?<value>.*)?$'
$enum    = bcdedit /enum

foreach ($item in $enum ){
    if ( $item.trim() ){
        $res = [regex]::matches( $item, $pattern )
        if ( $res ){
            $Value = $res[0].Groups['value'].value 
            $Name  = $res[0].Groups['name'].value
            if ( $Value ){
                if ( $Name ){
                    $PSO = [PSCustomObject]@{
                        Name  = $Name
                        Value = $Value
                    }
                    $NameArray += $PSO
                }
                Else {
                    if ( $NameArray.count ){
                        ( $NameArray | Select-Object -last 1 ).Value += "; $Value"
                    }
                }
            }            
        }
    }
    Else {
        if ( $NameArray ){
            $Configs  += ,$NameArray
            $NameArray = @()
        }
    }
}

#Show results
foreach ( $item in $Configs){
    $item | Format-Table
}
票数 1
EN

Stack Overflow用户

发布于 2015-08-31 20:23:32

我知道这不是一个完整的答案,但它可能足以让您入门。下面的代码输出BCD知道的所有操作系统的显示名称。

代码语言:javascript
复制
$cxOptions= new-object System.Management.ConnectionOptions
$cxOptions.Impersonation=[System.Management.ImpersonationLevel]::Impersonate
$cxOptions.EnablePrivileges=$true

$mgmtScope=new-object System.Management.ManagementScope -ArgumentList "root\WMI",$cxOptions
$mgmtPath=new-object System.Management.ManagementPath -ArgumentList 'root\WMI:BcdObject.Id="{9dea862c-5cdd-4e70-acc1-f32b344d4795}",StoreFilePath=""'
$mgmtObject=new-object System.Management.ManagementObject -ArgumentList $mgmtScope,$mgmtPath,$null

# Determine what elements exist in the object and output their value in HEX format
#$mgmtObject.EnumerateElementTypes().types | % { "{0:X0}" -f $_ }

$objBCD=$mgmtObject.GetElement(0x24000001)
$objElements=$objBCD.GetPropertyValue("Element")

$strOldID="{9dea862c-5cdd-4e70-acc1-f32b344d4795}"
for ($i=0; $i -lt $objElements.Ids.Count; $i++) {
  $mgmtPath.Path=$mgmtPath.Path.Replace($strOldID,$objElements.Ids[$i])
  $strOldID=$objElements.Ids[$i]
  $objBCDId=new-object System.Management.ManagementObject -ArgumentList $mgmtScope,$mgmtPath,$null
  $strOS=$objBCDId.GetElement(0x12000004)
  $strOS.Element.String
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16903460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档