我想在批处理中使用Start-Process
运行PowerShell程序但有条件。
我测试了它,并使用cmd /c
命令运行Start-Process
。
命令:
powershell -Command "Start-Process `cmd /c` -Verb runas"
它没有用。
所以我在PowerShell上测试了它。尝试了同样的命令,它返回了这个错误:
Start-Process : A positional parameter cannot be found that accepts argument 'runas'. At line:1 char:14 + Start-Process <<<< 'cmd /c' -Verb runas + CategoryInfo : InvalidArgument: (:) [Start-Process], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand
如何使用powershell
命令在主PowerShell上批量处理这项工作?
答案 0 :(得分:2)
反引号是PowerShell的转义字符。在一份声明中
Start-Process `cmd /c` -Verb runas
反引号会转移c
的{{1}}和cmd
之后的空格。前者并不成问题,因为它只会使/c
为文字c
(无论如何)。但是,转义c
和/c
之间的空格会有效地将整个序列-Verb
转换为单个字符串。基本上它就像你运行这个陈述一样:
/c -Verb
由于Start-Process
只接受2个位置参数(Start-Process cmd "/c -Verb" runas
和-FilePath
),因此必须通过命名参数传递所有其他参数。因此,没有位置参数接受参数-ArgumentList
的错误。
运行如下命令:
runas
或
Start-Process cmd /c, dir, "$env:windir\temp" -Verb runas
或像这样(来自CMD):
Start-Process -FilePath 'cmd.exe' -ArgumentList '/c', 'dir', "$env:windir\temp" -Verb runas
它会像你期待的那样发挥作用。
修改强>
由于最初显然不够清楚:powershell.exe -Command "Start-Process cmd /c, dir, \"$env:windir\temp\" -Verb runas"
参数的参数是以逗号分隔的列表(数组)。
-ArgumentList