Приклади сценаріїв входу

Приклади сценаріїв входу / виходу

Нижче розглянуті кілька сценаріїв (два з яких є звичайними командними файлами), які можна використовувати в якості сценаріїв входу або виходу.

Підключення мережевих дисків і синхронізація часу при реєстрації користувачів

Бажаючим більше дізнатися про можливості пакетних файлів в Windows і командах, які в них використовуються, можна порекомендувати мою попередню книгу [8].

Припустимо, що при реєстрації певного користувача нам потрібно зробити наступні дії:

1. Синхронізувати системне час клієнтської робочої станції з системним часом на сервері Server1.

2. Підключити диск М: до мережного ресурсу \\ Server1 \ Letters.

3. Надати каталог C: \ TEXT на клієнтському комп'ютері в загальне користування з ім'ям BOOKS.

Лістинг 11.9. Приклад командного файлу-сценарію входу

REM Ім'я: Logon.bat

REM Опис: Використання командного файлу в якості сценарію входу

NET TIME \\ Server1 / SET

NET USE M: \\ Server1 \ Letters / PERSISTENT: NO

NET SHARE MyTxt = C: \ TEXT

У першому рядку файлу Logon.bat ми відключаємо режим дублювання команд на екрані:

Синхронізація часу з сервером \\ Server1 проводиться за допомогою ключа / SET в команді NET TIME:

NET TIME \\ Server1 / SET

Мережевий диск підключається командою NET USE:

NET USE M: \\ Server1 \ Letters / PERSISTENT: NO

Ключ / PERSISTENT: NO в команді NET USE потрібен для створення тимчасових підключень (не зберігаються після завершення сеансу користувача). Якби підключення були постійними (/ PERSISTENT: YES), то при наступному вході користувача в систему виникла б помилка (повторне використання вже наявного підключення).

Нарешті, папка C: \ TEXT надається в загальне користування командою NET SHARE:

NET SHARE MyTxt = C: \ TEXT

Інтерактивний вибір програм автозавантаження

Як відомо, в підміню Програми (Programs) стартового меню Windows є пункт Автозавантаження (Startup), в який можна помістити ярлики тих програм, які повинні бути автоматично запущені при реєстрації користувача в системі. Однак в процесі завантаження свого профілю користувач не має можливості запустити тільки якісь певні програми з папки автозавантаження - можна або запустити всі програми, або не запускати жодної (для цього необхідно в процесі реєстрації в системі утримувати клавішу ).

Ми напишемо сценарій Logon.js, за допомогою якого користувач при вході зможе вибрати запускаються програми; призначивши цей сценарій як сценарій входу групової політики, ми зробимо процес автозавантаження додатків інтерактивним.

Почнемо ми з того, що створимо в каталозі% SystemDrive% \ Documents and Settings \ All Users \ Головне меню, в якому зберігаються ярлики програм зі стартового меню для всіх користувачів, папку Вибіркова автозавантаження і помістимо туди ярлики для потрібних додатків (рис. 11.17) .

Після цього ярлики зі звичайної папки Автозавантаження потрібно прибрати. Розглянемо тепер алгоритм роботи сценарію входу Logon.js.

Спочатку потрібно визначити шлях до папки вибіркової автозавантаження (змінна PathStartup). Для цього ми скористаємося об'єктом WshSpecialFolders:

// Створюємо об'єкт WshShell

// Створюємо об'єкт WshSpecialFolders

// Визначаємо шлях до папки вибіркової автозавантаження

Приклади сценаріїв входу

Мал. 11.17. Нова папка Вибіркова автозавантаження

Знаючи шлях до потрібної папки, ми формуємо колекцію всіх файлів, які знаходяться в ній (змінна Files):

// Створюємо об'єкт FileSystemObject

// Створюємо об'єкт Folder для папки вибіркової автозавантаження

// Створюємо колекцію файлів каталогу вибіркової автозавантаження

Після цього ми виводимо на екран діалогове вікно з питанням, чи потрібно запустити програми з папки автозавантаження в пакетному режимі, тобто все відразу (рис. 11.18).

Мал. 11.18. Вибір режиму автозавантаження програм (пакетний або інтерактивний)

