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

如何在非管理员CMD中以高权限运行PowerShell脚本

问题

我想在非管理员权限的命令提示符(Command Prompt)里,以高权限调用我的PowerShell脚本。
手动用「以管理员身份运行」打开命令提示符,输入以下命令时,脚本运行正常:

powershell -ExecutionPolicy Unrestricted -Command "Start-Process Powershell -Verb RunAs -Wait -ArgumentList '-NoProfile -ExecutionPolicy Unrestricted -File example.ps1 param1'"

但在非管理员命令提示符里运行这条命令,PowerShell窗口会闪一下就退出,求解决办法。

尝试过的方法
  • 使用runas.exe调用,窗口依然闪退:
    runas.exe /netonly /noprofile /user:domainadm@domain "powershell.exe -noprofile -File "C:\Users\...\Desktop\Powershell_scripts\New-ADuser\.ps1" -verb RunAs"
    
  • 简化Start-Process调用,问题依旧:
    powershell -Command "&{ Start-Process powershell -ArgumentList '-File example.ps1 param1' -Verb RunAs}"
    
  • 使用ExecutionPolicy Bypass参数,还是窗口闪退:
    PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command "Start-Process -FilePath PowerShell.exe -Verb RunAs -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File "example.ps1 param1"'"
    

背景

我的PowerShell脚本用于下载param1指定的NSIS安装程序。

脚本代码

$param1 = $args[0]
Add-Type -AssemblyName Microsoft.VisualBasic
Add-Type -AssemblyName System.Windows.Forms

$installer = Start-Process -FilePath $param1 -PassThru
$installerWindowName = "Installer Setup"

while (-not ($installer.MainWindowTitle -match "$installerWindowName")) {
    Start-Sleep -Milliseconds 100
    $installer.Refresh()
}
解决方案

1. 保留管理员窗口排查错误

闪退核心原因是命令执行出错但窗口自动关闭,无法查看错误信息。修改命令给新启动的管理员PowerShell加上-NoExit参数,让窗口执行后不自动关闭:

powershell -ExecutionPolicy Unrestricted -Command "Start-Process Powershell -Verb RunAs -Wait -ArgumentList '-NoExit -NoProfile -ExecutionPolicy Unrestricted -File ""example.ps1"" ""param1""'"

注意:CMD中嵌套双引号需要用两个连续双引号""转义,确保脚本路径和参数能正确传递给管理员PowerShell。

2. 使用脚本绝对路径避免目录问题

非管理员CMD的当前目录和管理员PowerShell默认目录(通常是C:\Windows\System32)不一致,用相对路径调用脚本可能导致管理员权限下找不到文件,改成绝对路径:

powershell -ExecutionPolicy Unrestricted -Command "Start-Process Powershell -Verb RunAs -Wait -ArgumentList '-NoExit -NoProfile -ExecutionPolicy Unrestricted -File ""C:\Your\Full\Path\To\example.ps1"" ""param1""'"

3. 优化批处理调用脚本

如果需要频繁执行,可写一个批处理文件(比如RunScriptAsAdmin.bat),利用%~dp0自动获取批处理所在目录,避免手动输入绝对路径:

@echo off
powershell -Command "Start-Process powershell.exe -Verb RunAs -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""%~dp0example.ps1"" ""param1""'"
pause

4. 排查脚本权限问题

如果param1是需要管理员权限才能访问的资源(比如受限网络路径、系统目录),或者NSIS安装程序本身需要管理员权限运行,可在脚本的Start-Process中加上-Verb RunAs:

$installer = Start-Process -FilePath $param1 -PassThru -Verb RunAs

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:07:51