因此,我可以在powershell脚本中编写bcd命令,就像在cmd提示符中一样,例如:
bcdedit /default '{current}'但是,我需要一个执行此操作的脚本:
bcdedit /default '{current}'
bcdedit /set '{otherboot}' description "my description"如果它不这样做,它将是另一种方式:
bcdedit /default '{otherboot}'
bcdedit /set '{current}' description "my description"我需要做的是在powershell中找到另一个引导的标识符,但我不确定如何找到。所有的谷歌搜索都会说这样做:
$bcdStore=gwmi -name root\wmi -list bcdstore -enableall
$bcdStore|gm
$result=$bcdStore.OpenStore("") # can also use explicit file name.
$store=$result.Store但我不知道如何使用商店一旦我有它,这似乎有点太复杂了。我的意思是应该有更简单的方法..。不是吗?
发布于 2021-10-11 18:13:19
队友们!
我写了BCDEdit解析器。我认为这将是有用的。
$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
}发布于 2015-08-31 20:23:32
我知道这不是一个完整的答案,但它可能足以让您入门。下面的代码输出BCD知道的所有操作系统的显示名称。
$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
}https://stackoverflow.com/questions/16903460
复制相似问题