繁体   English   中英

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

[英]How do I (administrator) gracefully close a window process running in another user session using powershell on Windows 2008 R2 Remote Desktop Services

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

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

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

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

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

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

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

它有两个主要缺点。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM