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

如何为带RunAs的Start-Process添加-executionpolicy bypass参数?

解决PowerShell提权时添加-ExecutionPolicy Bypass参数的问题

你之前的写法错误在于把-ExecutionPolicy Bypass放到了脚本调用的命令字符串里,但实际上这个参数是PowerShell.exe的启动参数,需要直接传递给新启动的PowerShell进程,而不是作为脚本内部的执行命令。

直接用参数数组传递是最可靠的方式,能避免路径含空格时的引号混乱,修改后的代码如下:

if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    # 构建PowerShell启动参数数组:先指定执行策略,再指定要运行的脚本文件
    $arguments = @(
        "-ExecutionPolicy", "Bypass",
        "-File", $myInvocation.MyCommand.Definition
    )
    Start-Process PowerShell -Verb RunAs -ArgumentList $arguments
}
else {
    Get-ExecutionPolicy
    Pause
}

如果习惯用字符串形式传递参数,也可以这样写(注意路径的引号转义):

if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    $scriptPath = $myInvocation.MyCommand.Definition
    $arguments = "-ExecutionPolicy Bypass -File `"$scriptPath`""
    Start-Process PowerShell -Verb RunAs -ArgumentList $arguments
}
else {
    Get-ExecutionPolicy
    Pause
}

两种写法都能让提权后的PowerShell进程以Bypass执行策略运行当前脚本,不会出现窗口闪退的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:17:08