Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Windows 10 (http://forum.oszone.net/forumdisplay.php?f=118)
-   -   [решено] Автозапуск при разблокировке, входе и в зависимости от RDP (http://forum.oszone.net/showthread.php?t=345035)

Analog 30-04-2020 13:18 2919502

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

Vadikan 30-04-2020 13:36 2919504

Включите аудит Computer Configuration-Windows Settings-Security Settings-Advanced Audit Policies-Logon/Logoff-Audit Other Logon/Logoff Events
Запускайте из планировщика по событию 4801 https://docs.microsoft.com/windows/s...ing/event-4801

Analog 30-04-2020 14:07 2919505

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

Vadikan 30-04-2020 14:15 2919507

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

Analog 01-05-2020 16:34 2919621

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

Vadikan 01-05-2020 18:14 2919637

Вложений: 1
Цитата:

Цитата Analog
А есть возможность не выполнять автозапуск, если учетка подключается через RDP? »

Надо скриптовать. Наверное, можно проверять вывод quser, и если sessionname для этого юзера не console, то это RDP.

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

Analog 04-05-2020 11:09 2919866

Цитата:

Цитата Vadikan
Теперь есть;) »

сложновато для меня.
указанный файлик - что с ним делать? PowerShell не понимает.

Iska 04-05-2020 11:39 2919869

Цитата:

Цитата Analog
указанный файлик - что с ним делать? PowerShell не понимает. »

Для начала — переименовать из .txt в .ps1.

Analog 04-05-2020 12:28 2919873

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

Vadikan 04-05-2020 13:23 2919880

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


Время: 14:42.

Время: 14:42.
© OSzone.net 2001-