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

如何编写PS1脚本以在管理员权限的Windows Terminal中执行多条PowerShell命令

如何编写PS1脚本以在管理员权限的Windows Terminal中执行多条PowerShell命令

让我来帮你解决这个问题,你之前遇到的错误主要是因为Windows Terminal(wt.exe)的参数格式和直接调用pwsh.exe不一样,而且命令串的引号转义处理得不对。我给你两种可靠的写法,都能实现需求:

方法一:数组传递参数(推荐,避免引号混乱)

这种方式把每个参数拆成单独的数组元素,Start-Process会自动处理参数的传递,不用手动折腾引号转义:

# test.ps1
# 定义要执行的多条命令,注意如果想让$Home在新的管理员进程中解析,要加反引号转义
$targetCommands = "Pushd `$Home; bcdedit /enum bootmgr; pause"

# 构造wt.exe的参数数组
$wtArguments = @(
    "-M",  # 最大化窗口
    "-p", "PowerShell",  # 指定启动PowerShell配置文件的标签页
    "pwsh.exe",
    "-ExecutionPolicy", "Bypass",
    "-Command", $targetCommands
)

# 以管理员身份启动Windows Terminal
Start-Process -Verb RunAs -FilePath wt.exe -ArgumentList $wtArguments

方法二:单字符串参数(需要注意引号转义)

如果你习惯用单字符串传递参数,要确保内部的引号正确转义,避免Windows Terminal解析出错:

# test.ps1
# 转义命令中的双引号,同时转义$Home让它在新进程中生效
$targetCommands = "Pushd `$Home; bcdedit /enum bootmgr; pause"

# 构造完整的参数字符串,注意包裹命令的双引号要加反引号转义
$wtArguments = "-M -p PowerShell pwsh.exe -ExecutionPolicy Bypass -Command `"$targetCommands`""

Start-Process -Verb RunAs -FilePath wt.exe -ArgumentList $wtArguments

为什么之前的写法会报错?

你之前的脚本把参数拆成了数组,但wt.exe对参数的解析逻辑和pwsh.exe不同,拆分后的数组元素会被错误解析成独立的命令片段,导致找不到对应程序的错误(0x80070002就是文件/路径不存在的错误)。另外,命令串的引号转义不彻底,也让终端无法正确识别完整的命令。

执行上面的脚本后,会弹出UAC权限请求,同意后Windows Terminal就会以管理员身份打开,自动执行你指定的三条命令啦。

备注:内容来源于stack exchange,提问作者Mr.Key7

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 11:03:15