You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 10下PowerShell如何启动高权限进程并传递参数?

从非高权限PowerShell启动高权限PowerShell并传递参数的简单方法

问题根源

高权限进程(通过RunAs触发UAC提升)默认不会继承父进程环境变量,且PowerShell 5.1及以下版本的Start-Process没有-Environment参数,这就是你碰到参数错误的原因。

两种简单实现方案

方案1:直接通过命令行参数传递

无需依赖环境变量,直接把参数嵌入启动命令中,这是最简洁的方式:

# 基础用法
Start-Process powershell.exe -Verb RunAs -ArgumentList "-NoProfile -Command `$PRM1='参数值'; & 'C:\你的路径\test.ps1'"

如果参数包含空格或特殊字符,用单引号包裹即可:

$targetParam = "包含空格&特殊符号的参数"
Start-Process powershell.exe -Verb RunAs -ArgumentList "-NoProfile -Command `$PRM1='$targetParam'; & 'C:\你的路径\test.ps1'"
  • -Verb RunAs:触发UAC权限提升
  • -ArgumentList:直接在高权限PowerShell中定义变量并执行脚本,变量可被脚本直接读取

方案2:通过临时文件传递复杂参数

如果参数是多行文本、大段内容,用临时文件传递更稳妥:

  1. 父进程写入临时文件:
$complexParam = @"
这是多行参数内容
包含换行和特殊符号@#$%
"@
$tempPath = [System.IO.Path]::GetTempFileName()
Set-Content -Path $tempPath -Value $complexParam -Encoding UTF8
  1. 启动高权限进程并读取临时文件:
Start-Process powershell.exe -Verb RunAs -ArgumentList "-NoProfile -Command `$PRM1=(Get-Content '$tempPath' -Raw); & 'C:\你的路径\test.ps1'; Remove-Item '$tempPath'"
  • 脚本执行完成后自动删除临时文件,避免残留

针对PowerShell 7+的额外方案

如果你使用的是PowerShell 7及以上版本,Start-Process新增了-Environment参数,可以直接传递环境变量哈希表:

$customEnv = @{ PRM1 = "你的参数值" }
Start-Process pwsh.exe -Verb RunAs -Environment $customEnv -ArgumentList "-NoProfile -File 'C:\你的路径\test.ps1'"

注意:该参数仅在PowerShell 7+中可用,PowerShell 5.1及以下不支持。

内容的提问来源于stack exchange,提问作者bambino350

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 23:12:22