问题描述
在PowerShell
中尝试执行一个命令时出现此错误:
I am getting this error when trying exec one command in PowerShell
:
我正在尝试exec
此命令:
powershell.exe Start-Process -FilePath "C:\Windows\System32\attrib +h +s "%CD%"" -Verb runAs
有人可以帮我弄清楚为什么会发生这种情况以及如何解决吗?
Can someone please help me figuring out why this is happening and how to solve it?
推荐答案
Start-Process
cmdlet的-FilePath
参数需要一个可执行文件 的名称或路径,而不是一个 entire命令行.
The -FilePath
parameter of the Start-Process
cmdlet expects the name or path of an executable file by itself, not an entire command line.
要传递给通过-FilePath
指定的可执行文件的自变量必须通过-ArgumentList
作为数组单独传递 . (-Args
)参数.
The arguments to pass to the executable specified via -FilePath
must be passed separately, as an array, via the -ArgumentList
(-Args
) parameter.
从cmd.exe
(批处理文件)进行调用时,从概念上讲,更干净的方法是在单个"
括起来的参数中传递要由 PowerShell 进行评估的整个命令行:
When calling from cmd.exe
(a batch file), it's conceptually cleaner to pass the entire command line to be evaluated by PowerShell in a single, "
-enclosed argument:
powershell.exe -Command "Start-Process -Verb RunAs -FilePath attrib.exe -Args +h, +s, '\"%CD%\"'"
请注意需要转义%CD%
值 ,方法是先将其封装在'
中,然后再放在\"
中: PowerShell本身会将值识别为单个参数,而嵌入式\"
引号可确保最终目标程序attrib.exe
也将该值也视为单个参数.
Note the need to escape the %CD%
value doubly, by enclosing it in '
for the sake of PowerShell first, then in \"
inside that: The outer '
ensures that PowerShell itself recognizes the value as a single argument, and the embedded \"
quoting ensures that the ultimate target program, attrib.exe
, sees the value as a single argument too.
不幸的是,这种双重转义的需求是不幸的,并且不是必须的-在中对此进行了讨论GitHub问题.
This need for double escaping is unfortunate and shouldn't be necessary - it is discussed in this GitHub issue.
这篇关于如何使用需要从命令提示符/批处理文件中引用的参数来调用PowerShell Start-Process命令?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!