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

如何在管理员权限运行的PowerShell脚本中以普通用户身份执行子脚本

问题原因
  • 路径语法错误:你给出的脚本路径为C:Software\script_executed_as_user.ps1,缺失盘符后的反斜杠,正确路径应为C:\Software\script_executed_as_user.ps1,路径解析失败会导致进程直接退出。
  • PowerShell启动参数缺失:调用powershell.exe执行脚本时未指定-File参数,PowerShell默认会将路径解析为命令而非脚本文件,导致执行失败。
  • 无报错捕获逻辑:Start-Process默认会以独立窗口启动进程,执行失败时窗口会瞬间关闭,不会向主脚本返回任何错误信息,你无法感知到执行异常。
  • 执行策略限制:新启动的普通用户PowerShell进程默认可能启用了禁止执行未签名脚本的策略,脚本会直接被拦截终止。
  • 权限不足:目标普通用户没有C:\Software目录的读取权限,或是没有脚本内涉及的操作权限,会导致脚本启动后直接闪退。
解决方法

首先使用修正后的调用代码:

$username = 'domain\username' # 域账号格式为 域名\用户名,本地账号格式为 .\用户名
$password = '你的密码'
$scriptPath = "C:\Software\script_executed_as_user.ps1"
$logPath = "C:\temp\script_run.log" # 提前确保普通用户对该目录有写入权限

# 预先校验路径存在
if(-not (Test-Path $scriptPath)){
    Write-Error "目标脚本不存在:$scriptPath"
    exit 1
}

$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword

# 启动进程时新增参数,捕获执行状态和日志
$process = Start-Process powershell -ArgumentList "-ExecutionPolicy Bypass -File `"$scriptPath`" > `"$logPath`" 2>&1" -Credential $credential -PassThru -Wait

# 输出进程退出码,非0代表执行异常
Write-Host "子进程退出码:$($process.ExitCode)"

补充注意项:

  • 被调用的脚本script_executed_as_user.ps1开头可添加Start-Transcript -Path C:\temp\user_script.log,记录脚本内部的执行细节,方便排查内部逻辑错误。
  • 提前确认目标普通用户对脚本路径、脚本涉及的所有读写资源、日志存储路径都有对应的访问权限。
  • 如果是在任务计划程序等会话0环境中执行,需勾选仅在用户登录时运行,跨用户启动的进程无法在会话0中正常执行。

内容的提问来源于stack exchange,提问作者M.vacc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:45:03