如何通过PowerShell在Google Cloud Windows VM预启动桌面程序并解决RDP注销问题
针对Google Cloud Windows VM的两个RDP/PowerShell问题解答
问题1:通过PowerShell启动桌面程序,让RDP登录时程序已运行
当然可以实现,核心是要让程序在用户的桌面会话中启动,而不是PowerShell的后台无界面会话。这里有两种可靠的实操方法:
方法1:用Start-Process指定目标会话
如果已经通过RDP登录过(哪怕当前断开了,只要会话没被注销),先通过PowerShell获取你的用户会话ID:
# 查询所有活跃用户会话,找到你用户名对应的SessionId quser
拿到会话ID后,用以下命令启动程序:
Start-Process -FilePath "C:\你的程序路径\SlowProgram.exe" -SessionId <你的会话ID>
程序会直接在你之前的桌面会话中运行,下次RDP连接时就能看到它已经在后台加载完成了。
方法2:创建登录触发的计划任务(适合长期自动启动场景)
如果需要程序每次用户登录(包括RDP登录)时自动启动,或者用户还未登录的情况下预启动,可以用PowerShell创建计划任务:
# 定义任务动作:启动目标程序 $taskAction = New-ScheduledTaskAction -Execute "C:\你的程序路径\SlowProgram.exe" # 定义触发条件:用户登录时 $taskTrigger = New-ScheduledTaskTrigger -AtLogOn -User "你的Windows用户名" # 注册任务 Register-ScheduledTask -TaskName "AutoStartSlowApp" -Action $taskAction -Trigger $taskTrigger -User "你的Windows用户名" -Password "你的用户密码"
后续无论是通过RDP还是本地登录,程序都会自动启动,用PowerShell创建的任务也完全适配桌面会话环境。
问题2:解决关闭RDP后用户自动注销、会话终止的问题
这个是Windows默认的远程桌面会话超时策略导致的,你可以通过以下方式修改:
方法1:本地组策略编辑器(图形界面操作直观)
- 在VM中打开
gpedit.msc(可以直接在PowerShell里输入这个命令启动) - 导航到路径:计算机配置 > 管理模板 > Windows组件 > 远程桌面服务 > 远程桌面会话主机 > 会话时间限制
- 找到并修改以下两个关键设置:
- 设置断开连接的会话的时间限制:设为“已启用”,然后选择“从不”
- 设置活动但空闲的远程桌面服务会话的时间限制:根据需求,也可设为“已启用”并选择“从不”
- 应用设置后,重启远程桌面服务或VM即可生效。
方法2:PowerShell修改注册表(无图形界面场景适用)
直接修改注册表对应键值,无需打开组策略:
# 修改断开连接的会话永不超时 Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Terminal Server\WinStations\RDP-Tcp" -Name "MaxDisconnectionTime" -Value 0 # 修改空闲会话永不超时 Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Terminal Server\WinStations\RDP-Tcp" -Name "MaxIdleTime" -Value 0 # 禁用会话断开后自动注销 Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Terminal Server" -Name "fResetBroken" -Value 0
修改完成后,重启远程桌面服务使设置生效:
Restart-Service TermService -Force
额外注意:Google Cloud VM专属检查
部分Google Cloud Windows VM默认启用了实例级的闲置注销策略,你需要在控制台确认:
- 登录Google Cloud控制台,找到目标VM实例
- 进入“编辑”页面,查看“远程桌面”模块,确保未勾选“闲置时自动注销”类的选项(如有则取消)
内容的提问来源于stack exchange,提问作者Royi




