Powershell:启动进程不将参数传递给 cmd.exe

2024-05-10

这些是在 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

我究竟做错了什么?


I just 回答了一个问题 https://stackoverflow.com/a/69703042/584676可以使用我在那里提供的脚本找到解决方案,进行一些修改,并以特定方式调用命令链:

运行代理.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

然后打电话运行代理.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"

其工作方式与您尝试的方式几乎相同,但使用预定义的脚本来处理海拔。但正如你发现的,你不能打电话-Credential and -Verb在同一个调用中Start-Process。因此,这比内嵌定义代码更容易:

  1. Run RunAsProxy.ps1作为目标用户
  2. RunAsProxy.ps1 将运行cmd.exe根据提供的论据并提升流程。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Powershell:启动进程不将参数传递给 cmd.exe 的相关文章

随机推荐