以条件(例如/ h或其他)的方式以管理员身份打开程序

时间:2017-12-17 04:36:29

标签: windows powershell batch-file

我想在批处理中使用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上批量处理这项工作?

1 个答案:

答案 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