Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Windows NT/2000/2003 (http://forum.oszone.net/forumdisplay.php?f=5)
-   -   [решено] Единовременное выполнение скрипта (http://forum.oszone.net/showthread.php?t=82386)

Michael 10-04-2007 16:08 572464

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

xoxmodav 10-04-2007 19:42 572537

ИМХО: Стандартными стредствами - никак.

Borodunter 10-04-2007 20:48 572573

qwerty123123 наверное в сценарии нужно вставить проверку условия (например, наличие уже созданной папки). а выполняться он будет каждый раз. AFAIK

xeel 10-04-2007 22:09 572612

А вариант воспользоваться командой
Код:

at \\remote_computer 00:00 "copy _чего_там_надо_"
не подойдёт?
Команда один раз выполнится и из списка задач исчезнет.

Michael 11-04-2007 09:49 572747

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

xeel 12-04-2007 21:27 573615

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

Envel 12-04-2007 21:54 573631

Есть такой раздел в реестре: Software\Microsoft\Windows\CurrentVersion\RunOnce

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

Michael 13-04-2007 08:52 573763

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

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

foss 13-04-2007 10:02 573809

А в скрипте нельзя поставить проверку.
ЕСли есть папка то не копируй, а иначе?

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

Dimas_83 13-04-2007 11:56 573874

Попробуй в твоей ГП для компа, безопасность, добавить в ветку реестра runonce и батник, который бы копировал с сервера на клиента

Michael 13-04-2007 12:08 573887

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

Ivan1986 15-04-2007 15:43 574699

Можно сделать с помошью msi
создать msi и прописать в назначенные приложения
просто в msi не будет устанавливаться никакое приложение, а просто копироваться папка

Michael 16-04-2007 10:32 575006

В итоге получился следующий скрипт:
Код:

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 - смотрим общее количество строчек в этом файле и сравниваем его с общим количеством компов в сети, на которых должно быть выполнено это задание. Как только они сравняются - задание удаляем.


Время: 00:13.

Время: 00:13.
© OSzone.net 2001-