Залежно від натиснутої в діалоговому вікні кнопки ми присвоюємо логічне значення змінної IsRunAll. визначальною режим автозавантаження програм (якщо IsRunAll одно false. то для кожної програми буде видаватися запит на її запуск, в іншому випадку всі програми запускаються без попередження):

// Виводимо запит на запуск відразу всіх програм

Res = WshShell.Popup ( "Запустити відразу всі програми?", 0,

"Вибіркова автозавантаження", vbQuestion + vbYesNo);

// Визначаємо, чи натиснута кнопка "Так"

Далі в циклі while проводиться перебір всіх файлів з колекції Files; змінна File відповідає поточному файлу в колекції:

// Цикл по всіх файлів каталогу вибіркової автозавантаження

// Створюємо об'єкт File для поточного елемента колекції

// Переходимо до наступного файлу в колекції

Якщо раніше був обраний інтерактивний режим запуску програм (змінна IsRunAll дорівнює false), то ми виводимо запит на запуск поточного файлу (рис. 11.19):

// Обнуляємо змінну Res Res = 0;

if (! IsRunAll) // Програми потрібно запускати по одній

// Виводимо запит на запуск однієї програми

Res = WshShell.Popup ( "Запустити" + File.Name + "?", 0, "Вибіркова автозавантаження", vbQuestion + vbYesNo);

Мал. 11.19. Запит на запуск однієї програми з папки автозавантаження

Якщо користувач вирішив запустити програму (змінна Res дорівнює vbYes) або програми запускаються в пакетному режимі, то ми запускаємо поточну програму в мінімізованому вікні за допомогою методу Run об'єкта WshShell:

if ((IsRunAll) || (Res = vbYes))

// Запускаємо поточну програму в мінімізованому вікні

Так як в повному імені запускається програми можуть бути прогалини, це ім'я потрібно укласти в подвійні лапки за допомогою escape-послідовності ".

Іншим варіантом запуску за допомогою методу Run програм, імена яких містять прогалини, можна використовувати короткі імена папок і файлів за допомогою властивості ShortPath об'єкта File: WshShell.Run (File.ShortPath, vbMinimizedFocus);

Повністю текст сценарію Logon.js приведений в лістингу 11.10.

Лістинг 11.10. Реєстраційний сценарій, що дозволяє вибирати програми для автозавантаження

/ * Опис: Сценарій входу, що дозволяє вибирати програми для * /

FSO, // Примірник об'єкта FileSystemObject

WshShell, // Примірник об'єкта WshShell

WshFldrs, // Примірник об'єкта WshSpecialFolders

PathStartup, // Шлях до папки вибіркової автозавантаження

Folder, // Примірник об'єкта Folder для папки

Files, // Колекція файлів в папці вибіркової автозавантаження

File, // Примірник об'єкта File для ярлика в папці

Res, // Результат натискання кнопок в діалогових вікнах

IsRunAll; // Логічний прапор, який вказує, чи треба запустити

// відразу всі програми з автозавантаження

// ініціалізувавши константи для діалогових вікон

// Створюємо об'єкт WshShell

// Створюємо об'єкт WshSpecialFolders

// Визначаємо шлях до папки вибіркової автозавантаження

// Створюємо об'єкт FileSystemObject

// Створюємо об'єкт Folder для папки вибіркової автозавантаження

// Створюємо колекцію файлів каталогу вибіркової автозавантаження

// Виводимо запит на запуск відразу всіх програм

