Почему я не могу использовать Start-Process PowerShell с параметрами -Credential и -Verb? - PullRequest
2 голосов
/ 04 июня 2019

Используя powershell.exe, я хочу эмулировать команду cmd.exe runas с дополнительным преимуществом повышения привилегий через UAC.

Однако, если я одновременно поставлю оба параметра -Credential и -Verb Runas для Start-Process, я получу ошибку ниже:

Start-Process powershell.exe -Credential (New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList 'username',(ConvertTo-SecureString 'password' -AsPlainText -Force)) -ArgumentList '-NoProfile' -Verb RunAs

Start-Process : Parameter set cannot be resolved using the specified named parameters.
At line:1 char:1
+ Start-Process powershell.exe -Credential (New-Object -TypeName System ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Start-Process], ParameterBindingException
    + FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.PowerShell.Commands.StartProcessCommand

Использование только одного из этих параметров не приводит к ошибкам:

Start-Process -Verb RunAs powershell.exe -ArgumentList "-NoProfile"

Почему это? Обе синтаксические формы Start-Process принимают [<CommonParameters>], которому -Verb Runas принадлежит?

1 Ответ

3 голосов
/ 04 июня 2019

Параметр -Verb доступен только в одном из наборов параметров (если вы сделаете Get-Help Start-Process, вы можете увидеть его явно во втором наборе):

SYNTAX
    Start-Process [-FilePath] <String> [[-ArgumentList] <String[]>] [-Credential <PSCredential>] [-LoadUserProfile] [-NoNewWindow] [-PassThru] [-RedirectStandardError <String>] [-RedirectStandardInput <String>] [-RedirectStandardOutput <String>] [-UseNewEnvironment] [-Wait] [-WindowStyle {Normal | Hidden | Minimized | Maximized}] [-WorkingDirectory <String>]
    [<CommonParameters>]

    Start-Process [-FilePath] <String> [[-ArgumentList] <String[]>] [-PassThru] [-Verb <String>] [-Wait] [-WindowStyle {Normal | Hidden | Minimized | Maximized}] [-WorkingDirectory <String>] [<CommonParameters>]

Это не часть CommonParameters, которая включает в себя такие вещи, как -Debug, -Verbose, -ErrorAction и т. Д. (См. Полный список здесь ).

Похоже, что это возможный обходной путь:

Start-Process powershell -Credential mydomain\myuser -ArgumentList '-noprofile -command &{Start-Process powershell -verb runas}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...