В настоящее время я пишу сценарий powershell (5.0) для запуска и управления окончанием сеансов RDP на тонких клиентах Windows.
После завершения сеанса RDP сценарий выполняет определенную функцию. Для этого mstsc запускается как процесс (с командлетом Start-Process ). Затем Register-ObjectEvent используется для регистрации и перехвата события Exited процесса mstsc.
Когда mstsc запускается без параметра -ArgumentList (как показано в примере ниже), все работает нормально. Событие Exited наступает, как только заканчивается сеанс RDP или когда диалоговое окно входа в RDP закрывается до входа в систему.
$rdpSession = Start-Process -FilePath mstsc -PassThru
$RegisteredEvent = Register-ObjectEvent -InputObject $rdpSession -EventName Exited -Action {rdpSessionEnd} -Verbose
Использование параметра -ArgumentList для указания пользовательского пути к файлу rdp (как показано в примере ниже) приводит к возникновению события Exited сразу после запуска процесса mstsc, не дожидаясь окончания сеанса rdp.
$rdpSession = Start-Process -FilePath mstsc -ArgumentList C:\RDS\RDS.rdp -PassThru
$RegisteredEvent = Register-ObjectEvent -InputObject $rdpSession -EventName Exited -Action {rdpSessionEnd}
Скрипт должен быть запущен в 64-битной Windows. Ранее я читал о необходимости запускать версию mstsc из папки system32 или SysWOW64 в зависимости от того, какая ОС является 32- или 64-битной версией. Использование обоих экземпляров mstsc.exe с полным путем не решило проблему.
Любая помощь будет принята с благодарностью!