PDA

Показать полную графическую версию : [решено] Автозапуск при разблокировке, входе и в зависимости от RDP


Analog
30-04-2020, 13:18
Можно как-то сделать, чтоб содержимое shell:startup автоматически запускалось при каждом разблокировании системы?
Поясню: на компе два юзера, часть софта не может висеть в процессах одновременно у двух юзеров. создал батник, где процессы убиваются и открываются вновь уже для вошедшего юзера.
Таким образом, если я поюзал комп, заблокировал, пришла жена, поюзала - все впорядке, у нее после меня содержимое shell:startup запускается.
Но если она заблочит комп и вновь за него сяду я под своей учеткой - автозапуск в shell:startup уже не срабатывает, ибо я не заново вошел в систему, а разблокировал её под собой.
Как сделать так, чтоб нужный мне батник выполняелся при КАЖДОМ разблокировании компа под текущим юзером?

Vadikan
30-04-2020, 13:36
Включите аудит Computer Configuration-Windows Settings-Security Settings-Advanced Audit Policies-Logon/Logoff-Audit Other Logon/Logoff Events
Запускайте из планировщика по событию 4801 https://docs.microsoft.com/windows/security/threat-protection/auditing/event-4801

Analog
30-04-2020, 14:07
Для начала пробую перейти в принципе с shell:startup на Планировщик ,создал задание на "При входе", до "При разблокировке" пока не дошел.
Выяснилось, что запуск не срабатывает под двумя пользователями. Либо под одним, либо под другим.
Как правильно его настроить, под каким юзером запускать нужно? Если под Dmitrii, то скрипт срабатывает только при входе в систему Dmitrii. Если войдет другой юзер, под ним не срабатывает.
Если под "Администраторы", то запуск происходит только под тем, кто последний раз заходил в задачу и нажимал "Ок"

Vadikan
30-04-2020, 14:15
Analog, установить пользователя (а не группу, как вы сделали) - выполнять для всех пользователей. Либо для каждого пользователя свое задание - зависит от конкретной задачи, вам виднее.

Analog
01-05-2020, 16:34
Получилось, спасибо.
А есть возможность не выполнять автозапуск, если учетка подключается через RDP?
Поставил RDP Wrapper - для второго юзера при входе срабатывает автозапуск и у предыдущего часть софта убивается. То есть, можно это запретить в случае коннекта именно по RDP?

Vadikan
01-05-2020, 18:14
А есть возможность не выполнять автозапуск, если учетка подключается через RDP? »
Надо скриптовать (http://forum.oszone.net/forum-102.html). Наверное, можно проверять вывод quser, и если sessionname для этого юзера не console, то это RDP.

P.S. Я спросил Василия Гусева, нет ли простого способа на пошике. Теперь есть;)

Analog
04-05-2020, 11:09
Теперь есть;) »
сложновато для меня.
указанный файлик - что с ним делать? PowerShell не понимает.

Iska
04-05-2020, 11:39
указанный файлик - что с ним делать? PowerShell не понимает. »
Для начала — переименовать из .txt в .ps1.

Analog
04-05-2020, 12:28
Да, так не ругается. Теперь нужно этот скрипт в Планировщике поместить в Действия, перед bat-ником который мне убивает\перезапускает софт?

Vadikan
04-05-2020, 13:23
Analog, теперь у вас следующий уровень квеста - вам надо все на PowerShell перевести:)
Я смотрю вы файлы складываете прямо в корень С - плохая идея (видимо, с выключенным UAC работаете).

В консоли можете так экспериментировать, с учетом того, что скрипты в C:\scripts, а вы туда перешли cd c:\scripts

Для начала выясните свой SID
Get-LocalUser | fl *
Дальше дотсорсинг скрипта
. GetLogonSession.ps1
и выполнение функции
$session = Get-LogonSession
$session
Будет список всех сессий.

Теперь фильтруете по своему SID
$session | Where-Object {$_.SID -eq 'S-1-5-21-xxxxxxxx-xxxxxxxx-xxxxxx-xxxx'}
Вам нужно исключить RDP, т.е. RemoteInteractive (если вы не подключены к RDP, в списке такой сессии нет).
$rdp = $session | Where-Object {$_.SID -eq 'S-1-5-21-xxxxxxxx-xxxxxxxx-xxxxxx-xxxx' -and $_.LogonType -eq 'RemoteInteractive'}
$rdp -eq $null
True
И теперь запускаете свои программы, если условие соблюдается
if ($rdp -eq $null) {
Start-Process notepad
Start-Process calc}

Для планировщика же дописываете в скрипт
$session = Get-LogonSession
$rdp = $session | Where-Object {$_.SID -eq 'S-1-5-21-xxxxxxxx-xxxxxxxx-xxxxxx-xxxx' -and $_.LogonType -eq 'RemoteInteractive'}
if ($rdp -eq $null) {
Start-Process notepad
Start-Process calc}
И настраиваете запуск.
Программа или сценарий: powershell
Аргументы: -ExecutionPolicy Bypass -WindowStyle Hidden -file C:\scripts\GetLogonSession.ps1

Как-то так. См. также Запуск без моргания окон PowerShell (http://www.outsidethebox.ms/20351/#_Toc139)




© OSzone.net 2001-2012