У меня есть требование запускать пакетный скрипт каждый раз, когда система выключается, независимо от того, подключен ли компьютер к сети или нет. (Это не должно иметь значения для вопроса, но рассматриваемый скрипт очищает очередь печати машины.
Однако я не могу запустить этот сценарий, когда ПК не подключен к сети, когда я использую этот метод ниже.
Могу также добавить, что рассматриваемый компьютер работает под управлением Windows 10 Pro x64 (версия 1809). Контроллер домена работает под управлением Windows Server 2008 R2, и это также, где я запустил gpedit.msc
.
Что я сделал до сих пор:
- Создан объект групповой политики Active Directory со сценарием выключения компьютера.
- Добавлен скрипт в папку GPO на SYSVOL .
- Подтвердили, что этот объект GPO действительно загружен на жесткий диск рассматриваемой рабочей станции и поэтому должен быть доступен в автономном режиме.
- Пути, указанные в объекте групповой политики, являются относительными, а не абсолютными.
Что я хочу, чтобы произошло:
- Когда компьютер выключен,
ClearPrintQueue.bat
сценарий запускается независимо от того, подключен ли компьютер к сети в настоящее время или нет.
Что на самом деле происходит:
- Когда компьютер выключен,
ClearPrintQueue.bat
сценарий запускается только в том случае, если в данный момент компьютер может подключиться к общему ресурсу SYSVOL по сети.
Подробности:
Я создал объект групповой политики в домене и связал его с тестовым подразделением, в котором находится рассматриваемая машина.
Я отредактировал объект групповой политики и перешел к Конфигурация компьютера -> Политики -> Параметры Windows -> Сценарии (запуск / завершение работы) -> Завершение работы
В Shutdown Свойства как согласно ниже:
При нажатии на Показать файлы ... открывается проводник, чтобы открыть папку\\example.com\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}\Machine\Scripts\Shutdown
Содержимое этой папки и файл ClearPrintQueue.bat приведены ниже:
PS C:\> Get-ChildItem "\\example.com\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}\Machine\Scripts\Shutdown"
Directory: \\example.com\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}\Machine\Scripts\Shutdown
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2019-04-23 15:00 71 ClearPrintQueue.bat
PS C:\> Get-Content "\\example.com\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}\Machine\Scripts\Shutdown\ClearPrintQueue.bat"
net stop spooler
del %systemroot%\System32\spool\printers\* /Q /F /S
PS C:\>
При исследовании локального ПК я могу обнаружить, что скрипт действительно копируется в локальное хранилище GPO на ПК:
PS C:\> Get-ChildItem -Recurse -Force -File "C:\Windows\System32\GroupPolicy\DataStore\0\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}"
Directory: C:\Windows\System32\GroupPolicy\DataStore\0\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2019-04-23 15:00 59 gpt.ini
Directory: C:\Windows\System32\GroupPolicy\DataStore\0\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}\Machine\Scripts
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a-h-- 2019-04-23 15:00 118 scripts.ini
Directory: C:\Windows\System32\GroupPolicy\DataStore\0\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}\Machine\Scripts\Shutdown
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2019-04-23 15:00 71 ClearPrintQueue.bat
PS C:\>
Исследуя в scripts.ini
и ClearPrintQueue.bat
на локальном диске компьютера , мы находим:
PS C:\> Get-Content "C:\Windows\System32\GroupPolicy\DataStore\0\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}\Machine\Scripts\scripts.ini"
[Shutdown]
0CmdLine=ClearPrintQueue.bat
0Parameters=
PS C:\> Get-Content "C:\Windows\System32\GroupPolicy\DataStore\0\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}\Machine\Scripts\Shutdown\ClearPrintQueue.bat"
net stop spooler
del %systemroot%\System32\spool\printers\* /Q /F /S
PS C:\>
Т.е. на компьютере есть все, что нужно для запуска сценария выключения, не обращаясь к сети. Но все же я заметил, что сценарий не запускается при отсутствии сетевого подключения.
Дальнейшее расследование с использованием перехвата пакетов и WireShark, по- видимому, также доказывает, что ПК фактически вытаскивает сценарий из общего ресурса SYSVOL (почему! Он прямо на диске ...) Отметки времени соответствуют моменту выключения компьютера ,
Возможное решение:
Один из возможных обходных путей, который я еще не тестировал, заключается в ручном указании абсолютного пути к сценарию, C:\Windows\System32\GroupPolicy\DataStore\0\SysVol\example.com\Policies\{1B61F884-9D14-4065-8265-F04FFDE41683}\Machine\Scripts\Shutdown\ClearPrintQueue.bat
а не просто ClearPrintQueue.bat
в качестве относительного пути. Это кажется очень хакерским, и не похоже, как это «предназначено» для работы. Прежде чем я пойду по этому пути, я бы хотел посмотреть, есть ли у кого-нибудь идея получше.
Почему я даже пытаюсь сделать это:
У меня есть мобильные пользователи, которые любят случайно печатать на неправильном принтере, и они затем ставятся в очередь локально на каждой рабочей станции, а затем, когда ПК подключается к месту, где находится этот принтер, из принтера выходит поток бумаги. Программное обеспечение VPN запускается на уровне «пользователя», и, следовательно, программное обеспечение VPN может не работать, когда наступит время выключения.
Я пытаюсь смягчить это путем очистки очереди печати при выключении, чтобы древние задания на печать не оставались в очереди вечно.
источник
start -> run -> gpedit.msc
?Ответы:
Это по замыслу. Microsoft никогда не говорила, что сценарии запуска / выключения будут выполняться, когда компьютер находится в автономном режиме.
Локальный кеш, который вы обнаружили, предназначен не для автономной обработки, а для того, чтобы клиенты не перегружали контроллеры домена. Подробнее об этом можно прочитать здесь: Основной протокол групповой политики: кэш версии GPO.
Кроме того, расширение сценария групповой политики требует, чтобы клиент мог проверять источник сценария. И как вы можете видеть на следующей диаграмме, сервер GP (контроллер домена) является ядром расширения сценариев групповой политики:
Чтобы решить вашу проблему, я предлагаю вам попробовать это:
Создание запланированного задания с помощью Политики Настройки группы (
Computer Configuration -> Preferences -> Control Panel -> Scheduled Tasks
) и создатьNew Scheduled Task (at Least Windows 7)
, настроить задачу для запуска в качествеSystem
, добавьте следующий триггер:On disconnect from user session
.Затем создайте другое предпочтение («Файл» вместо «Запланированная задача»), чтобы скопировать сценарий по защищенному локальному пути на компьютерах (пользователи не должны иметь возможность писать в этот файл, чтобы избежать повышения привилегий). Вы можете использовать что-то еще, чтобы скопировать файл, если хотите, но не забудьте сослаться на него в Настройках запланированных задач.
источник