使用double {}和BCDEDIT

时间:2016-04-15 05:25:26

标签: powershell powershell-remoting

我正在尝试使用powershell来提交Windows BCD更改。如果从常规命令行运行,那么BCDEDIT更改行看起来像这样:

bcdedit /set {default} recoveryenabled No

BCDEDIT需要以管理员身份运行,因此我有一个从计划任务调用的PowerShell脚本,脚本本身非常简单,如下所示:

invoke-command -scriptblock {start-process -Verb RunAS bcdedit /set {default} recoveryenabled No}

然而,当我运行时,我得到以下内容:

Invoke-Command : Parameter set cannot be resolved using the specified named    
parameters. At line:1 char:1

+ invoke-command "bcdedit /set {default} recoveryenabled No"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (:) [Invoke-Command],      ParameterBindingException
+ FullyQualifiedErrorId :     AmbiguousParameterSet,Microsoft.PowerShell.Commands.InvokeCommandCommand

我假设我需要以某种方式包装{default}命令,因为它已经通过-scriptblock部分在{}中 - 我将如何进行?

我可能只是使用普通的'DOS cmd脚本,但我想使用PowerShell,因为我喜欢日志功能/等,我正在使用相同的脚本执行其他功能。

欧文

2 个答案:

答案 0 :(得分:1)

我将代码更改为这些代码并且有效。

Invoke-Command -ScriptBlock {Start-Process bcdedit -Verb RunAS -ArgumentList "/set {default} recoveryenabled NO"}

bcdedit之后的一堆事物,/set {default} recoveryenabled No实际上是bcdedit的参数。你必须开始bcdedit的过程并将其余的东西作为参数传递。

答案 1 :(得分:0)

您可以改用 Invoke-Expression cmdlet。

invoke-command -scriptblock {Invoke-Expression "RunAS bcdedit /set {default} recoveryenabled No"}

PS。确保使用正确的RunAs参数。