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

如何让服务启动的PowerShell GUI程序对所有登录用户可见?

解决Windows开机自动启动GUI程序并对登录用户可见的方案

方案一:调整任务计划程序配置

  • 打开任务计划程序,找到你的开机启动任务
  • 「常规」标签页:选择「不管用户是否登录都要运行」,同时勾选「使用最高权限运行」
  • 「触发器」标签页:编辑「启动时」触发器,勾选「延迟任务时间」(建议设1-2分钟),避免系统未完全加载用户环境导致启动失败
  • 「设置」标签页:取消勾选「如果任务运行时用户未登录,则不要启动」
  • 「操作」标签页:编辑启动操作,程序或脚本填powershell.exe,添加参数填-ExecutionPolicy Bypass -File "你的PS1脚本完整路径"

方案二:脚本内关联用户会话启动程序

核心是让程序启动在用户登录后的会话(而非服务默认的Session 0),在PS1脚本中加入以下逻辑:

  1. 获取当前活跃用户的会话ID:
$sessionId = (quser | Select-Object -Skip 1 | ForEach-Object { ($_ -split '\s+')[2] }) | Select-Object -First 1
  1. 检测到活跃会话后,关联会话启动程序:
# 循环检测,直到用户登录
while (-not $sessionId) {
    Start-Sleep -Seconds 30
    $sessionId = (quser | Select-Object -Skip 1 | ForEach-Object { ($_ -split '\s+')[2] }) | Select-Object -First 1
}
# 启动程序并关联到用户会话
Start-Process -FilePath "你的程序完整路径.exe" -ArgumentList "可选启动参数" -SessionId $sessionId -LoadUserProfile

方案三:使用psexec工具实现跨会话启动

如果上述方法无效,可借助微软Sysinternals的psexec.exe工具:

  1. 将psexec.exe放到脚本同目录或系统环境变量路径中
  2. 脚本内执行以下命令:
$sessionId = (quser | Select-Object -Skip 1 | ForEach-Object { ($_ -split '\s+')[2] }) | Select-Object -First 1
.\psexec.exe -s -i $sessionId "你的程序完整路径.exe"

-s表示以系统权限运行,-i表示关联到指定用户会话启动GUI程序

关键注意事项

  • 无需开启系统自动登录,用户正常登录后即可看到程序GUI
  • 必须确保任务计划和程序拥有足够权限,避免因权限不足导致界面隐藏
  • 延迟启动设置是必要的,可避免系统未加载完用户环境时启动失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:45:36