【问题标题】:Powershell: Start-Process doesn't pass arguments to cmd.exePowershell:Start-Process 不会将参数传递给 cmd.exe
【发布时间】:2021-12-12 06:35:06
【问题描述】:

这些是在 powershell 控制台 (Windows 10) 中运行的命令:

$username = 'Username'
$password = 'Password'
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword
Start-Process powershell.exe -Credential $credential -WindowStyle Hidden -ArgumentList "Start-Process cmd.exe -Verb RunAs -ArgumentList 'value'"

这些命令可以正常工作,除非您通过另一个用户以管理员身份打开 cmd.exe,通过运行以下命令:

echo %1

它还给我:

%1

字面意思。相反,我期望:

value

我做错了什么?

【问题讨论】:

  • 您不这样做的任何原因:Start-Process cmd.exe -Credential $credential -ArgumentList "echo value" -Verb RunAs?
  • 因为 Credential 和 Runas 不能在同一个命令中。 Parameter set cannot be resolved using the specified named parameters.我看到了对评论的支持,所以它对你有用吗?
  • 谁能回复我的评论?建议给你的命令有效吗?
  • 不,它们不能一起使用。不知道为什么对那条评论投赞成票。

标签: powershell cmd windows-10


【解决方案1】:

我只是 answered a question 可以使用我在那里提供的脚本找到解决方案,并进行一些修改,并以特定方式调用命令链:

RunAsProxy.ps1

# First arg should be the script path
$script = $args[0]

# Rest of args should be any script parameters
$scriptArgs = $args[1..$args.Count] -join ' '

$startProcessArgs = @{
  Wait = $true
  Verb = 'RunAs'
  FilePath = 'cmd.exe'
  ArgumentList = "/c ""$script"" $scriptArgs"
}
Start-Process @startProcessArgs

exit $LASTEXITCODE

然后调用RunAsProxy.ps1作为你要运行的用户,然后提升:

$command = "Command_you_want_to_run_from_cmd.exe"
$arguments = "any arguments to the program"
Start-Process -Cred $credential powershell.exe "-File ./RunAsProxy.ps1 $command $arguments"

它的工作方式与您尝试的差不多,但使用预定义的脚本来处理海拔高度。但正如您发现的那样,您不能在Start-Process 的同一调用中调用-Credential-Verb。所以这比定义内联代码更容易:

  1. 以目标用户身份运行RunAsProxy.ps1
  2. RunAsProxy.ps1 将使用提供的参数运行 cmd.exe 并提升进程。

请注意,如果RunAsProxy.ps1 不在当前目录中,您需要提供它的相对路径或完整路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-07
    • 2012-08-23
    • 2022-01-25
    • 1970-01-01
    • 2013-10-01
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多