Вопрос о ISE против консоли с SystemEvents - PullRequest
2 голосов
/ 14 апреля 2019

Когда я запускаю следующее в PowerShell ISE, оно отлично работает, дает мне причину «AccountLock» или «AccountUnlock» именно так, как и должно быть.Однако когда я запускаю эту точную команду в консоли с расширенными правами оболочки, она вообще не возвращает причину переключения сеансов в консоли.После разблокировки ничего не возвращается.

Я проверил Get-EventSubscriber, а также Get-Job, и оба выглядят успешно созданными.Снимок экрана: подписчик и работа:

get-job and get-EventSuscriber calls

Register-ObjectEvent -InputObject $([microsoft.win32.systemevents]) -EventName "SessionSwitch" -Action {write-host $event.SourceEventArgs.Reason}

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

ОС: Windows 10 Версия: 5.1 Build 17134 R 590

1 Ответ

0 голосов
/ 15 апреля 2019

Ознакомьтесь с документацией Microsoft: Событие SystemEvents.SessionSwitch , объяснение, по-видимому, заключается в том, что это сообщение отправляется насосу сообщений, который является частью кода, обрабатывающего графические сообщения. Возможно, вы можете попытаться использовать скрытую форму в своем коде, чтобы принудительно создать насос сообщений.

Примечание:

Это событие возникает, только если работает насос сообщений. В службе Windows, если не используется скрытая форма или насос сообщений запущен вручную, это событие не будет вызываться. Пример кода, который показывает, как обрабатывать системные события с помощью скрытой формы в службе Windows, см. В классе SystemEvents.

...