Андрей Попов - Windows Script Host для Windows 2000/XP
Желающим больше узнать о возможностях пакетных файлов в Windows и командах, которые в них используются, можно порекомендовать мою предыдущую книгу [8].
Предположим, что при регистрации определенного пользователя нам нужно произвести следующие действия:
1. Синхронизировать системное время клиентской рабочей станции с системным временем на сервере Server1.
2. Подключить диск М: к сетевому ресурсу \Server1Letters.
3. Предоставить каталог C:TEXT на клиентском компьютере в общее пользование с именем BOOKS.
Для этого пользователю РІ качестве сценария регистрации можно назначить командный файл Logon.bat, который состоит (вместе СЃ комментариями) всего РёР· шести строк (листинг 11.9).В
Листинг 11.9. Пример командного файла-сценария входа@ECHO OFF
REM РРјСЏ: Logon.bat
REM Описание: Рспользование командного файла РІ качестве сценария РІС…РѕРґР°
NET TIME \Server1 /SET
NET USE M: \Server1Letters /PERSISTENT:NO
NET SHARE MyTxt=C:TEXT
В первой строке файла Logon.bat мы отключаем режим дублирования команд на экране:
@ЕСНО OFF
Синхронизация времени с сервером \Server1 производится с помощью ключа /SET в команде NET TIME:
NET TIME \Server1 /SET
Сетевой диск подключается командой NET USE:
NET USE M: \Server1Letters /PERSISTENT:NOВ
Ключ /PERSISTENT:NO в команде NET USE нужен для создания временных подключений (не сохраняющихся после завершения сеанса пользователя). Если бы подключения были постоянными (/PERSISTENT:YES), то при следующем входе пользователя в систему возникла бы ошибка (повторное использование уже имеющегося подключения).
Наконец, папка C:TEXT предоставляется в общее пользование командой NET SHARE:
NET SHARE MyTxt=C:TEXT
Рнтерактивный выбор программ автозагрузки
Как известно, в подменю Программы (Programs) стартового меню Windows имеется пункт Автозагрузка (Startup), в который можно поместить ярлыки тех программ, которые должны быть автоматически запущены при регистрации пользователя в системе. Однако в процессе загрузки своего профиля пользователь не имеет возможности запустить только какие-либо определенные программы из папки автозагрузки — можно либо запустить все программы, либо не запускать ни одной (для этого необходимо в процессе регистрации в системе удерживать нажатой клавишу <Shift>).
Мы напишем сценарий Logon.js, с помощью которого пользователь при входе сможет выбрать запускаемые программы; назначив этот сценарий в качестве сценария входа групповой политики, мы сделаем процесс автозагрузки приложений интерактивным.
Начнем мы с того, что создадим в каталоге %SystemDrive%Documents and SettingsAll UsersГлавное меню, в котором хранятся ярлыки программ из стартового меню для всех пользователей, папку Выборочная автозагрузка и поместим туда ярлыки для нужных приложений (рис. 11.17).
После этого ярлыки из обычной папки Автозагрузка нужно убрать. Рассмотрим теперь алгоритм работы сценария входа Logon.js.
Вначале нужно определить путь к папке выборочной автозагрузки (переменная PathStartup). Для этого мы воспользуемся объектом WshSpecialFolders:
//Создаем объект WshShell
WshShell=WScript.CreateObject("Wscript.Shell");
//Создаем объект WshSpecialFolders
WshFldrs=WshShell.SpecialFolders;
//Определяем путь к папке выборочной автозагрузки
PathStartup=WshFldrs.item("AllUsersStartMenu")+"\Выборочная автозагрузка\";
Рис. 11.17. Новая папка Выборочная автозагрузка
Зная путь к нужной папке, мы формируем коллекцию всех файлов, которые находятся в ней (переменная Files):
//Создаем объект FileSystemObject
FSO=WScript.CreateObject("Scripting.FileSystemObject");
//Создаем объект Folder для папки выборочной автозагрузки
Folder=FSO.GetFolder(PathStartup);
//Создаем коллекцию файлов каталога выборочной автозагрузки
Files=new Enumerator(Folder.Files);
После этого мы выводим на экран диалоговое окно с вопросом, нужно ли запустить программы из папки автозагрузки в пакетном режиме, т.е. все сразу (рис. 11.18).
Рис. 11.18. Выбор режима автозагрузки программ (пакетный или интерактивный)
В зависимости от нажатой в диалоговом окне кнопки мы присваиваем логическое значение переменной IsRunAll, определяющей режим автозагрузки программ (если IsRunAll равно false, то для каждой программы будет выдаваться запрос на ее запуск, в противном случае все программы запускаются без предупреждения):
//Выводим запрос на запуск сразу всех программ
Res=WshShell.Popup("Запустить сразу все программы?", 0,
 "Выборочная автозагрузка", vbQuestion+vbYesNo);
//Определяем, нажата ли кнопка "Да"
IsRunAll=(Res==vbYes);
Далее в цикле while производится перебор всех файлов из коллекции Files; переменная File соответствует текущему файлу в коллекции:
//Цикл по всем файлам каталога выборочной автозагрузки
while (!Files.atEnd()) {
 //Создаем объект File для текущего элемента коллекции