Запустить скрипт при запуске Windows без входа пользователя - PullRequest
14 голосов
/ 05 марта 2009

Это компьютер с Windows 2003, который включается каждое утро, но никто не входит в систему, пока несколько часов спустя.

Я хочу использовать промежуток времени для запуска скрипта резервного копирования c: \ script \ backup.cmd

Как я могу запустить это без присмотра после запуска машины?

Я перепробовал 2 раздела реестра, но это привело к запуску скрипта после входа пользователя в систему (что слишком поздно):

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices

В конце концов я использовал Windows TaskScheduler, у которого есть такая опция, но мне было интересно, есть ли другая возможность?

Ответы [ 5 ]

19 голосов
/ 06 марта 2009

Краткий ответ: GPEDIT.MSC (Start, Run, GPEdit.msc)

Windows 2000 и выше [1] предлагают компьютер Сценарии запуска Коллекция в редакторе политик:

  • Настройки компьютера -> Настройки Windows -> Скрипты (запуск / выключение)

В бите конфигурации пользователя есть эквивалентная область сценария logon (т.е. после запуска компьютера, когда пользователь входит в систему).

Longer:

GPEDIT.MSC - это консоль редактирования групповой политики, которая работает непосредственно с хранилищем групповой политики локального компьютера, когда она используется напрямую, поэтому она полезна для установки локальных параметров. При использовании Active Directory тот же интерфейс используется для редактирования объектов групповой политики , расположенных в лесу * (GPO), поэтому одни и те же параметры доступны для нескольких компьютеров.

Сценарии запуска компьютера запускаются в компьютерном контексте , т. Е. LocalSystem, как вы заметили, поэтому они часто не могут получить доступ к сетевым дискам, для работы которых требуется определенное членство пользователя или группы, и так далее. Когда компьютеры получают доступ к сети, они обычно (за исключением) используют свою учетную запись MACHINENAME $.

A сценарий запуска - это быстрый и простой способ запустить процесс при загрузке машины.

Процесс запуска компьютера будет зависеть от времени, необходимого для запуска программы, поэтому, возможно, вы захотите убедиться, что вы вызываете его с помощью команды START из пакетного файла или указываете не ждать завершения исполняемого файла на любом языке сценария, который вы используете. (ключевой момент здесь: запускать скрипт асинхронно , если это не критично, или не нужно запускать асинхронно, потому что это всегда займет без времени вообще. Длинные ботинки = несчастные пользователей).

Использование службы Win32 является альтернативным вариантом - вы можете использовать утилиту SRVANY из Resource Kit для «обслуживания-если» практически любого исполняемого файла. VS.Net 2002 и более поздние версии также позволяют напрямую создавать управляемый сервис.

И Task Scheduler получает намного более способных с Vista / 2008, способных запускать сценарии при запуске, в режиме ожидания и / или при создании журналов событий или при определенных других условиях встретились: это довольно круто! Запланированные задачи имеют возможное преимущество, заключающееся в возможности указать учетную запись пользователя, под которой запускается задача, если это важно для вас.

Caveat Scriptor: http://support.microsoft.com/kb/256320

Запускать сценарии запуска асинхронно: http://msdn.microsoft.com/en-us/library/ms811602.aspx

Планировщик заданий Vista (что нового): http://technet.microsoft.com/en-us/appcompat/aa906020.aspx

[1] Windows XP, 2003, Vista / 2008, Windows 7 / 2008R2, Windows 8/2012, Windows 8.1 / 2012R2, Windows 10 / Windows Server 2016. Все. Но NT4 не сделал!

8 голосов
/ 05 марта 2009

Вы уже наметили хорошее решение:

Настройте запланированное задание для запуска при запуске и разрешите запуск задания, когда пользователь не вошел в систему.

1 голос
/ 05 марта 2009

Вы можете запустить скрипт при запуске системы, используя групповую политику gpedit.msc

0 голосов
/ 05 марта 2009

Да, если вы используете Active Directory. Если вы можете изолировать компьютер от его собственной OU или использовать фильтрацию WMI, вы можете назначить объект групповой политики, который имеет сценарий запуска для компьютера. Это обеспечит запуск сценария, даже если кто-то войдет в безопасный режим и отключит планировщик задач при запуске и подключении к домену.

0 голосов
/ 05 марта 2009

То, как вы делаете это, мне кажется вполне подходящим; однако, если вам нужен альтернативный подход, сервисы запускаются при загрузке машины, чтобы вы могли написать сервис, который определяет, наступил ли новый день (для перезагрузки), и запускает ли это резервное копирование.

Если бы I делал это как сервис, я бы использовал TCL, потому что я его знаю и мне нравится, и у него есть расширение twapi , которое позволяет вам запускать скрипт как оказание услуг. Другие языки сценариев вполне могут иметь аналогичные возможности.

...