Назад | Перейти на главную страницу

Как я могу создать сценарий выключения Windows из командной строки / PowerShell?

я прочел страницы TechNet, описывающие использование сценариев запуска / завершения работы компьютера / пользователя, и это здорово, но я бы хотел создавать эти сценарии через командную строку (без необходимости щелкать по gpedit.msc).

Это выглядит как scripts.ini и psscripts.ini в % SYSTEMROOT% \ System32 \ GroupPolicy \ Machine \ Scripts указывает сценарии для запуска, но они не существуют до запуска gpedit.msc в первый раз. Безопасно ли создавать и редактировать их напрямую? Или надо гадать с Set-GPO или чем-то подобным? Спасибо!

Групповая политика предполагает, что вы находитесь в среде домена Active Directory, и в этом случае объекты групповой политики (GPO) управляются централизованно и назначаются компьютерам. Для отдельных компьютеров локальную политику безопасности можно использовать для получения результатов, аналогичных централизованно управляемым объектам групповой политики.

Обычно в Active Directory сценарии входа назначаются объектам «Пользователь», хотя вы также можете сделать это с помощью групповой политики.

Если вы не используете Active Directory или хотите настроить это только на относительно небольшом количестве компьютеров, вы, безусловно, можете сделать это с помощью PowerShell с помощью планировщика задач. С помощью планировщика заданий вы можете создавать события для запуска при запуске, завершении сеанса или входа в систему.

Вы можете использовать команду выключения?

Синтаксис команды выключения Technet

Я предполагаю, что вам нужно событие отключения?

По сути, невозможно запустить сценарий при возникновении события выключения, выхода из системы - да, но выключения - нет. У меня есть приложение C #, которое прослушивает сообщение о завершении работы, но когда сообщение приходит, невозможно создать какие-либо новые процессы, и событие часто пропускается.

  1. Windows отправляет сообщение о завершении работы WM всем окнам верхнего уровня WM_CLOSE и т. Д., Но делает это последовательно для всех программ рабочего стола. Если вы его получите последним, у вас не останется времени.

  2. В Windows есть модуль загрузки / выгрузки процесса или блокировка dll, что означает, что когда приложения завершаются или выгружаются, приложения не могут загружаться в один и тот же момент - это проблема защиты с однопоточным «совместным использованием общих материалов». Сделано для экономии оперативной памяти, но ловит нас здесь, замедляя работу в период загрузки ОС.

  3. В Windows есть внутренний флаг, который запрещает запускать какие-либо новые процессы или сценарии, которые мы завершаем. Это означает, что все, что слушает, может только писать в удаленный файл или использовать TCP-соединение или подобное, чтобы сообщить кому-нибудь о его закрытии. Обычно вы не можете запускать новые сценарии во время завершения работы.