Войти

Показать полную графическую версию : [решено] Единовременное выполнение скрипта


Michael
10-04-2007, 16:08
Всем добрый день.
Имеется сеть, контроллер домена крутится на Win2003. Надо на все машины в сети залить папку. Я так понимаю, что делается это посредством сценария на автозагрузку (конфигурация компьютера) или сценария на вход в систему (конфигурация пользователя). Вот только вопрос - как сделать так, чтобы сценарий выполнялся единовременно, а не каждый раз после загрузки или входа в систему?

xoxmodav
10-04-2007, 19:42
ИМХО: Стандартными стредствами - никак.

Borodunter
10-04-2007, 20:48
qwerty123123 наверное в сценарии нужно вставить проверку условия (например, наличие уже созданной папки). а выполняться он будет каждый раз. AFAIK

xeel
10-04-2007, 22:09
А вариант воспользоваться командой at \\remote_computer 00:00 "copy _чего_там_надо_" не подойдёт?
Команда один раз выполнится и из списка задач исчезнет.

Michael
11-04-2007, 09:49
2xeel:
На многих компах служба расписаний отключена за ненадобностью, хотя включить ее через ГП наверно не проблема (вроде она включается здесь - Конфигурация компьютера -> Конфигурация Windows -> Параметры безопасности -> Системные службы - если ошибаюсь поправьте).
Так что в принципе можно и так сделать, но ту проблема вот в чем - папку надо залить на все компы в сети, а это значит что:
1) все компы должны работать в момент запуска скрипта генерации задания
2) все компы должны работать в момент запуска самого задания.
Конечно если сеть не большая, то эти условия легко выполнимы, а если машин в сети порядка сотни?

xeel
12-04-2007, 21:27
Ну можно сделать это с другой стороны (правда при выполнении пары условий) - запустить батник на сервере, чтобы он скопировал папку на все компьютеры пользователей.
Для этого надо:
1. Чтобы на компах были шары (подойдут системные, если их не вырубили - c$, D$ и т.д.)
2. По-прежнему надо, чтобы компы были запущены на момент запуска. Но по сравнению с ранее предложенным вариантом - только в момент запуска батника. Результаты выполнения соханить в файл - и ты всегда сможешь увидеть - удачно все прошло или нет.
Чтобы не прописывать в нем все компы - можно написать его на VBS, получив список компов из Active Directory.
Вроде получается получше, чем предыдущий вариант.

Envel
12-04-2007, 21:54
Есть такой раздел в реестре: Software\Microsoft\Windows\CurrentVersion\RunOnce

Знаю, что многие программы, которые устанавливаются с перезагрузкой (а после перезагрузки продолжают установку), записывают туда то, что надо запускать.

Michael
13-04-2007, 08:52
2Envel:
Тут та же самая проблема - для того, чтобы добавить записи в реестр, надо выполнять задание посредством групповых политик, причем прописывать так, чтобы чтобы это задание выполнялось лишь один раз. Или можно как-то по другому добавить эти записи в реестр?

2xeel:
Довольно проблематично определить все машин включены или нет...

foss
13-04-2007, 10:02
А в скрипте нельзя поставить проверку.
ЕСли есть папка то не копируй, а иначе?

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

Dimas_83
13-04-2007, 11:56
Попробуй в твоей ГП для компа, безопасность, добавить в ветку реестра runonce и батник, который бы копировал с сервера на клиента

Michael
13-04-2007, 12:08
Решил пойти по пути проверки наличия определенного файла. Закончу - выложу батник, может кому понадобится...

Ivan1986
15-04-2007, 15:43
Можно сделать с помошью msi
создать msi и прописать в назначенные приложения
просто в msi не будет устанавливаться никакое приложение, а просто копироваться папка

Michael
16-04-2007, 10:32
В итоге получился следующий скрипт:

IF EXIST filename_flag (
FIND "%COMPUTERNAME%" \\serv\sharefolder\task.txt
IF ERRORLEVEL==1 (echo %COMPUTERNAME% >> \\serv\sharefolder\task.txt) ELSE (exit)
) ELSE (

БЛА-БЛА-БЛА ВЫПОЛНЯЕМ ТО, ЧТО НАДО

ECHO %COMPUTERNAME% >> \\serv\sharefolder\task.txt
)


Где:
filename_flag - файл, выполняющий роль флага, он сигнализирует надо выполнять задание или нет. Если файл найден - то задание не выполняется. Разумеется этот файл входит в число копируемых данным заданием.
serv - некий сервер в сети
sharefolder - расшаренная папка на этом сервере в которой находятся файлы/папки для копирования
task.txt - лог выполнения задания. В ходе выполнения задания в этот файл вносится имя компьютера на котором задание было выполнено

Условие
IF ERRORLEVEL==1 (echo %COMPUTERNAME% >> \\serv\sharefolder\task.txt) ELSE (exit)
предназначено на случай, если действие скрипта (в моем случае копирование папки ) на некотором компе было выполнено руками.

Ну и в итоге периодически производим анализ файла task.txt - смотрим общее количество строчек в этом файле и сравниваем его с общим количеством компов в сети, на которых должно быть выполнено это задание. Как только они сравняются - задание удаляем.




© OSzone.net 2001-2012