首页 > 解决方案 > 为什么我不能同时使用 PowerShell 的 Start-Process 和 -Credential 和 -Verb 参数?

问题描述

使用powershell.exe,我想通过 UAC 提升权限来模拟cmd.exe的命令。runas

但是,如果我同时提供-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-Processaccept的两种语法形式[<CommonParameters>]-Verb Runas属于哪一种?

标签: powershell

解决方案


-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}'

推荐阅读