无法在powershell中使用bcdedit filelds进行编辑-cmd.exe命令行失败

无法在powershell中使用bcdedit filelds进行编辑-cmd.exe命令行失败,powershell,cmd,parameter-passing,bcdedit,Powershell,Cmd,Parameter Passing,Bcdedit,为什么我不能在PowerShell中使用bcdedit编辑描述字段 例如,在cmd.exe中,使用以下命令: bcdedit /set {GUID} description "OS2" 成功完成,更改指定GUID的描述字段,但在Powershell中执行相同操作时,出现以下错误: The set command specified is not valid. Run "bcdedit /?" for command line assistance. The parameter is incor

为什么我不能在PowerShell中使用
bcdedit
编辑描述字段

例如,在
cmd.exe
中,使用以下命令:

bcdedit /set {GUID} description "OS2"
成功完成,更改指定GUID的描述字段,但在Powershell中执行相同操作时,出现以下错误:

The set command specified is not valid.
Run "bcdedit /?" for command line assistance.
The parameter is incorrect.

有人能给我解释一下吗?

{…}
中包含的值作为文本(原样)传递到PowerShell中,您必须引用它;e、 g:

bcdedit /set "{340E0E1A-01EC-4A33-A850-8D6A09FD4CE9}" description "OS2"
{
}
cmd.exe
中不同,它们是元字符,即在PowerShell中使用时无引号(它们包含一个脚本块)具有特殊意义的字符,在这种情况下,恰好导致
{
}
被删除。
引用可以避免这种情况

或者,您可以
`
-单独转义未引用的元字符

bcdedit/set`{340E0E1A-01EC-4A33-A850-8D6A09FD4CE9`}说明“OS2”

自PSv3以来可用的一种通用替代方法是使用所谓的,该方法按原样传递所有剩余参数,而无需PowerShell解释(扩展
%…%
-封闭环境变量引用除外):

注意事项:如果所有参数都是文本,则
-%
可以按预期工作,就像您的情况一样,一般情况下,它会阻止您将PowerShell变量和表达式用作参数,并可能产生其他意外的副作用-请参阅


可选背景信息 除非需要对PowerShell变量和表达式进行插值,
-%
允许按原样重用
cmd.exe
命令行,而无需担心PowerShell的引用(转义)要求

一般来说,PowerShell的元字符(不带引号时具有特殊意义的字符)
cmd.exe
不同,而且数量更多:

除了
cmd.exe
的元字符

& | < >
@
#
仅在令牌开头具有特殊含义。

{…}
中包含的值作为文本(原样)在PowerShell中传递,必须引用该值
;e、 g:

bcdedit /set "{340E0E1A-01EC-4A33-A850-8D6A09FD4CE9}" description "OS2"
{
}
cmd.exe
中不同,它们是元字符,即在PowerShell中使用时无引号(它们包含一个脚本块)具有特殊意义的字符,在这种情况下,恰好导致
{
}
被删除。
引用可以避免这种情况

或者,您可以
`
-单独转义未引用的元字符

bcdedit/set`{340E0E1A-01EC-4A33-A850-8D6A09FD4CE9`}说明“OS2”

自PSv3以来可用的一种通用替代方法是使用所谓的,该方法按原样传递所有剩余参数,而无需PowerShell解释(扩展
%…%
-封闭环境变量引用除外):

注意事项:如果所有参数都是文本,则
-%
可以按预期工作,就像您的情况一样,一般情况下,它会阻止您将PowerShell变量和表达式用作参数,并可能产生其他意外的副作用-请参阅


可选背景信息 除非需要对PowerShell变量和表达式进行插值,
-%
允许按原样重用
cmd.exe
命令行,而无需担心PowerShell的引用(转义)要求

一般来说,PowerShell的元字符(不带引号时具有特殊意义的字符)
cmd.exe
不同,而且数量更多:

除了
cmd.exe
的元字符

& | < >
@
#
仅在令牌开头具有特殊含义。

非常感谢您的详尽回答。它解决了我的问题,我将不得不得到一些Powershell的书来阅读更多关于这个!!干杯man@MilosPeric:我的荣幸;很高兴听到这有帮助。请注意,PowerShell还附带概念性帮助主题(尽管其深度和质量各不相同):
获取有关*
的帮助;e、 例如,
获取有关语法分析的帮助
。(奇怪的是,用于在浏览器中查看在线版本的
-online
开关似乎对概念性主题不起作用,但通过谷歌搜索准确的主题名称效果很好)。非常感谢您给出了这个完整的答案。它解决了我的问题,我将不得不得到一些Powershell的书来阅读更多关于这个!!干杯man@MilosPeric:我的荣幸;很高兴听到这有帮助。请注意,PowerShell还附带概念性帮助主题(尽管其深度和质量各不相同):
获取有关*
的帮助;e、 例如,
获取有关语法分析的帮助
。(奇怪的是,在浏览器中查看在线版本的
-online
开关似乎对概念性主题不起作用,但谷歌搜索确切的主题名称效果很好)。