如何通过SSM API在AWS EC2实例上启动可交互查看的Google Chrome进程?
如何通过SSM API在AWS EC2实例上启动可交互查看的Google Chrome进程?
这个问题我之前处理过,核心原因很明确:SSM执行PowerShell命令默认是在会话0(系统后台会话)运行的,而你通过RDP登录的是普通用户的桌面会话(通常是会话1、2这类非0会话),不同会话之间的进程是完全隔离的,所以你看不到后台启动的Chrome窗口。
下面给你两个实用的解决方案,亲测有效:
方案一:使用PsExec指定用户会话启动(推荐)
PsExec是Windows Sysinternals工具集里的工具,它可以跨会话启动进程,直接把Chrome启动到你RDP登录的用户桌面。
步骤:
- 先确保EC2实例上有PsExec工具:
你可以先通过SSM执行命令下载PsExec到实例,比如:Invoke-WebRequest -Uri "https://download.sysinternals.com/files/PSTools.zip" -OutFile "C:\PSTools.zip" Expand-Archive -Path "C:\PSTools.zip" -DestinationPath "C:\PSTools" - 修改你的SSM命令,先获取当前活跃的用户会话ID,再用PsExec启动Chrome:
# 获取当前RDP登录用户的会话ID(如果多个用户登录,需要调整逻辑选目标会话) $sessionId = (quser | Select-Object -Skip 1 | ForEach-Object { ($_ -split '\s+')[2] }) # 用PsExec在目标会话启动Chrome & "C:\PSTools\psexec.exe" -i $sessionId "C:\Program Files\Google\Chrome\Application\chrome.exe"
方案二:通过进程会话ID关联启动
如果不想用第三方工具,也可以通过获取用户桌面进程的会话ID,再启动Chrome到对应会话:
# 找到当前登录用户的explorer.exe进程(它运行在用户桌面会话) $userSessionProcess = Get-Process explorer | Where-Object { $_.SessionId -ne 0 } | Select-Object -First 1 if ($userSessionProcess) { $targetSessionId = $userSessionProcess.SessionId # 创建进程启动信息,指定会话ID启动Chrome $startInfo = New-Object System.Diagnostics.ProcessStartInfo $startInfo.FileName = "C:\Program Files\Google\Chrome\Application\chrome.exe" $startInfo.UseShellExecute = $false $process = New-Object System.Diagnostics.Process $process.StartInfo = $startInfo # 这里需要管理员权限才能跨会话启动,启动后Chrome会出现在目标会话桌面 $process.Start() | Out-Null }
关键注意事项:
- 你的SSM命令必须以管理员权限执行,跨会话启动进程需要足够权限;
- 如果EC2实例有多个用户同时登录,记得通过
quser命令确认目标会话ID,避免启动到其他用户桌面; - 确保Chrome的安装路径正确,不同版本的Chrome路径可能略有差异。
备注:内容来源于stack exchange,提问作者Hasse Andersen
相关产品推荐
相关产品推荐

