я прочел страницы TechNet, описывающие использование сценариев запуска / завершения работы компьютера / пользователя, и это здорово, но я бы хотел создавать эти сценарии через командную строку (без необходимости щелкать по gpedit.msc).
Это выглядит как scripts.ini и psscripts.ini в % SYSTEMROOT% \ System32 \ GroupPolicy \ Machine \ Scripts указывает сценарии для запуска, но они не существуют до запуска gpedit.msc в первый раз. Безопасно ли создавать и редактировать их напрямую? Или надо гадать с Set-GPO или чем-то подобным? Спасибо!
Групповая политика предполагает, что вы находитесь в среде домена Active Directory, и в этом случае объекты групповой политики (GPO) управляются централизованно и назначаются компьютерам. Для отдельных компьютеров локальную политику безопасности можно использовать для получения результатов, аналогичных централизованно управляемым объектам групповой политики.
Обычно в Active Directory сценарии входа назначаются объектам «Пользователь», хотя вы также можете сделать это с помощью групповой политики.
Если вы не используете Active Directory или хотите настроить это только на относительно небольшом количестве компьютеров, вы, безусловно, можете сделать это с помощью PowerShell с помощью планировщика задач. С помощью планировщика заданий вы можете создавать события для запуска при запуске, завершении сеанса или входа в систему.
Вы можете использовать команду выключения?
Я предполагаю, что вам нужно событие отключения?
По сути, невозможно запустить сценарий при возникновении события выключения, выхода из системы - да, но выключения - нет. У меня есть приложение C #, которое прослушивает сообщение о завершении работы, но когда сообщение приходит, невозможно создать какие-либо новые процессы, и событие часто пропускается.
Windows отправляет сообщение о завершении работы WM всем окнам верхнего уровня WM_CLOSE и т. Д., Но делает это последовательно для всех программ рабочего стола. Если вы его получите последним, у вас не останется времени.
В Windows есть модуль загрузки / выгрузки процесса или блокировка dll, что означает, что когда приложения завершаются или выгружаются, приложения не могут загружаться в один и тот же момент - это проблема защиты с однопоточным «совместным использованием общих материалов». Сделано для экономии оперативной памяти, но ловит нас здесь, замедляя работу в период загрузки ОС.
В Windows есть внутренний флаг, который запрещает запускать какие-либо новые процессы или сценарии, которые мы завершаем. Это означает, что все, что слушает, может только писать в удаленный файл или использовать TCP-соединение или подобное, чтобы сообщить кому-нибудь о его закрытии. Обычно вы не можете запускать новые сценарии во время завершения работы.