我正在尝试使用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,因为我喜欢日志功能/等,我正在使用相同的脚本执行其他功能。
欧文
答案 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参数。