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

问题描述 投票:0回答:1

我想在批量但有条件的情况下使用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批量处理这项工作?

windows powershell batch-file
1个回答
2
投票

PowerShell中的反引号转义字符。在一份声明中

Start-Process `cmd /c` -Verb runas

反叛者逃离了ccmd/c之后的空间。前者没有问题,因为它只是让c成为文字c(无论如何)。然而,逃离/c-Verb之间的空间有效地将整个序列/c -Verb变成单个字符串。基本上它就像你运行这个语句一样:

Start-Process cmd "/c -Verb" runas

由于Start-Process只接受2个位置参数(-FilePath-ArgumentList),所以其他一切必须通过命名参数传递。因此,没有位置参数接受参数runas的错误。

像这样运行命令:

Start-Process cmd /c, dir, "$env:windir\temp" -Verb runas

要么

Start-Process -FilePath 'cmd.exe' -ArgumentList '/c', 'dir', "$env:windir\temp" -Verb runas

或者像这样(来自CMD):

powershell.exe -Command "Start-Process cmd /c, dir, \"$env:windir\temp\" -Verb runas"

它会像你期望的那样工作。


编辑 由于显然最初不够清楚:-ArgumentList参数的参数是以逗号分隔的列表(数组)。

Start-Process cmd /c, dir, "$env:windir\temp" -Verb runas
#                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
#                       this right here
© www.soinside.com 2019 - 2024. All rights reserved.