Res = WshShell.Popup ( "Запустити відразу всі програми?", 0,

// Визначаємо, чи натиснута кнопка Так

// Цикл по всіх файлів каталогу вибіркової автозавантаження

// Створюємо об'єкт File для поточного елемента колекції

// Обнуляємо змінну Res

if (! IsRunAll) // Програми потрібно запускати по одній

// Виводимо запит на запуск однієї програми

if ((IsRunAll) || (Res == vbYes))

// Запускаємо поточну програму в мінімізованому вікні

// Переходимо до наступного файлу в колекції

Найшвидшим рішенням поставленого завдання є створення командного файлу Logoff.bat (лістинг 11.11) і призначення його в якості сценарію виходу для всіх користувачів. Результат роботи цього пакетного файлу буде видно в командному вікні (рис. 11.20).

REM Ім'я: Logoff.bat

REM документів користувача

ECHO Закінчення сеансу користувача% UserName%.

Приклади сценаріїв входу

Мал. 11.20. Результат роботи сценарію виходу Logoff.bat для користувача Popov

копіювати тільки ті файли, які були змінені (ключ / D);

копіювати все підкаталоги, включаючи порожні (ключ / Е);

перезаписувати файли без підтвердження користувача (ключ / Y).

Таблиця 11.2. Змінні середовища, корисні для використання в сценаріях входу / виходу

Ім'я, під яким реєструвався при вході в мережу користувач

Для створення потрібних нам резервних копій можна також написати сценарій WSH (назвемо цей сценарій Logoff.js), який, звичайно, буде набагато більше за обсягом, ніж командний файл, але буде виводити повідомлення в красиві графічні діалогові вікна (рис. 11.21-11.23) .

Спочатку в сценарії Logoff.js створюються екземпляри об'єктів WshShell. FileSystemObject і WshSpecialFolders. після чого в змінну SHomePath заноситься шлях до каталогу з документами поточного користувача (спеціальна папка з ім'ям My Documents):

// Створюємо об'єкт WshShell

// Створюємо об'єкт FileSystemObject

// Створюємо об'єкт WshSpecialFolders

// Визначаємо шлях до папки вибіркової автозавантаження

// Визначаємо ім'я користувача

// Формуємо повний шлях до каталогу з резервними копіями документів

// Запит на створення резервної копії

Мал. 11.21. Діалогове вікно із запитом про необхідність копіювання

У разі виникнення помилки змінної IsError в блоці catch присвоюється значення true, а на екран виводиться діалогове вікно з відповідним повідомленням (див. Рис. 11.22):

catch (е)

// Виводимо повідомлення про помилку

Mess = "Помилка при копіюванні каталогу" + SHomePath + "\ nКод помилки:" + е.number + "\ nОпісаніе:" + е.description;

WshShell.Popup (Mess, 0, "Вихід користувача" + SUserName, vbCritical);

Мал. 11.22. Діалогове вікно з повідомленням про виниклу помилку

Якщо ж в процесі копіювання помилок не виникло (змінна IsError дорівнює false), то користувачеві також видається повідомлення про це (див. Рис. 11.23):

WshShell.Popup (Mess, 0, "Вихід користувача" + SUserName, vbInformation);

Мал. 11.23. Діалогове вікно з повідомленням про виниклу помилку

Повністю текст сценарію Logoff.js приведений в лістингу 11.12.

/ * Опис: Сценарій виходу, що дозволяє проводити резервне * /

WshShell, // Примірник об'єкта WshShell

WshFldrs, // Примірник об'єкта WshSpecialFolders

FSO, // Примірник об'єкта FileSystemObject

SUserDocPath, // Шлях до папки з документами користувача

SUserName, // Ім'я користувача

SBackupPath = "D: \\ Backup", // Каталог для резервних копій документів

// ініціалізувавши константи для діалогових вікон

// Створюємо об'єкт WshShell

// Створюємо об'єкт FileSystemObject

// Створюємо об'єкт WshSpecialFolders

// Визначаємо шлях до папки вибіркової автозавантаження

// Визначаємо ім'я користувача

// Формуємо повний шлях до каталогу з резервними копіями документів

// Запит на створення резервної копії

SBackupPath + "?", 0, "Вихід користувача" + SUserName, vbQuestion + vbYesNo);

if (Res == vbYes)

> Catch (e)

// Виводимо повідомлення про помилку

Mess = "Помилка при копіюванні каталогу" + SHomePath + "\ nКод помилки:" +

WshShell.Popup (Mess, 0, "Вихід користувача" + SUserName, vbCritical);

WshShell.Popup (Mess, 0, "Вихід користувача" + SUserName, vbInformation);

Нижче розглянуті кілька сценаріїв (два з яких є звичайними командними файлами), які можна використовувати в якості сценаріїв входу або виходу.