Андрей Попов - Windows Script Host для Windows 2000/XP
//Создаем объект WshShell
WshShell = WScript.CreateObject("WScript.Shell");
//Создаем объект FileSystemObject
FSO = WScript.CreateObject("Scripting.FileSystemObject");
//Создаем объект WshSpecialFolders
WshFldrs=WshShell.SpecialFolders;
//Определяем путь к папке выборочной автозагрузки
SHomePath=WshFldrs.item("MyDocuments");
Путь к каталогу, в который будет производиться копирование документов, формируется с помощью переменной среды %UserName%; значение такой переменной извлекается c помощью метода ExpandEnvironmentStrings() объекта WshShell:
//Определяем имя пользователя
SUserName=WshShell.ExpandEnvironmentStrings("%UserName%");
//Формируем полный путь к каталогу с резервными копиями документов
//пользователя
SBackupPath+=SUserName;
Копирование документов мы будем производить только после утвердительного ответа пользователя на соответствующий вопрос (см. рис. 11.21):
//Запрос на создание резервной копии
Res=WshShell.Popup("Выполнить резервное копирование документов вn" + SBackupPath + " ?", 0, "Выход пользователя " + SUserName, vbQuestion+vbYesNo);
Рис. 11.21. Диалоговое окно с запросом о необходимости копирования
Если пользователь согласен, мы копируем нужный каталог с помощью метода CopyFolder(), причем делаем это внутри блока try конструкции try…catch.
IsError=false;
try {
 //Производим копирование каталога
В FSO.CopyFolder(SHomePath,SBackupPath);
}
В случае возникновения ошибки переменной IsError в блоке catch присваивается значение true, а на экран выводится диалоговое окно с соответствующим сообщением (см. рис. 11.22):
catch (е) { //Обрабатываем возможные ошибки
В if (Рµ != 0) {
 //Выводим сообщение об ошибке
В В IsError=true;
 Mess="Ошибка при копировании каталога "+SHomePath+"nКод ошибки: " + е.number + "nОписание: " + е.description;
  WshShell.Popup(Mess, 0, "Выход пользователя " + SUserName, vbCritical);
В }
}
Рис. 11.22. Диалоговое окно с сообщением о возникшей ошибке
Если же в процессе копирования ошибок не возникло (переменная IsError равна false), то пользователю также выдается сообщение об этом (см. рис. 11.23):
if (!IsError) {
 //Производим копирование каталога
В FSO.CopyFolder(SHomePath, SBackupPath);В
В //Р’СЃРµ РІ РїРѕСЂСЏРґРєРµ
 Mess = "Копирование документов произведено";
 WshShell.Popup(Mess, 0, "Выход пользователя " + SUserName, vbInformation);
}
Рис. 11.23. Диалоговое окно с сообщением о возникшей ошибке
Полностью текст сценария Logoff.js приведен в листинге 11.12.
Листинг 11.12. JScript-сценарий выхода, позволяющий производить резервное копирование документов пользователя/********************************************************************/
/* РРјСЏ: Logoff.jsВ В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В */
/* Язык: JScript                                                   */
/* Описание: Сценарий выхода, позволяющий производить резервное    */
/*          копирование документов пользователя                   */
/********************************************************************/
//Объявляем переменные
var
В WshShell,В В В В В В В В В В В В В В В В В В //Ркземпляр объекта WshShell
В WshFldrs,В В В В В В В В В В В В В В В В В В //Ркземпляр объекта WshSpecialFolders
В FSO,В В В В В В В В В В В В В В В В В В В В В В В //Ркземпляр объекта FileSystemObject
 SUserDocPath,              //Путь к папке с документами пользователя
В SUserName,В В В В В В В В В В В В В В В В В //РРјСЏ пользователя
 SBackupPath="D:\Backup\", //Каталог для резервных копий документов
В Res,IsError;
//Рнициализируем константы для диалоговых РѕРєРѕРЅ
var vbYesNo=4,vbQuestion=32,vbInformation=64,vbYes=6,vbOkOnly=0,
В vbCritical=16;
//Создаем объект WshShell
WshShell = WScript.CreateObject("WScript.Shell");
//Создаем объект FileSystemObject
FSO = WScript.CreateObject("Scripting.FileSystemObject");
//Создаем объект WshSpecialFolders
WshFldrs=WshShell.SpecialFolders;
//Определяем путь к папке выборочной автозагрузки
SHomePath=WshFldrs.item("MyDocuments");
//Определяем имя пользователя
SUserName=WshShell.ExpandEnvironmentStrings("%UserName%");
//Формируем полный путь к каталогу с резервными копиями документов
//пользователя
SBackupPath+=SUserName;
//Запрос на создание резервной копии
Res=WshShell.Popup("Выполнить резервное копирование документов вn"+
 SBackupPath+" ?", 0, "Выход пользователя "+SUserName, vbQuestion+vbYesNo);
if (Res==vbYes) { //Нажата кнопка Да
В IsError=false;
В try {
 //Производим копирование каталога
В FSO.CopyFolder(SHomePath,SBackupPath);
 } catch (e) { //Обрабатываем возможные ошибки
В if (e != 0) {
  //Выводим сообщение об ошибке
В В IsError=true;
  Mess="Ошибка при копировании каталога "+SHomePath+"nКод ошибки: "+
   e.number+"nОписание: "+e.description;
  WshShell.Popup(Mess,0,"Выход пользователя "+SUserName,vbCritical);
В }
В }
В if (!IsError)В {
В //Р’СЃРµ РІ РїРѕСЂСЏРґРєРµ
 Mess="Копирование документов произведено";
 WshShell.Popup(Mess,0,"Выход пользователя "+SUserName,vbInformation);
В }
}
/************* Конец *********************************************/В
Вызов системных функций и стандартных диалоговых окон оболочки Windows
РР· сценариев WSH можно выводить РЅР° экран стандартные диалоговые РѕРєРЅР° Windows (например, Выполнить (Run)) Рё модули панели управления (например, Установка даты Рё времени (Date/Time)). Для этого используются системные функции Windows (API-функции) Рё объект Shell.Application, который позволяет получить доступ Рє оболочке Windows.