Как (администратор) изящно закрыть процесс окна, запущенный в другом сеансе пользователя, используя powershell в Windows 2008 R2 Remote Desktop Services - PullRequest
0 голосов
/ 15 ноября 2018

Если я выполню следующую команду в моем сеансе ...

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

Я могу корректно завершить процесс (никаких модальных окон или других всплывающих окон не возникает).

Если, однако, pid находится в сеансе другого пользователя на той же машине (работает RDS), процесс не закрывается, и CloseMainWindow () возвращает FALSE (он возвращает TRUE, если он выполняется в моем собственном сеансе). Это также работает, если я запускаю powershell из сеанса другого пользователя.

Мне особенно нужен способ изящно закрыть программу, так как в программе есть несколько важных действий по очистке, необходимых для поддержания порядка в базе данных. Так что stop-process или process.kill () не будут работать.

1 Ответ

0 голосов
/ 08 мая 2019

После долгих исследований это не представляется возможным.Однако существует решение, которое удовлетворяет как минимум некоторым моим требованиям.

Вы можете создать запланированное задание Windows, которое запускается в сеансе отключение .Это позволяет запускать задание очистки как пользователь , а не как администратор, что позволяет программам корректно завершать работу.

У него есть два основных недостатка ....

  1. Он вызывается, даже если у пользователя просто небольшое сетевое прерывание (поэтому вы должны создать wait ()функция в скрипте, чтобы немного поспать, а затем проверить, все ли еще отключено - не чистое решение.

  2. Не вызывается во время события выхода из системы. Для этого вынеобходимо использовать сценарий выхода из системы, запускаемый объектом групповой политики.

Надеюсь, это поможет кому-то в будущем.

...