如何(管理员)使用Windows 2008 R2远程桌面服务上的Powershell正常关闭在另一个用户会话中运行的窗口进程

时间:2018-11-15 03:10:02

标签: powershell windows-server-2008-r2

如果我在会话中运行以下命令...

(Get-Process -Id $pid).CloseMainWindow()

我能够正常关闭进程(不会出现模态窗口或其他弹出窗口)。

但是,如果pid在同一台计算机上的另一个用户会话中(正在运行RDS),则该进程不会关闭,并且CloseMainWindow()返回FALSE(如果在我自己的会话中运行,则返回TRUE)。如果我从其他用户的会话中运行Powershell,它也将起作用。

我特别需要一种正常关闭程序的方法,因为该程序有一些重要的清除操作,这些操作可以使数据库保持秩序。因此stop-process或process.kill()将不起作用。

1 个答案:

答案 0 :(得分:0)

经过长时间的研究,似乎不可能做到这一点。但是,有一种解决方案至少满足了我的一些需求。

您可以创建Windows计划任务,该任务在会话 disconnect 上触发。这使您可以以用户身份而不是管理员身份运行清理作业 ,从而允许程序正常退出。

它有两个主要缺点。...

  1. 即使用户只是轻微的网络中断,它也会被调用(因此,您必须在脚本中构建一个wait()函数以使其休眠一会儿,然后检查它是否仍然断开连接-并非干净解决方案。

  2. 在注销事件期间不会调用它。为此,您需要使用由GPO触发的注销脚本。

希望这对以后的人有帮助。