Благодарности
Об авторе
Посвящение
Введение
Структура книги
Соглашения, используемые в данной книге
Специальные элементы
Создание сценариев 
с помощью 
Windows Script Host
1
Windows Script Host
Что в WSH означает «Windows»?
Что в WSH означает слово «Host»?
Чем отличается создание сценариев от написания 
пакетных файлов?
Языки сценариев
JScript
Perl
Python
Open Object REXX
Ruby
Выбор языка
Простой сценарий
Типы файлов сценариев
Настройки WSH
Создание своего первого файла сценария
Создание сценария
Средства редактирования сценариев
Как Windows запускает сценарии
Способы запуска сценариев
Передача информации в сценарии
Сохранение результатов работы сценариев
Ключи Wscript и Cscript
Запуск своих собственных сценариев
Запуск сценариев с помощью значка ярлыка
Создание ярлыка сценария
Запуск сценариев из пакетных файлов
Автозапуск сценариев
Проблемы безопасности
Отладка сценариев
Где можно получить дополнительную информацию
Руководство 
по VBScript
Переменные
Поименованные константы
Операторы и выражения
Управление ходом выполнения сценария
Автоматическое преобразование
Оператор Select Case
Цикл Do While
Прекращение выполнения цикла с помощью оператора Exit Do
Вычисления с помощью оператора For…Next
Обработка коллекций и массивов с помощью цикла For…Each
Функции VBScript
Документация и синтаксис
Функции работы со строками
Функции даты-времени
Взаимодействие с пользователем
Вывод простых текстовых сообщений 
с помощью метода Wscript.Echo
Более сложные темы, касающиеся VBScript
Процедуры: функции и подпрограммы
Массивы
Область видимости переменных
Дополнительные источники информации
Создание сценариев 
и работа с объектами
Классы и экземпляры
Обозначение объектов
Использование объектов в VBScript
Разница между свойствами и методами
Вложенные объекты
Освобождение объектов
Работа с коллекциями
Использование объектов при работе с JScript
Работа с коллекциями
Использование объектов при работе с ActivePerl
Интерфейс с объектами, используемый в Perl
Работа с коллекциями
Использование объектов при работе с ActivePython
Использование объекта WScript
Поиск и использование необычных объектов
Доступ к файлам 
и реестру
Работа с файлами и папками
Объект Scripting.Drive
Объект Scripting.Folder
Объект Scripting.File
Чтение и запись файлов
Чтение текста из файлов
Запись текста в файлы
Чтение двоичных файлов
Чтение и запись XML
Чтение XML-файла
Создание XML- или HTML-файла
Работа с программами и ярлыками
Запуск программ
Создание и изменение ярлыков
Работа со средой окружения
Управление установками среды окружения
Работа с реестром
Сохранение информации в реестре
Сетевые и принтерные объекты
Извлечение сетевой пользовательской информации
Управления отображениями на буквы дисков
Добавление дисковых отображений
Удаление дисковых отображений
Установка отображений в сценарии
Управление подключениями сетевых принтеров
Подключение к сетевым принтерам
Перенаправление принтеров из сеанса работы с DOS
Удаление принтерных подключений
Установка принтера по умолчанию
Печать из сценариев
Объекты сообщений 
и факсов
Объектная модель CDO
Работа с полями
Поля для объекта CDO.Message
Коллекция CDO BodyParts
Объект CDO BodyPart
Объект ADO Stream
Объект CDO.Configuration
Отправка сообщений с помощью CDO
Добавление вложений
Включение изображений в HTML-сообщение
Указание получателей и темы
Указание сервера доставки
Отправка сообщения
Объединение всего предыдущего в единое целое
Отправка факсов из сценариев
Получение дополнительной информации об отправке факсов
Инструментарий 
управления Windows
Функции WMI
Удаленное управление Windows
Создание WMI-подключений
Подключение с помощью объекта WbemScripting.SWbemLocator
Подключение с помощью моникера
Подключение к локальному компьютеру
Безопасность и аутентификация
Определение режимов безопасности
WMI-коллекции и запросы
WQL-запросы
SWbemObjectSet
SWbemObject
SWbemMethodSet и SWbemPropertySet
Scriptomatic
Примеры WMI
Управление принтерами
Отслеживание пакетов обновлений Windows 
и критических обновлений
Управление службами и задачами
Дополнительные источники информации
Active Directory 
Scripting Interface
Использование Active Directory Scripting Interface
Концепции ADSI
Создание ADSI-объектов
Безопасность каталогов
Разница между контейнерами и листьями
ADSI-объекты для провайдера WinNT:
IADsCollection и IADsContainer
Работа с ADSI-коллекциями
IADsComputer и IADsComputerOperations
IADsDomain
IADsFileService и IADsFileServiceOperations
IADsFileShare
IADsGroup
IADsMembers
IADsNamespaces
IADsPrintJob и IADsPrintJobOperations
IADsPrintQueue и IADsPrintQueueOperations
IADsService и IADsServiceOperations
IADsSession
IADsUser
Управление Active Directory
IIS и Exchange
Объекты Active Directory
IADsO и IADsOU
Разработка ADSI-сценариев
EzAD Scriptomatic
Дополнительные источники информации
Использование 
сценариев 
для управления компьютерами и сетями
Использование WSF-файлов
Предоставление справки в WSF-файлах
Обработка аргументов командной строки
Содержание более одного сценария в одном файле
Объединение всего предыдущего в единое целое
Развертывание сценариев в сети
Создание простой программы установки с помощью IExpress
Работа с контролем учетных записей пользователей
Предоставление возможности отмены установки
Создание сценариев для управления 
другими компьютерами
Репликация сценариев на несколько компьютеров
Вопросы безопасности выполнения сценариев
Кодировщик сценария
Создание сценариев входа в систему
Сценарии для входа в систему, выхода из нее 
и для других событий для Windows 7 и Vista
Сценарии входа в систему, выхода из нее, запуска компьютера и команды на его выключение, связанные с групповой политикой
Планирование автоматического 
запуска сценариев
Отправка сообщения в журнал событий
Планирование выполнения сценариев с помощью 
Планировщика заданий
Планирование запуска сценария
Проверка запланированного выполнения сценария
Среда окружения 
командной строки
Командная строка 
CMD
Запуск CMD
Ключи оболочки CMD
Запрещение расширений команд
Обработка командной строки
Консольная программа ввода и вывода
Использование окна консоли
Перенаправление ввода-вывода и каналы
Копирование и вставка в окнах командной строки
Редактирование команд и список истории
Автозавершение имен
Включение автозавершения имен каталогов
Использование нескольких команд в одной строке
Группировка команд с помощью круглых скобок
Аргументы, запятые и кавычки
Отключение специальных символов
Конфигурирование программы CMD
Подстановка переменных среды окружения
Путь поиска
Предопределенные и виртуальные переменные среды окружения
Установка исходных значений переменных среды окружения
Встроенные команды
Вывод списка файлов с помощью команды Dir
Установка значений переменных с помощью команды set
Условная обработка с помощью команды if
Сканирование списка файлов с помощью команды for
Получение дополнительной информации
Пакетные файлы 
для пользы 
и развлечения
Создание и использование пакетных файлов
Вывод информации в пакетных файлах
Программирование пакетных файлов
Подстановка аргументов
Редактирование аргументов
Условная обработка с помощью команды if
Проверка наличия файлов и папок
Проверка успешности завершения программы
Выполнение после if нескольких команд
Расширенное тестирование
Обработка нескольких аргументов
Работа с переменными среды окружения
Обработка нескольких элементов 
с помощью команды for
Отложенные расширения
Использование подпрограмм пакетных файлов
Приглашение на ввод данных
Полезные технологии пакетных файлов
Управление сетевыми отображениями
Проверка приемлемости аргументов
Ведение регистрационных журналов
Среда окружения 
MS-DOS при работе 
под Windows
MS-DOS и COMMAND.COM
Конфигурация среды MS-DOS
CONFIG.NT
AUTOEXEC.NT
Переменные среды окружения MS-DOS
MS-DOS и работа в сети
Вывод на печать из MS-DOS
Распечатка содержимого экрана
Конфигурирование последовательной передачи данных при использовании MS-DOS
Использование специализированных устройств для MS-DOS
Управление программами MS-DOS
Утилиты 
командной строки
Самые ценные программы командной строки
Быстрый вызов GUI
Универсальные программы оболочки
more
tree
xcopy
Средства управления файлами
cacls
Эффективные средства управления
runas
tasklist
taskkill
sc
Утилиты для работы с сетью
net
netstat
Вывод списка активных подключений
nslookup
ping
tracert
Дополнительные утилиты
Введение 
в Windows PowerShell
Windows 
PowerShell
Основанная на .NET Framework
Расширяемая среда
Получение Windows PowerShell
Windows Vista и Windows XP
Windows Server 2008 R2
Windows Server 2008 R2 Server Core
Среда PowerShell
Окно командной строки PowerShell
Копирование и вставка
Приостановка вывода и прекращение выполнения 
вышедшей из‑под контроля программы
Синтаксис командной строки
И командлеты, и объекты, и сценарии, да когда же все это кончится!
Получение справки
Приглашение на завершение команд
Псевдонимы
Как определить новый псевдоним
Переход по каталогам и другим местам
Безопасность PowerShell
Политика выполнения сценариев
Профили PowerShell
Программирование 
в среде PowerShell
Синтаксис Windows PowerShell
Комментарии
Переменные и типы
Свойства и методы объекта
Конструкторы объектов
Вставка в строки
Специальные символы
Конструкция Here-String
Освобождение переменных
Предопределенные переменные
Массивы
Константы
Выражения
Строковые операторы
Оператор выполнения &
Приоритетность операторов
Операторы присваивания
Значения операторов
Приведения к определенному типу
Передача по ссылке
Хэш-таблицы
Передача управления
while
do…while и do…until
for
foreach
switch
break
continue
Программные блоки
Обработка исключений
try-catch-finally
throw
Определение функций
Область видимости функций
Оператор Dot-Source
Область видимости переменных
Функции, работающие с каналами, и фильтры
Применение сплат-оператора
Использование .NET API
Работа со строками
Работа с показаниями даты и времени
Преобразование значений
Математические функции
Использование 
PowerShell
Технология, использующая командную строку
Фильтрация
Переход к конкретным действиям
Форматирование вывода командлета
Работа с файлами и папками
Чтение текста из файлов
Запись текста в файлы
Идентификация файлов по размеру
Создание полезных сценариев
Обработка командной строки
Создание модулей
Обработка исключений как стратегия выхода
Использование хэш-таблиц
Интегрированная среда сценариев PowerShell
Конфигурирование ISE
Создание и редактирование сценариев
Редактирование
Запуск сценариев в ISE
Установка контрольных точек и пошаговое выполнение
Интерактивное исследование и изменение значений переменных
Условные контрольные точки
Удаленное и фоновое выполнение PowerShell
Дополнительные источники информации
Приложения
Приложение
Справочник 
по VBScript
Синтаксис
Общая структура программы на VBScript
Типы данных и переменные
Область видимости переменных
Выражения и операторы
Операторы сравнения
Логические операторы
Операторы программы
Функции
Предопределенные специальные значения
Свойства VBA, отсутствующие в VBScript
Справочник 
по языку CMD 
и пакетных файлов
Расширение переменных среды окружения
Замена аргументов пакетного файла и переменной for
Предопределенные переменные 
среды окружения
Задание формата команд
Встроенные команды
Операторы выражения set /a
Указатель схем 
и учебных сценариев
Указатель учебных сценариев и пакетных файлов
Справочник 
по программам 
командной строки
Встроенные команды и команды 
пакетного файла
Команды DOS
Команды для работы с файлами
Удобные программы
Сетевой инструментарий
Вспомогательные средства разработки программ
Утилиты TCP/IP
GUI-программы Windows
Текст
                    Внимание !
Текст предназначен только для предварительного
ознакомительного чтения.
После ознакомления с содержанием данной книги Вам
следует незамедлительно ее удалить. Сохраняя данный текст
Вы несете
ответственность
в
соответствии
с
законодательством.
Любое
коммерческое
и
иное
использование
кроме
предварительного
ознакомления
запрещено. Публикация данных материалов не преследует за
собой никакой коммерческой выгоды. Эта книга способствует
профессиональному росту читателей и является рекламой.
Все права на исходные материалы принадлежат их
авторам.


Краткое оглавление Введение ......................................................... 21 ЧАСТЬ I. СОЗДАНИЕ СЦЕНАРИЕВ С ПОМОЩЬЮ WINDOWS SCRIPT HOST Глава 1. Windows Script Host ......................................... 28 Глава2.РуководствопоVBScript......................................69 Глава 3. Создание сценариев и работа с объектами ....................... 113 Глава 4. Доступ к файлам и реестру ................................... 142 Глава 5. Сетевые и принтерные объекты ............................... 228 Глава 6. Объекты сообщений и факсов ................................. 254 Глава 7. Инструментарий управления Windows ........................... 301 Глава 8. Active Directory Scripting Interface .............................. 341 Глава 9. Использование сценариев для управления компьютерами и сетями ..... 398 ЧАСТЬ II. СРЕДА ОКРУЖЕНИЯ КОМАНДНОЙ СТРОКИ Глава 10. Командная строка CMD ..................................... 460 Глава 11. Пакетные файлы для пользы и развлечения ..................... 517 Глава 12. Среда окружения MS-DOS при работе под Windows ................ 548 Глава 13. Утилиты командной строки .................................. 569 ЧАСТЬ III. ВВЕДЕНИЕ В WINDOWS POWERSHELL Глава 14. Windows PowerShell ....................................... 620 Глава 15. Программирование в среде PowerShell ......................... 648 Глава 16. Использование PowerShell ................................... 708 ЧАСТЬ IV. ПРИЛОЖЕНИЯ Приложение А. Справочник по VBScript ............................... 740 Приложение Б. Справочник по языку CMD и пакетных файлов .............. 751 Приложение В. Указатель схем и учебных сценариев ..................... 761 Приложение Г. Справочник по программам командной строки .............. 768
Оглавление Об авторе ..................................................... 19 Посвящение .................................................... 19 Благодарности .................................................. 19 Введение .........................................................21 А зачем все это изучать? .......................................... 22 Структура книги ................................................. 24 Соглашения, используемые в данной книге ............................ 25 Соглашения по оформлению текста ............................... 25 Специальные элементы ......................................... 26 ЧАСТЬ I. СОЗДАНИЕ СЦЕНАРИЕВ С ПОМОЩЬЮ WINDOWS SCRIPT HOST Глава 1. Windows Script Host ........................................28 Что такое сценарий Windows? ...................................... 28 Что в WSH означает слово «Script»? ............................... 28 Что в WSH означает «Windows»? .................................. 29 Что в WSH означает слово «Host»? ................................ 31 Чем отличается создание сценариев от написания пакетных файлов? ...... 32 Языки сценариев ................................................ 32 VBScript .................................................... 33 JScript ..................................................... 34 Perl ........................................................ 34 Python ..................................................... 35 Open Object REXX ............................................. 35 Ruby ....................................................... 35 Выбор языка ................................................. 35 Простой сценарий ............................................... 36 Типы файлов сценариев ........................................... 39 JSE и VBE: Закодированные сценарии .............................. 40 Windows Script Files (WSF) ....................................... 41
Оглавление 7 Компоненты Windows Script (WSC) ................................ 42 Настройки WSH ............................................... 43 Создание своего первого файла сценария ............................. 43 Создание и защита папки сценариев ............................... 43 Создание сценария ............................................ 46 Средства редактирования сценариев ............................... 47 Как Windows запускает сценарии .................................... 48 Wscript и Cscript .............................................. 48 Способы запуска сценариев ..................................... 49 Передача информации в сценарии ................................ 51 Сохранение результатов работы сценариев .......................... 52 Ключи Wscript и Cscript ......................................... 53 Запуск своих собственных сценариев ................................. 57 Добавление указаний на сценарии в переменную PATH ................. 57 Запуск сценариев с помощью значка ярлыка ......................... 59 Создание ярлыка сценария ...................................... 59 Запуск сценариев из пакетных файлов ............................. 60 Автозапуск сценариев .......................................... 60 Проблемы безопасности ........................................... 61 Политика доверия и подписывание сценариев ....................... 62 Отладка сценариев .............................................. 63 Где можно получить дополнительную информацию ...................... 68 Глава 2. Руководство по VBScript ....................................69 Введение в VBScript .............................................. 69 Переменные ................................................. 70 Константы .................................................. 71 Поименованныеконстанты......................................72 Операторы и выражения ........................................ 74 Автоматическое преобразование .................................. 77 Управление ходом выполнения сценария .............................. 77 Оператор If ... Then ........................................... 78 Оператор Select Case .......................................... 80 Цикл Do While ................................................ 82 Прекращение выполнения цикла с помощью оператора Exit Do ........... 85 Вычисления с помощью оператора For...Next ......................... 86 Обработка коллекций и массивов с помощью цикла For...Each ............ 87 Функции VBScript ................................................ 88 Вызов функций и подпрограмм ................................... 88 Документация и синтаксис ...................................... 89 Функции работы со строками .................................... 90 Функции даты-времени ......................................... 94
8 Оглавление Взаимодействие с пользователем .................................... 98 Функция MsgBox() ............................................. 99 Функция InputBox() ........................................... 101 Вывод простых текстовых сообщений с помощью метода Wscript.Echo ..... 103 Более сложные темы, касающиеся VBScript ........................... 105 Обработка ошибок ........................................... 105 Процедуры: функции и подпрограммы ............................ 107 Массивы ................................................... 109 Область видимости переменных ................................. 111 Дополнительные источники информации ............................. 112 Глава 3. Создание сценариев и работа с объектами ...................113 Введение в объекты ............................................. 113 Классы и экземпляры ......................................... 115 Контейнеры и коллекции ...................................... 115 Обозначение объектов ........................................ 117 Использование объектов в VBScript ................................. 118 Автоматизация и файлы документов .............................. 119 Разница между свойствами и методами ............................ 120 Вложенные объекты .......................................... 121 Освобождение объектов ....................................... 122 Работа с коллекциями ......................................... 122 Использование объектов при работе с JScript .......................... 124 Чувствительность к регистру символов ............................ 124 Работа с коллекциями ......................................... 124 Использование объектов при работе с ActivePerl ........................ 126 Выполнение Perl-сценариев в WSH ............................... 126 Интерфейс с объектами, используемый в Perl ....................... 127 Работа с коллекциями ......................................... 128 Использование объектов при работе с ActivePython ..................... 129 Работа с коллекциями ......................................... 130 Использование объекта WScript .................................... 131 Извлечение аргументов командной строки ......................... 133 Поиск и использование необычных объектов .......................... 135 Глава 4. Доступ к файлам и реестру ................................142 Получение практических результатов ................................ 142 Работа с файлами и папками ...................................... 143 Scripting.FileSystemObject ...................................... 143 Объект Scripting.Drive ......................................... 155 Объект Scripting.Folder ........................................ 159 Объект Scripting.File .......................................... 165 Чтение и запись файлов .......................................... 170 Объект TextStream ........................................... 170 Чтение текста из файлов ...................................... 173
Оглавление 9 Запись текста в файлы ........................................ 174 Работа со стандартным вводом (Stdin) и стандартным выводом (Stdout) ... 180 Чтение двоичных файлов ...................................... 183 Чтение и запись XML ............................................ 187 Некоторые основы XML ........................................ 188 Чтение XML-файла ........................................... 197 Создание XML- или HTML-файла ................................. 199 Работа с программами и ярлыками .................................. 202 Объект WScript.Shell .......................................... 202 Запуск программ ............................................ 207 Создание и изменение ярлыков ................................. 214 Работа со средой окружения ....................................... 217 Извлечение информации из среды окружения ....................... 219 Управление установками среды окружения ......................... 220 Работа с реестром .............................................. 223 Изучение разделов и параметров реестра .......................... 224 Сохранение информации в реестре ............................... 224 Глава 5. Сетевые и принтерные объекты ............................228 Управление сетевыми и принтерными подключениями ................... 228 Извлечение сетевой пользовательской информации ..................... 233 Управления отображениями на буквы дисков .......................... 236 Создание перечня дисковых отображений с помощью EnumNetworkDrives .. 236 Добавление дисковых отображений .............................. 240 Удаление дисковых отображений ................................ 241 Установка отображений в сценарии .............................. 243 Управление подключениями сетевых принтеров ........................ 244 Вывод информации о принтерах ................................. 244 Подключениексетевымпринтерам ..............................246 Перенаправление принтеров из сеанса работы с DOS ................. 247 Удаление принтерных подключений .............................. 249 Установкапринтерапоумолчанию...............................251 Печать из сценариев ............................................. 251 Глава 6. Объекты сообщений и факсов ..............................254 Отправка из сценариев сообщений электронной почты с помощью CDO ...... 254 Объектная модель CDO .......................................... 255 Объект CDO.Message .......................................... 258 Работа с полями ............................................. 265 Поля для объекта CDO.Message .................................. 267 Коллекция CDO BodyParts ...................................... 269 Объект CDO BodyPart ......................................... 270 Объект ADO Stream .......................................... 273 Объект CDO.Configuration ...................................... 273
10 Оглавление Отправка сообщений с помощью CDO ................................ 279 Создание сообщения .......................................... 280 Добавление вложений ........................................ 284 Включение изображений в HTML-сообщение ........................ 285 Указание получателей и темы ................................... 286 Указание сервера доставки ..................................... 286 Отправка сообщения .......................................... 288 Объединениевсегопредыдущеговединоецелое ....................288 Отправка факсов из сценариев .................................... 293 Отправка факса с помощью сценария ............................. 297 Получение дополнительной информации об отправке факсов ........... 300 Глава 7. Инструментарий управления Windows .......................301 Введение в инструментарий управления Windows ....................... 301 Функции WMI ............................................... 302 Пространства имен ........................................... 303 Удаленное управление Windows ................................. 305 Создание WMI-подключений ...................................... 310 Иерархия объектов WMI ....................................... 311 Подключение с помощью объекта WbemScripting.SWbemLocator ......... 313 Подключение с помощью моникера ............................... 314 Подключение к локальному компьютеру ........................... 316 Безопасность и аутентификация ................................. 316 Определение режимов безопасности .............................. 321 WMI-коллекции и запросы ........................................ 323 SWbemServices .............................................. 324 WQL-запросы ............................................... 326 SWbemObjectSet ............................................. 327 SWbemObject ............................................... 328 SWbemMethodSet и SWbemPropertySet ............................ 330 Scriptomatic ................................................... 332 Примеры WMI ................................................. 334 Сбор системной информации ................................... 334 Управление принтерами ....................................... 335 Отслеживание пакетов обновлений Windows и критических обновлений ... 336 Управление службами и задачами ................................ 337 Дополнительные источники информации ............................. 339 Глава 8. Active Directory Scripting Interface ...........................341 Управление каталогом пользователя ................................. 341 Использование Active Directory Scripting Interface ..................... 342 Ограничения, накладываемые на ADSI при работе с Windows Script Host ... 343
Оглавление 11 Концепции ADSI ................................................ 344 Множественное наследование ................................... 346 Создание ADSI-объектов ....................................... 347 Безопасность каталогов ....................................... 350 Разница между контейнерами и листьями .......................... 352 ADSI-объекты для провайдера WinNT: ............................... 354 IADs ...................................................... 356 IADsCollection и IADsContainer ................................... 358 Работа с ADSI-коллекциями ..................................... 361 IADsComputer и IADsComputerOperations ........................... 362 IADsDomain ................................................ 365 IADsFileService и IADsFileServiceOperations .......................... 367 IADsFileShare ............................................... 370 IADsGroup .................................................. 371 IADsMembers ............................................... 373 IADsNamespaces .............................................373 IADsPrintJob и IADsPrintJobOperations ............................. 374 IADsPrintQueue и IADsPrintQueueOperations ......................... 376 IADsService и IADsServiceOperations .............................. 380 IADsSession ................................................. 384 IADsUser ................................................... 385 IIS и Exchange ................................................. 387 Управление Active Directory ........................................ 387 Терминология X.500 и LDAP .................................... 388 Объекты Active Directory .......................................... 391 RootDSE ................................................... 391 IADsO и IADsOU ............................................. 392 Разработка ADSI-сценариев........................................ 393 EzAD Scriptomatic ............................................... 395 Дополнительные источники информации ............................. 396 Глава 9. Использование сценариев для управления компьютерами и сетями .....................................................398 Использованиесценариеввреальноммире ...........................398 Разработка сценариев для других пользователей .................... 399 Использование WSF-файлов ....................................... 400 Справочник по формату WSF-файла .............................. 402 Предоставление справки в WSF-файлах ........................... 408 Обработка аргументов командной строки .......................... 409 Содержание более одного сценария в одном файле .................. 414 Объединениевсегопредыдущеговединоецелое ....................414 Развертывание сценариев в сети ................................... 418
12 Оглавление Создание простой программы установки с помощью IExpress .............. 419 Создание установочных сценариев или пакетных файлов IExpress ........ 422 Работа с контролем учетных записей пользователей .................. 424 Предоставление возможности отмены установки ..................... 426 Создание сценариев для управления другими компьютерами .............. 427 Удаленное выполнение сценариев ............................... 429 Репликация сценариев на несколько компьютеров ................... 430 Вопросы безопасности выполнения сценариев ......................... 432 Подпись сценариев ........................................... 434 Кодировщик сценария ......................................... 439 Созданиесценариеввходавсистему................................440 Сценарии входа в систему, определяемые в профиле пользователя ...... 441 Сценарии для входа в систему, выхода из нее и для других событий для Windows 7 и Vista ...................................... 442 Сценарии входа в систему, выхода из нее, запуска компьютера и команды на его выключение, связанные с групповой политикой ..... 443 Планирование автоматического запуска сценариев ..................... 446 Написание автоматически работающих сценариев ................... 447 Отправка сообщения в журнал событий ........................... 449 Планирование выполнения сценариев с помощью Планировщика заданий 453 Планирование запуска сценария ................................. 454 Проверка запланированного выполнения сценария ................... 456 ЧАСТЬ II. СРЕДА ОКРУЖЕНИЯ КОМАНДНОЙ СТРОКИ Глава 10. Командная строка CMD ...................................460 Окно командной строки .......................................... 460 Сравнение CMD и COMMAND .................................... 461 Запуск CMD ................................................... 462 Открытие окна командной строки с правами администратора ........... 463 Ключи оболочки CMD ......................................... 465 Запрещение расширений команд ................................ 466 Обработка командной строки ...................................... 467 Остановка программ, вышедших из-под контроля .................... 468 Консольная программа ввода и вывода ............................ 468 Использование окна консоли ................................... 470 Перенаправление ввода-вывода и каналы .......................... 470 Копирование и вставка в окнах командной строки .................... 474 Редактирование команд и список истории .......................... 475 Автозавершение имен ......................................... 477 Включение автозавершения имен каталогов ........................ 478 Использование нескольких команд в одной строке ................... 479 Группировкакомандспомощьюкруглыхскобок.....................480 Аргументы, запятые и кавычки .................................. 481 Отключение специальных символов .............................. 481
Оглавление 13 Конфигурирование программы CMD ................................. 482 AutoRun ................................................... 482 Подстановка переменных среды окружения ........................ 482 Путь поиска ................................................ 483 Предопределенные и виртуальные переменные среды окружения ........ 485 Установка исходных значений переменных среды окружения ........... 487 Встроенные команды ............................................ 488 Расширенные команды ........................................ 502 Вывод списка файлов с помощью команды Dir ....................... 504 Установка значений переменных с помощью команды set .............. 508 Условная обработка с помощью команды if ......................... 509 Сканирование списка файлов с помощью команды for ................. 511 Получение дополнительной информации ............................. 515 Глава 11. Пакетные файлы для пользы и развлечения ................517 Зачем нужны пакетные файлы? .................................... 517 Создание и использование пакетных файлов .......................... 518 Программирование пакетных файлов ................................ 521 Вывод информации в пакетных файлах .............................. 521 Подстановка аргументов ......................................... 522 Редактирование аргументов ....................................... 524 Условнаяобработкаспомощьюкомандыif............................525 Основная команда if .......................................... 525 Проверка наличия файлов и папок ............................... 526 Проверка успешности завершения программы ...................... 526 Выполнение после if нескольких команд ........................... 527 Расширенное тестирование ..................................... 528 Обработка нескольких аргументов .................................. 529 Работа с переменными среды окружения ............................. 532 Редактирование переменных среды окружения ...................... 533 Обработка нескольких элементов с помощью команды for ................ 534 Использование в цикле for нескольких команд ...................... 536 Отложенные расширения ...................................... 537 Использование подпрограмм пакетных файлов ........................ 539 Приглашение на ввод данных ...................................... 540 Полезные технологии пакетных файлов .............................. 541 Обработка ключей командной строки ............................. 541 Управление сетевыми отображениями ............................ 544 Проверка приемлемости аргументов .............................. 545 Ведение регистрационных журналов .............................. 545 Глава 12. Среда окружения MS-DOS при работе под Windows ...........548 Программы MS-DOS под управлением Windows ......................... 548 Виртуальная DOS-машина ...................................... 549 MS-DOS и COMMAND.COM ...................................... 551
14 Оглавление Конфигурация среды MS-DOS ...................................... 552 Параметры окна и памяти ...................................... 553 CONFIG.NT . ................ ................ ............... . 55 9 AUTOEXEC.NT ............... ................ ............... . 562 Переменные среды окружения MS-DOS ............................ 563 MS-DOS и работа в сети .......................................... 563 Вывод на печать из MS-DOS ....................................... 564 Перенаправление печати ...................................... 565 Распечатка содержимого экрана ................................. 565 Конфигурирование последовательной передачи данных при использовании MS-DOS .................................................... 566 Использование специализированных устройств для MS-DOS ............... 566 Управление программами MS-DOS .................................. 567 Если что-то пойдет не так ...................................... 568 Глава 13. Утилиты командной строки ...............................569 Программы командной строки Windows ............................... 569 Самыеценныепрограммыкоманднойстроки..........................570 Быстрый вызов GUI ............................................. 571 Универсальные программы оболочки ................................ 573 findstr ..................................................... 573 more ...................................................... 578 tree ....................................................... 579 xcopy ..................................................... 580 Средства управления файлами ..................................... 582 attrib ...................................................... 583 cacls ...................................................... 585 Эффективные средства управления ................................. 590 driverquery ................................................. 590 runas ..................................................... 591 tasklist .................................................... 592 taskkill ..................................................... 594 sc ....................................................... 595 Утилиты для работы с сетью ...................................... 597 ipconfig .................................................... 598 net ....................................................... 600 netstat .................................................... 610 Вывод списка активных подключений ............................. 611 nslookup ...................................................612 ping ...................................................... 615 tracert ..................................................... 616 Дополнительные утилиты ......................................... 618
Оглавление 15 ЧАСТЬ III. ВВЕДЕНИЕ В WINDOWS POWERSHELL Глава 14. Windows PowerShell .....................................620 Введение в Windows PowerShell .................................... 620 Объектно-ориентированная командная оболочка .................... 620 Основанная на .NET Framework .................................. 623 Расширяемая среда ........................................... 624 Получение Windows PowerShell ..................................... 625 Windows 7 .................................................. 625 Windows Vista и Windows XP .................................... 625 Windows Server 2008 R2 ....................................... 626 Windows Server 2008 R2 Server Core .............................. 626 Windows Server 2008 (pre-R2), 2003 R2 и 2003 ....................... 627 Windows Server 2008 (Pre-R2) Server Core .......................... 627 Среда PowerShell ............................................... 627 Окно командной строки PowerShell .................................. 629 Редактирование командной строки ............................... 629 Копирование и вставка ........................................ 631 Приостановка вывода и прекращение выполнения вышедшей из-под контроля программы .................................. 632 Синтаксис командной строки ................................... 632 И командлеты, и объекты, и сценарии, да когда же все это кончится! ........ 635 Получение справки ............................................. 638 Приглашение на завершение команд ................................ 640 Псевдонимы ................................................... 640 Как получить список псевдонимов ................................ 641 Как определить новый псевдоним ................................ 641 Переход по каталогам и другим местам .............................. 641 Безопасность PowerShell .......................................... 643 Сценарии PowerShell и контроль учетных записей пользователей ........ 643 Политика выполнения сценариев ................................ 644 Профили PowerShell ............................................. 646 Глава 15. Программирование в среде PowerShell ......................648 Язык программирования Windows PowerShell .......................... 648 Синтаксис Windows PowerShell ..................................... 649 Комментарии .................................................. 649 Переменные и типы ............................................. 650 Литеральные значения ........................................ 651 Свойства и методы объекта ..................................... 653 Конструкторы объектов ........................................ 654 Вставка в строки ............................................. 654 Специальные символы ........................................ 656 Конструкция Here-String ....................................... 656
16 Оглавление Освобождение переменных ..................................... 656 Предопределенныепеременные.................................657 Массивы ................................................... 659 Константы ................................................. 664 Выражения ................................................... 664 Сравнения с использованием массивов ............................ 667 Строковые операторы ......................................... 670 Оператор выполнения & ....................................... 672 Приоритетность операторов .................................... 673 Операторы присваивания ...................................... 674 Значения операторов ......................................... 675 Приведения к определенному типу ............................... 675 Передача по ссылке .......................................... 676 Хэш-таблицы ............................................... 677 Передача управления ........................................... 679 if ....................................................... 680 while ...................................................... 680 do...while и do...until .......................................... 681 for ....................................................... 681 foreach .................................................... 682 switch ..................................................... 684 break ..................................................... 686 continue ................................................... 687 Программные блоки .......................................... 687 Обработка исключений .......................................... 688 trap ....................................................... 688 try-catch-finally .............................................. 689 throw ..................................................... 690 Определение функций ........................................... 690 Аргументы функции .......................................... 691 Область видимости функций .................................... 694 Оператор Dot-Source .......................................... 695 Область видимости переменных ................................. 695 Функции, работающие с каналами, и фильтры ...................... 697 Применение сплат-оператора ................................... 699 Использование .NET API .......... ................ ................ 699 Вызов статических функций-членов класса ......................... 700 Работа со строками ........................................... 701 Работа с показаниями даты и времени ............................ 703 Преобразование значений ..................................... 706 Математические функции ...................................... 706
Оглавление 17 Глава 16. Использование PowerShell ................................708 Реальная работа с PowerShell ...................................... 708 Технология, использующая командную строку ......................... 710 Генерация объектов .......................................... 711 Фильтрация ................................................ 711 Переход к конкретным действиям ................................ 714 Форматирование вывода командлета ................................ 715 Оператор -f .. ................ ................ .............. . 715 Работа с файлами и папками ...................................... 717 Определение факта существования файла ......................... 722 Чтение текста из файлов ...................................... 722 Запись текста в файлы ........................................ 723 Идентификация файлов по размеру .............................. 724 Создание полезных сценариев ..................................... 725 Комментируйте свою работу! ................................... 725 Обработка командной строки ................................... 725 Создание модулей ............................................ 726 Обработка исключений как стратегия выхода ....................... 727 Использование хэш-таблиц ....................................... 729 Интегрированная среда сценариев PowerShell ......................... 730 Начало работы с PowerShell ISE ................................. 730 Конфигурирование ISE ........................................ 731 Создание и редактирование сценариев ............................ 732 Редактирование ............................................. 732 Запуск сценариев в ISE ........................................ 733 Установка контрольных точек и пошаговое выполнение ............... 734 Интерактивное исследование и изменение значений переменных ........ 735 Условные контрольные точки ................................... 736 Удаленное и фоновое выполнение PowerShell .......................... 737 Дополнительные источники информации ............................. 737 ЧАСТЬ IV. ПРИЛОЖЕНИЯ Приложение А. Справочник по VBScript .............................740 Свойства языка VBScript 5.6 ....... ................ ................ 740 Синтаксис .................................................... 740 Общая структура программы на VBScript ............................. 741 Типы данных и переменные ....................................... 741 Примечания к значениям даты и времени .......................... 742 Область видимости переменных ................................. 743
18 Оглавление Выражения и операторы .......................................... 743 Арифметические операторы .................................... 744 Операторы сравнения ......................................... 744 Логические операторы ........................................ 744 Операторы программы ........................................... 745 Функции ..................................................... 746 Интервалы, относящиеся к функциям дат .......................... 748 Предопределенные специальные значения ............................ 748 Свойства VBA, отсутствующие в VBScript .............................. 749 Приложение Б. Справочник по языку CMD и пакетных файлов .........751 Замена аргументов пакетного файла и переменной for ................... 752 Расширение переменных среды окружения ............................ 752 Предопределенные переменные среды окружения ...................... 753 Задание формата команд ......................................... 755 Встроенные команды............................................. 756 Модификаторы команды For .................................... 759 Операторы выражения set /a ................................... 760 Приложение В. Указатель схем и учебных сценариев .................761 Указатель схем ................................................ 761 Указатель учебных сценариев и пакетных файлов ...................... 762 Приложение Г. Справочник по программам командной строки .........768 Инструменты администрирования .................................. 768 Встроенные команды и команды пакетного файла ...................... 771 Команды DOS .................................................. 773 Команды для работы с файлами .................................... 774 Удобные программы ............................................. 775 Сетевой инструментарий ......................................... 776 Вспомогательные средства разработки программ ....................... 777 Утилиты TCP/IP ................................................ 777 GUI-программы Windows ......................................... 778
Об авторе Брайан Книттель (����� �������� �ани�ает�� ра�ра��т��й �р��ра��н��� ��е��е� ����� �������� �ани�ает�� ра�ра��т��й �р��ра��н��� ��е��е� �������� �ани�ает�� ра�ра��т��й �р��ра��н��� ��е��е� �������� �ани�ает�� ра�ра��т��й �р��ра��н��� ��е��е� � �ани�ает�� ра�ра��т��й �р��ра��н��� ��е��е� чени� уже ��лее 30 лет. П��ле вы��лнени� ди�л��н�й ра��ты �� �ри�енению эле�тр�техни�и в ��ла�ти и��т��н�й �едицины и техн�л��ии ��лучени� и���ра� жений �ет�д�� �дерн��� �а�нитн��� ре��нан�а �н �ри�ту�ил � ра��те в �аче�тве не�ави�и���� ��н�ультанта. В �илу ра�н��лан�в��ти �а�р���в �в�их �лиент�в е�у �рих�дил��ь и�еть дел� � д�л��вре�енны�и �р�е�та�и в ��ла�т�х �едицин���й д��у�ентации, у�равлени� техн�л��иче��и�и лини��и, �и�те� у�равлени� �р�� и�в�д�твенны�и �р�це��а�и в реальн�� �а�шта�е вре�ени, и, чт� ��лее важн�, е�� �ра�тиче��ий ��ыт и���ль��вани� MS�DOS, W��dows и ����ьютерных �етей в �ире �и�не�а ���ил�� ��лее четверти ве�а. Брайан �тал ��авт�р�� �н�же�тва �ни�, вы�ущенных и�датель�тв�� Qu� — «W��dows 7 I� D�p�h», «Upg��d��g ��d R�p�����g M���oso�� W��dows» и �е�т�еллер�в �ерии Sp����� �d���o� Us��g, ���в�� M���oso�� W��dows» и �е�т�еллер�в �ерии Sp����� �d���o� Us��g, ���в�� M���oso�� W��dows» и �е�т�еллер�в �ерии Sp����� �d���o� Us��g, ���в�� W��dows» и �е�т�еллер�в �ерии Sp����� �d���o� Us��g, ���в�� W��dows» и �е�т�еллер�в �ерии Sp����� �d���o� Us��g, ���в�� » и �е�т�еллер�в �ерии Sp����� �d���o� Us��g, ���в�� Sp����� �d���o� Us��g, ���в�� �d���o� Us��g, ���в�� �d���o� Us��g, ���в�� Us��g, ���в�� Us��g, ���в�� , ���в�� щенных W��dows V�s��, W��dows XP P�o��ss�o��� и Hom� �d���o�, а та�же W��dows 2000 P�o��ss�o���. Брайан живет в О�ленде, штат Калиф�рни�. В �в���дн�е вре�� �ани�ает�� в���тан�вление� анти�варных ����ьютер�в (�ри�ер �ред�тавлен на ве���айте www.ibm1130.org� и �тарает�� д�ве�ти д� ��вершен�тва �в�и реце�ты �ри��т�влени� �иццы на др�вах. Посвящение Пре��давател�� и в�е�у �ер��налу S�� R����� H�gh S�hoo�, давши� �не ��ра��ва� S�� R����� H�gh S�hoo�, давши� �не ��ра��ва� R����� H�gh S�hoo�, давши� �не ��ра��ва� R����� H�gh S�hoo�, давши� �не ��ра��ва� H�gh S�hoo�, давши� �не ��ра��ва� H�gh S�hoo�, давши� �не ��ра��ва� S�hoo�, давши� �не ��ра��ва� S�hoo�, давши� �не ��ра��ва� , давши� �не ��ра��ва� ние, �а ��т�р�е � д� �их ��р ежедневн� и��ытываю � ни� чув�тв� �ла��дарн��ти, ��у�т� ��лее 30 лет ���ле вы�у��а. Благодарности Не���ль�� лет на�ад � �е�ед�вал � и���лнительны� реда�т�р�� и�датель�тва Qu� Ри��� Ку�ен�� (R��k �ugh��� � не�л�хих, н� лишенных внешне�� л���а ин�тру�ентах и �р��ра��ах, �ред��тавл�е�ых �и�те��й W��dows, ин�тру�ентах, дл� ��т�рых �� ра�ны� �ричина� в�е ни�а� не нах�дил��ь �е�та в т�л�тых т��ах �ерий I� D�p�h и Sp����� �d���o� Us��g. В����жн�, � �а�тал е�� вра��л�х, ��т��у чт� �н ��а�ал, чт� � д�лжен на�и�ать ��� в�е� эт�� �ни�у, ��т�рую вы�у�тит и�� датель�тв� Qu�. В ре�ультате ���вил��ь эт� �ерера��танн�е и д���лненн�е вт�р�е и�дание ��д на�вание� «W��dows 7. С�ри�ты, авт��ати�аци� и ���андна� �тр��а».
20 От издательства Я ��ни�аю, чт� эт� — ��льша� че�ть дл� �ен�. Не �аждый день и�датель, �� �ути, ��в�рит �ледующее: «Е�ли ва� эта те�а в�лнует, т� на� �на в�лнует т�же». Ита�, дл� начала � х�чу выра�ить �ла��дарн��ть Ри�у Ку�ену �а е�� уверенн��ть в ��их �илах и в у��ехе данн��� �р�е�та и �а е�� неи��енную ��ддерж�у, тер�ение, ���� дрение, ру��в�д�тв� и еще ��льшее тер�ение. За в�е эт� и �а е�� д��р�желатель� н��ть и ве�елый нрав. Дл� �ен� �ыл� ��льш�й че�тью ра��тать � та�и� уважае�ы� и�датель�тв��, �а� Qu�. При ра��те над эти� неле��и� �р�е�т�� � и��ытал чув�тв� �ла��дарн��ти � а���циир�ванн��у и�дателю Гре�у Ви�анду (G��g W��g��d� и в�ей ��тальн�й выдающей�� ���анде и�датель�тва Qu�. Ра���рать�� в т��, чт� на�и�ан� в эт�й �ни�е, �ыл� �ы в���ще нев����жн�, или, �� �райней �ере, �на не ��рела �ы �в�ей ���ы�ленн�й ф�р�ы, не �рил�жи �в�ю ру�у � ее ра�ра��т�е и реда�тир�ванию Т�дд Бра��е (Todd ���kk��. Я �ла��дарен е�у �а е�� �р�ани�аци�нные у�а�ани� и энту�иа�� в ��д��р�е �атериала. Та�же � ве�ь�а �ла��дарен Ме�ан Вейд (M�g�� W�d�� �а ее �ри�тальн�е вни�ание �� в�е� �ел�ча� �ри литературн�� реда�тир�� � �а ее �ри�тальн�е вни�ание �� в�е� �ел�ча� �ри литературн�� реда�тир�� вании. Пу�ть эти ��и�ани� р�да де�тельн��ти не введут ва� в �а�луждение — �� �райней �ере, в и�датель�тве Qu� та�ие титулы, �а� «реда�т�р���н�ультант �� аудит�рии» и «литературный реда�т�р», не ����ут �ередать в�ю шир�ту в�лада �ажд��� уча�тни�а эт�й ���анды в �аждую �ни�у. Я та�же х�чу выра�ить �в�ю �ри�нательн��ть �а ��ддерж�у наше�у научн��у реда�т�ру Р�ну Барретту (Ro� ��������, ��т�рый тщательн� �р�в�дил �ра�тиче� Ro� ��������, ��т�рый тщательн� �р�в�дил �ра�тиче� ��������, ��т�рый тщательн� �р�в�дил �ра�тиче� ��������, ��т�рый тщательн� �р�в�дил �ра�тиче� �, ��т�рый тщательн� �р�в�дил �ра�тиче� ��ие и��ытани� �ажд�й уче�н�й �р��ра��ы и �ажд��� �ри�ера. Кр��е т���, е�ть цела� ар�и� людей, чей труд �ача�тую ��тает�� �е� вни�ани� и �ла��дарн��ти, людей вы��лн�ющих реальную ра��ту. От издательства Ваши �а�ечани�, �редл�жени�, в��р��ы �т�равл�йте �� адре�у эле�тр�нн�й ��чты comp@piter.com (и�датель�тв� «Питер», ����ьютерна� реда�ци��. На ве���айте и�датель�тва (www.piter.com� вы ��жете ��ачать архив � д���лни� тельны�и �атериала�и � эт�й �ни�е. Мы �уде� рады у�нать ваше �нение! На ве���айте и�датель�тва http://www.piter.com вы найдете ��др��ную инф�р�а� цию � наших �ни�ах.
Введение Не���тр� на т� чт� у эт�й �ни�и ��вершенн� н�в�е на�вание, на �а��� деле эт� ��н�вленн�е и и��равленн�е вт�р�е и�дание �ни�и «W��dows XP: U�d�� Th� Hood» («Чт� та� ��д �а��т�� у W��dows XP»�. Та��е «авт����ильн�е» на�вание �ерв��� и�дани� р�дил��ь �ла��дар� ��ей н��таль�ии, ра�дел�е��й �� �н��и�и дру�и�и людь�и: ра�ве ва� не �хватывает т���а �� �тары� д��ры� вре�ена�, ���да ��жн� �ыл� ��дн�ть �а��т вашей �ашины и ра����нать в�е, чт� ��д ни� нах�дит��? К��да ��жн� �ыл� в��ть �аечный �люч и �а���у у�транить �ра�тиче��и лю�ую неи��равн��ть? Те�ерь �ашины уже не те, �ни �тали на�т�ль�� �л�жны�и и �т� �у�ивающи�и, чт� �л�жн� даже �ред�тавить �е�е �����ни�удь, �т� �танет в них ��выр�ть�� в наши дни. У �н��их и� на� в��ни�ли �х�жие чув�тва и �� �тн�шению � W��dows. Эта ��ераци�нна� �и�те�а �ревратил��ь в �и�анта, ��ъедин�юще�� ты��чи �л�жных ���тавных ча�тей, ��р�тавших�� �а та�и� �лад�и�, н� �ажущи��� не�р�ницае�ы� �рафиче��и� интерфей��� ��ль��вател� (GUI�. Эта �ни�а �вл�ет�� ���ыт��й вернуть�� � те� дн��, ���да �ы ���ли � уверен� н��тью и уд�в�ль�твие� ��выр�ть�� в наших �ашинах. W��dows ���тавл�ет�� � эффе�тивны� на��р�� ин�тру�ент�в и интерфей��в, ��т�рые ���в�л�ют в��ть ��д ��нтр�ль лю�ую �ел�чь, е�ли вы, ��нечн�, х�тите �а�атать ру�ава и в нее ��� �ру�ить��. Ке� �ы вы ни �ыли, �и�те�ны� ад�ини�трат�р�� или «��ытны� ��ль��вате� ле�», нах�д�ще��� в ���т��нн�� ��и��е ��лее эффе�тивных �������в и���ль��ва� ни� �в�е�� ����ьютера, вы, в����жн�, �на���ы � �а�етны�и файла�и, �ценари��и и �р��ра��а�и ���андн�й �тр��и. При в�ей �в�ей �ажущей�� не�ривле�ательн�� �ти �ни �уще�твуют д�льше �а���� �ер��нальн��� ����ьютера, и ран� или ���дн� лю��й, �т� и���ль�ует ����ьютер дл� �ерье�н�й ра��ты, � ни�и �тал�ивает��. Они ���ут �а�ать�� че��т� �тар���дны�, н� �ни �р�д�лжают ра�вивать�� в�е�те � W��dows. Сред�тва авт��ати�ации, �ред��тавл�е�ые в�е�те � W��dows, невер�� W��dows. Сред�тва авт��ати�ации, �ред��тавл�е�ые в�е�те � W��dows, невер�� . Сред�тва авт��ати�ации, �ред��тавл�е�ые в�е�те � W��dows, невер�� W��dows, невер�� , невер�� �тн� эффе�тивны и ��ле�ны. Те� не �енее дл� ��льшин�тва людей �ни ��тают�� че��т� �а�ад�чны� и ред�� в��тре�уе�ы�. Я на�и�ал эту �ни�у, чт��ы ра�ве�ть таин�твенн��ть. При эт�� � ���тавил �еред ����й ��ть �адач: y Научить ��ль��вать�� �а�етны�и файла�и и ��ы�а�и на�и�ани� �ценариев, �ред��тавл�е�ы�и W��dows.
22 Введение y П��а�ать ��р�д�� и���ль��вани� утилит ���андн�й �тр��и и ��ъе�т�в �цена� риев в �аче�тве ��в�едневн��� ин�тру�ентари�. y Пред��тавить введение и ��рав�чн�е �����ие дл� ��тен �р��ра�� ���андн�й �тр��и и ��ъе�т�в �ценариев, ���тавл�е�ых в�е�те � W��dows. y Пред��тавить введение в W��dows Pow��Sh���, н�вейшее �ред�тв� M���oso�� дл� авт��ати�ации � и���ль��вание� интерфей�а ���андн�й �тр��и. y И, �режде в�е��, ���а�ать ва�, �а� ��жн� научить�� ��ль��вать�� в�е�и эти�и �ред�тва�и. Ни �дна �ни�а не ���жет решить в�ех ваших �р��ле�, �в��анных � W��dows. Данна� �ни�а учит, �а� ра��тают в�е эти �ред�тва и �а� �ф�р�ир�� W��dows. Данна� �ни�а учит, �а� ра��тают в�е эти �ред�тва и �а� �ф�р�ир�� . Данна� �ни�а учит, �а� ра��тают в�е эти �ред�тва и �а� �ф�р�ир�� вать �в�и у�или� �� ���данию �ценариев, чт��ы �т�йти �т �тандартных решений и �рийти � �в�и� ����твенны�. Х�т� на �нижн�� рын�е ��жн� найти не���ль�� �ни�, ���в�щенных W��dows S���p� Hos�, W��dows Pow��Sh���, �ред�тва� авт��ати�ации W��dows, а та�же �дну�две �ни�и, ��и�ывающие утилиты ���андн�й �тр��и, эт� един�твенна� и� и�ве�тных �не �ни�, �де в�е четыре ���тавл�ющие ���раны в�един�. В данн�й �ни�е речь идет ��н�ретн� � W��dows 7, V�s�� и XP. М�жн� та�же в����ль��вать�� ��и�ывае�ы�и техн�л��и��и �ри ра��те � ��ераци�нны�и �и�те� �а�и W��dows S��v�� и W��dows 2000 P�o��ss�o���, е�ли, ��нечн�, вы ����режне�у и�и ��ль�уете�ь. А зачем все это изучать? В ве� �рафиче����� ��ль��ватель����� интерфей�а �атраты вре�ени на и�учение �ценариев, �а�етных файл�в и �р��ра�� ���андн�й �тр��и ���ут вы�вать нед�� у�ение. Неужели �ни не �тали ча�тью �р�шл���, че��т�, чт� ��жн� �� в�д�х�� ��ле�чени� ��тавить ���ади? Е�ли че�тн�, т� � та� не ду�аю, иначе не �тал �ы ради ва� �е��ца�и �идеть д����дна �а �лавиатур�й. И е�ли т�ль�� �дн��� ваше�� ��чув�тви� дл� ���у��и данн�й �ни�и нед��тат�чн�, т� у �ен� на эт�т �чет е�ть дл� ва� р�д в��лне у�еди� тельных д�в�д�в. Дл� начала �риведу не���ль�� важных �а�ечаний �тн��ительн� �ценариев и �а�етных файл�в: y Они ���в�л�т ва� �ы�тр� ��равить�� � решение� ��вт�р�ющих�� �адач. К��� да в ваше� ра���р�жении ��льш�е ��личе�тв� ��ра�атывае�ых файл�в или эле�ент�в данных или ���да и�� дн� в день вы��лн�ют�� �дни и те же �адачи, авт��ати�аци� ���в�лит �э��н��ить �а��у вре�ени. К�нечн�, ��жн� щел�ать на ра�ных эле�ентах, �а�у��а� файл в не���ль�их ра�ных �р��ра��ах или д�� �авл�� ��ль��вател� � вашей �ети, н� ���да в�е эт� нужн� делать не���ль�� ��тен ра�, �рафиче��ий ��дх�д � решению эт�й �адачи ��жет �ревратить�� в на�т��щий ��ш�ар. y Они �а�лючают в �е�е ��ределенные �ведени� и �лужат в �аче�тве ра�н�вид� н��ти д��у�ентации, �����ль�у в них чет�� �р��и�ывает�� ��р�д�� вы��лне�
А зачем все это изучать? 23 ни� �адачи. Е�ли вы на�и�али �ценарий или �а�етный файл дл� вы��лнени� �а�их�ни�удь фун�ций у�равлени�, �ни ��у�т� ��ды ���ут на���нить ва� или ваши� ���лед�вател��, че� и�енн� �ни �ани�ают��. В эт�� е�ть �в�й в��лне ��ределенный �ра�тиче��ий ��ы�л. y Они ���в�л�ют и���ль��вать в �аче�тве ин�тру�ент�в дл� на�и�ани� ваших ����твенных �р��ра�� «внутренн��ти» та�их �ри�ладных �р��ра��, �а� Wo�d и �x���. y Они ���в�л�ют ���давать �р�цедуры, ������ные ра��тать � файла�и, и на�тра� ивать не т�ль�� ваш ����твенный ����ьютер, н� и �� �ети на�траивать дру�ие ����ьютеры вашей �р�ани�ации. Е�ли ��д ваши� у�равление� нах�д�т�� де��т�и или ты��чи ����ьютер�в, фун�ции, ���ещае�ые в �ценарии, ���ут «�р�дви�ать» и��енени� в «��дшефные» ����ьютеры, не тре�у� ваше�� фи�и� че����� ��нта�та � �ажды� и� них. y Они ���в�л�ют ���давать �р�цедуры дл� «�ере�а�у��а» и в���тан�влени� ����ьютерн�й �реды ��ружени� д� �тандартн�й, и�ве�тн�й ��нфи�урации. В ча�тн��ти, �ценарии вх�да в �и�те�у ���ут на�траивать �ринтеры, ���давать �т��ражени� �етевых ди���в и �дина��в� на�траивать Панель у�равлени� �ри �ажд�� вх�де ��ль��вател� в �и�те�у, и��авл�� ва� �т ут��ительн�й ��ддерж�и и ��ль��вател� — �т �атруднений. Е�ли в�е эт� — ��в�д научить�� ���давать �ценарии и �а�етные файлы, т� чт� т��да ��жн� ��а�ать �� утилитах ���андн�й �тр��и? А в�т чт�: y Мн��ие ад�ини�тративные, ���луживающие и в���тан�вительные фун�ции W��dows не фи�урируют в ее �рафиче���й �реде. Их ��жн� найти т�ль�� в �р�� не фи�урируют в ее �рафиче���й �реде. Их ��жн� найти т�ль�� в �р�� фи�урируют в ее �рафиче���й �реде. Их ��жн� найти т�ль�� в �р�� фи�урируют в ее �рафиче���й �реде. Их ��жн� найти т�ль�� в �р�� в ее �рафиче���й �реде. Их ��жн� найти т�ль�� в �р�� в ее �рафиче���й �реде. Их ��жн� найти т�ль�� в �р�� ее �рафиче���й �реде. Их ��жн� найти т�ль�� в �р�� ее �рафиче���й �реде. Их ��жн� найти т�ль�� в �р�� �рафиче���й �реде. Их ��жн� найти т�ль�� в �р�� �рафиче���й �реде. Их ��жн� найти т�ль�� в �р�� �реде. Их ��жн� найти т�ль�� в �р�� �реде. Их ��жн� найти т�ль�� в �р�� . Их ��жн� найти т�ль�� в �р�� Их ��жн� найти т�ль�� в �р�� �ра��ах ���андн�й �тр��и. y Ин��да на�н��� �ы�трее на�рать �ару �у�в, че� выи��ивать чт��ни�удь на э�ране � ����щью �ыши! y П����ль�у ��льшин�тв� утилит ���андн�й �тр��и ра��читан� на ра��ту � фай� ла�и данных или те��т�вы�и файла�и � т�й или ин�й ��н�ретн�й ��ль��й, �р��ра��ы ���андн�й �тр��и �ача�тую ��жн� и���ль��вать в �аче�тве �тр�� ительных �л���в дл� вы��лнени� та�их �л�жных �адач, �а� ��ртир�в�а, и�� влечение и ф�р�атир�вание инф�р�ации. В�е�т� на�и�ани� ��ециальн� �ред� на�наченн�й �р��ра��ы, ин��да ��жн� дл� вы��лнени� �адачи и���ль��вать череду �р��ра�� ���андн�й �тр��и, ��тратив на эт� на�н��� �еньше у�илий. Пр��ра��ы ���андн�й �тр��и ��жн� ра���атривать в �аче�тве �в�е��ра�ных н�жниц и �те�лера на ра��че� �т�ле ваше�� ����ьютера. Х�т� W��dows GUI �ред�тает в� в�е� �в�е� �ле��е и �твле�ает на �е�� в�е вни� W��dows GUI �ред�тает в� в�е� �в�е� �ле��е и �твле�ает на �е�� в�е вни� GUI �ред�тает в� в�е� �в�е� �ле��е и �твле�ает на �е�� в�е вни� GUI �ред�тает в� в�е� �в�е� �ле��е и �твле�ает на �е�� в�е вни� �ред�тает в� в�е� �в�е� �ле��е и �твле�ает на �е�� в�е вни� �ание, нетрудн� �а�етить, чт� эти ��рытые ин�тру�енты и �вл�ют�� на�т��щей «�л�тью» ��ераци�нн�й �и�те�ы W��dows.
24 Введение Структура книги Кни�а �т начала д� ��нца ���тр�ена д��тат�чн� л��ичн�, н� �на на�и�ана та�и� ��ра���, чт� вы ��жете �ри�ту�ить � чтению � лю���� �е�та, �ы�тр� ��лучить нужную инф�р�ацию и �тл�жить �ни�у в �т�р�ну. Ее не����ательн� читать �т ��р�и д� ��р�и и те� ��лее не����ательн� штудир�вать ру��в�д�тва. (Е�ли вы уже �на���ы � ра���атривае�ы�и те�а�и, ��ветую ва� �р����треть ��рав�чный �атериал, �����ль�у ��ы� �а�етных файл�в и �р��ра��а W��dows S���p� Hos� �ен�ли�ь и ра�вивали�ь.� Эта �ни�а ра��ита на четыре ча�ти. В�т �рат��е ��держание �ажд�й и� них. y Ча�ть I «С��дание �ценариев � ����щью W��dows S���p� Hos�» ���в�щена ин�тру�ентарию W��dows S���p� Hos�, в ней дает�� введение в ��ы� �р��ра�� W��dows S���p� Hos�, в ней дает�� введение в ��ы� �р��ра�� S���p� Hos�, в ней дает�� введение в ��ы� �р��ра�� S���p� Hos�, в ней дает�� введение в ��ы� �р��ра�� Hos�, в ней дает�� введение в ��ы� �р��ра�� Hos�, в ней дает�� введение в ��ы� �р��ра�� , в ней дает�� введение в ��ы� �р��ра�� �ир�вани� V�S���p�, ра���атривает�� и���ль��вание ��ъе�т�в и ��и�ывают�� �р�це��ы на�и�ани� и �тлад�и �ценариев. Кр��е эт��� в данн�й ча�ти �ред�� �тавл�ет�� ��др��ный ��рав�чни� �� �н��и� ��ъе�та� �ценариев, �ред��тав� л�е�ых �и�те��й W��dows. y Ча�ть II «Среда ��ружени� ���андн�й �тр��и» ���в�щена ���андн��у ��ы�у W��dows, и���ль�уе���у дл� на�и�ани� �а�етных файл�в. Я�ы� �а�етных фай� , и���ль�уе���у дл� на�и�ани� �а�етных файл�в. Я�ы� �а�етных фай� л�в, �� �равнению �� �в�и� MS�DOS��р�т�ти���, �ыл �уще�твенн� улучшен и �тал на�н��� ��лее ��ле�ны� �ред�тв�� авт��ати�ации ра��ты � файла�и и �атал��а�и. В� вт�р�й ча�ти та�же ра���атривает�� �реда ��ружени� ��� �андн�й �тр��и, э�ул�ци� MS�DOS и ������ы и��енени� �реды ��ружени� � ����щью ад�ини�тративных ин�тру�ентальных �ред�тв. В ��нце �риведен ����р ���л� 20 наи��лее важных �р��ра�� ���андн�й �тр��и, ���тавл�е�ых � W��dows, �уда вх�д�т �ред�тва у�равлени� те��т�вы�и файла�и, утилиты дл� ра��ты � �ет��и, �рлы�и �рафиче����� ��ль��ватель����� интерфей�а и �н���е дру��е. y Ча�ть III «Введение в W��dows Pow��Sh���» дает �ред�тавление � W��dows Pow��Sh���, н�вейшей и �а��й не��ычн�й �реде вы��лнени� �ценариев ��� , н�вейшей и �а��й не��ычн�й �реде вы��лнени� �ценариев ��� �андн�й �тр��и. Pow��Sh��� �вл�ет�� эффе�тивны� и �в�е��ра�ны� ��ы��� �р��ра��ир�вани�. Е�� ��жн� и���ль��вать дл� вы��лнени� универ�альных вычи�лений, дл� ��ра��т�и файл�в и данных лю���� ти�а и дл� у�равлени� ра��чи�и �танци��и W��dows, �ервера�и и �рил�жени��и. Не���ненн�, эт�т ��ы� �а�луживает и�учени�. y И на��нец, Ча�ть IV «Прил�жени�» �ред��тавл�ет �рат�ие ��рав�чни�и и у�а� IV «Прил�жени�» �ред��тавл�ет �рат�ие ��рав�чни�и и у�а� «Прил�жени�» �ред��тавл�ет �рат�ие ��рав�чни�и и у�а� �атели на те ин�тру�ентальные �ред�тва, ��т�рые ра���атривают�� в данн�й �ни�е. Та�, �де эт� в����жн�, в�лючают�� ��ыл�и на �траницы ра�дел�в данн�й �ни�и, �де ��жн� найти ��лее ��др��ную инф�р�ацию. В эт�й ча�ти та�же �ред�тавлен у�а�атель уче�ных �ценариев и �а�етных файл�в, ��т�ры�и ��жн� в����ль��вать�� в �аче�тве �т�равных т�че� дл� ���дани� ваших ����твенных �р�е�т�в. В�е �ценарии и файлы ��жн� �а�ру�ить � ве���айта www.helpwin7.com/ scripting. Та� же ��жн� найти д���лнительные ��ну�ные �рил�жени�, ��т�рые, не���тр� на в�е наше желание, не ����ли ���е�тить�� в �ечатн�� и�дании.
Соглашения, используемые в данной книге 25 В�е �лавы ���тр�ены �� един��у ша�л�ну. В� в�ту�лении ра���а�ывает�� � ��н�ретн�� ин�тру�енте или �хе�е �р��ра��ир�вани�, в ��рав�чн�� ра�деле ин�тру�ент ��и�ывает�� в� в�ех ��др��н��т�х, а в ��нце �лавы ра���атривает�� и���ль��вание ин�тру�ента в �ра�тиче��их �адачах. Та�ую �тру�туру � вы�рал ��� т��у, чт� �не х�тел��ь, чт��ы �ни�а вы�ту�ала �дн�вре�енн� в �аче�тве уче�ни�а дл� н�вич��в и в �аче�тве ��рав�чни�а дл� читателей, уже �на���ых � данны�и техн�л��и��и, н� желающих �ы�тр� ��вежить �в�и �нани�. Мне та�же х�тел��ь �ридать �атериалу не�ий �ти�улирующий хара�тер. На� чальные �лавы, ���в�щенные W��dows S���p� Hos� и ��ъе�та�, ��льше �твечают «��учающе�у» ��дх�ду, н� �ате� те�� и�л�жени� �атериала увеличивает��. Соглашения, используемые в данной книге Чт��ы ����чь ва� �лу�же у�в�ить �атериал данн�й �ни�и, �де�ь и���ль�уют�� ��в�е�е�тн� и���ль�уе�ые ��ециальные ���лашени� и эле�енты. Соглашения по оформлению текста Принци�ы, и���ль��ванные в �ф�р�лении те��та, ���в�л�ют идентифицир�вать ��н�ти� и дру�ие ��ециальные ��ъе�ты. Соглашение Значение Курсив Н�вые, в�ервые ��редел�е�ые ��н�ти� или выражени� Моноширинный шрифт Инф�р�аци�, ���вл�юща��� в ��де или на э�ране или на�ирае�а� ва�и на �лавиатуре Клавиатурные ����инации Клавишные ����инации �ред�тавлены �на��� �лю�. На�ри�ер, е�ли в те��те �редла�ает�� нажать Ctrl+Alt+Delete, т� �ледует �дн�вре�енн� нажать �лавиши Ctrl, Alt и Delete. В ��и�ани�х �инта��и�а, �р��ра��ных ин�тру�ций и ��ъе�т�в и���ль�уют�� �ледующие ���лашени�. Соглашение Значение Жирный_шрифт() Те��т и �и�в�лы, выделенные жирны� шрифт��, на�ирают�� �у�� вальн�. курсив Кур�ив�� выделены и�ена и �начени�, ��т�рые тре�ует�� �а�енить ваши�и ����твенны�и данны�и. [ключи] Квадратные �����и ���а�ывают не����ательные, д���лнительные эле�енты. Са�и �����и на�ирать не нужн�. {вариант A | вариант �} Фи�урные �����и и верти�альна� черта (|� �лужат �ри�на��� эле�ен� та, дл� ��т�р��� нужн� �делать вы��р и� двух вариант�в. элемент [, элемент ...] Тр�ет�чи� �лужат �ри�на��� эле�ент�в, ��т�рые ���ут ��вт�р�ть�� �р�и�в�льн�е ��личе�тв� ра�.
26 Введение Специальные элементы На �траницах эт�й �ни�и вы увидите ��рав�чные ��и��и, �хе�ы, ��веты, �ри�еча� ни�, �реду�реждени�, �ере�ре�тные ��ыл�и и вре��и. Эти эле�енты �тличают�� �т в�е�� ��тальн��� те��та, чт��ы �ривлечь ваше вни�ание. СПРАВКА С�рав�а ��и�ывает �инта��и� и ��р�д�� и���ль��вани� �р��ра��ных ин�тру�� ций, �в�й�тв и �ет�д�в ��ъе�т�в и �р��ра�� ���андн�й �тр��и. ШАБЛОН Шаблоны показывают способы решения конкретных задач программирования в том виде, ко- торым можно воспользоваться во многих ситуациях. Они предоставляют универсальный способ решения тех или иных вычислительных задач. ▼▼ ▼Советы подсказывают более быстрые, безопасные и надежные способы выполнения тех или иных действий или получения результатов, превращая вас в настоящих знатоков своего дела. ПРИМЕЧАНИЕ ▼) ▼Примечаниями выделяются те элементы, на которые нужно обратить внимание. Иногда они просто содержат некую исходную информацию относительно изучаемой темы, но чаще всего они обращают внимание на особые обстоятельства и потенциальные подвохи, которые могут проявиться у некоторых свойств Windows. ▼o Обязательно изучайте все предупреждения! Они помогут сэкономить драгоценное время, убе- регая вас от утраты уже проделанной работы. Перекрестные ссылки Эти ��ыл�и у�а�ывают на дру�ие �е�та в данн�й �ни�е, �де �ред��тавл�ет�� д�� ��лнительна� или в������ательна� инф�р�аци�. Пере�ре�тные ��ыл�и и�еют �ледующий вид: ➔ Д���лнительную инф�р�ацию � �ерф��арте Х�ллерита ��жн� найти в �лаве 1 «W��dows S���p� Hos�». Эт� инф�р�аци�, д���лн�юща� ра���атривае�ую те�у. Эти �ведени� �редна� �начены дл� тех, ���� интере�ует ��лее �лу����е и�учение ����енн��тей �ри� л�жени� или �адачи.
Создание сценариев с помощью Windows Script Host I
Windows Script Host Сначала �ы ра����три� �ехани�� на�и�ани� и �а�у��а файл�в �ценариев. y Зде�ь вы найдете ����рную инф�р�ацию �� ���данию �ценариев, ��ы�а� �це� нариев и ���анда�, и���ль�уе�ы� дл� �а�у��а �ценариев. y Вернитеть ���днее � эт�й �лаве, чт��ы ��вежить �в�и �нани� �� �тладчи�е �це� нариев. y В ���ледне� ра�деле дана ��д��а��а, �де в Интернете ��жн� найти �тветы на в��р��ы �� ���данию �ценариев и ��лучить д���лнительную инф�р�ацию. Что такое сценарий Windows? На эт�т в��р�� ��жн� �тветить ��р�т��: «Пр��ра��а, на�и�анна� на интер�рети� руе��� ��ы�е � д��ту��� � �����нента� ��ераци�нн�й �и�те�ы чере� ��ъе�тную ��дель COM». При в�ей �в�ей т�чн��ти эт�т �твет вр�д ли �удет ��ле�ен ���у� ни�удь, �р��е ��ециали�та, ра��тающе�� в ��ла�ти ����ьютерных нау�. Я ��ла�аю, чт� � ���дании �ценариев важн� �нать в�е�, ��эт��у давайте ���р��уе� �тветить на эт�т в��р�� еще ра�, н� те�ерь уже на ��щед��ту�н�� ��ы�е. Что в WSH означает слово «Script»? Чт��ы ��ъ��нить, чт� та��е �ценарий (s���p�� и ��че�у ��жн� �аинтере��вать�� е�� ���дание�, ��трати� не�н��� вре�ени на ��ду�ывание и�х�дн���, �у�вальн��� ��ы�ла �л�ва сценарий. Театральный �ценарий — эт� план, ���лед�вательн��ть ин�тру�ций дл� ���тан�в�и �ье�ы. В�е не��х�ди�ые �л�ва нар�ду � у�а�ани��и, ����щающи�и а�тера�, �уда дви�ать�� и чт� делать �� х�ду �ье�ы. Сценарий �ред� �тавл�ет ����й �лан, ра��читанный на а�тер�в, ������ных вы��лнить фа�тиче��ую ра��ту. Сценарий ���уждает этих а�тер�в � вы��лнению �на���ых дей�твий и� реальн�й жи�ни, и делать эт� �н�ва и �н�ва, �т�ль�� ра�, ���ль�� �удет и�рать�� �ье�а... а вам ��танет�� т�ль�� �идеть и на�людать �а �р�и�х�д�щи�. 1
Что такое сценарий Windows? 29 Вы уже, наверн�е, д��адали�ь, чт� в ��ы�ле �р��ра��н��� ��е��ечени� �цена� рий — эт� ра�н�видн��ть ����ьютерн�й �р��ра��ы, н� �л�в� «�ценарий» ��дчер� — эт� ра�н�видн��ть ����ьютерн�й �р��ра��ы, н� �л�в� «�ценарий» ��дчер� — эт� ра�н�видн��ть ����ьютерн�й �р��ра��ы, н� �л�в� «�ценарий» ��дчер� �ивает у����нутые ранее ���енты: y Сценарии на�и�аны на ��лее��енее �ривычн�� �р��т�� ��ы�е. y Сценарии ��ль�уют�� ������ны�и а�тера�и, чт��ы ��равить�� � не�р��т�й ра��т�й. Они �р��т� ��в�р�т а�тера�, чт� нужн� делать. y Сценарии вы��лн�ют дл� ва� �ра�тиче��ие �адачи, а ва� ��тает�� лишь �идеть и на�людать �а в�е� �р�и�х�д�щи�. С��дание �ценариев не �вл�ет�� �а�и��т� н�вы� ��н�тие� . Пр��ра��ы и ��е� раци�нные �и�те�ы, начина� � Au�oCAD и �а�анчива� ��OS, в�лючали эти в����ж� Au�oCAD и �а�анчива� ��OS, в�лючали эти в����ж� и �а�анчива� ��OS, в�лючали эти в����ж� ��OS, в�лючали эти в����ж� �OS, в�лючали эти в����ж� OS, в�лючали эти в����ж� , в�лючали эти в����ж� н��ти уже не �дн� де��тилетие. Та��е �ред�тв�, �а� W��dows S���p� Hos� (WSH�, в�ервые ���вил��ь в W��dows 95 S��v��� R����s� 2, х�т� даже �ейча� � не� �нают лишь не�н��ие ���в�щенные. И, �а� �удет ���а�ан� в �ледующих �лавах, �н� �ред��тавл�ет ва� д��ту� � шир����у �н�����ра�ию и���лнителей (�����нента� �р��ра��н��� ��е��ечени� и �р��ра��а��, у�еющих ��ра�атывать данные, у�рав� л�ть ����ьютер�� и ��вышающих та�и� ��ра��� эффе�тивн��ть вы��лнени� вашей ра��ты. Что в WSH означает «Windows»? WSH ���в�л�ет ���давать �ценарии дл� ра��ты � файла�и, ��ра��т�и данных, и��енени� на�тр�е� ��ераци�нн�й �и�те�ы, у�тан�в�и и удалени� на�тр�е� �р�� �ра��н��� ��е��ечени�, �т�рав�и эле�тр�нн�й ��чты и т. д . Сценарии ��вершают эти дей�тви�, �ред��тавл�� ва� д��ту� � дру�и� �р��ра��а�, вы��лн�ющи� фа�тиче��ую ра��ту. Мн��ие и� этих �р��ра�� ���тавл�ют�� в�е�те � W��dows, а д���лнительные �р��ра��ы ��жн� д��авить уже ���ле у�тан�в�и ��ераци�нн�й �и�те�ы. В�е �ни — а�теры в нашей театральн�й ��дели. Эт� д�в�льн� ��щна� иде�, ��т��у чт� �а��й �р��ра��е��ценарию нужн� лишь ����щить дру�и� �р�� �ра��а�, чт� �т них тре�ует��, и не нужн� �нать ��др��н��тей вы��лн�е��й ра��ты. Эт� �начит, чт� диа�а��н ��вершае�ых ваши� �ценарие� дей�твий не ��раничен в����жн��т��и, в�тр�енны�и в ��ы� �ценариев, и �р�це�� ���дани� �ценариев W��dows ��жет ��ра�тать в�е н�вы�и и н�вы�и в����жн��т��и. На жар��не M���oso�� внешние �р��ра��ные �����ненты, � ��т�рых идет речь, у�а��ваны в виде ��ъе�т�в. О�ъе�ты — эт� �а��д��тат�чные �р��ра��ные ��дули, вы��лн�ющие �адачи дл� дру�их �р��ра�� чере� на��р чет�� ��ределенных �р�� �ра��ируе�ых ��ыл��. О�ъе�ты �ача�тую �редна�начены дл� �ред�тавлени� не�их ��ъе�т�в реальн��� �ира или �а�их�ли�� ��н�тий, та�их �а� файл, эле�тр�нна� та�лица или учетна� �а�и�ь ��ль��вател� ����ьютера, а �р��ра��ные ��ыл�и дают дру�и� �р��ра��а�, на�ри�ер �ценари��, ������ ��лучени� инф�р�ации и ��уще�твлени� у�равлени� в �ределах �ред��тавленных ��лн���чий. К эт�й ��нце�ции нужн� �ривы�нуть, и и�енн� ей ���в�щена �лава 3 «С��да� ние �ценариев и ра��та � ��ъе�та�и». А ���а �ледует лишь �т�етить, чт� �ред�тв� WSH ���тавл�ет�� � ��ъе�тны�и �����нента�и, �ред��тавл�ющи�и д��ту� � фай� ���тавл�ет�� � ��ъе�тны�и �����нента�и, �ред��тавл�ющи�и д��ту� � фай�
30 Глава 1. Windows Script Host ла� и �а��а�, � �и�те�е эле�тр�нн�й ��чты, � �и�те�е ���ена данны�и �� �ети, � �луж�а� W��dows и драйвера� у�тр�й�тв, � �луж�е �атал���в A���v� D�����o�y и �� �н��и� дру�и� ча�т�� W��dows. Приведе� ��н�ретный �ри�ер: �ред��л�жи�, чт� ��� ра��та ча�тичн� ���т�� ит и� т���, чт� люди �ри�ылают �не д��у�енты Wo�d, ��т�рые нужн� ра���лать не���ль�и� �ред�тавител�� �р�ани�ации (�у�ть эт� �удут �а�р��ы на �т�у���. Д��у�енты ���ту�ают �� эле�тр�нн�й ��чте в лю��е вре�� �ут��, и � храню �ри�ре�ленные д��у�енты в �а��е. Каждый день в 17 ча��в � д�лжен �т�равить ру��в�д�тву ����ании �� эле�тр�нн�й ��чте увед��лени� � ���ту�ивших �а день �а�р��ах, в�лючив их в ����щение в �аче�тве вл�жений. Я ���у ежедневн� вы��лн�ть в�ю эту ра��ту вручную, н� � та�же ���у на�и�ать �ценарий, ��т�рый в�е эт� �делает �а �ен�. П� �дн��у ��е�у щелч�у �ценарий ��жет в����ль��вать�� в�тр�енны�и ��ъе�та�и W��dows дл� вы��лнени� �леду� W��dows дл� вы��лнени� �леду� дл� вы��лнени� �леду� ющих �адач: 1. П�лучить ��и��� в�ех файл�в и� �а��и «На �т�рав�у». 2. С��тавить ����щение эле�тр�нн�й ��чты и адре��вать е�� ��и��у ру��в�д�тва. 3. При�ре�ить �аждый и� файл�в � ����щению эле�тр�нн�й ��чты, а �ате� �т� �равить эт� ����щение. 4. Пере�е�тить файлы �а�р���в в �а��у «О�ра��танные». Правда же не�л�х�, ���да в�� ра��та вы��лн�ет�� �дни� щелч��� �ыши, и вы ух�дите � ра��ты �аждый день не в 17.10, а в 17 ча��в? Н� дел� не ��раничивает�� �дни�и т�ль�� ��ъе�тны�и �����нента�и, �ред�� �тавл�е�ы�и W��dows. Мн��ие ����ании, �р�и�в�д�щие �р��ра��н�е ��е��ече� W��dows. Мн��ие ����ании, �р�и�в�д�щие �р��ра��н�е ��е��ече� . Мн��ие ����ании, �р�и�в�д�щие �р��ра��н�е ��е��ече� ние, �р�дают д���лнительные �����ненты, �ред��тавл�ющие ра�н���ра�ные виды �ерви�а �ценари�� и W��dows��р��ра��а�, начина� ра��т�й в �ети и �а�анчива� ра��т�й � �рафиче��и�и ди��ле��и и д��ту��� � �а�а� данных. Кр��е т���, в �ценари�х ��жн� и���ль��вать �н�же�тв� �ри�ладных �р��ра��, та�их �а� M���oso�� Wo�d и �x���. П��р��ту ��в�р�, эти �р��ра��ы вы�тавл�ют ��ъе�ты, ��т�рые �ред�тавл�ют их д��у�енты, эле�тр�нные та�лицы и т. д . Е�ли вы ���да�ли�� ���давали Wo�d или �x��� �а�р��, �начит, вы уже в����ль��вали�ь эт�й в����жн��тью. Сценарии W��dows та�же ���ут ра��тать � эти�и ��ъе�та�и. На�ри�ер, �ценарий ��жет вы��лн�ть в�е ниже�еречи�ленные �адачи: y и���ль��вать Wo�d дл� ф�р�атир�вани� �тчета, в ��т�р�� �еречи�л�ют�� в�е и�еющие�� на ����ьютере файлы; y ���дать �x����диа�ра��у, ���а�ывающую, �а��й ��ъе� ди���в�й �а��ти �адей� �x����диа�ра��у, ���а�ывающую, �а��й ��ъе� ди���в�й �а��ти �адей� � диа�ра��у, ���а�ывающую, �а��й ��ъе� ди���в�й �а��ти �адей� �тв�вал �аждый и� ��ль��вателей �ети; y ���дать и ���луживать �а�у данных, в ��т�р�й �еречи�лены в�е ����ьютеры и их �етевые на�тр�й�и. И эт� в�е�� лишь не���ль�� �ри�ер�в. В ��нце ��нц�в, вы ��жете ���дать �в�и ����твенные д���лнительные ��ъе�ты, е�ли у�еете ���давать �р��ра��ы на C, C++, V�su�� ��s�� или на �а����ни�удь дру��� ��ы�е �р��ра��ир�вани�.
Что такое сценарий Windows? 31 Что в WSH означает слово «Host»? С��тавл�ющее «Hos�» ���вил��ь в WSH �ла��дар� т��у, чт� M���oso�� ра��ила �в�ю �и�те�у ���дани� �ценариев на две ча�ти: �дна и� них (s���p� host — х���ин �ценари�� �ани�ает�� у�равление� ��ъе�та�и, ���тавл�ющи�и �ценарий, а дру�а� (s���p� engine — движ�� �ценари�� интер�ретирует �а� и���ль�уе�ый ��ы� �цена� риев. Эт� ра�деление труда ���в�л�ет и���ль��вать дл� ���дани� �ценари� лю��й и� не���ль�их ��ы��в �р��ра��ир�вани�. Вы ��жете ��тан�вить �в�й вы��р на �дн�� и� не���ль�их ��ы��в, ру��в�д�тву��ь �в�и�и личны�и �ред��чтени��и. Ины�и �л�ва�и, �а� ���а�ан� на ри�. 1.1, WSH �лужит ���редни��� �ежду ��ы��вы� движ��� (�р��ра��ны� �����нент��, интер�ретирующи� вы�ран� ный дл� ваше�� �ценари� ��ы�� и �����нента�и или ��ъе�та�и, ��вершающи�и фа�тиче��ую ра��ту. Рис. 1 .1 . WSH работает посредником между движком языка сценария и объектами На�ри�ер, �ледующий уче�ный �ценарий, на�и�анный на ��ы�е V�S���p�, ��лучает и��, ��д ��т�ры� ��ль��ватель ����ьютера в�шел в �и�те�у, и выв�дит е�� на э�ран: set wnet = CreateObject("WScript.Network") uname = wnet.UserName MsgBox "Ваше имя пользователя — " & uname В эт�� �ри�ере V�S���p� и WSH не �ани�ают�� ��и���� и�ени, ��д ��т�ры� ��ль��ватель ����ьютера в�шел в �и�те�у. В�е�т� эт��� �ни и���ль�уют ��ъ� е�т WScript.Network, ��т�рый ��жет �ред��тавить инф�р�ацию �� и�еющей�� в �и�те�е W��dows �реде ра��ты � �ет��и — W��dows N��wo�k��g ��v��o�m���. Вы��лнение эт��� �ценари� �рафиче��и ���а�ан� на ри�. 1 .2 . Рис. 1 .2 . Сценарий может использовать объект WScript.Network для получения имени, под которым вошел в систему текущий пользователь
32 Глава 1. Windows Script Host Главн�е, на чт� �де�ь �ледует ��ратить вни�ание, �а�лючает�� в т��, чт� WSH дает ва� �р��т�й, эффе�тивный ������ и���ль��вани� не���ль�их ��тен �р�� �ра��ных ��дулей, �ред��тавл�е�ых W��dows и дру�и�и д���лнительны�и �ри� W��dows и дру�и�и д���лнительны�и �ри� и дру�и�и д���лнительны�и �ри� л�жени��и. М�жн� д��авл�ть не т�ль�� ��ъе�ты �����нент�в, �ред��тавл�е�ые W��dows, н� и интер�ретат�ры дру�их ��ы��в �р��ра��ир�вани�, �р��е тех двух, ��т�рые �ред��тавл�ют�� ����анией M���oso��. Эта в����жн��ть �удет ра����трена в дан� M���oso��. Эта в����жн��ть �удет ра����трена в дан� . Эта в����жн��ть �удет ра����трена в дан� н�й �лаве чуть ���же. Чем отличается создание сценариев от написания пакетных файлов? Те�, �т� ра��тал � �ер��нальны�и ����ьютера�и в не �т�ль давние вре�ена, ���да еще не �ыл� W��dows, д�лжн� �ыть, �на���а ра��та � �а�етны�и файла�и. Эти файлы та�же �вл�ют�� �ценари��и; �ни ���в�л�ют ���тавить �ценарий �а�у��а �ерии �р��ра��, �ред��тавл�� в����жн��ть ��и��а и ��ра��т�и файл�в, и �лужат в �аче�тве не���� ��д��и� �ри�итивн��� ��ы�а �р��ра��ир�вани�. Па�етные файлы ��ле�ны и �ейча�. Они ��др��н� ра���атривают�� в �лаве 11 «Па�етные файлы дл� ��ль�ы и ра�влечений». А в данн�й �лаве ра���атривают�� в��р��ы ���дани� �ценариев. Главны� ��раничение� �а�етных файл�в �вл�ет�� т�, чт� �ни ���ут лишь �а�у��ать �р��ра��ы и не �ред��тавл�ют ва� ������а в�аи��дей�тви� � ни�и. Па�етные файлы ра��тают на ур�вне в�ех �р��ра�� и файл�в цели���. Эт� ��жет �ри��дить�� дл� решени� лишь ��раниченн��� �ру�а �адач. Н�, в цел��, �а�етные файлы не ���в�л�ют и���ль��вать ��ъе�ты и ра��тать � те��т�� и чи�ла�и и �ри эт�� не дают ва� тех в����жн��тей, ��т�рые �ред��тавл�ют�� та�и�и ��щны�и ��ы�а�и �р��ра��ир�вани�, �а� V�S���p� или JS���p�. К�р�че ��в�р�, ���дание �ценариев — эт� ��лее ��вре�енный и ��щный ��дх�д � авт��ати�ации W��dows. Языки сценариев Са�и �ценарии �вл�ют�� те��т�вы�и файла�и, ��т�рые ��жн� реда�тир�вать � ����щью �р��т��� те��т�в��� реда�т�ра, та���� �а� Бл��н�т. В те��т�вых файлах нах�д�т�� ин�тру�ции, на�и�анные на ��ы�е �ценариев. М�жн� вы�рать �дин и� не���ль�их ��ы��в, ���ла�н� �в�и� личны� �ред��чтени��. В эт�� ра�деле �а� ра� и ра���атривают�� варианты эт��� вы��ра. W��dows 7, W��dows V�s��, W��dows XP и W��dows 2000 ���тавл�ют�� � дву�� интер�ретат�ра�и ��ы��в �ценариев: V�S���p� и JS���p�. С лю�ы� и� них вы ��же� V�S���p� и JS���p�. С лю�ы� и� них вы ��же� и JS���p�. С лю�ы� и� них вы ��же� JS���p�. С лю�ы� и� них вы ��же� . С лю�ы� и� них вы ��же� те делать в�е чт� у��дн�. Н� д��ту�ны и дру�ие ��ы�и �ценариев, ��т�рые ��жн� �в���дн� д��авить � WSH. Ниже �удет �риведен ��и��� наи��лее ра��р��транен� WSH. Ниже �удет �риведен ��и��� наи��лее ра��р��транен� . Ниже �удет �риведен ��и��� наи��лее ра��р��транен� ных и� д��ту�ных на �е��дн�шний день ��ы��в.
Языки сценариев 33 СРАВНЕНИЕ ЯЗЫКОВ СОЗДАНИЯ СЦЕНАРИЕВ С КОМПИЛИРУЕМЫМИ ЯЗЫКАМИ Пр��ра��у, вы��лн�ющую ту же �а�ую ра��ту, чт� и лю��й �ценарий, ��жн� на�и�ать на �тандартн�� ����илируе��� ��ы�е �р��ра��ир�вани�, на�ри�ер на C++. В че� же т��да ра�ница �ежду интер�ретируе�ы� ��ы���, та�и� �а� V�S���p�, и ����илируе�ы� ��ы���? Пр��ра��ы на интер�ретируе�ых ��ы�ах хран�т�� на ����ьютере в виде �р��т��� те��та, и их ��держи��е д�лжн� анали�ир�вать�� ���тр�чн� �ри �ажд�� их �а�у��е на ����ьютере. К���илируе�ые �р��ра��ы анали�ируют� �� т�ль�� �дин ра� и �ревращают�� в а��аратные «�ашинные ин�тру�ции», ��т�рые �р�це���р ��жет у�ваивать на�р��ую. В ре�ультате эт��� �����или� р�ванные �р��ра��ы ра��тают �ы�трее. Н� �р��ра��ы на интер�ретируе�ых ��ы�ах не нуждают�� в эта�е �ре��ра��вани�, и эт� э��н��ит не�н��� вре�ени в �р�це��е их на�и�ани� и д�в�д�и. Интер�ретируе�ые ��ы�и, � т��у же, �а� ча�тую �р�ще в и�учении и и���ль��вании и ���ут ��двер�ать�� и��енени�� �� �ере не��х�ди���ти. Дл� тех важных, н� �тн��ительн� не��льших �аданий �� ��ра��т�е данных, ��т�рые ра���атривают�� в данн�й �ни�е, �л�жн��ти и���ль��вани� ����или� руе�ых ��ы��в �еревешивают лю�ые �реи�уще�тва их ��лее �ы�тр�й ра��ты. VBScript С�четание V� в �л�ве V�S���p� ��начает V�su�� ��s�� и �тн��ит�� � ��ы�у �р��ра�� V� в �л�ве V�S���p� ��начает V�su�� ��s�� и �тн��ит�� � ��ы�у �р��ра�� в �л�ве V�S���p� ��начает V�su�� ��s�� и �тн��ит�� � ��ы�у �р��ра�� V�S���p� ��начает V�su�� ��s�� и �тн��ит�� � ��ы�у �р��ра�� ��начает V�su�� ��s�� и �тн��ит�� � ��ы�у �р��ра�� V�su�� ��s�� и �тн��ит�� � ��ы�у �р��ра�� ��s�� и �тн��ит�� � ��ы�у �р��ра�� ��s�� и �тн��ит�� � ��ы�у �р��ра�� и �тн��ит�� � ��ы�у �р��ра�� �ир�вани�, ��т�рый ушел дале�� в�еред �т �в�е�� �ред�а, ра�ра��танн��� в Дар� т�ут���� ��лледже в 1964 ��ду. И �� �р�ше�твии �выше 45 лет ��s�� ����режне�у �вл�ет�� х�р�ши� ��ы��� «дл� начинающих», а в ру�ах ����ании M���oso�� �н �ревратил�� в эффе�тивный ��вре�енный ��ы�. V�S���p� �вл�ет�� �дн�й и� не���ль�их вер�ий ��ы�а V�su�� ��s��, ра�ра��� �вл�ет�� �дн�й и� не���ль�их вер�ий ��ы�а V�su�� ��s��, ра�ра��� V�su�� ��s��, ра�ра��� ��s��, ра�ра��� ��s��, ра�ра��� , ра�ра��� танных ����анией M���oso��. Он �вл�ет�� диале�т��, и���ль�уе�ы� в WSH, и �н та�же ��жет и���ль��вать�� в ве���рау�ерах и �ерверах. Я�ы� дл� �рил�же� ний — V�su�� ��s�� �o� App������o�s (V�A� и���ль�ует�� в �аче�тве ��ы�а ���дани� �ценариев или �а�р���в дл� та�их �р�ду�т�в ра��че�� �т�ла M���oso��, �а� Wo�d и �x���. П�лн�фун�ци�нальный �р�ду�т ра�ра��т�и, V�su�� ��s��, �р��ра��и�ты и���ль�уют дл� ���дани� авт�н��ных W��dows��р��ра��. Е�� ���ледни� в��л�� W��dows��р��ра��. Е�� ���ледни� в��л�� ��р��ра��. Е�� ���ледни� в��л�� щение� �вл�ет�� V�.N�T, ��т�рый ��жет �ри�ен�ть�� дл� ра�ра��т�и ��ычных и ве���рил�жений � и���ль��вание� ра�ра��танн�й M���oso�� техн�л��ии .N�T F��m�wo�k. V�S���p�, наверн�е, �а�ый �р��т�й в и�учении ��ы� ���дани� �ценариев, и ��� , наверн�е, �а�ый �р��т�й в и�учении ��ы� ���дани� �ценариев, и ��� ���ль�у �н та�же и���ль�ует�� дл� на�и�ани� �а�р���в (�ценариев� внутри M���oso�� Wo�d, �x��� и не��т�рых дру�их шир��� и���ль�уе�ых �рил�жений, т�, ���рее в�е��, эт� �а�ый лучший ��ы� дл� �ерв�начальн��� и�учени�. Лю��й ��ыт, ��т�рый ��жн� �ри��ре�ти �ри на�и�ании �а� �а�р���в, та� и �ценариев, ��жн� �ерене�ти � �дних вид�в �р�ду�т�в на дру�ие.
34 Глава 1. Windows Script Host JScript JS���p� �вл�ет�� ��ы��� �р��ра��ир�вани�, ��р�енны� �� ��ра�цу и ��д��ию ра�ра��танн��� ����анией N��s��p� ��ы�а J�v�S���p�. (К���ани� M���oso�� ���дала �в�й ����твенный вариант, ���твет�твующий в����жн��т�� е�� �режне�� �лавн��� ��н�урента, н� вне�ла в ��ы� не��т�рые и��енени�, чт��ы �делать е�� интере�� нее, и ��в�е�ти���ть �ри эт�� �ыла утрачена.� Я�ы� ра�ра�атывал�� �а� ������ в�траивани� в����жн��тей �р��ра��ир�вани� в ве���траницы. Ва�, наверн�е, �рих�дил��ь видеть ве���траницы, �де �еню или ри�ун�и и��ен�ют�� �ри �р�х�� де над ни�и у�а�ател� �ыши? С��рее в�е��, эт� в�е делал��ь � ����щью �ред�тв JS���p� или J�v�S���p�, �����ль�у эти ��ы�и ���дани� �ценариев ��ддерживают�� ��льшин�тв�� ве���рау�ер�в. ▼) JavaScript и JScript не имеют никакого отношения к языку Java. JavaScript имеет некоторые внешние сходства с Java, но не более того. Как уже упоминалось, JScript является разновидно- Java, но не более того. Как уже упоминалось, JScript является разновидно- , но не более того. Как уже упоминалось, JScript является разновидно- JScript является разновидно- является разновидно- стью JavaScript, поэтому он тоже не имеет никакого отношения к языку Java. JS���p� ��жет и���ль��вать�� �ри на�и�ании �ценариев дл� W��dows. Эт�т ��ы� ��жет ��д�йти те�, �т� уже �ривы� � е�� и���ль��ванию �ри �р��ра��ир�вании ве���траниц, у�равл�е�ых �ценари��и, и �ри на�и�ании �ценариев на �т�р�не �ервера. Ка� уже у���инал��ь, интер�ретат�ры V�S���p� и JS���p� �ред��тавл�ют�� в �аче�тве �����нента WSH, вх�д�ще�� в ���тав в�ех вер�ий W��dows, начина� � W��dows 2000. В�е дру�ие ��ы�и ���ут �ыть ��лучены �т �т�р�нних �р�и�в�ди� W��dows 2000. В�е дру�ие ��ы�и ���ут �ыть ��лучены �т �т�р�нних �р�и�в�ди� 2000. В�е дру�ие ��ы�и ���ут �ыть ��лучены �т �т�р�нних �р�и�в�ди� телей или и� на��ра �ред�тв W��dows R�sou��� ���s ����ании M���oso��. Не��т�рые и� этих ��ы��в �удут �еречи�лены в �ледующих ра�делах. Perl Я�ы� P��� �ыл ра�ра��тан в 19�7 ��ду ��ециали�та�и и� ����ще�тва U��x. С �а��� P��� �ыл ра�ра��тан в 19�7 ��ду ��ециали�та�и и� ����ще�тва U��x. С �а��� �ыл ра�ра��тан в 19�7 ��ду ��ециали�та�и и� ����ще�тва U��x. С �а��� U��x. С �а��� . С �а��� �� начала P��� �ыл «�т�рыты�» ��ы��� — е�� на�и�ание, �тлад�а и ���ледующа� ра�ра��т�а �ыли вы��лнены на не����ерче��их, ��ще�твенных �ринци�ах. Эт� ���ул�рный, ��щный ��ы�, ��т�рые ����енн� х�р�ш� ��дх�дит дл� ра��ты � те�� �т��. У не�� и�еют�� шир��ие в����жн��ти �� ��ра��т�е �тр�� и их �����тавле� ни� � ша�л�на�и, а та�же дру�ие �в�й�тва ��лн�ценн��� ��ы�а �р��ра��ир�вани�. P��� — д�в�льн� �а�утанный и трудный ��ы�. Пр��ра��ы на P��� ���ут �ыть �л�жны дл� чтени� и ��ни�ани� даже дл� ��ытных �р��ра��и�т�в (��эт��у е�� в шут�у на�ывают ��ы��� т�ль�� дл� �а�и�и�. И те� не �енее ����ще�тв� L��ux �рин�л� P��� и �р�д�лжил� е�� ра�витие, и те�ерь в Интернете ��жн� найти ��ль� P��� и �р�д�лжил� е�� ра�витие, и те�ерь в Интернете ��жн� найти ��ль� и �р�д�лжил� е�� ра�витие, и те�ерь в Интернете ��жн� найти ��ль� шие хранилища �е��латных �ценариев на ��ы�е P���. В��лне в����жн�, чт� в них уже е�ть �ценарий, вы��лн�ющий нужную ва� �адачу. К���ани� A���v�S���� Co�po����o�, ��т�ра� ��ъ�вл�ет �е�� «ведущи� ���тав� щи��� �р��ра��ных �р�ду�т�в и �луж� дл� �р�����латф�р�енн�й ра�ра��т�и на ��н�ве �т�рыт��� ��да», вы�у�тила �а�ет P��� в виде ��ы�а «�рие�ле���� дл� W��dows S���p� Hos�», и эт�т �а�ет ��жн� �в���дн� �а�ру�ить � ве���айта www.
Языки сценариев 35 activatestate.com. Пр�ду�т ����ании A���v�S���� �вл�ет�� ��лн�фун�ци�нальн�й инте�рир�ванн�й � W��dows вер�ией ��ы�а P��� и �ред�тавл�ет не���ненный интере� дл� в�ех лю�ителей эт��� ��ы�а. Python Py�ho� — ���ул�рный ��ы� дл� ���дани� �ценариев и �р��ра��ир�вани�. Он �ыл ра�ра��тан в наци�нальн�� научн��и��лед�ватель���� ин�титуте �ате�ати�и и инф�р�ати�и (CWI� в А��терда�е. Эт� �ерен��и�ый, ��ъе�тн���риентир�ван� ный ��ы�, ��ра�д� �енее �а�утанный, че� P���, ��лучивший шир��ую �ра�ти�у �ри�енени� в ����ще�тве L��ux. Бе��латный WSH��ла�ин д��ту�ен на ве���айте www.activestate.com. Open Object REXX R�XX �ыл ���дан в 1979 ��ду в �аче�тве ��ы�а �ценариев дл� универ�альных �ашин I�M. С тех вре�ен ����ани� I�M вы�у�тила вер�ии, д��ту�ные на I�M L��ux, AIX, OS�2 и W��dows, а та�же на ��ераци�нных �и�те�ах �а��й ����ании, ра�ра��танных дл� универ�альных �ашин. Op�� Obj��� R�XX �вл�ет�� �а�ы� ���ледни� W��dows���в�е�ти�ы� в��л�щение� эт��� �р�ду�та. И�начальн� �н �ыл ф�р�альны� �р�ду�т�� ����ании I�M, н� �на вы�у�тила е�� �а� �ред�тв� � �т�рыты� ��д��. П�др��н��ти ��жн� найти на ве���айте www.oorexx.org. Ruby Ruby �вл�ет�� �тн��ительн� н�вы� ��ы���, ���данны� в Я��нии. В на�т��щее вре�� �н ��лее ра��р��транен в Евр��е и Я��нии, че� в США, н� в�е же и та� на�ирает �в�ю ���ул�рн��ть. Вер�и� Ruby, �ерене�енна� в �реду WSH, д��ту�на на ве���айте http://arton.hp.infoseek.co.jp. М�жн� та�же ��и��ать инф�р�ацию в Ин� тернете �� �лючев��у �л�ву «A���v�S���p�Ruby». ▼) Если существует более привычный для вас язык сценариев, который не был упомянут, про- верьте, доступна ли где-нибудь его версия, которая может использоваться в среде WSH. Если таковая отыщется, то, пожалуйста, сообщите мне об этом. Просто зайдите на веб-сайт www. helpwin7.com/scripting и оставьте для меня сообщение. Выбор языка О�н�вн�е вни�ание в эт�й �ни�е уделен� ��ы�у V�S���p�, �����ль�у �н �вл�ет�� наи��лее ра��р��траненны� и «не�л�жны�» ��ы��� �ценариев. Е�ли вы ��ль�уете�ь �ра�у не���ль�и�и �р�ду�та�и ����ании M���oso��, V�� M���oso��, V�� , V�� V�� S���p� — �а�ый важный ��ы� дл� и�учени�, ��т��у чт� �н и���ль�ует�� в �аче�тве в�тр�енн��� ��ы�а �а�р���ределений внутри та�их M���oso�� �р�ду�т�в, �а� Wo�d, �x���, A���ss и �н��их дру�их. Лю�ители U��x и L��ux ���ут в��лне ��раведлив�
36 Глава 1. Windows Script Host в��хвал�ть P��� и Py�ho�, н� е�ли вы ���ираете�ь и�учить в�е�� �дин ��ы� и ра��� P��� и Py�ho�, н� е�ли вы ���ираете�ь и�учить в�е�� �дин ��ы� и ра��� и Py�ho�, н� е�ли вы ���ираете�ь и�учить в�е�� �дин ��ы� и ра��� Py�ho�, н� е�ли вы ���ираете�ь и�учить в�е�� �дин ��ы� и ра��� , н� е�ли вы ���ираете�ь и�учить в�е�� �дин ��ы� и ра��� тать � �рил�жени��и M���oso��, � ре���ендую V�S���p�. И�енн� ��эт��у в �ледующей �лаве ра���атривает�� V�S���p� и �ред��тав� V�S���p� и �ред��тав� и �ред��тав� л�ет�� �рат��е уче�н�е �����ие �� эт��у ��ы�у. К ��жалению, ��учение дру�и� ��ы�а� �ан�л� �ы на�н��� ��льше �траниц, че� ��держит эта �ни�а. Е�ли ва� и�� ве�тен и интере�ен лю��й дру��й ��ы� �ценариев, �, ��нечн� же, ��ддерживаю ваше �тре�ление и���ль��вать и�енн� эт�т ��ы�. В �лаве 3 �удет ���а�ан�, �а� ��лучить д��ту� � ��ъе�та� W��dows и� �р��ра�� на не���ль�их альтернативных ��ы�ах. П��ле и�учени� эт��� �атериала вы ���жете �ереве�ти �ри�еры, �рив�ди�ые в� в�ех дру�их �е�тах эт�й �ни�и, на вы�ранный ва�и ��ы�. ▼) В примерах сценариев, показанных в главах 4–9, используется исключительно язык VBScript. Я рассматривал возможность обучения обоим языкам, и VBScript, и Jscript, и предоставления примеров сценариев сразу на нескольких языках. Но решил не делать этого. Выбрав один только VBScript, я могу предложить намного большее разнообразие сценариев, чем смог бы, если бы пришлось повторять каждый сценарий на нескольких языках. Я также полагаю, что VBScript в качестве самого первого языка сценариев является наилучшим выбором, поскольку его можно применить во многих других приложениях Microsoft. Я понимаю, что тем самым немного затрудняю задачу тем читателям, которые уже знакомы с другим языком сценариев. Если у вас уже есть достаточный опыт, чтобы отдать предпочтение другому языку, я все же думаю, что большее разнообразие и глубина примеров, приводимых в этой книге на VBScript, сделает работу по их переводу на другой язык вполне стоящей по- VBScript, сделает работу по их переводу на другой язык вполне стоящей по- , сделает работу по их переводу на другой язык вполне стоящей по- траченного на нее времени. Простой сценарий Ита�, хватит х�дить в��ру� да ���л�! П�ра ���а�ать �ра�тиче��ий �ри�ер т���, � че� идет речь. Ра����три� �ценарий, �р�вер�ющий в�е файлы в �аданн�� �ата� л��е (в �а��е� и выв�д�щий ��щий ра��ер в�ех файл�в в �айтах. 1 ' s cript0101.vbs 2 ' Общее пространство, занимаемое файлами указанного каталога 3 dir = "C:\" 4 5 set Fsys = CreateObject("Scripting.FileSystemObject") 6 totsize = 0 7 for each file in Fsys.GetFolder(dir).Files 8 totsize = totsize + file.size 9 next 10 wscript.echo "Общий размер файлов в ", dir, " составляет ", totsize, " байт" В данн�� �ри�ере �ценарий на�тр�ен на ��д�чет длины в�ех файл�в в ��рне� в�� �атал��е же�т���� ди��а (C:\�. В�е, чт� �де�ь ���а�ан�, �вл�ет�� ��держи�ы� файла, ��т�рый � на�вал script0101.vbs. Следует �а�етить, чт� ���а�анна� выше ра��ечат�а ��держит н��ер в начале �ажд�й и� 10 �тр�� те��та, чт��ы � ни� ��жн� �ыл� ��ращать�� �ри дальнейше� ра���ре �ценари�. В �а��� файле �ценари� этих н��ер�в нет, ��эт��у �ри �а��� �т��тельн�� на��ре �ценари� их �ледует и��лючить.
Простой сценарий 37 ▼) Не следует набирать все вручную. Все именованные и пронумерованные примеры сценариев, показанные в этой книге, можно загрузить с веб-сайта www.helpwin7.com/scripting. Просле- дуйте по этой ссылке, чтобы загрузить ZIP-файл с учебными сценариями. Страница загрузки содержит инструкции и советы по установке и запуску примеров сценариев. Те�ерь, ���ле дв�йн��� щелч�а на �нач�е эт��� файла в W��dows �xp�o��� ваше�� ����ьютера, ���вит�� диал���в�е ��н�, ���а�анн�е на ри�. 1 .3 . (Е�ли вы �а�ру�или файл уче�ных �ценариев, ��жете и��ытать эти �ценарии в ра��те на �в�е� ����ьютере.� Рис. 1 .3. Результат, выведенный после двойного щелчка на значке файла учебного сценария ▼) Двойной щелчок на значке файла на вашем компьютере может не работать. В целях безопас- ности некоторые пользователи или компании настраивают свои компьютеры, работающие под управлением операционной системы Windows, так, чтобы VBS-сценарии не запускались по од- Windows, так, чтобы VBS-сценарии не запускались по од- так, чтобы VBS-сценарии не запускались по од- VBS-сценарии не запускались по од- -сценарии не запускались по од- ному двойному щелчку. Если это именно ваш случай, не переживайте, просто читайте книгу дальше. Чт��ы ��н�ть, �а� и�енн� ���вил��ь эт� диал���в�е ��н�, давайте ра����три� ���тр�чн� ��держи��е файла �ценари�. Е�ли вы не �на���ы � V� или в���ще не �наете, чт� та��е �р��ра��ир�вание, ���а не �т�ит в�лн�вать��. П�др��н� � �р�� �ра��ир�вании �удет ра���а�ан� в �лаве 2 «Ру��в�д�тв� �� V�S���p�». Стр��и 1 и 2 �вл�ют�� ����ентари��и. В�е, чт� в V�S���p� нах�дит�� ���ле �и�в�ла �динарн�й �авыч�и ('� — и�н�рирует��. К���ентарии не и�еют дл� W��dows ни�а���� �начени�. Их �адача — ����чь ва� и дру�и� люд�� ��н�ть, чт� делает �ценарий. Д��авление � ваши� �ценари�� ����ентариев, ��и�ывающих чт� и �а� �ни делают, �читает�� �равил�� х�р�ше�� т�на. В ��лее длинных �цена� ри�х ��жн� давать д�в�льн� ��др��ные ��и�ани�. В данн�� �ценарии д��тат�чн� �рат�� у�а�ать, че� �н �ани�ает��. О�ратите вни�ание на т�, чт� эт�т �ценарий начинает�� � ����ентари�, у�а�ывающе�� �а�� и�� файла �ценари�. Я �делал эт�, чт��ы вы ����ли �ты��ать эт�т �ценарий �реди на��ра �ри�ер�в, ��т�рый вы ��жете �а�ру�ить. В �тр��е 3 у�танавливает�� и�� �а��и, чье ��держи��е нужн� ��д�читать. Стр��а 4 ��тавлена �у�т�й. И���ль��вание �у�тых �тр�� дл� ви�уальн��� ра�де� лени� ча�тей �р��ра��ы или �ценари� �читает�� х�р�ши� �тиле�. Х�т� дл� �реды WSH эта �у�та� �тр��а ни�а��й р�ли не и�рает, ва� и ���у�ни�удь дру���у �удет ле�че читать �р��ра��у и ра��ирать�� в ней, ���да �тдельные ша�и в ней ра��иты � ����щью �у�тых �р��тран�тв (�у�тых �тр���.
38 Глава 1. Windows Script Host Стр��а 5 ���в�л�ет и���ль��вать �����нент �р��ра��ир�вани� (��ъе�т� ��д на�вание� Scripting.FileSystemObject, ��т�рый дает в����жн��ть �ценарию и�� �лед�вать ��держи��е ди���в и �а��� и ��лучить инф�р�ацию � ра���л�женных та� файлах. Са� ��ы� V�S���p� та��й в�тр�енн�й в����жн��ти не и�еет, н� эт� ��д �илу ��ъе�ту FileSystemObject, и �ы ��же� в����ль��вать�� и� в нашей �р�� �ра��е. В �тр��е 6 у�танавливает�� �четчи� (�ере�енна�, �а� и�ве�тн� �р��ра��и�та��, и���ль�уе�ый дл� ���ра ��ще�� ра��ера в�ех файл�в. Е�� �начение начинает�� � нул�, а �ате� � не�у д��авл�ют�� ра��еры �ажд��� файла. Стр��и 7 и 9 ф�р�ируют ци�л, ��т�рый вы��лн�ет лю�ые �тр��и �р��ра��ы, нах�д�щие�� внутри ци�ла (�� �дн��у ра�у дл� �ажд��� файла в вы�ранн�� �а� тал��е�. О�ратите вни�ание на т�, чт� те��т внутри ци�ла и�еет �т�ту�. Я�ы�у V�S���p� в�е равн�, е�ть та�ие �т�ту�ы в виде �у�т��� �р��тран�тва или их нет — эт� в�е�� лишь ������ у�р��тить выделение начала и ��нца ци�ла, чт��ы �р�ще �ыл� ��н�ть ра��ту �р��ра��ы. В �тр��е � нах�дит�� ��ерат�р, вы��лн�ющий реальную ра��ту: �н д��авл�ет ра��ер �ажд��� файла в W��dows��атал��е � �начению �ере�енн�й �� и�ени tot- size. К��да ци�л �делает эт� дл� �ажд��� файла, у на� �удет ��щий ра��ер в�ех файл�в, нах�д�щих�� в �атал��е. В V�S���p� �на� равен�тва (=� та��й же, чт� и���ль��вал�� �де�ь, не ��начает «эти два �начени� идентичны», �а� эт� �ывает в ал�е�ре. Данна� �тр��а �р��ра��ы �ред�и�ывает V�S���p� в��ть чи�л� в �ере�енн�й totsize, д��авить � не�у �на� чение file.size, �вл�ющее�� ра��ер�� те�уще�� файла, и ���е�тить ре�ультат в �ере�енную totsize. (Е�ли на ����ьютерн�й �лавиатуре �ыл� �ы ��льше д�� �ту�ных �и�в�л�в, в����жн�, V�S���p� �ыл �ы ���н�труир�ван та�, чт��ы �а�и�ь вела�ь �ледующи� ��ра���: totsize <= totsize + file.size.� О�ерат�р в �тр��е 10 выв�дит ре�ультаты � и���ль��вание� �р��т��� чел�ве� че����� ��ы�а. П� у��лчанию ���анда echo выв�дит те��т в ���вл�юще��� ��не. Эт� �чень �р��т�й �ценарий. П�ль�ы �т не�� не�н���, н� �н в�е же иллю�три� рует не��т�рые важные а��е�ты ���дани� �ценариев дл� W��dows: y Я�ы�и �ценариев ��ладают ��вре�енны�и �ред�тва�и �р��ра��ир�вани�, ��т�� рых нет у ��ы�а на�и�ани� �а�етных файл�в, та�и�и �а� �ере�енные и ци�лы. (Эт� не ��в�е� ��раведлив�, �����ль�у у �а�етных файл�в е�ть нед�ра�витые �ере�енные и ци�лы, н� �де�ь �лючевы� �вл�ет�� �л�в� «нед�ра�витые».� y Сценарии ���ут и���ль��вать дл� ра�ширени� ��ы�а ��ъе�ты, чт� �ридает и� д���лнительные в����жн��ти. y Сценарии ���ут в�аи��дей�тв�вать � ��ераци�нн�й �и�те��й (на�ри�ер, дл� и��лед�вани� инф�р�ации � файлах в �а��е� и ���ут в�аи��дей�тв�вать � людь�и (на�ри�ер, �уте� выв�да ре�ультат�в в виде �тф�р�атир�ванн��� те��та�. y Сценарии ��жн� �делать ��н�тнее �а �чет и���ль��вани� �у�тых �р��тран�тв, ��ле�чающих ��ни�ание �тру�туры �р��ра��ы.
Типы файлов сценариев 39 y Файлы �ценариев ���ут и д�лжны ��держать ����ентарии, ��и�ывающие и д�� �у�ентирующие в�е, чт� делает �ценарий и �а� �н ра��тает. К���ентарии ����� �ают �делать файлы �ценариев важн�й ф�р��й д��у�ентации, �а �чет выраже� ни� в �и�ь�енн�й ф�р�е ��н�ретн��� ��р�д�а вы��лнени� т�й или ин�й �адачи. Типы файлов сценариев Файлы �ценариев — эт� �р��тые, �а�ые ��ы�н�венные те��т�вые файлы, ��т�рые ��жн� реда�тир�вать в Бл��н�те. Внутри этих файл�в нах�д�т�� ��ерат�ры �р�� �ра��ы, �а�и�анные � и���ль��вание� �инта��и�а, ��т�рый ��н�тен и���ль�уе� ���у ��ы�у �ценариев. Чт��ы ��ераци�нна� �и�те�а W��dows �нала, �а��й ��ы� и���ль�ует ваш �ценарий, ��жн� в����ль��вать�� �дн���ра�н�й �хе��й и�ен�вани� файл�в �ри �ри�ваивании и�ен �в�и� файла� �ценариев. Са�а� важна� ча�ть — эт� расши­ рение или тип файла. На�ри�ер, в и�ени файла myscript.vbs ра�ширение� �вл�ет�� .vbs. Эт� ра�ширение нужн� и���ль��вать, е�ли �ценарий �ишет�� на V�S���p�. П� у��лчанию W��dows �xp�o��� не ���а�ывает ра�ширение �ри выв�де ��и��а и�ен файл�в — �н ��жет �р��т� у�а�ать в ��и��е, чт� myscript �вл�ет�� файл�� �ценари� V�S���p�. ▼▼ Я считаю, что скрытие расширений в Windows Explorer является не самой лучшей идеей. Чтобы сделать расширения видимыми, откройте в Explorer любое окно (например, Мой компьютер (My Computer) или Мои документы (My Documents)). В Windows 7 и Vista нажмите на клавишу A LT и отпустите ее, чтобы появилось меню. Щелкните на пункте меню Сервис (Tools), Параметры папок (Folder Options). Выберите вкладку Вид (View). В списке Дополнительные параметры (Ad- Folder Options). Выберите вкладку Вид (View). В списке Дополнительные параметры (Ad- Options). Выберите вкладку Вид (View). В списке Дополнительные параметры (Ad- Options). Выберите вкладку Вид (View). В списке Дополнительные параметры (Ad- ). Выберите вкладку Вид (View). В списке Дополнительные параметры (Ad- View). В списке Дополнительные параметры (Ad- ). В списке Дополнительные параметры (Ad- Ad- vanced Settings) найдите флажок Скрывать расширения для зарегистрированных типов файлов (Hide Extensions For Known File Types) и снимите его. После этого нажмите OK. В х�де ра��ты �� �ценари��и ва� ���ут в�третить�� файлы � ра�личны�и ра�� ширени��и. Наи��лее ра��р��траненные и� них ���а�аны в та�л. 1 .1 . Таблица 1.1. Расширения файлов сценариев Расширение Тип файла .js Сценарий JS���p� .js� За��дир�ванный �ценарий Js���p� .p�s Сценарий P��� .vb� За��дир�ванный �ценарий V�S���p� .vbs Сценарий V�S���p� .ws� К����нент �ценари� W��dows .ws� Файл �ценари� W��dows (в ф�р�ате XML� .wsh Файл на�тр�е� WSH
40 Глава 1. Windows Script Host ▼) Если вы пользовались ранней версией WSH и создали файлы с расширением .ws, для WSH версии 5 и выше их нужно переименовать в файлы с расширением .wsf. При использовании PerlScript будьте внимательны, если ранее у вас была установлена программа Real Player от компании RealAudio. Она стремится перехватить у PerlScript файловое расширение .pls. Если такое случится, сначала нужно в Real Player отключить тип носителя Audio Playlist. Затем в Win- Real Player отключить тип носителя Audio Playlist. Затем в Win- Player отключить тип носителя Audio Playlist. Затем в Win- Player отключить тип носителя Audio Playlist. Затем в Win- отключить тип носителя Audio Playlist. Затем в Win- Audio Playlist. Затем в Win- Playlist. Затем в Win- Playlist. Затем в Win- . Затем в Win- Win- dows 7 и Vista открыть Панель управления (Control Panel), щелкнуть на значке Программы по умолчанию (Programs), затем на Сопоставление типов файлов или протоколов конкретным программам (Make a File Type Always Open in a Speci�c Program) и проверить, с чем связаны фай- Make a File Type Always Open in a Speci�c Program) и проверить, с чем связаны фай- a File Type Always Open in a Speci�c Program) и проверить, с чем связаны фай- a File Type Always Open in a Speci�c Program) и проверить, с чем связаны фай- File Type Always Open in a Speci�c Program) и проверить, с чем связаны фай- File Type Always Open in a Speci�c Program) и проверить, с чем связаны фай- Type Always Open in a Speci�c Program) и проверить, с чем связаны фай- Type Always Open in a Speci�c Program) и проверить, с чем связаны фай- Always Open in a Speci�c Program) и проверить, с чем связаны фай- Always Open in a Speci�c Program) и проверить, с чем связаны фай- Open in a Speci�c Program) и проверить, с чем связаны фай- Open in a Speci�c Program) и проверить, с чем связаны фай- in a Speci�c Program) и проверить, с чем связаны фай- in a Speci�c Program) и проверить, с чем связаны фай- a Speci�c Program) и проверить, с чем связаны фай- a Speci�c Program) и проверить, с чем связаны фай- Speci�c Program) и проверить, с чем связаны фай- Speci�c Program) и проверить, с чем связаны фай- Program) и проверить, с чем связаны фай- Program) и проверить, с чем связаны фай- ) и проверить, с чем связаны фай- лы с расширением .pls в этом окне. Если они не связаны с Microsoft Console Based Script Host, щелкните на кнопке Изменить программу (Change Program) и найдите с помощью обзора файл \windows\system32\cscript.exe. В Windows XP откройте Windows Explorer, щелкните на пункте Настройка (Tools), Свойства папки (Folder Options), Типы файлов (File Types). Найдите в списке PLS File и проверьте его связи в этом месте. Дру�ие ��ы�и �ценариев та�же и���ль�уют ��ецифиче��ие ра�ширени�; �а��е и�енн� ���лашение �� и�ена� и���ль�ует��, ��и�ан� в д��у�ентации �� �ажд��у ��н�ретн��у ��ы�у. Не��т�рые и� ти��в файл�в, �еречи�ленных в та�л. 1 .1, ���ут �ыть ва� не�на� 1.1, ���ут �ыть ва� не�на� 1.1, ���ут �ыть ва� не�на� ���ы, ��эт��у ��лее ��др��н� �ни ра���атривают�� в �ледующих ��дра�делах. Е�ли вы т�ль�� �ри�ту�аете � и�учению в��р���в ���дани� �ценариев, ва� не ��� над���т�� �ра�у в�е эти ��др��н��ти, ��эт��у данную инф�р�ацию ��жн� �р��т� �р����треть или �р��у�тить д� ��ры д� вре�ени. JSE и VBE: Закодированные сценарии Не��т�рые �ценарии ���дают�� ра�ра��тчи�а�и ����ерче��их �р��ра�� и ли� цен�ируют�� �а �лату. Эти ра�ра��тчи�и �аинтере��ваны в �ащите �атраченных и�и у�илий �т �лучайн��� ���ир�вани� и �ират����� ра��р��транени�. Еще �дна �ате��ри� �ценариев �ишет�� �и�те�ны�и ад�ини�трат�ра�и, ��т�рые х�тели �ы ��рыть ��др��н��ти ��р��ративных ��ераций �т чьих�ни�удь лю���ытных �ла� и ��р�вых ру�. Чт��ы ����чь эти� авт�ра�, не��т�рые ��ы�и �ценариев �ред��тав� л�ют �ред�тва ��дир�вани�, �жи�ающие и ��дирующие файлы �ценариев, чт��ы их нель�� �ыл� ��льше та� �р��т� �р�читать. К���ани� M���oso�� �ред��тавл�ет �а�ружае��е �ред�тв� ��дир�вани� файл�в V�S���p� и JS���p�. Он� ��нвертирует V�S���p��файлы � ра�ширение� .vb в �а��� дир�ванные файлы � ра�ширение� .vbe, а Js���p��файлы � ра�ширение� .js в �а��� дир�ванные файлы � ра�ширение� .jse. Утилиту, вы��лн�ющую эту �адачу, ��жн� �а�ру�ить � ве���айта www.microsoft.com. На�ерите в ��ле ��и��а «S���p� ���od��» и щел�ните на ���вившей�� в ре�ультате ��и��а ��ыл�е Download Details. ▼o Средство Script Encoder затрудняет, но не исключает полностью возможность для посторонних лиц читать содержимое сценария. Настойчивый взломщик все же в состоянии декодировать файл. Не помещайте в сценарий пароли и другую конфиденциальную информацию, даже если этот сценарий закодирован.
Типы файлов сценариев 41 Windows Script Files (WSF) Чт��ы ��ле�чить ���дание и ��ддерж�у �л�жных на��р�в �ценариев, ����ани� M���oso�� ра�ра��тала ф�р�ат файла, ���в�л�ющий не���ль�и� �тдельны� �цена� ри�� хранить�� в �дн�� те��т�в�� файле и даже и���ль��вать в �дн�� �ценарии �ра�у не���ль�� ��ы��в. Н�вый ф�р�ат файла на�ывает�� W��dows S���p� F��� (WSF�, и дл� не�� и���ль�ует�� ра�ширение .wsf. Пр�ще �удет ���а�ать, че� ��ъ��нить, ��эт��у �начала � е�� ���ажу: <package> <job id="script1"> <script language="VBScript"> WScript.Echo "Это сценарий номер 1!" </script> </job> <job id="script2"> <script language="JScript"> WScript.Echo("Это сценарий номер 2!"); </script> </job> <job id="script3"> <script language="VBScript" src ="c:\scriptlib\anotherfile.vbs" /> </job> </package> Файлы WSF — эт� �р��тые те��т�вые файлы, �тру�турир�ванные � ����щью те��т�в�й ра��ет�и, ��т�ра� на�ывает�� те�а�и. Е�ли ва� �рих�дил��ь �ани�ать�� ве��ди�айн��, чт��т� ��х�жее вы уже видели, �����ль�у �ни �ильн� на���инают эле�енты ��ы�а �и�ерте��т�в�й ра��ет�и — Hyp����x� M��kup L��gu�g� (HTML�, ��т�рый и���ль�ует�� �ри ���дании ве���траниц. Н� т�, � че� �ы и�ее� дел� в данн�� �лучае, на�ывает�� ра�ширенны� ��ы��� ра��ет�и — �x���s�b�� M��kup L��gu�g� (XML�, и �де�ь нужн� �ридерживать�� �чень �тр���й �тру�туры. XML и���ль�ует�� дл� ����начени� начала и ��нца �у���в �ценари�. Са� �� �е�е XML ��ы��� �ценариев не �вл�ет��. В данн�� �ри�ере ��жн� увидеть три �тдельных фра��ента �ценари�, ра�де� ленные те�а�и <package>, <job> и <script>. Каждый �тдельный �ценарий, ��т�рый �ри дру�их ���т��тель�твах нах�дил�� �ы в �тдельн�� файле � ра�ширение� .vbs или � ра�ширение� .js, ���ещен �ежду те�а�и <job> и </job>. Атри�ут ID дает �ажд��у �ценарию и��. В����жн�, в�е эт� вы�л�дит не���ль�� �а�утанн�, н� цель ���т�ит в т��, чт��ы дать ва� в����жн��ть ���е�тить �ра�у не���ль�� �ценариев в �дин файл, чт��ы дл� �в�евре�енн��� ��� н�влени� нужн� �ыл� ���ир�вать лишь �дин файл. Дл� �а�у��а нужн��� �ценари� е�� ��жн� вы�рать �� и�ени е�� �адани� ( job� — эт�т �р�це�� �удет ра����трен чуть ���же в ра�деле «Ws���p� и Cs���p�». Файлы WSF интере�ны те�, чт� вы ��жете в �дн�� и т�� же файле ��ъедин�ть �����ненты �ценари�, на�и�анные на ра�ных ��ы�ах, и делать эт� даже в �дн�� и т�� же �адании ( job�, �а�лючив ча�ть �р��ра��ы в те�и <script> и </script>. Эти те�и у�а�ывают, на �а��� ��ы�е на�и�ана ча�ть �р��ра��ы. О�ратите вни�ание
42 Глава 1. Windows Script Host на т�, чт� в �ри�ере �ерв�е �адание на�и�ан� на V�S���p�, а вт�р�е на�и�ан� на JS���p�. М�жн� та�же и���ль��вать и дру�ие ��ы�и, е�ли �ни у ва� у�тан�влены. Третье �адание ���а�ывает еще �дн� ��ецифиче���е �в�й�тв� WSF�файл�в: в����жн��ть �ривлечь ча�ти �ценариев и� дру�их файл�в. В данн�� �ри�ере и� файла c:\scriptlib\another�le.vbs �ривле�ает�� �р��ра��а script3. О�ратите вни�а� ние, чт� те� <script> �авершает�� �и�в�ла�и />, в�е�т� ��ычн��� �и�в�ла >. Эт� ��ециальный инди�ат�р, ��т�рый нужен ��ы�у XML и �видетель�твует �� �т�ут� �твии ���твет�твующе�� эт��у те�у �а�рывающе�� те�а </script>. Те� <script> и�еет две ф�р�ы. Он ��жет в�лючать в �е�� ча�ть те��та �р��ра��ы, �а� в данн�� �ри�ере: <script language="VBscript"> Сюда помещается программа на VBScript Она может иметь весьма большой размер </script> А та�же �н ��жет ���а�ать, чт� �р��ра��а �ценари� д�лжна �ыть �ривлечена и� �а�����ни�удь дру���� �е�та: <script language="Vbscript" src="path or URL" /> В� вт�р�й ф�р�е те�а <script> эле�ент src ����щает WSH, �де и��ать �атериал дл� �читывани�. Эт� �е�т� ��жет �ыть �ред�тавлен� в ф�р�е ��лн��� �утев��� и�ени файла или даже в виде URL, т��да �атериал и�вле�ает�� и� у�а�анн��� �е� �та в Интернете. Эт� �в�й�тв� дает в����жн��ть ��хранить ча�т� и���ль�уе�ую ча�ть �р��ра�� �ценариев в �а����ни�удь �е�те, и� ��т�р��� �на ��жет �ыть и�� ��ль��вана �н��и�и �ценари��и. В �лаве 2 �удет ра����трен� �р��ра��ир�вание на ��ы�е V�S���p�, в ��т�р�� и���ль�уют�� ��д�р��ра��ы и фун�ции, и у �ен� еще �удет чт� ��а�ать на эту те�у. И на��нец, ве�ь файл ���ещает�� внутри те��в <package>. Е�ли в файле ��� держит�� ��лее �дн��� �тдельн��� �адани�, �н, �а� ���а�ан� в �ри�ере, д�лжен начинать�� те��� <package> и �а�анчивать�� те��� </package>. Е�ли в файле т�ль�� �дн� �адание, те�и <package> и </package> ���ут �ыть ��ущены. ▼) О формате WSF-файла можно рассказать кое-что еще. Более подробно он рассматривается в приложении G «Creating �our Own Scriptable Objects» («Создание своих собственных объ- G «Creating �our Own Scriptable Objects» («Создание своих собственных объ- «Creating �our Own Scriptable Objects» («Создание своих собственных объ- Creating �our Own Scriptable Objects» («Создание своих собственных объ- �our Own Scriptable Objects» («Создание своих собственных объ- �our Own Scriptable Objects» («Создание своих собственных объ- Own Scriptable Objects» («Создание своих собственных объ- Own Scriptable Objects» («Создание своих собственных объ- Scriptable Objects» («Создание своих собственных объ- Scriptable Objects» («Создание своих собственных объ- Objects» («Создание своих собственных объ- Objects» («Создание своих собственных объ- » («Создание своих собственных объ- ектов, используемых в сценариях»), которое можно загрузить с веб-сайта www.helpwin7. com/ scripting. Компоненты Windows Script (WSC) Файл �����нент�в W��dows S���p� (WSC� �вл�ет�� еще �дни� ти��� файл�в �це� W��dows S���p� (WSC� �вл�ет�� еще �дни� ти��� файл�в �це� S���p� (WSC� �вл�ет�� еще �дни� ти��� файл�в �це� S���p� (WSC� �вл�ет�� еще �дни� ти��� файл�в �це� (WSC� �вл�ет�� еще �дни� ти��� файл�в �це� WSC� �вл�ет�� еще �дни� ти��� файл�в �це� � �вл�ет�� еще �дни� ти��� файл�в �це� нариев � д��авленн�й � не�у ра��ет��й, ��т�ра� ���дает XML��тру�туру. Файлы �����нент�в ���в�л�ют ра�ра�атывать �в�и ����твенные �р��ра��ные «��ъе�ты» дл� их ���ледующе�� и���ль��вани� в �ценари�х и в дру�их �р��ра��ах. К����� ненты W��dows S���p� (WSC� ра���атривают�� в �рил�жении G.
Создание своего первого файла сценария 43 Настройки WSH Е�ли щел�нуть �рав�й �н����й �ыши на �нач�е файла �ценари�, а �ате� вы�рать �ун�т �еню Свойства (P�op�����s�, W��dows, �а� ���а�ан� на ри�. 1.4, выведет в ��не �в�й�тв ��ециальную в�лад�у Сценарий (S���p��, �вл�ющую�� уни�альн�й дл� данн��� �ценари�. Рис. 1 .4. Окно свойств для файла сценария содержит вкладку Сценарий Зде�ь ��жн� у�а�ать, �а� д�л�� �ценарию ра�решен� ра��тать, ���а �и�те�а не ���читает е�� «у�ерши�». Вы ��жете �р�и�н�рир�вать на���инание �� авт�р� ��их �равах M���oso��, ��т�р�е ��ычн� выв�дит��, ���да �ценарий вы��лн�ет�� в режи�е ���андн�й �тр��и. Е�ли и��енить на�тр�й�и �� у��лчанию в эт�� ��не �в�й�тв, W��dows ��хран�ет инф�р�ацию в файле � та�и� же и�ене�, чт� и и�� файла �ценари�, н� � ра�ширение� .wsh. Файлы WSH не и�еют ни�а���� дру���� ��держи���� или �редна�начени�, �р��е хранени� этих на�тр�е�. Эти же варианты на�тр�е� ���ут �ыть у�тан�влены �ри �а�у��е �ценари� в ���андн�й �тр��е, н� �де�ь � �а�е�аю не�н��� в�еред. Давайте верне��� на�ад � ��н�ва� и �����три�, �а� ���дать н�вый файл �ценари� � �а���� начала. Создание своего первого файла сценария Ка� уже у���инал��ь в данн�й �лаве, файлы �ценариев ��жн� ���давать в лю��й �р��ра��е реда�тир�вани�, ��т�ра� ��жет ра��тать � �р��ты�и те��т�вы�и фай� ла�и. Эт� ��жн� �делать в� в������ательн�й �р��ра��е Бл��н�т, ���тавл�е��й в�е�те � W��dows, ��эт��у давайте в����ль�уе��� эт�й �р��ра���й дл� на��ра файла �ценари� на ваше� ����ьютере. В эт�� ра�деле � �р�веду ва� �� в�е� не��� х�ди�ы� дл� эт��� ша�а�. (П��же �удет �редл�жена ��лее ��дх�д�ща� �р��ра��а дл� ���дани� �ценариев, н� дл� эт��� �ри�ера в��лне ��д�йдет и Бл��н�т.� Создание и защита папки сценариев Дл� начала давайте ���дади� �а��у и��лючительн� дл� хранени� �ценариев. Е�ли �ценарии хран�т�� в �дн�� �е�те, их �р�ще �ты��ать и у��вершен�тв�вать и, �а�
44 Глава 1. Windows Script Host �удет ���а�ан� ���же, их �удет �р�ще и���ль��вать в ��не �ри�лашени� ���андн�й �тр��и. Вы��лните �ледующие дей�тви�: 1. Щел�ните на �н���е Пуск (S�����[Все] Программы ([A��] P�og��ms�Стандартные (A���sso���s�Командная строка (Comm��d P�omp��. (В� в�ех ��тальных �е�тах эт�й �ни�и � �уду ��и�ывать эт� дей�твие �а� «От�р�йте ��н� ���андн�й �тр��и.� 2. На�ерите �ледующие три ���анды, нажи�а� ���ле на��ра �ажд�й и� них �ла� вишу Ввод: c: mkdir \scripts cd \scripts Те�ерь лю��й дру��й чел�ве�, ��ль�ующий�� ваши� ����ьютер��, ��жет уви� деть �ценарии в эт�й �а��е и в����ль��вать�� и�и. Н� вр�д ли ва� �ах�чет��, чт��ы дру�ие ��ль��ватели и�ели в����жн��ть и��ен�ть ваши �ценарии, ведь т��да �ни ���ут �а�тавить ваш �ценарий ��вершать �а�ие�ни�удь нежелательные дей�тви�, на�ри�ер на�начить �в�ей учетн�й �а�и�и �рава �и�те�н��� ад�ини�трат�ра. К��да в �ледующий ра� вы �а�у�тите �в�й �ценарий, их ра���р�жени� �удут выдавать�� � и���ль��вание� �ривиле�ий, �ринадлежащих вашей учетн�й �а�и�и. Вы даже ��жете ни���да не у�нать �� эт��, ��эт��у нужн� �делать та�, чт��ы и��ен�ть ваши �ценарии ���ли т�ль�� вы �а�и. ▼) К сожалению, Windows нужно защищать не только от взломщиков, но и от неосмотрительных поступков и случайных вмешательств других людей. Хорошо, что заняться этим придется толь- ко один раз. Дл� �ащиты вашей �а��и �ценариев в W��dows 7, V�s�� и XP P�o��ss�o��� вы� W��dows 7, V�s�� и XP P�o��ss�o��� вы� 7, V�s�� и XP P�o��ss�o��� вы� V�s�� и XP P�o��ss�o��� вы� и XP P�o��ss�o��� вы� XP P�o��ss�o��� вы� P�o��ss�o��� вы� P�o��ss�o��� вы� вы� ��лните �риведенную далее ���лед�вательн��ть дей�твий. Е�ли вы ра��таете � W��dows XP Hom� �d���o�, эти же дей�тви� ��жн� вы��лнить, т�ль�� �ере�а�ру�ив ����ьютер дл� ра��ты в �е���а�н�� режи�е (S��� Mod��. (В данн�� �лучае эт� не та��е уж и ��льш�е неуд���тв�.� Сделайте �ледующее: 1. Щел�ните на �н���е Пуск (S����� и вы�ерите [Мой] Компьютер ([My] Compu����. 2. Вы�ерите Локальный диск (C:) (Lo��� D�sk (C:��. 3. В �рав�й �анели найдите �в�ю �а��у �ценариев scripts. Щел�ните на эт�й �а��е �рав�й �н����й �ыши и вы�ерите Свойства (P�op�����s�. 4. Вы�ерите в�лад�у Безопасность (S��u���y�. 5. П�д над�и�ью Группы или пользователи (G�oup O� Us�� N�m�s� щел�ните �� �череди на �ате��ри�х Прошедшие проверку (Au�h��������d Us��s�, Пользова- тели (Us��s� и Любые другие (�v��yo��� или на лю��й и� этих �ате��рий, е�ли �на �ри�ут�твует в ��и��е. П��ле вы��ра �ажд�й и� этих �ате��рий ���трите на нижнюю ча�ть ��на и �р�верьте, �т��т ли флаж�и на�р�тив �ун�та Запись (W����� или Изменение (Mod��y�. Флаж��в та� �ыть не д�лжн�. Е�ли ни для одной дл� этих �ате��рий учетных �а�и�ей флаж�и не �т��т, �ерех�дите � вы� ��лнению �ун�та 9.
Создание своего первого файла сценария 45 6. Н� е�ли на�р�тив �ун�та Изменение (Mod��y� ли�� �ун�та Запись (W����� флаж�� �т�ит дл� х�т� �ы и� �дн�й и� этих �ате��рий, щел�ните на �н���е Дополнительно (Adv����d� и �ри�ту�айте � вы��лнению �ун�та 6. 7. В W��dows 7 щел�ните на �н���е Изменить разрешения (Ch��g� P��m�ss�o�s�. В W��dows V�s�� щел�ните на �н���е Редактировать (�d���. С�р��ьте флаж�� Добавить разрешения, наследуемые от родительских объектов (I���ud� I�h�����b�� P��m�ss�o�s F�om Th�s Obj���’s P������ и в ���вивше��� диал���в�� ��не щел� �ните на �н���е Добавить (Copy�. �. П�вт�рите �ледующие три дей�тви� дл� �ажд�й и� �ате��рий Пользователи (Us��s�, Прошедшие проверку (Au�h��������d Us��s� и Любые другие (�v��yo���, е�ли �ни �ри�ут�твуют в ��и��е: 1� В �т�л�це Имя (N�m�� вы�ерите Пользователи (Us��s� и щел�ните на �н���е Изменить (�d���. 2� У�едите�ь в т��, чт� в ��ле Применять (App�y To ���m� (�лиже � верхне�у �раю ��на� у�тан�влен� �начение Для этой папки, ее подпапок и файлов (Th�s Fo�d��, Sub�o�d��s ��d F���s�. Е�ли не��х�ди��, и��ените �начение на у�а�анн�е. 3� У�едите�ь в т��, чт� у�тан�влены т�ль�� четыре флаж�а: Траверс папок / выполнение файлов (T��v��s� Fo�d����x��u�� F����, Содержание папки / чтение данных (L�s� Fo�d���R��d D����, Чтение атрибутов (R��d A����bu��s� и Чтение дополнительных атрибутов (R��d �x���d�d A����bu��s�. С�р��ьте лю�ые дру� �ие флаж�и, ���ле че�� наж�ите OK. П�вт�рите эти три дей�тви� дл� �ледующих дру�их �ате��рий, е�ли �ни �ри�ут�твуют в ��и��е: Прошедшие проверку (Au�h��������d Us��s� и Любые другие (�v��yo���. 9. Наж�ите OK. 10. Те�ерь вы нах�дите�ь в и�х�дн�� диал���в�� ��не Свойства: scripts (S���p�s P�op�����s�. В V�s�� и в W��dows 7 щел�ните на �н���е Изменить (�d���. 11. Щел�ните на �н���е Добавить (Add�, �ате� на �н���е Дополнительно (Adv����d�, ���ле че�� щел�ните на �н���е Поиск (F��d Now�. В ра�деле Ре- зультаты поиска (S����h R�su��s� найдите �в�ю ����твенную учетную �а�и�ь, дважды щел�ните на ней, а �ате� наж�ите OK. 12. Те�ерь ваша учетна� �а�и�ь д�лжна ���вить�� в ��и��е Группы или пользователи (G�oup O� Us�� N�m�s�. В нижней ча�ти ��на у�тан�вите флаж�� Полный доступ (Fu�� Co���o��, е�ли W��dows ���в�л�ет ва� эт� �делать; е�ли нет, т� в��лне д��тат�чн� �удет у�тан�вить флаж�� Изменение (Mod��y�. 13. Наж�ите OK дл� �авершени� в�е�� �р�це��а. 14. В�т те�ерь у ва� е�ть ���т��нна�, �ащищенна� �а��а дл� хранени� �ценариев. В �удуще�, чт��ы вернуть�� � эт�й �а��е, вы��лните �ледующие дей�тви�: 15. От�р�йте ��н� ���андн�й �тр��и. 16. На�ерите �ледующие две ���анды: c: cd \scripts
46 Глава 1. Windows Script Host Чуть ���же �удет ���а�ан�, �а� ���е�тить эту �а��у в PATH���и��� ����ью� PATH���и��� ����ью� ���и��� ����ью� тера, чт��ы �ценарий ��жн� �ыл� �а�у��ать на вы��лнение на��р�� е�� и�ени в ��не ���андн�й �тр��и. Ну а те�ерь давайте ���дади� �в�й �ервый �ценарий. Создание сценария П��ле т��� �а� ��н� ���андн�й �тр��и �удет �т�рыт� дл� вашей �а��и �ценариев, на�ерите �ледующую ���анду: notepad firstscript.vbs Она �т�р�ет Бл��н�т. На�ерите �ледующую ���анду т�чн� в та��� виде, �а� �на ���а�ана �де�ь: wscript.echo "Это сообщение выведено из моего первого сценария" Щел�ните на �ун�тах �еню Файл (F����, Сохранить (S�v��, ���ле че�� �а�р�йте Бл��н�т. Те�ерь в ��не ���андн�й �тр��и на�ерите �ледующую ���анду: wscript firstscript.vbs В ре�ультате ���вит�� не��льш�е ��н� � те��т�� Это сообщение выведено из моего первого сценария. Вы �а�тавили W��dows вы��лнить и�еющую�� в WSH �р��ра��у ��ра��т�и �ценариев wscript �ри�енительн� � файлу �rstscript.vbs, а �це� нарий �а�тавил W��dows выве�ти ����щение. Наж�ите OK, чт��ы �а�рыть ��н� ����щени�. В�т те�ерь вы ���дали и вы��л� нили �в�й ����твенный �ценарий. В �удуще�, чт��ы ���дать н�вый �ценарий, нужн� вы��лнить анал��ичные дей�тви�: 1. От�рыть ��н� ���андн�й �тр��и. 2. Е�ли нужн� ���е�тить �ценарий в �в�ю универ�альную �а��у �ценариев, на� �рать ���анды c: и cd\scripts. (Е�ли нужн�, �ценарии ��жн� ���давать на дру�их ди��ах и в дру�их �а��ах, дл� эт��� нужн� �р��т� на�рать дру�ую �у�ву ди��а или дру��й �уть � �а��е.� 3. На�рать notepad, ���ле че�� на�рать и�� �ценари�. ▼▼ При создании нового файла сценария откройте окно командной строки и наберите слово «note- note- pad», а следом за ним наберите имя файла, который нужно создать, например: notepad newscript.vbs Можно также указать путь, если нужно, чтобы файл был помещен в указанную папку, напри- мер: notepad c:\scripts\newscript.vbs После того как Блокнот выведет окно с вопросом о том, хотите ли вы создать новый файл, нужно будет щелкнуть на кнопке Да (�e s). Если Блокнот запущен без набора имени файла в командной строке, ваш новый файл нужно будет сохранить, используя пункты меню Файл (File)Сохранить как (Save As). Сценарий будет сохранен под именем newscript.vbs.txt, после чего вам придется переименовать файл. Указание имени файла в командной строке позволяет обойтись без этой проблемы. Св�ю �а��у \scripts вы ��жете и���ль��вать дл� хранени� �ценариев, ��лучен� ных и� дру�их и�т�чни��в или �а�руженных и� Интернета.
Создание своего первого файла сценария 47 Средства редактирования сценариев В данн�й �ни�е � ���а�ываю, �а� дл� ���дани� и реда�тир�вани� �ценариев и дру�их �а�етных файл�в ��жн� и���ль��вать �тандартную в������ательную �р��ра��у W��dows Бл��н�т. Эта �р��ра��а в��лне ��равл�ет�� � нашей �а� W��dows Бл��н�т. Эта �р��ра��а в��лне ��равл�ет�� � нашей �а� Бл��н�т. Эта �р��ра��а в��лне ��равл�ет�� � нашей �а� дачей, � �а� �н��ие ��ды ниче� �р��е Бл��н�та не ��ль��вал��, н�, ���р���вав ра���атривае�ые далее �ред�тва и у�едивши�ь в их невер��тн�й ��ль�е, � ра��� �лил�� �а� на �е�� — � че� же � ду�ал раньше? Х�р�шее �ред�тв� реда�тир�вани� �ценариев ��жет �э��н��ить �а��у вре�ени и нерв�в, ��у�ивши�ь в�е�� �а �дин день. Суще�твует не���ль�� х�р�ших �р��ра�� реда�тир�вани�, не��т�рые и� них �еречи�лены ниже. Неважн�, �т� вы — начинающий ���датель �ценариев или на�т��щий �р�фе��и�нал: � на�т��тельн� ре���ендую ��тратить�� на �дн� (или не���ль��� и� �ледующих �ред�тв. Таблица 1.2. Средства редактирования сценариев от сторонних производителей Программа Описание V�S�d�� V�S�d�� — не т�ль�� те��т�вый реда�т�р. Эт� �ред�тв� ���в�л�ет та�же ��у� ще�твл�ть ��ша��в�е интера�тивн�е вы��лнение (�тлад�у� ваших �ценариев и дает в����жн��ть �р���атривать ��держи��е �ере�енных �� �ере вы��л� нени� �ценари�. Он� та�же �ред��тавл�ет ин�тру�ент дл� �р����тра ��ъ� е�т�в — Obj��� ��ows��, ра���атривае�ый в �лаве 3. К д���лнительны� �в�й� �тва� �тн���т�� цвет�в�е выделение �инта��и�а и «авт��авершение», ��т�р�е ��жет �э��н��ить на на��ре те��та �а��у ваше�� вре�ени. М�жн� �е��латн� и��ытать эт� �ред�тв� в ра��те и ��лн��тью ра��л��ир�вать в�е е�� фун�ции �а 59 д�ллар�в, е�ли ��ратить�� � ве���айту www.vbsedit.com. П��р��уйте � ни� ��ра��тать, и � ��ещаю, чт� � Бл��н�ту вы уже ни���да не вернете�ь Adm��� S���p��d��o� Ка� и V�S�d��, Adm��S���p��d��o� в�лючает цвет�в�е выделение �инта��и�а, авт��авершение и интера�тивный �тладчи�. Кр��е эт��� в не�� д��авлены �а�тера дл� ����щи в на�и�ании �л�жных �ценариев, �в��анных � и���ль� ��вание� ин�тру�ентари� у�равлени� W��dows M���g�m��� I�s��um������o� и A���v� D�����o�y, и �н� �ред��тавл�ет д���лнительные ��ъе�ты, ���в�� л�ющие ���давать интера�тивные ф�р�ы и �р��ра��ы. В не� та�же е�ть ��ддерж�а W��dows Pow��Sh���. Эт� �ред�тв� ��жн� �а�ру�ить � ве���айта www.adminscripteditor.com �а 100 д�ллар�в P��m��S���p� П��тавщи�и эт�й ве�ь�а и��щн�й �р��ра��ы реда�тир�вани� �ценариев на�вали ее P��m��S���p�. Она �е�у�л�вн� лучше Бл��н�та, н� �а�рашивае� �а� �а нее на ве���айте www.sapien.com �у��а в 179 д�ллар�в �ерев�дит ее в �ате��рию не дл� в�ех U�����d�� U�����d�� не �вл�ет�� ��ециали�ир�ванны� �ред�тв�� дл� реда�тир�вани� �ценариев, н� в�е равн� �а�луживает вни�ани�, е�ли тре�ует�� �ерье�� ный ��дх�д � реда�тир�ванию те��т�вых файл�в и данных. U�����d�� ва� ���йдет�� в 59 д�ллар�в 99 цент�в. У не�� ��р��ный �еречень ��ле�ных �в�й�тв. Х�т� �н� не ���жет ����чь в �тлад�е �ценариев, н� �ат� �н� ��жет �ани�ать�� ра�н���ра�н�й ��ртир�в��й, ��и����, �ре��ра��вание� и ра�� �иение� те��та на фра��енты. При реда�тир�вании файл�в �ценариев �н� авт��атиче��и ��уще�твл�ет ��нтра�тн�е и цвет�в�е выделение �р��ра��ы и �лючевых �л�в �ценари� и эле�ент�в �инта��и�а. Эт� �ред�тв� д��ту�н� на ве���айте www.ultraedit.com
48 Глава 1. Windows Script Host Как Windows запускает сценарии В �ри�ерах �редыдуще�� ра�дела у���инал��ь, чт� �ценарий ��жн� �а�у��ать дв�йны� щелч��� на �нач�е е�� файла в W��dows �xp�o��� или �уте� на��ра ��� W��dows �xp�o��� или �уте� на��ра ��� �xp�o��� или �уте� на��ра ��� �xp�o��� или �уте� на��ра ��� или �уте� на��ра ��� �анды в ��не ���андн�й �тр��и. В данн�� ра�деле эт�т в��р�� �удет ра����трен ��лее ��др��н�. Wscript и Cscript WSH и�еет две ра�н�видн��ти: ���нную вер�ию, на�ывае�ую Ws���p�, и вер� и�еет две ра�н�видн��ти: ���нную вер�ию, на�ывае�ую Ws���p�, и вер� Ws���p�, и вер� ,ивер� �ию ���андн�й �тр��и — Cs���p�. Лю�а� и� этих вер�ий ��жет �а�у��ать лю��й �ценарий. Ра�ница �ежду ни�и �а�лючает�� в т��, чт� ���нна� вер�и� (ws���p�� ���а�ывает ����щени� те��т�в��� выв�да в ���вл�юще��� диал���в�� ��не, а вер� �и� ���андн�й �тр��и (�s���p�� выв�дит те��т, ��ль�у��ь ��ычны� �ехани���� «�тандартн��� выв�да», ��т�рый �ри�ен�ет�� �р��ра��а�и, �а�ущенны�и в ��не ���андн�й �тр��и. Чт��ы ��н�ть, � че� идет речь, вы��лните �ледующие дей�тви�: 1. От�р�йте ��н� ���андн�й �тр��и. 2. Е�ли вы еще не ���дали файл firstscript.vbs � ����щью ���лед�вательн��ти дей�твий, у�а�анн�й в ра�деле «С��дание �в�е�� �ерв��� файла �ценари�», т� эт� нужн� �делать �ейча�. Е�ли эт�т файл уже ���дан, верните�ь в �а��у \s���p�s на�рав дл� эт��� ���анды c: cd \scripts 3. На�ерите ���анду wscript firstscript.vbs и наж�ите �лавишу Ввод. Чт��ы �а�рыть ��н�, наж�ите OK. 4. На�ерите ���анду cscript firstscript.vbs и наж�ите �лавишу Ввод. На эт�т ра� ����щение ���вит�� в ��не ���андн�й �тр��и. Ре�ультаты ��жн� увидеть на ри�. 1 .5 . Рис. 1.5 . Вывод учебного сценария, запущенного с помощью wscript (на первом плане) и с помощью cscript (на втором плане) Ws���p� ��льше ��дх�дит дл� �ценариев, ��т�рые ра��тают �е� �а�их�ли�� внешних �р��влений и выв�д�т ��ль��вателю �чень �ал� инф�р�ации, т� е�ть
Как Windows запускает сценарии 49 дл� та�их �ценариев, ��т�рые, на�ри�ер, выв�д�т т�ль�� ����щени� �� �ши��ах и, в����жн�, ����щение вр�де «Ра��та �авершена» (�а� т�т �ценарий, ��т�рый �рив�дил�� в �аче�тве �ри�ера ранее�. Преи�уще�тв� и���ль��вани� в��лывающе�� ��на �а�лючает�� в т��, чт� ���а ���а�ывает�� ����щение, вы��лнение �ценари� �ри��танавливает�� в �жидании �р�чтени� ����щени� и �а�рыти� диал���в��� ��на. Cs���p� �вл�ет�� вер�ией WSH дл� ра��ты в ���андн�й �тр��е (или в �и�в�ль� �вл�ет�� вер�ией WSH дл� ра��ты в ���андн�й �тр��е (или в �и�в�ль� WSH дл� ра��ты в ���андн�й �тр��е (или в �и�в�ль� дл� ра��ты в ���андн�й �тр��е (или в �и�в�ль� н��, или в ��н��льн�� режи�е�. Cs���p� выв�дит ре�ультаты в ��н� ���андн�й �тр��и, ��т�р�е ��дражает �тар�й �реде ���андн�й �тр��и DOS. Эта вер�и� ��льше ��дх�дит дл� �ценариев, �енерирующих ��льш�й ��ъе� выв�ди��й инф�р�ации, на�ри�ер ли�тин�и �атал���в, и дл� �ценариев, чей выв�д вы желаете ���е�тить в файл. Преи�уще�тва и���ль��вани� Cs���p� дл� �ценариев, �т��ражающих ��льш�й ��ъе� выв�ди��й инф�р�ации, или дл� тех �ценариев, чей выв�д вы х�тите ��� ра�атывать � и���ль��вание� дру�их �р��ра��, �а�лючает�� в т��, чт� ве�ь их выв�д ��жн� �ерена�равить в файл, и���ль�у� �тандартную техн�л��ию ���анд� н�й �тр��и. Следующа� ���анда �а�у��ает файл �ри�ера �ценари� script0101.vbs и ��хран�ет выв�д в файле �� и�ени results.txt: cscript script0101.vbs >results.txt Ре�ультаты ��жн� �р����треть, на�рав ���анду: notepad results.txt ▼) Это хороший способ просмотра вывода сценария, генерирующего большой объем текста. Если им не воспользоваться, вывод будет прокручиваться в окне командной строки, и его верхняя часть будет исчезать. Вы ��жете и���ль��вать лю��й ��ра��тчи� �ценари�, �твечающий ваши� �ред��чтени��. В �ледующе� ра�деле �удут ���а�аны ра�личные ������ы �а�у��а �ценариев. Способы запуска сценариев Ка� и�ве�тн�, W��dows ��ычн� �редла�ает не���ль�� �������в вы��лнени� �дних и тех же �адач, и���ль�у� щелч�и, дв�йные щелч�и, щелч�и �рав�й �н����й �ыши или �ерета��ивание �нач��в. В�е эт� в ��лн�й �ере �тн��ит�� и � �а�у��у �цена� риев. В та�л. 1 .3 ���а�ан� ше�ть �������в �а�у��а файла �ценари� на вы��лнение. Таблица 1.3. Способы запуска файла сценариев Действие Управляет запуском Дв�йн�й щелч�� на �нач�е файла в �xp�o���, в ��не ��и��а файл�в или на Ра��че� �т�ле. (В W��dows V�s�� ��жет �ыть выведен� ��н� � �реду�реждение� �и�те�ы �е���а�н��ти; дл� �а�у��а �ценари� нужн� щел�нуть на �н���е Открыть (Op���. К эт�й те�е �ы еще верне���.� Х��т, и���ль�уе�ый �� у��лчанию продолжение 
50 Глава 1. Windows Script Host Щелч�� на �нач�е файла �рав�й �н����й �ыши и вы��р �ун�та Открыть (Op��� Ws���p� Щелч�� на �нач�е файла �рав�й �н����й �ыши и вы��р �ун�та Открыть в командной строке (Op�� w��h Comm��d P�omp�� Cs���p� На��р и�ени файла �ценари� в ���андн�й �тр��е, в ��ле ��и��а �еню Пуск (S����� W��dows 7�V�s��, в диал���в�� ��не Выполнить (Ru�� или в �рлы�е*. Х��т, и���ль�уе�ый �� у��лчанию На��р cscript или wscript � и�ене� файла �ценари� в ���андн�й �тр��е, в диал���в�� ��не Выполнить (Ru�� или в �рлы�е**. У�а�анный х��т Перета��ивание �дн��� или не���ль�их файл�в на �нач�� файла �ценари� в �xp�o��� или на Ра��че� �т�ле Х��т, и���ль�уе�ый �� у��лчанию * В Windows 7, Vista, XP, NT и 2000 набирать расширение файла сценария (.vbs, .pl или любое дру­ гое) нет необходимости. Можно просто набрать основу имени файла. Если же вы все еще используете Windows 95, 98 или Me, в имя файла нужно включить и расширение. ** Если Wscript или Cscript запускаются явным образом с указанием имени, то нужно всегда указы­ вать и расширение имени файла сценария. ▼▼ Теперь вам нужно испробовать каждый из этих методов на своем компьютере, используя для этого ранее созданный учебный сценарий �rstscript.vbs. За�етьте, чт� �ри щелч�е �рав�й �н����й �ыши в ������ах, �де фи�урируют «ws���p�» и «�s���p�», вы�ирает�� ��н�ретный х��т, ли�� Ws���p�, ли�� Cs���p�. В трех ��тальных ������ах и���ль�ует�� х��т, на�наченный �� у��лчанию, и эту на�тр�й�у ��жн� и��енить. И�начальн� W��dows и���ль�ует в �аче�тве х��та �� у��лчанию ws���p�. Е�ли нужн�, х��т, и���ль�уе�ый �� у��лчанию, ��жн� и��е� ws���p�. Е�ли нужн�, х��т, и���ль�уе�ый �� у��лчанию, ��жн� и��е� . Е�ли нужн�, х��т, и���ль�уе�ый �� у��лчанию, ��жн� и��е� нить, на�рав в ��не ���андн�й �тр��и �дну и� �ледующих ���анд: y y wscript //H:wscript ← У�тан�в�а ws���p� в �аче�тве х��та �� у��лчанию; y y wscript //H:cscript ← У�тан�в�а �s���p� в �аче�тве х��та �� у��лчанию. В���ще�т�, �ри ра�ра��т�е н�вых �ценариев, наверн�е, ��льше ��д�йдет вер�и� ���андн�й �тр��и (�s���p��, �����ль�у ва�, ���рее в�е��, �ах�чет��, чт��ы ваш �ценарий выв�дил �тлад�чные �а�ечани�, ��ле�чающие ��ни�ание �р�и�х�д�� ще��. Следует ���нить, чт� даже ���ле у�тан�в�и в �аче�тве х��та �� у��лчанию �s���p� вы в�е�да ���жете �ринудительн� решить в��р�� в �тн�шении �тдельных �ценариев: ��жн� �а�у�тить �ценарий � и���ль��вание� �рав�й �н���и �ыши или �вны� ��ра��� на�рать в ���анде и�� х��та cscript или wscript. ▼) Во всей остальной части этой главы будут рассмотрены менее явные подробности запуска WSH и способы взаимодействия с этим средством. Если у вас нет опыта создания сценариев и про- граммирования, этот материал можно просто бегло просмотреть и перейти к главе 2. Следую- щий материал предназначен для совершенствования знаний, и его изучение будет иметь смысл после приобретения некоторого опыта работы с VBScript. Таблица 1.3 (продолжение)
Как Windows запускает сценарии 51 Передача информации в сценарии К��андна� �тр��а, и���ль�уе�а� дл� �а�у��а Ws���p� или Cs���p�, ��жет ф�р�ир�� Ws���p� или Cs���p�, ��жет ф�р�ир�� или Cs���p�, ��жет ф�р�ир�� Cs���p�, ��жет ф�р�ир�� , ��жет ф�р�ир�� вать�� � ����щью �рлы�а, диал���в��� ��на Выполнить (Ru��, вы�ывае���� чере� �н���у Пуск (S�����, или ���вл�ть�� в ре�ультате на��ра в ��не ���андн�й �тр��и. Е�ли �ценарий и�еет �а��д��тат�чный хара�тер (т� е�ть в не� и�еет�� в�� инф�р� �аци�, не��х�ди�а� дл� вы��лнени� е�� �адачи�, ��жн� �р��т� вве�ти е�� и��. Н�, �ача�тую, ��ле�н� ���давать ��лее универ�альные �ценарии, у�а�ыва� и� �ри �а�у��е не��т�рую инф�р�ацию. Х�р�ши� �ри�ер�� ��жет ���лужить �дин и� уче�ных �ценариев, ра����тренных ранее в данн�й �лаве: в не� и�� �а��и, в ��т�р�й нужн� ��ределить ��щий ра��ер в�ех и�еющих�� файл�в, в�тр�ен� в �а� �ценарий. Г�ра�д� ��ле�нее �удет �ред��тавить в����жн��ть у�а�ывать и�� �ледуе�ую �а��у �ри �а�у��е �ценари�, т��да �дин и т�т же �ценарий ��жн� �удет и���ль��вать дл� ��д�чета ��ще�� ра��ера файл�в в лю��й �а��е. Один и� �������в вы��лнени� данн�й �адачи �а�лючает�� в т��, чт��ы �а� �тавить �ценарий выдавать �тр��у �ри�лашени� (или �а�р��а�, �де ��ль��ватель ��� �ы на�рать лю�ую нужную инф�р�ацию. Ка� эт� делает��, �удет ра����трен� в �лаве 2. Еще �дин ������ �а�лючает�� в у�а�ании та��й инф�р�ации в ���андн�й �тр�� �е �ри �а�у��е �ценари�. На ����ьютерн�� жар��не инф�р�аци�, �ередавае�а� �р�цедуре, �а��в�й �вл�ет�� и файл �ценари�, на�ывает�� ар�у�ента�и. В �леду� ющей ���андн�й �тр��е myscript.vbs и c:\windows �вл�ют�� дву�� ар�у�ента�и, �ередавае�ы�и �р��ра��е wscript: wscript myscript.vbs c:\windows В ���андн�й �тр��е ws���p� ар�у�енты начинают�� � двух �и�в�л�в �р����� �лэша (//�, �адающих �люч, у�равл�ющий ра��т�й �а���� х��та ws���p�, а �ервый ар�у�ент имя_файла �вл�ет�� и�ене� �а�у��ае���� �ценари�. Лю�ые дру�ие ар�у� �енты �ередают�� файлу �ценари� дл� е�� интер�ретации �� �в�е�у ����твенн��у у���трению. Пред��ределенн��� �начени� у ар�у�ент�в не и�еет��, ��эт��у ��ре� деление ��р�д�а их и���ль��вани� и вли�ни� на �ценарий в��ла�ает�� на �р��ра�� �и�та �ценари�. В �дн�� �ценарии д���лнительные ар�у�енты ���андн�й �тр��и ���ут и���ль��вать�� дл� инди�ации и�ен удал�е�ых �а���. В дру��� �ценарии �ни ���ут ра�решать или �а�рещать вы��лн�е�ые �ценарие� фун�ции. У �ажд�� �� ��ы�а �ценариев и�еет�� �в�й ����твенный ������ ��лучени� инф�р�ации и� ар�у�ент�в, �ереданных �ценарию в ���андн�й �тр��е �а�у��а. Е�ли вы �на���ы � на�и�ание� �а�етных файл�в DOS, ��жете в����нить, чт� �е�т�, �де в �а�етн�� файле ���вл�ет�� �ру��а �и�в�л�в «%1», �а�ен�ет�� �начение� �ерв��� ар�у�ента ���андн�й �тр��и. WSH ��е��ечивает д��ту� � ар�у�ента� ���андн�й �тр��и �у� WSH ��е��ечивает д��ту� � ар�у�ента� ���андн�й �тр��и �у� ��е��ечивает д��ту� � ар�у�ента� ���андн�й �тр��и �у� те� и���ль��вани� �в�й�тва, на�ывае���� ��ъе�т�� WS���p� (��др��н��ти �удут ра����трены в �лаве 3�. В V�S���p� �ервый ар�у�ент, на�ранный в ���андн�й �тр�� V�S���p� �ервый ар�у�ент, на�ранный в ���андн�й �тр�� �ервый ар�у�ент, на�ранный в ���андн�й �тр�� �е ���ле и�ени �ценари�, ����начает�� �а� WScript.Arguments(0). Вт�р�й ар�у�ент ����начает�� �а� WScript.Arguments(1) и т. д . На�ри�ер, ��ерат�р dir = WScript.Arguments(0) �ри�ваивает �начение �ерв��� ар�у�ента �ере�енн�й dir.
52 Глава 1. Windows Script Host ▼) Кстати, использование слова WScript для обозначения объектов WScript.echo и WScript.Argu- WScript для обозначения объектов WScript.echo и WScript.Argu- для обозначения объектов WScript.echo и WScript.Argu- WScript.echo и WScript.Argu- .echo и WScript.Argu- echo и WScript.Argu- и WScript.Argu- WScript.Argu- .Argu- Argu- ments остается неизменным, независимо от того, какой хост использован для запуска сцена- остается неизменным, независимо от того, какой хост использован для запуска сцена- рия, wscript или cscript. В данном случае WScript ссылается на имя объекта, предоставляемого хостом сценария, и он называется WScript, независимо от версии, с помощью которой запущен сценарий. Конечно, это вызывает некоторую путаницу. Мы ��же� �ере�и�ать и�х�дный уче�ный �ценарий, чт��ы в����ль��вать�� ар�у�ент��: ' s cript0102.vbs ' Общее пространство, занимаемое каталогом, указанным в командной строке dir = WScript.Arguments(0) set Fsys = CreateObject("Scripting.FileSystemObject") totsize = 0 for each file in Fsys.GetFolder(dir).Files totsize = totsize + file.size next wscript.echo "Общий размер файлов в " , dir, " составляет " , totsize О�ратите вни�ание на т�, чт� эт�т �ценарий �тличает�� �т �в�ей ��лее ранней вер�ии т�ль�� �������� �ри�ваивани� �начени� �ере�енн�й dir в третьей �тр��е. Те�ерь �ы ��же� на�рать в ���андн�й �тр��е �ледующие ���анды дл� ��д�чета ��ще�� ра��ера файл�в ���твет�твенн� в �атал��ах Temp и Windows: script0102 c:\temp script0102 c:\windows Н� ���да дл� ��д�чета �ы ���ытае��� у�а�ать �а��у, в и�ени ��т�р�й �ри�ут� �твуют �р��елы, в��ни�нет �р��ле�а. На�ри�ер, � ���у на�рать script0102 c:\Program Files\Internet Explorer W��dows ��ла�ает, чт� �р��елы в эт�� длинн�� �утев�� и�ени ���а�ывают, чт� �ы у�а�али три �тдельных ар�у�ента: y WScript.Arguments(0) = c:\Program y WScript.Arguments(1) = Files\Internet y WScript.Arguments(2) = Explorer Решение эт�й �р��ле�ы ���т�ит в �а�лючении не�равильн� ра��тающе�� те��та в дв�йные �авыч�и (""�, чт��ы �и�те�а W��dows �нала, чт� эт�т те��т нужн� в��� W��dows �нала, чт� эт�т те��т нужн� в��� �нала, чт� эт�т те��т нужн� в��� �рини�ать �а� �дин длинный эле�ент: script0102 "c:\Program Files\Internet Explorer" И���ль��вание ар�у�ент�в ���андн�й �тр��и в ваших ����твенных �ценари�х �����ает ���давать ��лее универ�альные и ��ле�ные ин�тру�енты. П�дтверждение эт��у �удет дан� в не���ль�их �ри�ерах, ��т�рые вы найдете далее в эт�й �ни�е. Сохранение результатов работы сценариев Е�ли нужн�, чт��ы �ценарий �а�и�ывал инф�р�ацию, а не �р��т� выв�дил ее на э�ран, е�ть два варианта дей�твий.
Как Windows запускает сценарии 53 В���ервых, ��жн� в����ль��вать�� х��т�� �s���p� и �а�тавить �ценарий выв�� �s���p� и �а�тавить �ценарий выв�� и �а�тавить �ценарий выв�� дить ре�ультаты �в�ей ра��ты в ��н� ���андн�й �тр��и. Ка� эт� вы�л�дит, �ыл� ���а�ан� ранее на ри�. 1 .5 . Эт�т выв�д ��жн� ��хранить в файле �уте� е�� �ерена�равлени�. Е�ли д�� �авить � лю���у и�ени �а�у��ае��й в ���андн�й �тр��е �р��ра��ы �тр��у >ка­ кой­нибудь_файл, ее вых�д �удет ��хран�ть�� в файле � и�ене� какой­нибудь_ файл. Зате� эт�т файл ��жн� ра��ечатать, ��ра��тать е�� � ����щью �а��й�ни�удь дру��й �р��ра��ы, �р����треть е�� ��держи��е в Бл��н�те и т. д . Ра����три� �ри�ер: cscript script0102.vbs c:\windows >wincount.txt Эта ���анда �а�у�тит �дин и� наших уче�ных �ценариев и ��хранит ре�ультаты в файле wincount.txt. Зате� ре�ультаты ��жн� �удет �р����треть в Бл��н�те � ��� ��щью �ледующей ���анды: notepad wincount.txt Е�ли выв�д желательн� �р����треть в ��не ���андн�й �тр��и, н� инф�р�ации �лиш��� �н��� и ее нев����жн� �р�читать �ра�у на �дн�� э�ране, ��жн� в����ль� ��вать�� ���анд�й more � �ехани���� �анала (|�: cscript script0102.vbs c:\windows | more В данн�� �лучае �и�в�л | �а�тавл�ет W��dows �т�равить выв�д ваше�� �це� W��dows �т�равить выв�д ваше�� �це� �т�равить выв�д ваше�� �це� нари� в� в�тр�енную в W��dows �р��ра��у more, �т��ражающую эт�т выв�д ��� э�ранн�. Перех�д �т �дн��� э�рана � дру���у ��уще�твл�ет�� нажатие� �лавиши Пробел. Вт�р�й ������ ��хранени� инф�р�ации, ��енерир�ванн�й �ценарие�, �а�люча� ет�� в т��, чт��ы �а�тавить �р��ра��у �ценари� ���давать файл не���ред�твенн�, и���ль�у� ��ерат�ры в �а��� �ценарии. Эт�т ������ �удет ра����трен в �лаве 4 «Д��ту� � файла� и рее�тру». Ключи Wscript и Cscript Ра���атрива� ар�у�енты ���андн�й �тр��и, �ы у���инали, чт� � ����щью этих ар�у�ент�в ��жн� у�равл�ть ��ведение� �р��ра�� �s���p� и ws���p�. Ра�у�еет��, дл� и��енени� ��ведени� ws���p� или �s���p� в ���андную �тр��у ��жн� д��авить �ра�у не���ль�� ��ециальных ар�у�ент�в. При �ажд�� �а�у��е �р��ра��а �s���p� ��ычн� выв�дит ����щение, �редше� �твующее лю��й инф�р�ации, выв�ди��й ваши� �ценарие�. На�ри�ер, е�ли на�рать cscript script0102.vbs c:\windows ре�ультат �удет и�еть �ри�ерн� �ледующий вид: Сервер сценариев Windows (Microsoft (R)) версия 5.8 (C) Корпорация Майкрософт (Microsoft Corporation), 1996–2001 . Все права защищены. Общий размер файлов в c:\windows составляет 9188167
54 Глава 1. Windows Script Host Я ���у вне�ти в ���андную �тр��у �дн� и��енение, д��авив в нее �люч //Nologo и и���ль��вав в начале эт��� �люча �р��ые, а не ��ратные �лэши: cscript //Nologo script0102.vbs c:\windows Эт� д��авление �риведет � �ледующе�у выв�ду на ди��лей: Общий размер файлов в c:\windows составляет 9188167 Эт� уже вы�л�дит на�н��� лучше. WSH ра����нает не���ль�� ��ециальных д���лнительных ар�у�ент�в, в�ереди �ажд��� и� ��т�рых �тав�т�� �и�в�лы //, чт��ы ���ве�тить х��т, чт� эт�т ар�у�ент �редна�начен дл� не�� и не �вл�ет�� че�� т�, чт� нужн� �ередать �ценарию. П�лный �еречень та�их ар�у�ент�в, или �лючей ���андн�й �тр��и, �риведен в та�л. 1 .4 . П��ле та�лицы �удут ���а�аны две ���ан� 1.4 . П��ле та�лицы �удут ���а�аны две ���ан� 1.4 . П��ле та�лицы �удут ���а�аны две ���ан� ды, у�р�щающие ра��ту �� �ценари��и, ��т�рые ��жн� �удет �ра�у же на�рать. Таблица 1.4. Ключи командной строки для wscript и cscript Ключ Эффект //H:хост У�тан�в�а хоста, ��т�ра� � данн��� ���ента �удет и���ль��вать�� �� у��лчанию. В�е�т� эле�ента хост нужн� вве�ти ws���p� или �s���p� //S С�хранение те�ущих на�тр�е� в �аче�тве и���ль�уе�ых �� у��лчанию дл� данн��� ��ль��вател�. В�е ��тальные �лючи, �еречи�ленные в эт�й та�лице, и���ль�уе�ые � �люч�� //S, �удут �а���нены дл� в�ех ���леду� ющих �а�у���в WSH, ���а на�тр�й�и �� у��лчанию не �удут и��енены в �чередн�й ра� //B И���ль��вание «�а�етн���» режи�а и ��давление лю�ых выв�д�в на э�ран ����щений �� �ши��ах �ценари� и �ри�лашени� на вв�д инф�р� �ации. О�ычн� �ши��и в �р��ра��е �ценари� �а�тавл�ют ��тан�вить е�� вы��лнение и выве�ти ����щение �� �ши��е. Ключ //B вынуждает ���р���вать �р�д�лжить вы��лнение �ценари�, не���тр� на в��ни�н�� вение �ши��и //D Ра�решение в�лючени� �тлад�и. При и���ль��вании эт��� �люча и в��� ни�н�вение �ши��и в дей�твие в�ту�ает �тладчи�, ���а�ыва� и�т�чни� �ши��и, е�ли, ��нечн� у ва� у�тан�влен W��dows S���p� D�bugg�� (или дру��е ви�уальн�е �ред�тв� �тлад�и ����ании M���oso��, на�ри�ер V�su�� S�ud�o� //E:движок И���ль��вание у�а�анн��� ��ы��в��� движка дл� ра��ты �� �ценарие�. О�ычн� WSH у�адывает �равильный движ�� на ��н�ве и�ени файла �ценари�: V�S���p� дл� файл�в .vbs, JS���p� дл� файл�в .js и т. д . Эт�т �люч �ри�ен�ет�� т�ль�� в т�� �лучае, е�ли и���ль�уют�� не��ыч� ные ра�ширени� и�ен файл�в или не��ычный ��ы�, � ��т�р�� ��жет не д��адывать�� WSH //I И���ль��вание интера�тивн��� режи�а, ��т�рый �вл�ет�� �р�тив�� ��л�жн��тью ранее ра����тренн��у �а�етн��у режи�у. П����ль�у �люч //I �вл�ет�� у�тан�в��й �� у��лчанию, е�� нужн� и���ль��вать, т�ль�� е�ли эта у�тан�в�а ранее и��ен�ла�ь � и���ль��вание� �лючей //S //B
Как Windows запускает сценарии 55 Ключ Эффект //Job:имя_за­ дания За�у�� �ценарн��� �адани� имя_задания и� файла .WSF . Файлы .WSF ра���атривали�ь ранее в данн�й �лаве //Logo От��ражение инф�р�ации �� авт�р��их �равах и вер�ии. (Эта у�тан�в�а и���ль�ует�� �� у��лчанию, ���а не �удет �ри�енен �люч //Nologo или на�тр�й�и не �удут и��енены на ���т��нн�й ��н�ве � ��� ��щью �лючей //S //Nologo.� //Nologo П�давление выв�да инф�р�ации �� авт�р��их �равах и вер�ии //T:nn У�тан�в�а �а��и�альн��� вре�ени в �е�ундах (nn�, в течение ��т�р��� �ценарию ра�решен� вы��лн�ть��. На�ри�ер, �люч //T:5 ��начает, чт� вы��лнение �ценари� �удет ��тан�влен�, е�ли �н� �ай�ет ��льше 5 �е� �унд. Эт�т �люч �ри��дит��, е�ли ваш �ценарий ��жет «�ави�нуть» или ���ытает�� �ерейти в режи� �е���нечн��� вы��лнени� �ри не�равиль� н�� ра�витии �итуации //X Вы��лнение �ценари� в �тладчи�е. Эт�т �люч �удет ра����трен чуть ���же в ра�деле «Отлад�а �ценариев» //U И���ль�ует�� т�ль�� � �s���p�. Пред�и�ание �s���p� выв�дить дату в ��� дир�в�е U���od�, а не в ��дир�в�е ASCII. Эт�т �люч ва�, ���рее в�е��, ни���да не �ри��дит�� Эт�т �еречень не нужн� �а���инать. М�жн� в ���андн�й �тр��е на�рать cscript /? или wscript /?, и �р��ра��а выведет ��и��� д��ту�ных �лючей. Е�ли ���е�тить �люч �? в ���андную �тр��у, ��д��ную инф�р�ацию выв�д�т �н��ие W��dows��р��ра��ы. Я ре���ендую ва� в����ль��вать�� эти�и �люча�и �р��� �ейча�, чт��ы не� �н��� у�р��тить и���ль��вание WSH. Сначала вы�лючи� выв�д инф�р�ации � вер�ии, ��т�рый �р�и�х�дит �ри �ажд�� �а�у��е �s���p� и вы�л�дит �ри�ерн� �ледующи� ��ра���: Сервер сценариев Windows (Microsoft (R)) версия 5.8 (C) Корпорация Майкрософт (Microsoft Corporation), 1996–2001 . Все права защищены. Чт��ы и��авить�� �т выв�да эт�й инф�р�ации, �т�р�йте ��н� ���андн�й �тр��и и на�ерите cscript //nologo //s Ключ //nologo �рив�дит � �а�у��у �s���p� �е� ����щени� � вер�ии, а �люч //s делает эту на�тр�й�у ���т��нн�й. Зате�, е�ли нужн� ра��тать �реи�уще�твенн� � �s���p� и е�ли вы желаете вв�� �s���p� и е�ли вы желаете вв�� и е�ли вы желаете вв�� дить в ���андн�й �тр��е �дн� т�ль�� и�� �ценари�, чт��ы �а�тавить �и�те�у �� у��лчанию �а�у��ать эт�т �ценарий � и���ль��вание� �s���p�, введите эту ���анду: cscript //h:cscript Е�ли вы х�тите ��лучить д���лнительную инф�р�ацию � �лючах ���андн�й �тр��и дл� �s���p� и ws���p�, читайте ра�дел дальше, а е�ли нет, ��жн� �ерейти � �ледующе�у ра�делу.
56 Глава 1. Windows Script Host Давайте ра����три� не���ль�� �ри�ер�в и���ль��вани� этих �лючей. Были ра����трены �лючи //S и //H. Дру�ие �лючи ��ычн� и���ль�уют�� дл� и��енени� ��ведение WSH т�ль�� в т�� �лучае, е�ли их �ри�енение �рин��ит ��ль�у в ��н� WSH т�ль�� в т�� �лучае, е�ли их �ри�енение �рин��ит ��ль�у в ��н� т�ль�� в т�� �лучае, е�ли их �ри�енение �рин��ит ��ль�у в ��н� �ретн�й ���андн�й �тр��е: cscript somescript.vbs //T:5 //B аргументы для сценария Эти �лючи �ред�и�ывают �s���p� �а�у�тить �ценарий somescript.vbs �а�� �и�у� на 5 �е�унд и не ��танавливать вы��лнение �ценари� �ри в��ни�н�вении �ши���. Дру�ие ар�у�енты �ередают�� не���ред�твенн� �ценарию. П����ль�у �люч //S �ревращает дру�ие �лючи в ���т��нные на�тр�й�и, ��д��� н� �лючу //H, е�ли нужн� на ���т��нн�й ��н�ве вы�лючить выв�д инф�р�ации �� авт�р��их �равах и � вер�ии, эт� ��жн� �делать � ����щью �ледующей ���анды: cscript //Nologo //S Ключ //S делает �люч //Nologo ���т��нн� и���ль�уе�ы� �� у��лчанию. ▼) Регистр букв при использовании ключей никакой роли не играет. Например, //T:5 и //t:5 при- T:5 и //t:5 при- :5 и //t:5 при- t:5 при- :5 при- водят к абсолютно одинаковому эффекту. ТОЛЬКО ДЛЯ ТЕХ, КТО УМЕЕТ РАБОТАТЬ С РЕЕСТРОМ... Е�ли вы х�р�ш� ра��ираете�ь в рее�тре W��dows, ва�, наверн�, �удет ��ле�� н� у�нать, �де хранит�� на�тр�ечна� инф�р�аци� WSH. При и���ль��вании �люча //S �ред��чтительные �начени� ��хран�ют�� в рее�тре в ра�деле HKE�_ CURRENT_USER\Software\Microsoft\Windows Script Host\Settings. И��енени�, �р�и�веденные � ����щью �люча на�тр�й�и и���ль�уе���� �� у��лчанию движ�а (//H�, �рив�д�т � и��енению �начений �� у��лчанию ра�дел�в рее�тра KE�_CURRENT_USER\Software\Classes\xxx\Shell, �де в�е�т� xxx �ледует у�а�ать JSFile, VBSFile, WSHFile и дру�ие ти�ы файл�в �ценариев. Значение �� у��лчанию у�танавливает�� в ��дра�делах open или open2, ���твет�твующих �ла��ла�, �еречи�ленны� в ра�делах HKE�_CLASSES _ROOT\xxx\Shell. Те�ущие интер�ретат�ры �ценариев (движ�и� �вл�ют�� DLL��и�ли�те�а�и, �аре�и�трир�ванны�и в ра�деле HKE�_CLASSES_ROOT\CLSID ��д идентифи�а� т�ра�и CLSID, �в��анны�и � �а�и���и движ��в �ценариев (на�ри�ер, HKE�_ CLASSES_ROOT\VBScript�. Ти� файла движ�а �ценариев и CLSID��ара�етры движ�а �т�ечены в ��дра�деле �� и�ени OLEScript. С ����щью �люча //E �ере�лючают�� у�тан�в�и �в��ей движ�а �уте� и��енени� ��дра�дела Command в ра�деле HKE�_CLASSES_ROOT\xxx\Shell\Open дл� �ажд��� �в��анн��� ти�а файла �ценари�. Перечень �аре�и�трир�ванных ти��в файл�в �ценариев нах�дит�� в ��дра�деле HKE�_LOCAL_MACHINE\Software\ Microsoft\Windows Scripting Host\Script Extensions. (О�ратите вни�ание на и���ль� �уе�ую �де�ь ing���вую ф�р�у �л�ва.� Эта на�тр�й�а тре�ует дл� и��енений �рав Ад�ини�трат�ра, н� не тех �рав, ��т�рые �ыли ��вышены д� данн��� ур�вн�.
Запуск своих собственных сценариев 57 Запуск своих собственных сценариев К��да вы �танете ���давать ре�ул�рн� и���ль�уе�ые �ценарии, ��жн� �удет, �на� не��т�рые ����енн��ти, ��ле�чить их ��и�� и �а�у��. В�е эти хитр��ти �удут ��� �а�аны в данн�� ра�деле. Добавление указаний на сценарии в переменную PATH Ка� уже у���инал��ь, �ри ���дании универ�альных �ценариев �ыл� �ы не�л�х� ���е�тить их в �тдельную �а��у. Чт��ы ���дать �а��у �ценариев, �ледуйте ин� �тру�ци��, �риведенны� ранее в ра�деле «С��дание и �ащита �а��и �ценариев». Зате� �а��у �ценариев ��жн� у�а�ать в ��и��е �утей PATH �и�те�ы W��dows, ��т�рый �ред�тавл�ет ����й ��и��� �а���, �де W��dows ведет ��и�� �ри вв�де и�ени в ��не ���андн�й �тр��и, в ��не Выполнить (Ru�� в W��dows XP и в ��ле ��и��а в �еню Пуск (S����� в W��dows V�s��. Е�ли ваша �а��а �ценариев д��авлена в PATH, �ценарий ��жн� �а�у�тить в лю��е вре�� и� лю��й �а��и �р��ты� вв�д�� е�� и�ени. В �ледующих ин�тру�ци�х �ред��ла�ает��, чт� �а���й �ценариев �вл�ет�� c:\scripts. М�жн� та�же ���дать �в�ю �а��у �ценариев внутри �а��и �в�е�� �ер� ��нальн��� �р�фил�, ��лучив, на�ри�ер, �а��у c:\Users\ваша_учетная_запись\ scripts. Е�ли дл� �ценариев и���ль�ует�� дру��е �е�т�, ��д�тавьте в �ледующих ин�тру�ци�х ���твет�твующее и�� �а��и в�е�т� c:\scripts. В ���твет�твии � ваши�и личны�и �ред��чтени��и, у���инание � �а��е ��� �ещает�� в ��и��� PATH дл� в�ех ��ль��вателей ваше�� ����ьютера или т�ль�� дл� вашей ����твенн�й учетн�й �а�и�и. ▼) После внесения этих изменений нужно закрыть все открытые вами окна командной строки. Из- менения будут касаться только новых окон командной строки. Windows 7 и Vista, сценарии, доступные всем пользователям Чт��ы д��авить вашу �а��у �ценариев в PATH дл� в�ех ��ль��вателей �ри ра��те в W��dows 7 и V�s��, вы��лните �ледующие дей�тви�: 1. Щел�ните на �н���е Пуск (S�����, щел�ните �рав�й �н����й на �ун�те Компью- тер (Compu���� и вы�ерите �ун�т Свойства (P�op�����s�. 2. Щел�ните на �ун�те Дополнительные параметры системы (Adv����d Sys��m S�����gs� и ��дтвердите �в�и на�ерени� в ��не ��нтр�л� учетных �а�и�ей ��ль� ��вателей (Us�� A��ou�� Co���o� p�omp��. 3. Щел�ните на �н���е Переменные среды (��v��o�m��� V����b��s�. 4. Найдите �а�и�ь PAT H в нижней ча�ти диал���в��� ��на и дважды щел�ните на ней �н����й �ыши. 5. Щел�ните на ��ле Значение переменной (V����b�� V��u��. Наж�ите �лавишу End, на�ерите в ��ле �и�в�л т�ч�а � �а��т�й (;�, а �ате� на�ерите ���ле т�ч�и � �а��т�й c:\scripts. 6. Щел�ните на �н���ах OK, чт��ы �а�рыть диал���вые ��на.
58 Глава 1. Windows Script Host Windows 7 и Vista, сценарии, доступные только вам Чт��ы д��авить вашу �а��у �ценариев в PATH т�ль�� дл� вашей учетн�й �а�и�и, вы��лните �ледующие дей�тви�: 1. Щел�ните на Пуск (S�����Панель управления (Co���o� P�����Учетные записи пользователей и семейная безопасность (Us�� A��ou��s ��d F�m��y S����y� или Учетные записи (Us�� A��ou��s�. 2. В нижней ча�ти ��и��а �аданий вы�ерите �ун�т Изменение переменных среды (Ch��g� My ��v��o�m��� V����b��s�. 3. В верхней ча�ти диал���в��� ��на, е�ли та� уже е�ть �а�и�ь PATH, щел�ните на ней дважды. Щел�ните на ��ле Значение переменной (V����b�� V��u��. Наж�ите �лавишу End, на�ерите в ��ле �и�в�л т�ч�а � �а��т�й (;�, а �ате� на�ерите ���ле т�ч�и � �а��т�й c:\scripts. 4. Е�ли же в верхней ча�ти диал���в��� ��на �а�и�и PAT H нет, щел�ните на �н���е Создать (N�w�, на�ерите PATH в ��ле Имя переменной (V����b�� N�m�� и на�ерите c:\scripts в ��ле Значение переменной (V����b�� V��u��. 5. Щел�айте на �н���ах OK, чт��ы �а�рыть диал���вые ��на. Windows XP, сценарии, доступные всем пользователям Чт��ы д��авить вашу �а��у �ценариев в PATH дл� всех ��ль��вателей XP, вы��л� XP, вы��л� , вы��л� ните �ледующие дей�тви�: 1. В�йдите в �и�те�у �а� ад�ини�трат�р ����ьютера. 2. Щел�ните на �н���е Пуск (S�����, щел�ните �рав�й �н����й �ыши на �ун�те Мой компьютер (My Compu���� и вы�ерите �ун�т Свойства (P�op�����s�. 3. Вы�ерите в�лад�у Дополнительно (Adv����d� и щел�ните на �н���е Переменные среды (��v��o�m��� V����b��s�. 4. Найдите �а�и�ь PAT H в нижней ча�ти диал���в��� ��на и дважды щел�ните на эт�й �а�и�и. 5. Щел�ните на ��ле Значение переменной (V����b�� V��u��. Наж�ите �лавишу End, на�ерите в ��ле �и�в�л т�ч�а � �а��т�й (;�, а �ате� на�ерите ���ле т�ч�и � �а��т�й c:\scripts. 6. Щел�айте на �н���ах OK, чт��ы �а�рыть диал���вые ��на. Windows XP, сценарии, доступные только вам Чт��ы д��авить в XP вашу �а��у �ценариев в PATH т�ль�� дл� вашей учетн�й �а� �и�и, вы��лните �ледующие дей�тви�: 1. Щел�ните на �н���е Пуск (S�����, щел�ните �рав�й �н����й �ыши на �ун�те Мой компьютер (My Compu���� и вы�ерите �ун�т Свойства (P�op�����s�. 2. Вы�ерите в�лад�у Дополнительно (Adv����d� и щел�ните на �н���е Переменные среды (��v��o�m��� V����b��s�. 3. Дважды щел�ните на �а�и�и PATH в верхней ча�ти диал���в��� ��на, е�ли та�а� �а�и�ь та� е�ть. Щел�ните на ��ле Значение переменной (V����b�� V��u��. Наж�и�
Запуск своих собственных сценариев 59 те �лавишу End, на�ерите в ��ле �и�в�л т�ч�а � �а��т�й (;�, а �ате� на�ерите ���ле т�ч�и � �а��т�й c:\scripts. 4. Е�ли же в верхней ча�ти диал���в��� ��на �а�и�и PAT H нет, щел�ните на �н���е Создать (N�w�, на�ерите PATH в ��ле Имя переменной (V����b�� N�m�� и на�ерите c:\scripts в ��ле Значение переменной (V����b�� V��u��. 5. Щел�айте на �н���ах OK, чт��ы �а�рыть диал���вые ��на. П��ле на�тр�й�и ��и��а PATH, в�е чт� нужн� �удет �делать — эт� на�рать и�� лю���� и� ваших файл�в �ценариев в ��не ���андн�й �тр��и, или в ��ле Выпол- нить (Ru��, или в ��ле ��и��а. Чт��ы и��ытать эт� в ра��те, �т�р�йте н�в�е ��н� ���андн�й �тр��и, на�ерите firstscript и наж�ите Ввод. Ваш уче�ный �ценарий д�лжен �а�у�тить��. Запуск сценариев с помощью значка ярлыка Е�ли у ва� е�ть �ценарий, ре�ул�рн� �а�у��ающий�� � ����щью ws���p�, � �ред� ws���p�, � �ред� , � �ред� ла�аю ���дать �рлы� дл� файла �ценари�. ▼▼ Если ваши сценарии используются в локальной сети, я рекомендую хранить часто использу- емые сценарии в общей сетевой папке. Тогда можно будет создать ярлыки на любом сете- вом компьютере. При создании ярлыка введите путевое имя, соответствующее универсаль- ному соглашению об использовании имен — Universal Naming Convention (UNC), например \\bali\scripts\myscript.vbs. Можно также воспользоваться проводником, чтобы найти общий файл в папке Мое сетевое окружение (My Network Places). Будет также неплохо скопировать в общую папку сами ярлыки. После этого можно будет перетащить значки этих ярлыков на любой сетевой компьютер, не пересоздавая этот ярлык. Создание ярлыка сценария Знач�� �рлы�а ча�т� и���ль�уе�ых �ценариев ��жн� ���е�тить на Ра��чий �т�л, в �а��у, в �в�е �еню Пуск (S����� или на �анель �ы�тр��� �а�у��а. Н� эт� ��льше ��дх�дит дл� �ценариев, �а�у��ае�ых � ����щью ws���p� или тех �ценариев, �а�у� ws���p� или тех �ценариев, �а�у� или тех �ценариев, �а�у� ��ае�ых � ����щью s���p�s, ��т�рые не �енерируют вых�дн�й инф�р�ации. Е�ли �рлы� и���ль�ует�� � �s���p� (вер�и� ���андн�й �тр��и�, �а� т�ль�� вы��лнение �ценари� �авершит��, е�� ��н� �а�р�ет��, не ���в�л�� �р�читать ре�ультат. Дл� ���дани� �рлы�а дл� файла �ценари� вы��лните �ледующие дей�тви�: 1. Щел�ните �рав�й �н����й на Ра��че� �т�ле и вы�ерите �ун�т Создать (N�w�, Ярлык (Sho���u��. 2. Щел�ните на �н���е Обзор (��ows�� и найдите �в�й файл �ценари�. Наж�и� те OK. 3. Пере�е�тите у�а�атель �ур��ра в начал� ��л�. У�ажите ра���л�жение ��ъе�та (Lo����o�� и д��авьте �еред у�а�ание� �ути и и�ени файла ws���p�. Не �а�удьте ���тавить �р��ел ���ле ws���p�. Наж�ите Далее (N�x��. 4. И��ените ��и�ание � ws���p�.�x� на чт� �ни�удь ��лее ��дх�д�щее, ��и�ываю� щее дей�твие �ценари�, на�ри�ер на Подсчет размеров файлов. Наж�ите Готово (F���sh�.
60 Глава 1. Windows Script Host П��ле эт��� ��жн� �еретащить эт�т �рлы� �уда у��дн�, в�люча� и ваше �еню Пуск (S�����, �анель �ы�тр��� �а�у��а или лю��е дру��е �е�т�. Дв�йн�й щелч�� на �нач�е �рлы�а �риведет � вы��лнению �ценари� � �ини�альны�и у�или��и. ▼▼ Можно перетащить на значок ярлыка сценария один или несколько значков файлов. Это при- ведет к выполнению сценария с полным путевым именем каждого файла, переданного сцена- рию в качестве аргумента. Этот прием можно использовать со сценариями, отправляющими электронную почту, выполняющими распечатку или выполняющими другие задачи, связанные с файлами. Запуск сценариев из пакетных файлов И на��нец, �ценарии ��жн� та�же �а�у��ать и� �а�етных файл�в. Эт� �вучит не���ль�� �транн�, н� та��й вариант т�же ��жет �ри��дить��. Па�етные файлы уд��ны, ���да нужн� вы�тр�ить не���ль�� �р��ра�� в ��ределенную ���лед�ва� тельн��ть и ничт� не �ре��т�твует т��у, чт� �дн�й и� этих �р��ра�� �удет файл �ценари�. Сетевы� ад�ини�трат�ра� W��dows та�же ��жет ��над��ить�� �а�у� W��dows та�же ��жет ��над��ить�� �а�у� та�же ��жет ��над��ить�� �а�у� ��ать �ценарии и� �а�етных файл�в в �аче�тве ча�ти �ценари� вх�да в �и�те�у, ��� т�рый �удет ра���атривать�� в �лаве 9 «И���ль��вание �ценариев дл� у�равлени� ����ьютера�и и �ет��и». Дл� �а�у��а �ценари� и� �а�етн��� файла ��жн� и���ль��вать ли�� ws���p�, ли�� �s���p�. О�е вер�ии ���ут, �а� ���а�ан� в �ледующе� �ри�ере, в��вращать �а�етн��у файлу инф�р�ацию �� удачн�� или неудачн�� �авершении �ценари� ���ред�тв�� �ере�енн�й �реды errorlevel: badscript.vbs: Wscript.echo "К сожалению, возникла проблема." WScript.Quit(1) runbad.bat: @echo off wscript badscript.vbs echo Wscript вернул %errorlevel% if errorlevel 1 echo Сценарий выдал ошибку! ▼) В Интернете могут встретиться статьи, утверждающие, что Wscript не присваивает значение переменной среды errorlevel, но эти сведения устарели. Начиная с Windows 2000 версии Wscript и Cscript присваивают значение errorlevel в соответствии со сложившейся ситуацией. Автозапуск сценариев W��dows ��жн� �а�тавить �а�у��ать �ценарии в авт��атиче���� режи�е �ри вх�де в �и�те�у, вых�де и� нее, чере� �аранее �а�ланир�ванные интервалы или на ��н�ве дру�их �и�те�ных ���ытий. Инф�р�аци� �� авт��атиче����у �а�у��у �ценариев дает�� в �лаве 9.
Проблемы безопасности 61 Проблемы безопасности П����ль�у у W��dows е�ть и���ль�уе�а� �� у��лчанию �ценари��и и WSH идентифи�аци� ти�а файла �� ра�ширению е�� и�ени (на�ри�ер, .vbs и .js�, ���да �т W��dows тре�ует�� «�а�у�тить» или «�т�рыть» V�S�файл, �на �нает, чт� эт� �ценарий, и �а�у��ает е��. Эт� у�р�щает и���ль��вание �ценариев, н� ��жет та�же �ред�тавл�ть ри�� � т�ч�и �рени� �е���а�н��ти. Дл� и��енени� ��ведени� �� у��лчанию ��жн� на� �вать две �ричины: y П����ль�у �ценарии ���ут ���давать�� дл� удалени� файл�в и вне�ени� �е� рье�ных и��енений в на�тр�й�и ��ераци�нн�й �и�те�ы, та��й у�р�щенный �а�у�� �ценариев на ваше� ����ьютере ��жн� ���читать �лиш��� �ерье�н�й ��а�н��тью. y Зл�у�ышленни�и и���ль�уют ��т�вн��ть W��dows � �а�у��у �ценариев, ���� W��dows � �а�у��у �ценариев, ���� � �а�у��у �ценариев, ���� дава� �ценарии�виру�ы и �ценарии�черви и ра��ыла� их в �аче�тве вл�жений � ����щени�� эле�тр�нн�й ��чты. Е�ли ��лучатель ��чты �т�рывает вл�жение, а W��dows на�тр�ена на авт��атиче��ий �а�у�� V�S�файл�в � WSH, виру� �ри�ту�ает � �в�ей ра�рушительн�й ра��те. П����ль�у �ценарии в�е�да ��жн� �а�у��ать �уте� �вн��� на��ра ���анды ws���p� или �s���p�, и �����ль�у ��жн� в �вн�� виде ���тавить �л�в� ws���p� или �л�в� �s���p� �еред и�ене� файла �ценари� в ��ле Объект (T��g��� лю���� �рлы�а, �удет �е���а�нее �т�лючить и�еющее�� в W��dows �����тавление файла� �цена� риев х��та WSH, и �ри эт�� ни�а�ие �уще�твенные фун�ци�нальные в����жн��ти не �удут утрачены. Чт��ы �делать эт� в W��dows 7 или V�s��, вы��лните �ледующие дей�тви�: 1. Щел�ните на Пуск (S�����, Панель управления (Co���o� P�����. Щел�ните на �е� лен�й над�и�и Программы по умолчанию (P�og��ms�; �ате�, ��д �ун�т�� Задание используемых по умолчанию программ (D���u�� P�og��ms�, вы�ерите Сопоставление типов файлов или протоколов конкретным программам (M�k� A F��� Typ� A�w�ys Op�� I� A Sp������ P�og��m�. 2. Найдите в ��и��е .vbs. Вы�ерите эт�т эле�ент и щел�ните на �н���е Изменить программу (Ch��g� P�og��m�. 3. Щел�ните на �н���е Обзор (��ows��, а �ате� на�ерите \windows\system32\notepad.exe 4. Щел�ните на �н���е Открыть (Op���, а �ате� наж�ите OK. 5. П�вт�рите в�е �редыдущие дей�тви� дл� ти��в файл�в .vb�, .js, .js� и .wsh. При ра��те в W��dows XP вы��лните �ледующие дей�тви�: 1. От�р�йте W��dows �xp�o��� и вы�ерите Сервис (Too�s�, Свойства папки (Fo�d�� Op��o�s�. 2. Вы�ерите в�лад�у Типы файлов (F��� Typ�s�. 3. Найдите эле�ент VBS в ��и��е ��д �а��л�в��� Расширения (�x���s�o�s� и вы� �ерите эт� эле�ент.
62 Глава 1. Windows Script Host 4. Щел�ните на �н���е Дополнительно (Adv����d� и ��д �а��л�в��� Действия (A���o�s� вы�ерите эле�ент Открыть (Op���. 5. Щел�ните на �н���е Изменить (�d���. От�ените и�еющую�� на�тр�й�у (��т�ра� и�еет �ледующий вид C:\WINDOWS\Sys��m32\WS���p�.�x� «%1» %*� и и�� �ените �а�и�ь на �ледующую: notepad "%1" 6. Щел�ните на �н���ах OK, чт��ы �а�рыть ��а диал���вых ��на. 7. Найдите эле�ент JS в ��и��е Расширения (�x���s�o�s� и ��вт�рите дей�тви� 4 и 5. П��ле эт��� вы ���жете �а�етить, чт� ваши и��енени� авт��атиче��и �ыли �ри�енены � файла� JS� и WSF. Те�ерь вы уже не ���жете �а�у�тить файл �ценари� на вы��лнение щелч��� �рав�й �н���и или дв�йны� щелч��� �� е�� �нач�у. В�е�т� эт��� вы��лните �дн� и� �ледующих дей�твий: y y С��дайте �рлы� � ws���p� или �s���p� в ��ле Объект (T��g���, �а� ра���а�ывал��ь ранее в данн�й �лаве. (П��ле ���дани� �рлы�а дл� файла �ценари� щел�ните на не� �рав�й �н����й �ыши, вы�ерите �ун�т Свойства (P�op�����s�, ���тавьте у�а� �атель �ур��ра �еред и�ене� файла в ��ле Объект (T��g��� и на�ерите wscript � �р��ел�� ���ле эт��� �л�ва.� y y За�у�тите �ценарии и� ��на ���андн�й �тр��и или и� ��на Выполнить (Ru�� ��д �н����й Пуск (S�����, на�рав wscript или cscript и и�� файла �ценари�. Н� эти �еры �е���а�н��ти не �тличают�� �����й �тр����тью. Е�ли вред�н��н�� �у �ценарию уда�т�� �ыть �а�ущенны� и�н�риру� в�е эти и��енени�, �н в�е равн� вы��лнит �аду�анн�е. Не��т�рые ��ль��ватели �ах�д�т та� дале��, чт� удал�ют файлы �s���p�.�x� и ws���p�.�x� �� �в�их ����ьютер�в или, �� �райней �ере, �ере� �s���p�.�x� и ws���p�.�x� �� �в�их ����ьютер�в или, �� �райней �ере, �ере� . �x� и ws ���p�.�x� �� �в�их ����ьютер�в или, �� �райней �ере, �ере� �x� и ws���p�.�x� �� �в�их ����ьютер�в или, �� �райней �ере, �ере� и ws���p�.�x� �� �в�их ����ьютер�в или, �� �райней �ере, �ере� ws���p�.�x� �� �в�их ����ьютер�в или, �� �райней �ере, �ере� . �x� �� �в� их �� � �ью тер�в или, �� �райней �ере, �ере� �x� �� �в�их ����ьютер�в или, �� �райней �ере, �ере� �� �в�их ����ьютер�в или, �� �райней �ере, �ере� и�ен�вывают их в цел�х �е���а�н��ти. Политика доверия и подписывание сценариев Дл� ��ль��вателей W��dows 7, V�s�� и XP в д��енн�й �ети W��dows (т� е�ть в �ети, у�равл�е��й W��dows S��v��� е�ть дру��й, ��лее эффе�тивный ������ �ред�твра� W��dows S��v��� е�ть дру��й, ��лее эффе�тивный ������ �ред�твра� S��v��� е�ть дру��й, ��лее эффе�тивный ������ �ред�твра� S��v��� е�ть дру��й, ��лее эффе�тивный ������ �ред�твра� � е�ть дру��й, ��лее эффе�тивный ������ �ред�твра� щени� �а�у��а неавт�ри��ванных �ценариев. Чере� �в�й�тв� �етев�й �ру���в�й ��� лити�и ��ераци�нна� �и�те�а W��dows ��жет �ыть на�тр�ена на �а�у�� �ценариев, нах�д�щих�� в у�а�анных �атал��ах и (или� на �а�рещение �а�у��а �ценариев, не ��держащих д��у�ти��й подписи, �ред�тавл�ющей ����й �л�� �а��дир�ванных данных, �арантирующих ��лучение файла �ценари� и� авт�ри��ванных, надеж� ных и�т�чни��в. Эту авт�ри�ацию, на�ывае�ую управлением политикой доверия, д�лжен �ред��тавл�ть ад�ини�трат�р �ети. ▼) Если сетевой администратор активирует свойство политики доверия, вы можете лишиться воз- можности создавать и выполнять свои собственные сценарии! Если у вас возникли трудности с запуском сценариев, обратитесь к сетевому администратору. Б�лее ��др��н� в��р��ы �е���а�н��ти �ценариев, ��лити�а д�вери� и и���ль� ��вание ��д�и�и �ценариев ра���атривают�� в �лаве 9.
Отладка сценариев 63 Отладка сценариев Даже на�и�ание �р��ра��ы ��жет �ыть дел�� ве�ь�а не�р��ты�, н� д�ведение ее ра��че�� ���т��ни� ��жет выве�ти и� тер�ени� ���� у��дн�. К �ча�тью, �и�те�а ���дани� �ценариев W��dows ���тавл�ет�� � �рафиче��и� �тладчи���, ���в�л�ю� W��dows ���тавл�ет�� � �рафиче��и� �тладчи���, ���в�л�ю� ���тавл�ет�� � �рафиче��и� �тладчи���, ���в�л�ю� щи� увидеть, чт� тв�рит�� внутри �р��ра��ы��ценари� �ри ее вы��лнении. Е�ли ва� �рих�дил��ь ���давать и �тлаживать �а�р��ы в Wo�d, �x���, A���ss или �а���� ни�удь дру��� �рил�жении M���oso��, вы, наверн�е, уже �на���ы � ви�уальны� �тладчи���. Е�ли же нет, ва� �редла�ает�� �рат�ий тур �� е�� и���ль��ванию. Е�ли �ценарий �т�л�нет�� � �ру��й �р��ра��н�й �ши���й (на�ри�ер, � �а��� т�й, ���тавленн�й не в т�� �е�те, или � нера����навае�ы� �л�в���, WSH выдает ����щение �� �ши��е. Ра����три�, � �ри�еру, �ценарий, и�еющий �ерье�ную �ши��у: 'bad.vbs – сценарий, нуждающийся в отладке forcounter=1to3 wscript.echo "Значение счетчика теперь равно", counter next badcommand wscript.echo "Строка, следующая за плохим оператором" V�S���p� не ра����нает �л�в� badcommand. В�е, чт� �р�и�х�дит �ри ���ыт�е �а�у��а эт��� �ценари�, �ави�ит �т и���ль�уе���� х��та. Cs���p� выв�дит ����щение �� �ши��е � ��и�ание� �р��ле�ы и ���а�ывает, �а�а� �тр��а файла ��держит �ши��у: Значение счетчика теперь равно 1 Значение счетчика теперь равно 2 Значение счетчика теперь равно 3 C:\scripts\bad.vbs(6, 1) Ошибка выполнения Microsoft VBScript: Несоответствие типа: 'badcommand' Ws���p�, �рафиче��а� вер�и�, �ре�ращает вы��лнение и выв�дит диал���в�е ��н� � инф�р�ацией �� �ши��е, ���а�анн�е на ри�. 1 .6 . Рис. 1 .6. WScript, встретившись с программной ошибкой, выводит диалоговое окно В лю��� �лучае ����щение �� �ши��е ��держит инф�р�ацию � т��, чт� х��т WSH �т�л�нул�� � ��ределенн�й �р��ле��й в �тр��е 6 ваше�� файла �ценари�,
64 Глава 1. Windows Script Host и в� �н��их �луча�х эт� ��дв�дит ва� д��тат�чн� �ли��� � и�т�чни�у �р��ле�ы, ��т�рую ��жн� ��наружить и у�транить. ▼▼ При редактировании и отладке сценариев полезно будет иметь такой текстовый редактор, ко- торый может переместить курсор непосредственно на строку с указанным номером, упомяну- том в сообщении об ошибке сценария. Блокнот способен на это, если применить следующий прием: щелкнуть на меню Формат (Format) и снять флажок Перенос по словам (Word Wrap). Теперь, после нажатия комбинации Ctrl+G, можно перейти на строку с указанным номером. Для этого нужно набрать номер строки и нажать Ввод. Е�ли �ценарий ведет �е�� не�жиданны� ��ра��� и в не� нет �ру�ых ��ечат�� — �� �райней �ере тех, ��т�рые ���ут �ыть ��наружены интер�ретат�р�� и���ль�у� е���� ��ы�а �ценариев, — ва� �ридет�� �р�ве�ти не��льш�е ра��лед�вание. В не��т�рых �луча�х ��ле�н� �удет в�тавить ��ерат�ры, выв�д�щие ��дер� жи��е ваших �р��ра��ных �ере�енных и �р��ежут�чных ре�ультат�в, чт��ы �����треть, в�е ли � ни�и в ��р�д�е. На�ри�ер, в �ценарии bad.vbs, � ��т�ры� уже �рих�дил��ь ра��тать в данн�� ра�деле, �ыла �р��ра��а, выв�д�ща� ��держи��е �ере�енн�й counter �� �ере т���, �а� ци�л �ен�л ее �начение. Ин��да та�а� ра�� н�видн��ть выв�да инф�р�ации, на�ывае�а� тра��ир�в��й, ��жет �ри��дить��. Д���лнительный ��ерат�р echo или дру��й ��ерат�р выв�да в�е�да ��жн� удалить, �а� т�ль�� �танет ��н�тн�, чт� �ценарий �ара��тал д�лжны ��ра���. Эта техн�л��и� в��лне ра��т�������на, н� �на �ришла � на� и� дале�их 1960�х ��д�в. Н� те�ерь�т� уже не ве� �ерф��арт? Е�ли ваш �ценарий ведет �е�� не�ред��а�уе�� или е�ли вы нах�дите�ь на �ерв�начальн�� эта�е е�� ���дани� и х�тите �����треть, чт� �р�и�х�дит внутри � целью у�едить��, чт� �н ра��тает, дл� эт��� е�ть на�н��� ��лее ��вре�енн�е �ред�тв�, ��т�р�е ��жн� и���ль��вать дл� и�учени� внутренне�� ���т��ни� �ценари� в �р�це��е е�� вы��лнени�. Эт� �ред�тв� на�ывает�� �тладчи��� �ценариев — S���p� D�bugg��. Н� е�� нужн� �а� �ру�ить �а���т��тельн�, �����ль�у �н� не ���тавл�ет�� в�е�те � W��dows. Е�ли вы ���ираете�ь ра�ра�атывать �ценарии, �ерейдите на ве���айт www.microsoft.com, найдите на не� �а�ру��у Windows Script Debugger, вы�ерите Script Debugger for Windows NT 4.0 and Later, ���ле че�� �а�ру�ите и у�тан�вите �р��ра��у. (Дл� у�тан�в�и �а� �руженн�й �р��ра��ы на XP нужн� в�йти в �и�те�у в �аче�тве Ад�ини�трат�ра ����ьютера.� ▼) Если у вас уже установлен пакет Microsoft Visual Studio, .NET Studio или InterDev или активи- Microsoft Visual Studio, .NET Studio или InterDev или активи- Visual Studio, .NET Studio или InterDev или активи- Visual Studio, .NET Studio или InterDev или активи- Studio, .NET Studio или InterDev или активи- Studio, .NET Studio или InterDev или активи- , .NET Studio или InterDev или активи- NET Studio или InterDev или активи- Studio или InterDev или активи- Studio или InterDev или активи- или InterDev или активи- InterDev или активи- или активи- рован какой-нибудь другой установленный отладчик, Windows Script Debugger можно не за- Windows Script Debugger можно не за- Script Debugger можно не за- Script Debugger можно не за- Debugger можно не за- Debugger можно не за- можно не за- гружать, вам уже может быть доступен более мощный отладчик. Чтобы проверить его наличие, создайте небольшой сценарий по имени test.vbs. Он может содержать только один оператор, например x = 3. Затем наберите следующую команду: cscript //D //X test.vbs и нажмите Ввод. Если появится окно отладки (или диалоговое окно, позволяющее вам выбрать отладчик), мож- но работать дальше, используя уже установленный отладчик. Если окно отладчика не появится и не будет выведено никакое другое диалоговое окно, тогда придется все же загрузить Micro- Micro- soft Script Debugger и продолжить изучение оставшегося материала данного раздела с этим отладчиком.
Отладка сценариев 65 П��ле у�тан�в�и �тладчи�а �ценариев дл� �а�у��а �ценари� � и���ль��вание� �тладчи�а ��жн� в����ль��вать�� �люч�� //X в ���андн�й �тр��е �а�у��а. Те�ерь ���анда cscript //X с:\scripts\bad.vbs �риведет � ���влению ��на �тладчи�а, ���а�анн��� на ри�. 1.7 . Рис. 1.7 . Windows Script Debugger выводит содержимое вашего сценария по мере его выполнения П� �ере вы��лнени� �ценари� желтый у�а�атель �удет у�а�ывать на �леду� ющий вы��лн�е�ый ��ерат�р �ценари�. П����ль�у на ри�. 1.7 �ценарий т�ль�� чт� �а�ущен, у�а�атель нах�дит�� на �ерв�� вы��лн�е��� ��ерат�ре �ценари�, ��т�рый нах�дит�� �ра�у ���ле ����ентари�. Те�ерь �ценарий ��жн� вы��лн�ть в ��ша��в�� режи�е или е�у ��жн� ра�ре� шить вы��лнить�� д� желае��й т�ч�и и ��тан�вить��. Х�т� дл� эт��� ��жн� в��� ��ль��вать�� �еню �тладчи�а, �р�ще в�е же �удет и�учить ���ращенные ���анды �лавиатуры или �лавиши �ы�тр��� вы��ва. Наи��лее важные и� них ���а�аны в та�л. 1.5. Таблица 1.5. Клавиши быстрого вызова отладчика Windows Script Debugger Клавиша Действие F� За�у�� �ценари� на �дин �ледующий ша� �ри ��ша��в�� вы��лнении. Е�ли �ценарий вы�ывает ��д�р��ра��у �ценари� или фун�цию, �тлад� чи� «�ах�дит» в ��д�р��ра��у и ��танавливает�� на ее �ерв�й �тр��е Sh���+F� Дей�твует та� же, �а� и F�, н� «�ере�ту�ает» чере� ��д�р��ра��ы или фун�ции F9 При щелч�е �� лю��й �тр��е �ценари� и нажатии F9 в эт�й �тр��е у�танавливает�� или � нее �ни�ает�� та� на�ывае�а� контрольная точ­ ка (т�ч�а ��тан�ва�. Пр���н �р��ра��ы ��танавливает��, �а� т�ль�� в�третит�� ���еченна� ��нтр�льн�й т�ч��й �тр��а. Эти� ��жн� в��� ��ль��вать��, е�ли нужн� �����треть, чт� �лучил��ь в ��н�ретн�й т�ч�е �р��ра��ы и не х�чет�� д�л�� и нудн� ���тр�чн� д��ирать�� д� эт�й т�ч�и. Дл� эт��� нужн� у�тан�вить ��нтр�льную т�ч�у и нажать F5 продолжение 
66 Глава 1. Windows Script Host Клавиша Действие F5 П��в�л�ет �р��ра��е вы��лн�ть�� на ��лн�й ���р��ти, ���а �на не �а� ��нчит��, �т�л�нувши�ь � �ерье�н�й �ши���й, или ���а ей не в�третит�� ��нтр�льна� т�ч�а C���+Sh���+F� Е�ли вы��лнение �р��ра��ы д�шл� д� вх�да в ��д�р��ра��у или фун�� цию, �ценарий вы��лн�ет�� д� тех ��р, ���а не �р�и��йдет в��врат и� ��д�р��ра��ы, ���ле че�� вы��лнение ��танавливает�� Просмотр и изменение значений переменных Отладчи� ���в�л�ет не т�ль�� вы��лн�ть �р��ра��у в ��ша��в�� режи�е, н� и �р���атривать и и��ен�ть ��держи��е �ере�енных внутри �ценари�. Эт� е�� �а��е ��ле�н�е �в�й�тв�. Щел�ните на �ун�тах �еню View (Вид�, Command Window (К��андн�е ��н��, чт��ы �т��ра�ил��ь ��н�, ���а�анн�е на ри�. 1 .� . К��андн�е ��н� ���в�л�ет вы��лн�ть три дей�тви�, �����ающие �тладить вашу �р��ра��у: y y М�жн� выве�ти �начение лю��й �ере�енн�й, на�рав в��р��ительный �на�, ���ле не�� и�� �ере�енн�й и нажав Ввод. На ри�. 1 .� �ыл� �а�р�шен� �начение �ере�енн�й num, и �тладчи� вывел 1. Рис. 1 .8 . Окно Command window позволяет просматривать и изменять значения переменных, а также выполнять вручную операторы программы. Окно стека вызовов — Call Stack, показывает порядок, в котором были вызваны подпрограммы и функции y y М�жн� и��енить �начение �ере�енн�й, на�рав ��ерат�р �ри�ваивани�, �а� ���а�ан� на ри�. 1 .�, �де и��ен�ет�� �начение �ере�енн�й num � 1 на 4. Эт�й в����жн��тью ��жн� в����ль��вать��, чт��ы ���йти �ши��у, д��ущенную �ценарие�, е�ли нужн� �р�д�лжить �тлад�у. Х�т� �а���т��тельн� и��енить Таблица 1.5 (продолжение)
Отладка сценариев 67 �р��ра��у, ���а идет �тлад�а, нев����жн�, �уте� и��равлени� �начени� �ере� �енных вы ��лучаете и� �еан�а �тлад�и д���лнительную инф�р�ацию и �р�� д�лжаете �тлад�у �р��ра��ы. y y М�жн� вы�вать лю�ую ��д�р��ра��у, фун�цию, �ет�д ��ъе�та или �в�й�тв�, на�рав ���твет�твующий ��ерат�р �р��ра��ы. Дл� вы��ва и �т��ражени� �на� чений фун�ции нужн� в����ль��вать�� в��р��ительны� �на��� (?�, на�ри�ер ? mid("ABC",2). Дл� вы��ва ��д�р��ра�� нужн� на�рать и�� ��д�р��ра��ы и �начени� лю�ых ар�у�ент�в. На ри�. 1.� вы�ывает�� ��д�р��ра��а shownumber � ар�у�ент�� num = 15. Просмотр окна стека вызовов — Call Stack О�н� C��� S���k, та�же ���а�анн�е на ри�. 1.�, — еще �дн� �ред�тв�, �����ающее �т�леживать внутреннюю ра��ту �ценари�. Дл� �т��ражени� эт��� ��на вы�ери� те �ун�ты �еню View (Вид�, Call Stack (Сте� вы��в�в�. Эт� ��н� выв�дит ��и��� и�ен лю�ых ��д�р��ра�� и фун�ций, и���ль�ующих�� в те�ущий ���ент вре� �ени. В верхней ча�ти ��и��а выв�дит�� и�� те�ущей ��д�р��ра��ы, �а ней �ле� дует и�� вы�вавшей ее ��д�р��ра��ы и та� далее, д� и�ени ��н�вн�й �р��ра��ы �ценари�. Пр����тр �те�а вы��в�в ����жет �ри �тлад�е �ценариев, вы�ывающих �н��� ��д�р��ра�� или и���ль�ующих ре�ур�ию. В�е эт� �тн��ит�� � техн�л��ии �р�� �ра��ир�вани�, ра���атривае��й в �лаве 4. М�жн� дважды щел�нуть на лю��й �а�и�и в ��не �те�а вы��в�в (C��� S���k�, и �тладчи� ���ажет т� �е�т� в ваше� �ценарии, �т�уда �ыла вы�вана нах�д�ща��� в ра��те ��д�р��ра��а. Эт� �ред�тв� �����ает уд��т�верить�� в т��, чт� �ценарий �р�х�дит чере� в�е �редна�наченные дл� не�� �� ваше�у �нению эта�ы, н� е�ли вы �ривы�ли � ��лн�фун�ци�нальны� �тладчи�а�, и�еющи��� в дру�их �р�ду�тах M���oso��, т� увидите, чт� у эт��� �тладчи�а �т�ут�твуют три важные фун�ции: y Нель�� вы�рать «�ледующий ��ерат�р дл� вы��лнени�», чт��ы и��енить и�е� ющий�� ��р�д�� вы��лнени� ��ерат�р�в (на�ри�ер, дл� ��х�да �р��ле�н�й ��ла�ти�. y Е�ли �ценарий �т�л�нет�� � �ерье�н�й �ши���й, �н, �а� ��ычн�, выв�дит ����� щение �� �ши��е и ��танавливает��. О��йти �р��ле�у в �тладчи�е нев����жн�. y Нель�� �треда�тир�вать �ценарий и �ри�а�ать �тладчи�у �ере�а�у�тить��. Нужн� выйти и� �тладчи�а и �а�у�тить е�� �н�ва. Ну, а че�� же вы �жидали �т �е��латн��� �р�ду�та? И в�е же, ���да нужн� и�� учить ��ведение �ценари� и�нутри, эт� �ред�тв� ��ле�н� держать ��д ру��й. ▼▼ Если вы помещаете в сценарий отладочные операторы вывода для отображения значений переменных, добившись работоспособности сценария, не удаляйте эти операторы, а закоммен- тируйте их. Тогда можно будет легко восстановить их, если позже придется снова заниматься отладкой сценария. Если у вас есть копия установленных программ Microsoft Word или Excel, можно разрабатывать сценарии, используя встроенную среду Visual Basic for Applications. Ее можно вызвать из строки меню, щелкнув на пунктах Разработчик (Tools), Visual Basic. Здесь вы не получите доступ к объ- Tools), Visual Basic. Здесь вы не получите доступ к объ- ), Visual Basic. Здесь вы не получите доступ к объ- Visual Basic. Здесь вы не получите доступ к объ- Basic. Здесь вы не получите доступ к объ- Basic. Здесь вы не получите доступ к объ- . Здесь вы не получите доступ к объ- екту WScript, но сможете отработать другие составляющие своего сценария в более мощной среде отладки и тестирования.
68 Глава 1. Windows Script Host ▼▼ Многие языки сценариев предоставляют специальные операторы, при встрече с которыми ак- тивизируется отладчик и останавливается выполнение сценария. В VBScript эту роль играет оператор stop. В Jscript для этого используется оператор debugger. Этот оператор работает как контрольная точка, за исключением того, что он встроен непосредственно в ваш сцена- рий и особенно удобен при отладке WSC-сценариев, предназначенных для создания объектов, которые можно будет применять в сценариях. Этот вопрос рассматривается в приложении G, которое может быть загружено с веб-сайта www.helpwin7. com/scripting. Где можно получить дополнительную информацию В Интернете ��держит�� �а��а инф�р�ации � �ценари�х. В ча�тн��ти, в��лне вер��тн�, чт� дл� лю����, �аду�анн��� ва�и �адани�, �редна�наченн��� дл� реше� ни� � ����щью �ценари�, найдет�� уже ���данный �ценарий, ��т�рый вы��лн�ет ��н�вную е�� ча�ть или в�е �адание цели���. Зна� �� эт��, вы ��жете �р����треть ве���айты, �еречи�ленные в та�л. 1 .6 . Таблица 1.6. Веб-ресурсы для Windows Script Host Веб-сайт или новостная группа Описание ���h���.m���oso��.�om�s���p������� Наи��лее ��лный и�т�чни� инф�р�ации дл� WSH в M���oso�� T��h��� S���p� C�����. В�люча� в M���oso�� T��h��� S���p� C�����. В�люча� M���oso�� T��h��� S���p� C�����. В�люча� T��h��� S���p� C�����. В�люча� T��h��� S���p� C�����. В�люча� S���p� C�����. В�люча� S���p� C�����. В�люча� C�����. В�люча� C�����. В�люча� . В�люча� ет ��др��ную д��у�ентацию, уче�н�е �����ие и �ри�еры www.h��pw��7.�om�s���p���g Ве���айт, � ��т�р��� ��жн� �а�ру�ить уче�ные �ценарии, �рив�ди�ые в данн�й �ни�е www.m���oso��.pub���.s���p���g.wsh М�жн� �р����треть и эт�т ве���айт, на ��т�р�� дают�� ра�личные и��равлени� и ��веты www.m���oso��.pub���.s���p���g.vbs���p� О�ще�твенна� н�в��тна� �ру��а, х��тин� дл� ��т�р�й �ред��тавл�ет�� ����анией M���oso��. В��лне ��дх�д�щее �е�т� дл� д��ычи инф�р�а� ции �� иде�х �� ���данию �ценариев и �у�ли�а� ции лю�ых, и�еющих�� у ва� в��р���в. Х�т� �де�ь ва� вр�д ли �удет дан �т�ыв или �ред��тавлена техниче��а� ��ддерж�а �� �т�р�ны ��трудни��в M���oso��, н� ���етители эт��� ����ще�тва ���ут ����дей�тв�вать ва�, �тветив на в��р�� или дав ��ле�ный ��вет Е�ли вы ��наружите �а�ие�ни�удь дру�ие ��ле�ные и�т�чни�и инф�р�ации, �а�ающие�� ���дани� �ценариев, дайте �не �нать, чер�нув �ару �тр�� в ���тевую �ни�у �� адре�у www.helpwin7.com/scripting.
Руководство по VBScript Ваше�у вни�анию �редла�ает�� введение в ��ы� �р��ра��ир�вани� V�S���p�. y Зде�ь вы ���на���ите�ь � ��н�ва�и �р��ра��ир�вани�. Е�ли у ва� уже е�ть ��ыт �р��ра��ир�вани�, т� �р��ра��ир�ванию на V�S���p� ��жн� научить�� д�в�льн� �ы�тр�. y Е�ли ва� раньше не �рих�дил��ь �ани�ать�� �р��ра��ир�вание�, не �т�ит ���рчать�� и���а т���, чт� те�а ва� не��н�тна. И�учите �ри�еры и �р�д�лжайте чтение. С� вре�ене� в�е �танет на �в�и �е�та. y Е�ли вы уже �на���ы � дру�и� ��ы��� �ценариев и ва� не нужн� и���ль��вать V�S���p�, � ни� в�е же �ледует ��на���ить��, чт��ы ра���рать�� в �ри�ерах, �рив�ди�ых в данн�й �ни�е. Введение в VBScript V�S���p� �вл�ет�� �в���дн� ра��р��тран�е��й вер�ией ра�ра��танн��� ����анией M���oso�� ��ы�а �р��ра��ир�вани� V�su�� ��s��, ���тавл�е��й в�е�те � W��dows S���p� Hos� (WSH�. Он �ра�тиче��и идентичен ��ы�у V�su�� ��s�� дл� �рил�же� V�su�� ��s�� дл� �рил�же� ��s�� дл� �рил�же� ��s�� дл� �рил�же� дл� �рил�же� ний (V�su�� ��s�� �o� App������o�s�, в�тр�енн��у в� �н��ие �рил�жени� M���oso�� дл� и���ль��вани� в �аче�тве ��ы�а �ценариев и �а�р���в. Не���тр� на т� чт� V�S���p� �вл�ет�� не���ль�� ��ле�ченн�й вер�ией ��ы�а V�su�� ��s��, �н ��ла� V�su�� ��s��, �н ��ла� ��s��, �н ��ла� ��s��, �н ��ла� , �н ��ла� дает в�е�и вычи�лительны�и в����жн��т��и, ��лн�ценн� ра��тает � и�ена�и файл�в и дата�и и ��жет ра��тать � внешни�и ��ъе�та�и. Х�т� �н не в ���т��нии выв�дить �л�жные диал���вые ��на и �еню, д��ту�ные ��лн�ценн��у W��dows� �рил�жению, �н в��лне ��равл�ет�� � �ред��тавление� ва� ����щи в у�равлении ����ьютер�� и авт��ати�ацией ��в�едневных �адач. Х�т� дл� на�и�ани� �ценари� ев ��жн� и���ль��вать �н�же�тв� дру�их ��ы��в, V�S���p� �удет �а�ечательны� вы��р��, �����ль�у ��ыт ра��ты � ни� ��жн� �удет �ерен��ить и� на�и�ани� �а�р���в и �р��ра�� дл� Wo�d и �x��� на ���дание �ценариев дл� W��dows, и на� Wo�d и �x��� на ���дание �ценариев дл� W��dows, и на� и �x��� на ���дание �ценариев дл� W��dows, и на� �x��� на ���дание �ценариев дл� W��dows, и на� на ���дание �ценариев дл� W��dows, и на� W��dows, и на� и на� ���р�т. В эт�й �лаве �ред�тавлен� введение в V�S���p� и ���а�аны е�� наи��лее важные �в�й�тва. Пред��ла�ает��, чт� вы х�т� �ы не�н��� �на���ы � �р��ра��ир�вание�. 2
70 Глава 2. Руководство по VBScript К�нце�ции �р��ра��ир�вани� �ал� в че� и��ен�ют�� �ри �ерех�де � �дн��� ��ы� �а на дру��й, ��эт��у е�ли и�еет�� ��ыт ра��ты � любым другим ����ьютерны� ��ы���, даже е�ли эт� �ыл �р��лушанный ���да�т� �ур� �� ���данию �а�р���в в Wo�d или �ур� �� Ф�ртрану � и���ль��вание� �ерф��арт в дале�их 1970�х ��� Wo�d или �ур� �� Ф�ртрану � и���ль��вание� �ерф��арт в дале�их 1970�х ��� или �ур� �� Ф�ртрану � и���ль��вание� �ерф��арт в дале�их 1970�х ��� дах, � ду�аю, чт� вы ��в�ите V�S���p� д�в�льн� �ы�тр�. О�ращайте вни�ание на иллю�трации, на�ывае�ые схемами. Они �ред�тавл�ют ����й �л��и ���тр�ени� �р��ра��, ��т�рые �удут и���ль��вать�� ва�и не�дн��ратн�. ▼) После чтения данной главы нужно посетить веб-сайт Microsoft TechNet по адресу www.microsoft. com/technet/scriptcenter. Это официальный сайт сценарных ресурсов. Там есть интерактивный справочник по самой последней версии VBScript, который можно просмотреть, следуя по пун- ктам Справочника по VBScript, расположенным в левой части страницы. На этом сайте имеются статьи, учебники, примеры сценариев и дополнительные средства, которые можно загрузить. Полноценный справочник по VBScript можно также загрузить с веб-сайта www.microsoft.com/ downloads, если задать на нем поиск по строке «Windows Script Documentation». Выберите за- грузку, включающую в заголовке номер версии, близкий к 5.6. Вы получите файл, который можно поместить на свой рабочий стол и просматривать по мере необходимости. Я вам насто- ятельно рекомендую это сделать! (Но с загрузкой, обозначенной как «Comprehensive JScript and VBScript Reference», лучше не связываться. Несмотря на многообещающее название, все это предназначено для использова- ния только из устаревшей версии Microsoft FrontPage.) При�еры �р��ра�� в данн�й �лаве д�в�льн� ла��ничны, �����ль�у �ни ра�� ра��таны дл� иллю�трации ��н�вных ��ерат�р�в и фун�ций V�S���p�. Б�лее ��ъе�ные �ри�еры �удут �рив�дить�� в �ледующих �лавах. ➔ Пр�вер�а ра��т�������н��ти �ценариев �� �ере их на�и�ани�, а та�же �а��� �т��тельн�е вне�ение в них и��енений в�ецел� �ривет�твует��. Ин�тру�ции �� �а�ру��е и и���ль��ванию уче�ных �ценариев даны на ве���транице www. helpwin7.com/scripting. Начне� � �ере�енных и ��н�тант. Переменные Переменные ��держат данные, ��т�рые нужн� ��ра��тать. Эти данные ���ут �ыть дата�и, ���а�ател��и вре�ени, чи�ла�и или �ери��и �р�и�в�льных �и�в�л�в (��т�рые ��ычн� на�ывают�� строками�. Стр��и �вл�ют�� наи��лее ра��р��тра� ненны� ти��� данных, � ��т�ры�и �рих�дит�� �тал�ивать�� — ваши �ценарии �удут, �а� �равил�, ра��тать � и�ена�и файл�в, людей, � ��держи�ы� файл�в и � дру��й ��д��н�й инф�р�ацией. Пере�енные хран�т�� в �а��ти ����ьютера и � ни� ��ращают�� �� имени. О�� ращение � �ере�енн�й �� и�ени ��уще�твл�ет�� дл� т���, чт��ы �����треть или и��енить ее �начение. Дл� �ри�ваивани� �ере�енн�й �начени� и���ль�ует�� �на� равен�тва (=�. Ра����три�, � �ри�еру, �ледующие �тр��и ��да V�S���p�: FullName = "Sue Smith" Age=40
Введение в VBScript 71 К��да интер�ретат�ру ��ы�а V�S���p� в�тречают�� эти ���анды, �н ��хран�ет �тр���в�е �начение "Sue Smith" в �ере�енн�й FullName, а цел�чи�ленн�е �наче� ние 40 — в �ере�енн�й Age. ▼) Хотя настоящее подробное рассмотрение этого вопроса отложено до главы 3 «Создание сце- нариев и работа с объектами», переменные могут также содержать объекты, представляющие собой блоки данных, управляемые программными дополнениями к VBScript. Именно объекты придают VBScript настоящую силу, поскольку они позволяют использовать возможности других системных программ по выполнению сложных задач, таких как отправка почтовых сообщений, запись файлов и установка принтеров на компьютер. На и�ена, ��т�рые ��жн� и���ль��вать дл� �ере�енных, на�ладывает�� р�д ��раничений: y И�ена д�лжны начинать�� � алфавитн��� �и�в�ла и ���ут ��держать т�ль�� �у�вы, цифры и �на� ��дчер�ивани� ( _ � . y y И�ена не ���ут ��держать внутренние �р��елы, т�ч�и или дру�ие �на�и �ун� �туации. На�ри�ер, и�ена big house и House.Big дл� �ере�енных не�рие�ле�ы. y И�ена �� длине не д�лжны �ревышать 255 �и�в�л�в. (Ут�чнение: данные ��раничени� ра��р��тран�ют�� т�ль�� на и�ена �ере�ен� ных, а не на инф�р�ацию, ��т�ра� ��жет в них ��держать��.� Инф�р�аци� ��жет �ыть ���ещена в �ере�енные не���ред�твенн� вашей �р�� �ра���й (�а� эт� �делан� в �ри�ере Age = 40�, �на ��жет �ыть �читана и� файл�в или ��жет �ыть и�влечена или вычи�лена на ��н�ве дру�их �ере�енных. В ��льшин�тве дру�их ��ы��в �р��ра��ир�вани� �еред и���ль��вание� �ере� �енных нужн� ��редел�ть ти� их данных, �удь т� �тр��а, цел�е чи�л�, ��ъе�т, дата или чт��ни�удь еще. Н� V�S���p� решает в��р�� ти�а �ере�енн�й �а���т��тельн�, у�р�ща� те� �а�ы� жи�нь �р��ра��и�та. В V�S���p� в�е �ере�енные �тн���т�� � �дн��у ��н�вн��у ти�у данных, ��т�рый на�ывает�� варьирующимся (v�������. Интер�ретат�р V�S���p� ��нвертирует данные и� �дн��� ти�а в дру��й �� �ере не��х�ди���ти. На�ри�ер, �ри ���ыт�е ��ъединени� �ере�енн�й, ��держащей �тр��у, � �ере�енн�й, ��держащей чи�л�, V�S���p� �ре��ра�ует чи�л� в е�� те��т�� в�е �ред�тавление, а �ате� ��ъедин�ет две �тр��и. Е�ли чи�л� �ри�авл�ет�� � дате, V�S���p� �ри�авл�ет � дате ��личе�тв� дней, равн�е эт��у чи�лу и т. д . Константы Неудивительн�, чт�, ���ла�н� ����ьютерн�й тер�ин�л��ии, чи�ла и �начени�, на�ранные в �р��ра��е литеральн� (�у�вальны� ��ра����, ���ут на�ывать�� ли­ тералами, н� чаще в�е�� их на�ывают константами. При�ер�� ��н�танты ��жет ���лужить чи�л� 40 и� �редыдуще�� �ри�ера. Он� на�ывает�� чи�л�в�й ��н�тан� т�й, �����ль�у ее �начение �вл�ет��... чи�л��. V�S���p� ���в�л�ет на�ирать четыре ти�а �начений ��н�тант: чи�л�вые (Num�����, �тр���вые (S����g�, даты (D���� и �улевы (�oo�����. В�т их �рат��е ��и�ание: y y Значени� чи�л�вых ��н�тант вв�д�т�� � и���ль��вание� цифр и, чт� не���� �ательн�, � и���ль��вание� де��тичн�й т�ч�и и (или� �на��в �лю� (+� или
72 Глава 2. Руководство по VBScript �ину� (-� . В �аче�тве �ри�ер�в ��жн� �риве�ти чи�л�вые ��н�танты 40, -20 и 3.14159. За��тые в длинных чи�лах ра��тавл�ть нель��, на�ри�ер �а�и�ь вида 1,234 и���ль��вать не ра�решает��. В�е�т� эт��� нужн� �а�и�ать 1234. y y Стр���вые ��н�танты вв�д�т�� �а� те��т�вые �и�в�лы, ���ещенные в �авыч�и (""�. М�жн� �риве�ти �ледующие �ри�еры: "ABC" и "Время настало". Е�ли нуж� н� ���е�тить �авыч�и внутри �тр��и, их �ледует удв�ить. На�ри�ер, ��н�танта, на�ранна� �а� "ABC""DEF", и�еет �начение ABC"DEF. y y Значени� даты вв�д�т�� � и���ль��вание� ф�р�ата W��dows, �ри�ен�е���� дл� вы�ранн�й ва�и л��али�ации (�траны�, и �а�лючают�� в �и�в�лы ре� шет�и. В США дл� у�а�ани� даты 3 �нвар� 2002 ��да ��жн� и���ль��вать �а�и�ь #1/3/2002#. В ��льшей ча�ти в�е�� ��тальн��� �ира та�а� �а�и�ь �удет �ред�тавл�ть дату 1 �арта 2002 ��да. (Чт��ы решить, �а� и�енн� нужн� ин� тер�ретир�вать ��н�танту даных та���� вида, V�S���p� и���ль�ует на�тр�й�и л��али�ации, ��т�рые �ыли �деланы в Панели управления W��dows в ра�деле Язык и региональные стандарты (R�g�o��� ��d L��gu�g� Op��o�s��. М�жн� та�же и���ль��вать длинные ф�р�аты данных. На�ри�ер, �дина��в� д��у�ти�ы #January 3, 2001# и #3 January, 2001#. Е�ли вы не в��ражаете �р�тив на��ра та�их ��н�тант, лучше и���ль��вать длинный ф�р�ат данных, �����ль�у �н ��лее �дн��начен, нежели �рат�ий ф�р�ат. Та�же учтите, чт� е�ли ��д у�а�ан дву�� цифра�и, V�S���p� интер�ретирует �а�и�и �т 00 д� 29 �а� �т 2000 и д� 2029, а �а�и�и �т 30 д� 99 �а� �т 1930 и д� 1999. Лучше в�е же у�а�ывать ��д ��лн��тью, чт��ы в�е �ыл� ��н� и ��н�тн� и ва�, и интер�ретат�ру V�S���p�. y y К�н�танты вре�ени д�лжны ��н�вывать�� на 24�ча��в�й ш�але или д�лжны в�лючать те��т, ут�чн�ющий вре�� д� и ���ле ��лудн� — AM или PM, �а� в #22:30:10# или в #10:30:10 PM#. y y Дату и вре�� ��жн� та�же ��ъедин�ть в �дн�й ��н�танте, �а� в �ледующе� �ри�ере: #January 3, 2001 22:30:10#. y y Булевы �начени� ���ут вв�дить�� в виде �л�в True и False. Поименованные константы Ин��да ���дают�� та�ие �ценарии, в ��т�рых литеральные �начени� и�рают ве�ь�а важную р�ль. На�ри�ер, в �ценарии, ��т�рый удал�ет в�е вре�енные файлы �тар� ше 30 дней, чи�л� 30 д�лжн� �де�т� фи�урир�вать, в����жн� даже в не���ль�их �е�тах. Эт� ��жет вы�л�деть �ледующи� ��ра���: for each file in folder if AgeOf(file) > 30 then file.Delete next Зде�ь в чи�ле 30 нет ниче�� не��ычн���, и у ва� ��жет ���вить�� желание на� �и�ать �ценарий та�и� ��ра���, чт��ы в���лед�твии ��жн� �ыл� и��енить �р�� хранени� �у��ра, не выи��ива� в�е ���влени� чи�ла «30» в эт�� файле �ценари�. М�жн� ���е�тить чи�л� 30 в �ере�енную, ��т�рую �ате� и���ль��вать �� в�е�у �ценарию:
Введение в VBScript 73 MaximumAge = 30 . . . for each file in folder if AgeOf(file) > MaximumAge then file.Delete next Преи�уще�тва �а�лючают�� в т��, чт� у�тан�вить �начение MaximumAge ��ж� н� т�ль�� �дин ра�, в �а��� начале �ценари�, и и���ль��вать �ере�енную ве�де �де эт� нужн�. Е�ли ��тре�ует�� и��енить �начение, �ридет�� �треда�тир�вать т�ль�� �ервый ��ерат�р. Кр��е т���, ��и�ен�ванные �начени� у�р�щают ��ни� �ание �ценари�, �ред��тавл�� �ведени� � ��держи���, че�� не делают чи�л�вые �начени�. Н� �ере�енные ���дают�� в�е же дл� т���, чт��ы �ен�ть �в�и �начени�, а эт� ��н�ретн�е �начение не �редна�начен� дл� и��енени� в �р�це��е вы��лнени� �ценари�. Ка� и ��льшин�тв� дру�их ��ы��в �р��ра��ир�вани�, V�S���p� �ред�� V�S���p� �ред�� �ред�� �тавл�ет в����жн��ть ��редел�ть поименованные константы, ��т�рые решают эту диле��у. В V�S���p� ��ерат�р const MaximumAge = 30 ��редел�ет �начение, на�ванн�е MaximumAge, ��т�р�е ��жн� и���ль��вать �� и�е� ни �� в�е�у ��тальн��у �ценарию и ��т�р�е равн� 30. Сл�в� const ��начает, чт� �начение не ��жет �ыть и��енен� �р��ра���й в� вре�� ее вы��лнени�. П�и�ен�� ванные ��н�танты ���ут �ыть ��ределены дл� лю�ых ранее ра����тренных ти��в �начений: даты, вре�ени, чи�ел и �тр��. При и���ль��вании ��и�ен�ванных ��н�тант в ваших �ценари�х вы �и�нали� �ируете лю���у, �т� читает �ценарий, � т��, чт� эт� �начение и�рает важную р�ль и не ��длежит и��енению, и вы и�вле�аете ��ль�у и� т���, чт� та�а� ��н�танта ��ределена в �дн�� �е�те, а и���ль�ует�� �ра�у в не���ль�их �е�тах. Лучше в�е�� ��ределить в�е ��н�танты, и���ль�уе�ые в ваших �ценари�х в �а��� начале файла �ценари�, чт��ы их �ыл� ле�че найти. ▼) Слово «константа» часто используется для описания как литералов, таких как 30, так и по- именованных констант, таких как MaximumAge. Это вносит небольшую путаницу, но именно так это формулируется в документации по VBScript, разработанной Microsoft, и в сообщениях об ошибках, выдаваемых интерпретатором этого языка. При �а�у��е ваше�� �ценари� в не� уже и�еет�� не���ль�� ��н�тант, ��реде� ленных интер�ретат�р�� V�S���p�. На�ри�ер, эт� ��н�танты vbMonday, vbTuesday и т. д ., ��т�рые �ред�тавл�ют дни недели. Их ��жн� и���ль��вать �ри ра��те �� �начени��и даты и вре�ени. Не��т�рые и� этих �ред��ределенных ��н�тант �удут ра����трены в данн�й �лаве, а их ��лный �еречень ��жн� найти в у����нутых выше интера�тивных ��рав�чни�ах �� V�S���p�. П��ле и�учени� ��ределений �ере�енных и �начений ��жн� ра����треть, �а� � ни�и ��жн� ра��тать � ����щью ��ерат�р�в и выражений.
74 Глава 2. Руководство по VBScript Операторы и выражения Пере�енные V�S���p� ���ут ��ра�атывать�� � ����щью операторов дл� вы��лне� ни� �ате�атиче��их или �тр���вых ��ераций. На�ри�ер, ��ерат�р + ��ладывает чи�л�вые �ере�енные. Дл� вычи�лени� в��ра�та Сью С�ит в �ледующе� ��ду ��жн� в����ль��вать�� �ледующи� ��ерат�р�� V�S���p�: age = age+1 Эт� ��начает, чт� нужн� в��ть �ере�енную age, �ри�авить � ее �начению 1 и ��� хранить ре�ультат в т�й же �ере�енн�й age. При и���ль��вании � �ере�енны�и, ��держащи�и �тр���вые �начени�, ��е� рат�р + объединяет �тр��и (� ��нцу �дн�й �тр��и �ри��един�ет дру�ую �тр��у�. На�ри�ер, firstname = "Sue" lastname = "Smith" fullname = firstname + " " + lastname ��ъедин�ет "Sue", �р��ел (����наченный �авыч�а�и� и "Smith", а �ате� ��хран�ет ре�ультат (Sue Smith� в �ере�енн�й fullname. В �редыдуще� �ри�ере � та�же ���у на�и�ать та�ую �тр��у ��да: fullname = firstname & " " & lastname V�S���p� дает в����жн��ть и���ль��вать �и�в�л & в �аче�тве т�чн� та���� же ������а ��ъединени� �тр��. С� �тр��а�и ��ерат�ры & и + делают а���лютн� �ди� на��вые вещи, н� � т�ч�и �рени� х�р�ше�� �тил� �р��ра��ир�вани� ��ерат�р & ����н�ет дл� тех, �т� читает вашу �р��ра��у, чт� ��ладывают�� �тр��и, а не чи�ла. Кр��е эт���, ��ерат�р & ��ладает еще �дни� �реи�уще�тв��: �н ��жет и���ль��� вать�� � �ере�енны�и и выражени��и лю���� ти�а. О�ерат�ры ��ру��ир�ваны в три �ате��рии: y Арифметические операторы — в�лючают +, -, * (у�н�жение� и / (деление�. y Операторы сравнения — на�ри�ер, > (��льше че�� и <= (�еньше че� или равн��. y Логические операторы — на�ри�ер, AND, OR и NOT. О�ерат�ры �равнени� и л��иче��ие ��ерат�ры выдают не чи�л�вые или �тр���� вые, а булевы �начени� (True или False�. Эти ��ерат�ры ча�т� и���ль�уют�� дл� и��енени� на�равлени� вы��лнени� �ценари�, �а� в �ледующе� �ри�ере: ifAge>40then write "Вы не стареете, а набираетесь мудрости" end if С�четание �начений и ��ерат�р�в на�ывает�� выражением. В�т �ри�еры вы� ражений: Выражение Значение выражения 3+3 Чи�л� 6 2<20 Булев� �начение True "A" & "B" Стр��а "AB" Date() + 1 Завтрашн�� дата
Введение в VBScript 75 Каждый и� ��ерат�р�в в �ажд�й �ате��рии ��ладает превосходством или �ри� �ритет��, ��редел�ющи� ��р�д��, в ��т�р�� вычи�л�ют�� ча�ти выражени�. П�� р�д��, ��редел�е�ый �рев��х�д�тв�� внутри вычи�лени�, и�рает весьма важную р�ль. На�ри�ер, �начение выражени� 1+3*3 равн� 10, а не 12. Следу� ���лашению, и���ль�уе���у �ате�ати�а�и, у�н�жение и�еет ��лее вы���ий �ри�ритет, че� �л�жение. V�S���p� �начала вычи�л�ет 3*3, а �ате� �ри�авл�ет ре�ультат � 1. (Ка� вы, наверн�е, ���ните, эт�т в��р�� ра���атривал�� в ш��ле на ур��ах ал�е�ры.� Чт��ы �а�тавить V�S���p� вычи�л�ть выражени� в дру��� ��р�д�е, и���ль�уют�� �����и. На�ри�ер, вычи�ление выражени� (1+3)*3 �риведет � ре�ультату 12. Вы� ражени� в �����ах вычи�л�ют�� в �ервую �чередь. Ин��да выражени� ��держат ��ерат�ры и� не���ль�их �ате��рий. На�ри�ер, �ледующее �равнение ��держит �а� ариф�етиче��ий ��ерат�р, та� и ��ерат�р �равнени�: ifA+B>Cthen... В данн�й �итуации вычи�лени� � ариф�етиче��и�и ��ерат�ра�и �р�в�д�т�� в �ервую �чередь, а �ате� �р�в�д�т�� вычи�лени� � ��ерат�ра�и �равнени�, а вы� чи�лени� � ��ерат�ра�и like, and и or �р�в�д�т�� в ���леднюю �чередь. В�е ��ера� т�ры �равнени� и�еют �дина��вый �ри�ритет, т� е�ть �ни вычи�л�ют�� в ��р�д�е �лед�вани� �лева на�рав�. О�ерат�ры V�S���p� �еречи�лены в та�л. 2 .1 –2 .3 . Таблица 2.1. Арифметические операторы в порядке убывания приоритета Оператор Назначение Пример Результат Унарн�е �трицание -5 -5 ^ В��ведение в �те�ень 2^5 32 * У�н�жение 2*3 6 / Деление 9/2 4,5 \ Цел�чи�ленн�е деление 9\2 4 Mod Цел�чи�ленный ��тат�� �т делени� 9 mod 2 1 + Сл�жение 3+5 8 - Вычитание 8-5 3 & О�ъединение �тр�� " abc" & "de" "abcde" О�ерат�р + та�же ��ъедин�ет �тр��и, н�, �а� уже у���инал��ь, лучше выра� ��тать у �е�� �ривыч�у и���ль��вани� + дл� чи�ел, а & дл� �тр��. И���ль��вание ��ерат�ра & делает ��н�тнее вашу �р��ра��у, ра��та ведет�� не � чи�ла�и, а �� �тр��а�и.
76 Глава 2. Руководство по VBScript Таблица 2.2. Операторы сравнения Оператор Назначение Пример Результат = Равн� 3=4 False <> Не равн� 3<>4 True < Меньше че� 3<4 True > Б�льше че� 3>4 False <= Меньше че� или равн� 3<=4 True >= Б�льше че� или равн� 3>=4 False is Э�вивалентн��ть ��ъе�т�в obj1 is obj2 False О�ерат�ры �равнени� и���ль�уют�� �лавны� ��ра��� дл� т���, чт��ы дать в��� ��жн��ть �ценарию вы�ирать ра�ные дей�тви� в �ави�и���ти �т ���т��тель�тв. На�ри�ер, �ценарий ��жет вы�рать удаление файла, е�ли �� вре�ени е�� ���дани� �р�шл� ��лее 24 ча��в: file_hours = DateDiff('h ', file.DateLastModified, Now()) if file_hours > 24 then file.Delete end if В �ерв�й �тр��е ��редел�ет��, ���ль�� ча��в �р�шл� � тех ��р, ���да интере� �ующий на� файл �ыл ���дан или и��енен. Зате� �равнение file_hours > 24 дает ре�ультат True, е�ли �ере�енна� file_hours и�еет �начение ��льше 24. Таблица 2.3. Логические операторы в порядке убывания приоритета Оператор Назначение Пример Результат not Отрицание not(3=4) True and К�нъюн�ци� (3=4)and(3<4) False or Ди�ъюн�ци� (3=4)or(3<4) True xor И��лючение (ра�личн��ть� true xor true False eqv Э�вивалентн��ть (�дина��в��ть� false eqv false True imp И��ли�аци� (�дина��в�е �начение или вт�р�е �начение равн� True� false imp true True Л��иче��ие ��ерат�ры и���ль�уют�� дл� ��ъединени� �тдельных �равнений, �редна�наченных дл� ��ределени� ��лее �л�жных �итуаций. На�ри�ер, «Е�ли файл �тарше 3 дней или и�� у файла anything.TMP, т� файл �ледует удалить». ▼) Опытным программистам: логические операторы могут использоваться с булевыми или число- выми значениями. С числовыми значениями они осуществляют поразрядные операции, а с бу- левыми значениями — логические.
Управление ходом выполнения сценария 77 Е�ли в�е эт� ва� в н�вин�у, не �т�ит �ереживать. (Фа�тиче��и, ни � �а�, ни �т��ни�удь в ����ании M���oso�� та� и не �нае�, �де ��жн� �ри�енить ��ерат�р imp.� В �ри�ерах, �рив�ди�ых в данн�й �лаве, и���ль�уют�� ��лее �ра�тичные ��ерат�ры. А �ейча� нужн� �а���нить, чт� дл� �ажд�й ��н�вн�й �ате�атиче���й фун�ции е�ть �в�й ��ерат�р, и �ри не��х�ди���ти в�е�да ��жн� ��ратить�� � эти� та�лица�, �де найдет�� в�е не��х�ди��е. Автоматическое преобразование Ка� уже у���инал��ь, е�ли в �дн�� выражении ��четают�� �начени� �ере�енных или ��н�тант ра�н��� ти�а, V�S���p� �ытает�� �риве�ти �начени� � �рие�ле�ы� ти�а�. Х�т� у�н�жение даты на чи�л� ��ы�ла не и�еет (���ль�� �удет, е�ли 2 у�� н�жить на 4 ав�у�та?�, ��ерат�ры �л�жени� и вычитани�, �а� ���а�ан� в та�л. 2.4, ра��тают в��лне �ред��а�уе��. Таблица 2.4. Автоматическое преобразование для сложения и вычитания Операция Результат Чи�л� + или – Стр��а Е�ли �тр��а �ред�тавл�ет ����й чи�л�, �на �ре��ра�ует�� в чи�� л�, и в ре�ультате ��лучает�� чи�л�. В �р�тивн�� �лучае �р�� �ра��а ��танавливает�� и выдает�� ����щение �� �ши��е Дата (вре��� + или – Чи�л� Дата. Цела� ча�ть чи�ла �ри�авл�ет�� � дате в �аче�тве ��личе� �тва дней. Лю�а� др��на� ча�ть чи�ла д��авл�ет�� в виде ��еще� ни� вре�ени, �а� др��на� ча�ть дн� (1 �е�унда = 0,0000115741; 12 ча��в = 0,5� Дата + или – Стр��а Е�ли �тр��а �ред�тавл�ет ����й чи�л�, �на �ревращает�� в чи�� л�, и в ре�ультате ��лучает�� дата. В �р�тивн�� �лучае �р�и�� х�дит �ши��а В�е, чт� у��дн� & В�е, чт� у��дн� Значени� лю���� ти�а �ревращают�� в �тр��и, ��т�рые �ате� ��ъедин�ют�� Управление ходом выполнения сценария Х�р�ш�, чт� те�ерь вы уже ��жете �ри�ваивать �ере�енны� �начени� и вы� ��лн�ть вычи�лени�, н� на�т��ща� ��щн��ть �р��ра��ир�вани� �а�лючает�� в �н����ратн�� вы��лнении ��ераций, и в вы��лнении ра�личных дей�твий, ���да т��� тре�уют у�л�ви�. Зде�ь в�ту�ает в �илу у�равление �ценарие�. В�е�т� ���лед�вательн��� вы��лнени� �ажд�й �тр��и �р��ра��ы �верху вни�, ��жн� � ����щью условных операторов у�а�ать, �а� �р��ра��а д�лжна реа�ир�вать на ра�личные ��ладывающие�� �итуации. Операторы цикла ���в�л�ют вы��лн�ть ��н�ретные ��ерат�ры �н����ратн�. В ��ерат�рах ци�ла �а�и�ан� не т�ль�� �а� у�равл�ть ��вт�р�ющей�� �адачей, н� та�же и �а� у�нать, ���да �а�у�тить и ���да ��тан�вить �адачу.
78 Глава 2. Руководство по VBScript ▼) В данной главе и в документации Microsoft можно увидеть, что в некоторых случаях операто- Microsoft можно увидеть, что в некоторых случаях операто- можно увидеть, что в некоторых случаях операто- ры пишутся с большой буквы. Регистр символов значения не имеет; VBScript не чувствителен к регистру. Например, операторы IFA=3THEN ifA=3Then Ifa=3then имеют для VBScript одинаковый смысл. По соглашению, которого придерживаются в Microsoft, операторы VBScript пишутся с большой буквы, но я считаю, что это выглядит довольно странно и приводит к лишним хлопотам, поэтому я не собираюсь использовать большие буквы в боль- шинстве слов VBScript, используемых в данной главе. С большой буквы имеет смысл писать длинные имена, такие как CreateTextFile, просто для того, чтобы их легче было читать, поэтому, как вы увидите в данной главе, я склоняюсь к на- писанию с большой буквы имен функций, объектов, методов и свойств. Следует помнить, что регистр букв совершенно ничего не значит для VBScript. Благодаря применению букв разных регистров сценарии просто легче читаются. Оператор If ... Then О�ерат�р If ... Then �р�вер�ет т�, чт� на�ывает�� условием, и е�ли эт� у�л�вие ���людает�� (вычи�л�ет�� в и�тинн�е �начение�, вы��лн�ет �дин или не���ль�� ��ерат�р�в V�S���p�. Ра����три� �ледующий �ри�ер: ' Файл примера script0201.vbs if Hour(Time()) < 12 then MsgBox "Сейчас уже утро, пора вставать!" end if У�л�вие� �лужит выражение, ��т�р�е ��жет �ыть �р�верен� � ��ределение� е�� и�тинн��ти или л�жн��ти (��u� или ���s��. В �редыдуще� �ри�ере у�л�ви� е� �лужит выражение Hour(Time()) < 12. Зде�ь, в V�S���p�, Time()�ред�тавл�ет те�ущее вре�� �ут��, а Hour(Time())�ред�тавл�ет те�ущий ча� �ут�� — чи�л� �т 0 д� 23. С ��лун�чи и д� ��лудн� эт� чи�л� �еньше 12, ��эт��у, ���да у�л�вие Hour(Time()) < 12 �вл�ет�� и�тинны�, �ценарий выв�дит ����щение «Сейча� уже утр�, ��ра в�тавать!» При на�ту�лении ��лудн� �начение ча�а �тан�вит�� равны� или ��льши� 12, ��эт��у ����щение не выв�дит��. На ри�. 2.1 ���а�ан�, чт� � уви� дел, �а�у�тив эт�т �ценарий утр��. Рис. 2 .1 . Сообщение «Сейчас уже утро», выводимое, когда значение времени суток меньше 12 часов О�ерат�ры If ... Then ���ут у�равл�ть ��ведение� ваших �ценариев на ��н�ве лю�ых у�л�вий, ��т�рые ���ут �ыть �а�и�аны в виде ����инации �ере�енных,
Управление ходом выполнения сценария 79 ��ерат�р�в и фун�ций V�S���p�, выдающих ре�ультат в виде �улев��� �начени� (true или false�. О�ерат�р If ... Then и�еет р�д ра�н�видн��тей, �����ающих ��равл�ть�� � ��� лее �л�жны�и �итуаци��и. В���ервых, ���да �ри и�тинн��ти у�л�ви� нужн� и���ль��вать т�ль�� �дин ��ерат�р, ве�ь ци�л ��жн� ���е�тить в �дн�й �тр��е: if Hour(Time()) < 12 then MsgBox "Сейчас уже утро, пора вставать!" К��да �ри ���людении у�л�ви� тре�ует�� и���ль��вать ��лее �дн��� ��ерат�ра, нужн� в����ль��вать�� вер�ией If...End If. С� �л�ва Then в ��нце �тр��и начинает�� �ру��а ��ерат�р�в, вы��лн�е�ых �ри ���людении у�л�ви�, а �л�ва�и End If ��� �ечает�� ��нец �ру��ы ��ерат�р�в. Ра����три� �ри�ер: if Hour(Time()) < 12 then MsgBox "Доброе утро!" runreport "Сегодняшние дела" DeleteTemporaryFiles end if В эт�� �ри�ере, е�ли �ценарий �а�у��ает�� д� ��лудн�, ��ерат�р if �а�у��ает три ��ерат�ра, ра���л�женных �ежду if и end if. Е�ли нужн� вы��лнить не���ль�� ��ерат�р�в �ри ���людении у�л�ви�, н� та�же нужн� вы��лнить не���ль�� дру�их ��ерат�р�в �ри не���людении эт��� у�л�ви�, ��жн� в����ль��вать�� вер�ией If...Then...Else: if условие then операторы vbscript, выполняемые при соблюдении условия else операторы vbscript, выполняемые при несоблюдении условия end if При вы��лнении �ценари� вы��лн�ет�� т�т или ин�й на��р ��ерат�р�в. Ра�� ���три� �ри�ер: ' Файл примера script0202.vbs if Hour(Time()) < 12 then MsgBox "Доброе утро" else MsgBox "Добрый день" end if Е�ли в �л��е Else и���ль�ует�� т�ль�� �дин ��ерат�р, е�� ��жн� ���е�тить в т�й же �тр��е, чт� и else, не и���ль�у� �л�в� if. Ра����три� четыре в����жных варианта ра���л�жени�: if условие then операторы . . . else операторы . . . end if if условие then операторы . . .
80 Глава 2. Руководство по VBScript else оператор if условие then оператор else ' учтите, слово else должно быть в конце операторы 'строки . . . end if if условие then оператор else оператор И на��нец, ин��да ��наруживает��, чт� �дн��� �л��а Else �вн� нед��тат�чн�. Еще в �дн�� варианте ��ерат�ра If и���ль�ует�� эле�ент ElseIf. При�ен�� ElseIf, в �дн�� длинн�� ��ерат�ре ��жн� �р�верить �ра�у не���ль�� у�л�вий: if условие then операторы vbscript elseif еще_одно_условие then другие операторы vbscript elseif и_еще_одно_условие then и еще ряд операторов else последний набор операторов end if В данн�� �лучае ���ть вы��лн�ет�� т�ль�� �дин и� этих на��р�в ��ерат�р�в — т�т, ��т�рый �тн��ит�� � �л��у, у ��т�р��� �ервы� вы��лнит�� условие. Е�ли ни �дн� и� у�л�вий не �удет вы��лнен�, �удет �а�ущен ���ледний ��ерат�р �л��а Else. При и���ль��вании ElseIf �ри�ен�ть ф�р�ат «в�е в �дн�й �тр��е» нель��. Учтите, чт� ��ерат�р If ��жет �ыть та�же вл�жен в дру�ую ��лее �л�жную �тру�туру: if filetype = " .EX E" then if filename = "WINWORD" then MsgBox "Файл является программой WINWORD.EXE " else MsgBox "Файл является какой-то другой программой" end if else MsgBox "Это какой-то другой тип файла" end if Зде�ь �ри�ут�твует «внутренний» ��ерат�р If, ��т�рый вы��лн�ет�� т�ль�� в т�� �лучае, ���да �ере�енна� filetype и�еет �начение " .�X �" . ▼▼ При использовании вложенных операторов If заниматься отладкой сценария и разбираться в нем будет проще, если записывать содержимое каждого последующего оператора If с от- Ifсот- с от- ступом, как это сделано в предыдущем примере. VBScript не реагирует на отступы, но они облегчают чтение сценария. Оператор Select Case Пред��л�жи�, чт� е�ть ра�ные ��ерат�ры, ��т�рые нужн� вы��лн�ть в �ави� �и���ти �т дн� недели. И� �редыдуще�� ра�дела и�ве�тн�, чт� дл� вы��лнени� �а�����ни�удь фра��ента ��да V�S���p� в �ави�и���ти �т дн� недели ��жн� в���
Управление ходом выполнения сценария 81 ��ль��вать�� �ерией ��ерат�р�в If и ElseIf. На�ри�ер, �ере�енн�й DayNumber ��жн� �ри�в�ить чи�л�в�е �начение (и���ль�у� ��н�танты vbMonday, vbTuesday и т. д .�, ���твет�твующее дню недели. Т��да ��жн� �удет в����ль��вать�� длинны� ��ерат�р�� If дл� ��ра��т�и �ажд��� в����жн��� �луча�: DayNumber = Weekday(Date()) if DayNumber = vbMonday then MsgBox "Понедельник, футбольный вечер по телевизору" elseif DayNumber = vbTuesday then MsgBox "Вторник, занятия по музыке" elseif DayNumber = vbWednesday then MsgBox "Среда, иду в кино" elseif DayNumber = vbThursday then ... (и так далее) end if Н� е�ть ��лее �р��т�й ������. К��да нужн� вы��лнить на��р ��ерат�р�в на ��н�ве �а�����ни�удь �дн��� ��ецифиче����� �начени�, ��т�р�е ��жет �рин�ть �ере�енна� или выражение, ��льше ��д�йдет ��ерат�р Select Case. Ра����три� �ри�ер: ' Файл примера script0203.vbs DayNumber = Weekday(Date()) select case DayNumber case vbMonday: MsgBox "Понедельник, футбольный вечер по телевизору" case vbTuesday: MsgBox "Вторник, занятия по музыке" case vbWednesday: MsgBox "Среда, иду в кино" case vbThursday: MsgBox "Четверг, рыбалка!" case vbFriday: MsgBox "Пятница, вечеринка!" case else: MsgBox "Расслабься, конец недели!" end select При вы��лнении ��ерат�ра Select Case V�S���p� ���трит на �начение DayNumber и вы��лн�ет т�ль�� те ��ерат�ры, ��т�рые нах�д�т�� �ра�у же �а �дни� ��в�ада� ющи� эле�ент�� Case. П��ле эле�ента Case ��жн� ���тавить ��лее �дн�й �тр��и ��ерат�ра, �л�жные ��ерат�ры, в�люча� If...Then, и дру�ие ��н�тру�ции у�рав� лени�. М�жн� та�же у�а�ать эле�ент Case Else, чт��ы �н �лужил л�вуш��й, е�ли �начени� выражени� Select Case не �удет ���твет�тв�вать ни �дн��у и� �ере� чи�ленных �начений. В �риведенн�� �ри�ере Case Else �ани�ает�� ��ра��т��й �у���ты и в���ре�ень�. ▼▼ Функция Weekday возвращает числа в диапазоне от 1 до 7, чтобы показать день недели от вос- Weekday возвращает числа в диапазоне от 1 до 7, чтобы показать день недели от вос- возвращает числа в диапазоне от 1 до 7, чтобы показать день недели от вос- кресенья до субботы. Не нужно помнить, что означает 1, воскресенье или понедельник или что- нибудь еще. Для нашего удобства VBScript включает предопределенные константы с именами vbSunday, vbMonday, vbTuesday и т. д ., которые можно использовать вместо чисел. Константы рассматривались в начале этой главы. Не���тр� на в�ю �в�ю эффе�тивн��ть и и��щн��ть, ��ерат�р Select Case не ��� жет ��равить�� � �ажд�й альтернативн�й �итуацией. Е�� дей�твие ��раничивает�� �адача�и, �де решение, �� ��т�р��у делает�� вы��р, �ави�ит �т �равнени� един� �твенн��� у�а�анн��� �начени�, на�ри�ер Daynumber = vbWednesday или Username = "Adminisnrator".
82 Глава 2. Руководство по VBScript Е�ли решение �ави�ит �т диа�а��на �начений и е�ли вы не ��жете �р��т� �ере� чи�лить в�е �начени�, ��т�рые д�лжны ���твет�тв�вать, а та�же е�ли в �рин�тие решени� в�влечен� ��лее �дн�й �ере�енн�й, нужн� и���ль��вать ��н�тру�цию If...Then. О�ерат�р Select Case и�еет р�д дру�их ����енн��тей: y y О�ерат�ры ���ут �лед�вать �а выражение� case значение: в т�й же �а��й �тр��е. V�S���p� д��у��ает �а�и�ь Case значение: оператор или Case значение: оператор Я ��ычн� и���ль�ую ф�р�ат «в�е в �дн�й �тр��е», ���да �а в�е�и или �а ��льшин�тв�� �лючевых �л�в case �ледует т�ль�� �дин ��ерат�р, �а� в ���а� �анн�� ранее �ри�ере � дн��и недели. К��да ��ерат�ры ���ле �лючевых �л�в case и�еют ��лее �л�жный хара�тер, � начинаю ��ерат�ры � н�в�й �тр��и � �т� �ту��� �тн��ительн� �л�ва case. y y Е�ли �дин на��р ��ерат�р�в ��жет ��ра�атывать �ра�у не���ль�� �начений, эти �начени� ��жн� у�а�ать ���ле �л�ва case. На�ри�ер, ��жн� на�рать case 1, 2, 3:, ���ле че�� у�а�ать ��ерат�ры V�S���p�. y y Е�ли �дн� и т� же �начение фи�урирует ��лее че� в �дн�� ��ерат�ре case, V�S���p� не �енерирует ����щение �� �ши��е. Вы��лн�ют�� ��ерат�ры, �ле� дующие �а �ервы� ���твет�твующи� ��ерат�р�� case, а лю��е дру��е ���т� вет�твие и�н�рирует��. y y В �аче�тве �начени� ��ерат�ра case ��жн� и���ль��вать �ере�енную или вы� ражение. Ра����три� �ри�ер: некое_значение = 3 select case переменная case некое_значение: операторы case 1, 2: операторы case else операторы end select Е�ли �начение переменной равн� 3, вы��лн�ют�� ��ерат�ры, �ледующие �а �ервы� �л�в�� case. Е�ли �ере�енна� ��жет �рини�ать �начени�, �еречи�ленные в дру�их �л�вах case, �ледует ���нить, чт� и���ль��ван� �удет т�ль�� �ерв�е ��� �твет�твие. Цикл Do While Зача�тую нужн� ���дать �ценарий, �аранее не �на�, ���ль�� и�енн� эле�ент�в ��тре� �ует�� ��ра��тать или ���ль�� ра� ��тре�ует�� ��вт�рить �а��е�ни�удь дей�твие. О�ерат�ры ци�ла ���в�л�ют ��равл�ть�� � ��д��н��� р�да �адача�и. В �аче�тве �р��т��� �ри�ера ��жн� �риве�ти �адачу � �в�рачивании н����, ��т�рую ��жн� ��и�ать на ��ычн�� ��ы�е �ледующи� ��ра���:
Управление ходом выполнения сценария 83 пока в бельевой корзине есть носки, взять из корзины пару носков свернуть их вместе положить их в ящик для носков повторить действия В V�S���p� и�еет�� ��ерат�р Do While, �редна�наченный дл� �н����ратн��� ��� вт�рн��� вы��лнени� �л��а ��да. В V�S���p� �адача и�влечени� н����в и� �ельев�й ��р�ины ��жет и�еть �ледующий вид: do while NumberOfSocksLeft >= 2 'Выполнять, пока количество носков >= 2 MatchUpSocks 'Подобрать пару носков FoldSocks 'Свернуть носки PutSocksAway 'Положить носки в новое место NumberOfSocksLeft = NumberOfSocksLeft - 2 loop Зде�ь ��д в �тр��е Do While ����щает V�S���p�, ��жн� ли вы��лнить ��ерат�� ры, �ледующие �а данн�й �тр���й, а �лючев�е �л�в� Loop �т�ылает V�S���p� на�ад � �р�вер�е у�л�ви� и ��вт�рению ���ыт�и вы��лнени� ��ерат�р�в. Е�ли нужн�, ��ерат�ры Do While ���ут �ыть вл�жены дру� в дру�а. Кажд�е �лючев�е �л�в� Loop �ри�ен�ет�� � �лижайше�у ��ерат�ру, �ледующе�у �еред ней: do while условие операторы do while еще_одно_условие еще операторы loop здесь могут быть дополнительные операторы loop Нетрудн� �а�етить, чт� �т�ту�ы, �ри�ен�е�ые дл� ��ерат�р�в внутри �ажд��� ��ерат�ра Do While, ��ле�чают чтение и ��ни�ание ��да �ценари�. Суще�твует ��ть вер�ий ци�ла Do While, �ажда� и� ��т�рых не�н��� �тличает�� �т ��тальных: do while условие операторы loop do until условие операторы loop do операторы loop while условие do операторы loop until условие do операторы if условие then exit do операторы loop
84 Глава 2. Руководство по VBScript В �ерв�й вер�ии V�S���p� вычи�л�ет �улев� условие. Е�ли е�� �начение равн� True, V�S���p� вы��лн�ет оператор или операторы внутри ци�ла и в��вращает�� дл� ��вт�рени� �р�вер�и у�л�ви�. Ци�л ��вт�рн� вы��лн�ет ��ерат�ры в���ий ра�, ���да ��редел�ет, чт� условие в�е еще вычи�л�ет�� в True. Вт�ра� вер�и� ��вт�рн� вы��лн�ет ��ерат�ры в���ий ра�, ���да ��редел�ет, чт� условие в�е еще вычи�л�ет�� в False, т� е�ть ���а условие не вы��лнит�� в True. М�жн� та�же на�и�ать do while not (условие) операторы loop и ��лучить т�т же �а�ый ре�ультат. Заче� нужны ��е вер�ии? Ин��да нужн� на� �и�ать «���а еще е�ть н���и в �ельев�й ��р�ине», а ин��да нужн� на�и�ать «���а �ельева� ��р�ина не �танет �у�та». Вер�ии While и Until �ред��тавл�ют�� � т�й целью, чт��ы и� них ��жн� �ыл� вы�рать интуитивн� ��лее ��н�тную. Следует в�е же �а�етить, чт� е�ли в этих �ервых двух вер�и�х у�л�вие While или Until не ���людает�� уже д� �ерв��� вы��лнени� ци�ла, ��ерат�ры, ���тавл�ющие ци�л, ни���да не вы��лн�ют��. Чт� же �а�ает�� вт�рых двух вер�ий, та� �р�вер�а ���людени� у�л�ви� нах�дит�� в конце ци�ла, ��эт��у ��ерат�ры внутри эт��� ци�ла в�е�да вы��лн�ют�� как минимум �дин ра�. В ���ледней вер�ии ���а�ан�, �а� ��жн� �авершить ци�л изнутри. О�ерат�р exit do �ред�и�ывает V�S���p� не�едленн� ��тан�вить дальнейшее вы��лнение ��ерат�р�в ци�ла и �ри�ту�ить � вы��лнению ��ерат�ра, �ледующе�� �ра�у же �а их ���нчание�. В эт�й ��т�й вер�ии ци�л в�е�да вы��лн�ет�� �а� �ини�у� �дин ра�, и �р�вер�а вы��лнени� у�л�ви� на вых�д и� ци�ла �р�в�дит�� т�ль�� �де� ни�удь ���редине ци�ла. В���ще�т� и���ль��вать ��ерат�р exit do ��жн� в лю��� и� ��ти вариант�в ци�ла Do While. В �ледующих ра�делах ��ерат�р exit do �удет ра����трен ��лее ��др��н�. При ���дании �ценари� � и���ль��вание� ци�ла Do While нужн� �делать �ау�у и решить, �а�а� и� этих вер�ий лучше ��д�йдет. Ка� �тветить на данный в��р��? Одн��начн��� �твета не �уще�твует. Нужн� в�ве�ить в�е ���т��тель�тва �ри�ени� тельн� � ��н�ретн��у ���дающе�у�� �ценарию. О�ычн� в ваше� ра���р�жении и�еют�� две �хе�ы, и� ��т�рых �ледует �делать �в�й вы��р. ШАБЛОН Когда нужно выполнить задачу необходимое количество раз, до тех пор пока не будет выпол- нена вся работа, поместите проверку выполнения условия в самое начало цикла: do while (условие, соблюдение которого свидетельствует о выполнении работы) операторы loop Когда нужно выполнить задачу хотя бы один раз и остановиться только в том случае, если что-нибудь произойдет при выполнении этой задачи, поместите проверку выполнения условия в конец цикла: do операторы while (условие, соблюдение которого свидетельствует о том, что работа еще не выполнена) Выберите одну из двух версий While и Until, разобравшись, какая из них больше подходит, проговорив вслух весь порядок работы оператора.
Управление ходом выполнения сценария 85 Прекращение выполнения цикла с помощью оператора Exit Do Ин��да нужн� выйти и� ци�ла Do While или и� дру���� ��д��н��� е�у ци�ла на ��н�ве ре�ультат�в, ��лученных в �ередине ���тавл�ющих е�� ��ерат�р�в, а не в е�� начале или ��нце. В та��� �лучае дл� не�едленн��� �ерех�да �а �ределы ци�ла на вы��лнение ��ерат�ра, ��т�рый �ледует �ра�у �а ци�л��, ��жет и���ль��вать�� ��ерат�р Exit Do. Пред��л�жи�, на�ри�ер, чт� �жидает�� ��ра��т�а ��ти файл�в � и�ена�и FILE1.DAT, FILE2.DAT и т. д . Е�ли ��наружит��, чт� �аданный файл �т�ут�твует, ��жет ���вить�� не��х�ди���ть ��тан�вить в�ю ��ра��т�у и не и��ать файлы � �о`льши�и н��ера�и в и�ени. Ка� эт� ��жн� �делать в �ценарии, ���а�ан� в �ле� дующе� �ри�ере: set fso = CreateObject("Scripting.FileSystemObject") num=1 do while num <= 5 ' обработка файлов с 1 до 5: filename = "C:\TEMP\FILE" & num & ". DAT " ' формирование имени файла if not fso.FileExists(filename) then ' проверка существования файла exit do ' есл и н ет, досрочное прекращение end if Process filename ' выз ов п одпрограммы "process" num=num+1 ' переход к следующему файлу loop В данн�� �ри�ере �ри �ерв�� �р�х�де ци�ла �ере�енн�й filename �ри�ваи� вает�� �начение FILE1.DAT. При �ажд�� �р�х�де ци�ла н��ер в и�ени файла уве� личивает�� на единицу. Пр�вер�ет��, �уще�твует ли файл, и�� ��т�р��� нах�дит�� в �ере�енн�й. Е�ли та���� файла нет, ��ерат�р Exit Do выв�дит вы��лнение �р�� �ра��ы �а �ределы ци�ла еще д� т���, �а� �удет �ред�рин�та ���ыт�а ��ра��т�и �т�ут�твующе�� файла. Нет ни�а�их ��н�ваний ��раничивать ци�л Do While фи��ир�ванны� чи�л�� ��вт�рений. Е�ли в���ще у�рать �р�вер�у у�л�ви� «do», ци�л �танет �е���нечны�. М�жн� �ере�и�ать �редыдущий �ценарий дл� ��ра��т�и наи��льше�� ��личе�тва ��наруженных файл�в, � �ерв��� и д� ���ледне�� �уще�твующе��: ' Файл примера script0204.vbs set fso = CreateObject("Scripting.FileSystemObject") num=1 do ' обработка наибольшего найденного количества файлов filename = "C:\TEMP\FILE" & num & ". DAT " ' формирование имени файла if not fso.FileExists(filename) then ' проверка существования файла exit do ' ес ли нет, досрочное прекращение Process filename ' вы зов подпрограммы "process" num=num+1 ' переход к следующему файлу loop Зде�ь, в �т�ут�твие ��ерат�ра While или Until, ци�л вы��лн�ет�� �е���нечн� (�р��ра��и�ты на�ывают е�� �е���нечны� ци�л���, ���а не �удет �авершен ��ера� т�р�� Exit Do. Эт� ��начает, чт� в данн�� �лучае нужн� �р��вл�ть ����ую ����три� тельн��ть, чт��ы, в ��нечн�� ит��е, ��ерат�р Exit Do ��� �ы в�е же вы��лнить��, иначе ваш �ценарий �удет �рутить�� в ци�ле �е���нечн� (или ���а у ва� не л��нет тер�ение и вы не �рервете е��, нажав ����инацию �лавиш Ctrl+C�. О�ерат�р Exit Do ра��тает в лю��� и� четырех вариант�в ци�л�в Do While и Do Until.
86 Глава 2. Руководство по VBScript Вычисления с помощью оператора For...Next К��да ци�л д�лжен �р�йти чере� ��ределенн�е ��личе�тв� ��вт�рений (итераций�, лучше в�е�т� ��ерат�ра Do While вы�рать ��ерат�р For...Next. Первый �ри�ер, и���ль��ванный дл� иллю�трации ра��ты ��ерат�ра Exit Do, ��жн� �ере�и�ать в виде ци�ла For: ' Файл примера script0205.vbs set fso = CreateObject("Scripting.FileSystemObject") fornum=1to5 ' обработка файлов с 1 по 5: filename = "C:\TEMP\FILE" & num & ". DAT " ' формирование имени файла if not fso.FileExists(filename) then ' проверка существования файла exit for ' е сли не т, досрочное прекращение end if Process filename ' в ызо в п одпрограммы "process" next Ци�л For �ри�ваивает �ере�енн�й (в данн�� �ри�ере num� �ерв�е �начение (�де�ь 1� и вы��лн�ет ��ерат�ры внутри ци�ла. Зате� �н увеличивает �начение �е� ре�енн�й на единицу и ��вт�р�ет ��ерат�ры д� тех ��р, ���а �начение �ере�енн�й не �танет �ревышать �начение, у�а�анн�е ���ле �лючев��� �л�ва To (�де�ь 5�. Та�и� ��ра���, данный ци�л вы��лн�ет ��ерат�ры �ри �начени�х num = 1, 2, 3, 4 и 5. В данн�� �ри�ере та�же и���ль�ует�� ��ерат�р Exit For, ��т�рый ра��тает в т�чн��ти та� же, �а� и ��ерат�р Exit Do, �а и��лючение� т��� чт� �н выв�дит вы��лнение �р��ра��ы и� ци�ла For, а не и� ци�ла Do. (С��ла�ите�ь, в эт�� е�ть ��ределенный ��ы�л.� О�ерат�р Exit For �а�тавл�ет интер�ретат�р V�S���p� �р�� д�лжить вы��лнение �ценари� �� �тр��и, нах�д�щей�� �ра�у же ���ле �лючев��� �л�ва Next. О�ерат�р For ��жет �ыть на�и�ан �дни� и� двух �������в: for счетчик = начальное_значение to конечное_значение или for счетчик = начальное_значение to конечное_значение step шаг_изменения Зде�ь счетчик �ред�тавл�ет ����й и���ль�уе�ую �ере�енную; начальное_значе ­ ние — �начение, �ри�ваивае��е �ере�енн�й �ри �ерв�� �р�х�де ци�ла; конечное_ значение — наи��льшее �начение, �ри�ваивае��е �ере�енн�й; а шаг_изменения, е�ли �н у�а�ан, �вл�ет�� �риращение� счетчика ���ле �ажд��� �р�х�да ци�ла. Е�ли нужн�, чт��ы в ци�ле �ри�ен�л�� ��ратный �т�чет, �а� в �дн�й и�ве�тн�й, н� д�в�льн� нудн�й �е�не, шаг_изменения ��жет и�еть �трицательн�е �начение: ' Файл примера script0206.vbs for number_of_bottles = 100 to 0 step -1 wscript.echo number_of_bottles & " бутылок пива на стене!" next ▼) В этом примере демонстрируются широкие возможности операторов цикла. В отсутствие опе- ратора For пришлось бы набирать каждую строку слов песни wscript.echo "100 бутылок пива на стене!" wscript.echo "99 бутылок пива на стене!" wscript.echo "98 бутылок пива на стене!" и т. д . При использовании цикла For со всем этим можно справиться с помощью всего лишь трех строк кода.
Управление ходом выполнения сценария 87 Е�ли ��ерат�р Step не у�а�ан, �начение �ере�енн�й счетчик увеличивает�� на единицу ���ле �ажд��� �р�х�да ци�ла. ▼) Значение, указываемое за оператором step, не обязательно должно быть целым числом. Можно выбрать и дробный шаг изменения, если по какой-нибудь причине это понадобится. Как только значение превысит верхний предел на любое число, выполнение цикла прекратится. Обработка коллекций и массивов с помощью цикла For...Each Не��т�рые фун�ции V�S���p�, и�еющие ��ециальн�е на�начение, ���ут в��вра� щать ти� �ере�енн�й, на�ывае�ый ��лле�цией. К�лле�ци� �ред�тавл�ет ����й ��и��� и�ен файл�в, и�ен ��ль��вателей или дру�их данных, ��держащих�� в �дн�й �ере�енн�й. На�ри�ер, фун�ци�, ��уще�твл�юща� ��и�� в �атал��е, �� �а�р��у в�ех файл�в � и�ена�и *.DOC ��жет вернуть ��лле�цию и�ен файл�в. П����ль�у, ���рее в�е��, ��тре�ует�� ра��ечат�а, �р����тр или ра��та � эти�и файла�и, на� нужен ������ д��ту�а � �тдельны� �а�и��� ��лле�ции. Ци�л For...Each вы��лн�ет �в�и ��ерат�ры �� �дн��у ра�у дл� �ажд�й �а�и�и ��лле�ции. Ра����три� �ри�ер: ' Файл примера script0207.vbs set fso = CreateObject("Scripting.FileSystemObject") set tempfiles = fso.GetFolder("C:\TEMP").Files filelist = " " for each file in tempfiles filelist = filelist & ", " & file.name next MsgBox "Имеются следующие временные файлы:" & filelist В данн�� �ри�ере �ере�енн�й tempfiles �ри�ваивает�� �начение ��лле�ции в�ех файл�в, найденных в �а��е C:\TEMP. Ци�л For...Each ���дает �ере�енную �� и�ени file, и �ри �ажд�� �в�е� �р�х�де �н делает �ере�енную file ��ыл��й на �ледующий ��ъе�т ��лле�ции. Ци�л вы��лн�ет�� �дин ра� дл� �ажд��� файла. Е�ли ��лле�ци� �у�та, т� е�ть е�ли в �а��е C:\TEMP нет файл�в, т��да ци�л в�� ��ще не �а�у��ает��. М�жн� та�же и���ль��вать ��ерат�р For...Each дл� ра��ты � �ере�енны�и �а��ива, вы��лн�� ��держи��е ци�ла �� �дн��у ра�у дл� �ажд��� эле�ента �а��ива, �а� ���а�ан� в �ледующе� �ри�ере: dim names[10] ... for each nm in names ... next О�ерат�ры V�S���p� внутри эт��� ци�ла вы��лн�ют�� 10 ра�, �ри эт�� �ере�ен� на� nm �рини�ает �� �череди �начение �дн�й и� де��ти �ере�енных, хран�щих�� в �а��иве names. ССЫЛКА Получить дополнительную информацию о массивах можно далее в этой главе в разделе «Мас- сивы».
88 Глава 2. Руководство по VBScript П��ле �лючевых �л�в for each ��жн� и���ль��вать лю��е и�� �ере�енн�й, � вы�рал в �ри�ерах и�ена file и nm, ��т��у чт� �ни ���а�али�ь �не в��лне ��д� х�д�щи�и дл� данных �лучаев. Вы же ��жете и���ль��вать лю��е ра�решенн�е и�� �� �в�е�у у���трению. Функции VBScript Функции — эт� ��ециальные �л��и �р��ра��н��� ��да V�S���p�, ��т�рые ���ут �ыть а�тивир�ваны (или вызваны� �� и�ени. Фун�ции ���ут �ыть �ереданы дан� ные, ��т�рые нужн� ��ра��тать, и �на в�е�да в��вращает �начение т�й ча�ти �цена� ри�, и� ��т�р�й �ыла вы�вана. Дл� �начени�, �ереданн��� фун�ции, и���ль�ует�� техниче��ий тер�ин аргумент. На�ри�ер, в�тр�енн�й фун�ции UCase в �аче�тве ар�у�ента �ередает�� �тр���� ва� �ере�енна�, ��н�танта или выражение, а �на в��вращает �тр��у, в ��т�р�й в�е �у�вы �ереведены в верхний ре�и�тр. Ра����три� �ледующий �ри�ер: str1 = "my file.dat" str2 = Ucase(str1) В эт�� �ценарии �ере�енна� str2 вы�ывает фун�цию UCase, ��т�ра� �ерев�дит в�е �и�в�лы �начени� �ере�енн�й str1 в верхний ре�и�тр, а �ате� �ри�ваивает эт� �начение, "MY FILE.DAT", �ере�енн�й str2. Значение и�х�дн�й �ере�енн�й str1 и��енению не ��двер�ает��. В �ледующих �лавах �удет ра����трен� �н�же�тв� �ри�ер�в фун�ций. Е�ли на данный ���ент чт��т� не��н�тн�, не в�лнуйте�ь — в�е �р���нит�� �� �ере чтени� �ни�и. Вызов функций и подпрограмм В ранее ���а�анн�� �ри�ере �ыл �р�де��н�трир�ван вы��в фун�ций � у�а�ание� их ар�у�ент�в в �ру�лых �����ах. Фун�цию MsgBox ��жн�, � �ри�еру, вы�вать �ледующи� ��������: selectedbutton = MsgBox("Хотите продолжить?", vbYesNo) Фун�ци� MsgBox выв�дит в ���вл�юще��� ��не те��т�в�е ����щение и в��вра� щает �начение, ���а�ывающее, на �а��й �н���е щел�нул ��ль��ватель �ценари�. Е�ли ва� в�е равн�, �а��е �начение �удет в��вращен� фун�цией и вы не ���и� раете�ь и���ль��вать эт� �начение, т� в V�S���p� �ру�лые �����и ��жн� ��у�тить. В та��� �лучае фун�ци� ра���атривает�� в �аче�тве подпрограммы — та��е �тран� н�е на�вание и���ль�ует�� дл� фун�ции, ��т�ра� делает чт��ни�удь ��ле�н�е, н� не в��вращает �твет вы�вавшей ее �р��ра��е. В �ледующе� �ри�ере ���а�ана реали�аци� эт�й идеи �ри�енительн� � фун�� ции MsgBox. Я ���у и���ль��вать MsgBox дл� выв�да ��ле�н��� ����щени�, н� �ри эт�� �не в�е равн�, на �а��й �н���е щел�нет ��ль��ватель. П����ль�у � не ���ираю�ь и���ль��вать �начение, в��вращае��е MsgBox, � вы�ываю ее, �ри�ен�� ф�р�у вы��ва ��д�р��ра��ы, в ��т�р�й �ру�лые �����и и���ль�уют��: MsgBox "The script has finished", vbOK
Функции VBScript 89 Далее в эт�й �лаве �удут ���а�аны фун�ции, дл� ��т�рых и���ль�уют�� ��а ������а вы��ва. Следует �а���нить, чт� �ру�лые �����и �тав�т�� в�е�да, ���да и���ль�ует�� �начение, в��вращае��е фун�цией, и не �тав�т�� в т�� �лучае, ���да �н� не и���ль�ует��. К�тати, в V�S���p� �ру�лые �����и та�же ���ут �ыть ��ущены, ���да фун�ци� не ��лучает ни�а�их ар�у�ент�в. Ва� ���ут в�третить�� фун�ции, вы�ванные та�и� ��ра��� в д��у�ентации �� V�S���p�, �ред��тавленн�й ����анией M���oso��. В �аче�тве �ри�ера ��жн� �риве�ти в�тр�енную фун�цию Now(), в��вращаю� щую те�ущую дату и вре��. О�е эти �тр��и ра��тают в �ценарии а���лютн� �ди� на��в�: wscript.echo "The date and time are:", Now() wscript.echo "The date and time are:", Now Вт�ра� �тр��а вы�ывает фун�цию Now и выв�дит в��вращае��е �начение. П�� ��е�у, та��й ��дх�д вн��ит �утаницу, �����ль�у �ра�у нев����жн� ��н�ть, че� �вл�ет�� Now, �ере�енн�й или фун�цией. ▼▼ Во избежание путаницы между переменными и функциями я рекомендую при вызове функций всегда использовать круглые скобки. Документация и синтаксис В V�S���p� д��ту�ны ���л� 100 �ред��ределенных фун�ций, у�р�щающих ра� ��ту �р��ра��и�т�в. Эти фун�ции ра��тают �� �тр��а�и, вы��лн�ют �л�жные �ате�атиче��ие ра�четы (на�ри�ер, и�влечение �вадратн��� ��рн�� и вычи�л�ют �начени� даты и вре�ени. В�е �ни �еречи�лены в �рат��й �в�д�е в ��нце данн�й �лавы, а их ��др��н�е ��и�ание и�еет�� на ве���айте ����ании M���oso�� в д��у�ентации �� V�S���p� (technet.microsoft.com/scriptcenter�.Чт��ы �ред��тавить ва� ��на���ительную ин� ф�р�ацию � ти�ах фун�ций и �� их �ри�енении, не��т�рые и� них �удут ��д� р��н� ра���раны в данн�й �лаве. Н� �начала � ��ъ��ню, чт� вы ���жете увидеть в интера�тивн�й д��у�ентации. В д��у�ентации �� V�S���p� ���а�ывает�� синтаксис (т� е�ть тре�уе�ый ф�р�ат и на�и�ание �л�в� дл� �ажд�й фун�ции и ��ерат�ра ��ы�а. На�ри�ер, �инта��и� фун�ции MsgBox и�еет в ней �ледующий вид: MsgBox(prompt[, buttons][, title][, helpfile, context]) Кру�лые �����и ���а�ывают, чт� MsgBox �вл�ет�� фун�цией. Перечень внутри �ру�лых ������ ���а�ывает, чт� фун�ции MsgBox ��жн� �ередавать ��ть ар�у�ен� т�в. Квадратные �����и ([ и ]�, ��ружающие не��т�рые и� ар�у�ент�в, не ��начают, чт� их нужн� �ри�ен�ть на �а��� деле, т� е�ть �ри вы��ве фун�ции вы их не на� �ираете. Они ���а�ывают, чт� ар�у�енты внутри них �вл�ют�� не����ательны�и. В�е, чт� ���а�ан� внутри [ и ], ��жет �ыть ��ущен�. О�ъ��нени�, �рив�ди�ые в д��у�ентации �� �ажд��у ар�у�енту, ����щают, чт� �н ��начает, �а�ие �начени� ��жет �рини�ать и �а��е �начение �удет �ред���
90 Глава 2. Руководство по VBScript ла�ать�� на �е�те т��� или ин��� ар�у�ента, е�ли вы не �ред��тавите фун�ции �в�е ����твенн�е �начение. Пред��ла�ае��е �начение �ри �т�ут�твии �редл�женн��� на�ывает�� значением по умолчанию. В �лучае � и���ль��вание� фун�ции MsgBox ��жн� �а�етить, чт� ����ательны� �вл�ет�� �дин лишь ар�у�ент prompt. В�е дру�ие ар�у�енты ���а�аны в ��ружении �вадратных ������, ��эт��у �ни �вл�ют�� не����ательны�и. Наи�р��тейша� ф�р�а и���ль��вани� MsgBox ��жет и�еть �ледующий вид: x = MsgBox("Это сообщение выводится на экран") Н� фун�цию MsgBox ��жн� и���ль��вать и � тре�� ар�у�ента�и: x = MsgBox("Это сообщение выводится на экран", vbOK, "Это заголовок") Е�ли нужн� у�а�ать не��т�рые ар�у�енты, не у�а�ыва� их �редше�твенни��в, ��жн� в����ль��вать�� �а��ты�и, ниче�� не ра��еща� �ежду ни�и. На�ри�ер, дл� у�а�ани� ар�у�ент�в на���инани� ( prompt� и �а��л�в�а (title�, не у�а�ыва� �н���� (buttons�, ��жн� на�и�ать �ледующий ��д: x = MsgBox("Это сообщение выводится на экран",, "Это заголовок") В данн�� �лучае �р��ра��а, в ��т�р�й и���ль�ует�� фун�ци� MsgBox, �ри�ен�ет дл� ар�у�ента buttons �начение �� у��лчанию. И на��нец, �ледует �а�етить, чт� ар�у�енты файла ����щи (helpfile� и ��нте�� �та (context� ��ружены �дни� на��р�� �вадратных ������, чт� �видетель�твует � т��, чт� ��жн� ли�� и���ль��вать ��а ар�у�ента, ли�� не у�а�ывать ни �дн��� и� них. Не �тарайте�ь на данн�� эта�е �а���нить а���лютн� в�е детали. Эти �ри�еры �риведены в ��н�вн�� дл� т���, чт��ы ���а�ать, �а� у�тр�ена д��у�ентаци�. Функции работы со строками С��рее в�е��, ��н�вн�й ��ъе� ра��ты, дл� ��т�р�й ва� ��над��ит�� V�S���p�, �удет �а�ать�� ра��ты �� �тр��а�и, на�ри�ер � и�ена�и файл�в и ��ль��вателей. П�эт��у �чень х�р�ш�, чт� V�S���p� щедр� д���лнен в�тр�енны�и фун�ци��и дл� ра��ты �� �тр��а�и. Поиск в строках с помощью функций InStr() и InStrRev() О�а�ал��ь, чт� наи��лее ча�т� вы��лн�е��й �адачей �ри ра��те �� �тр��а�и дл� �ен� �ыл� ��ределение наличи� �а��й�ни�удь �тр��и в дру��й �тр��е. На�ри�ер, е�ли ваш �ценарий ��анирует ��держи��е �атал��а в ��и��е файл�в � ра�шире� ние� D AT , т� нужен ������ ��наружени�, �ри�ут�твует ли �тр��а «.DAT» в лю��� �тдельн� в��т�� и�ени файла. Эту ра��ту вы��лн�ет фун�ци� InStr. Выражение InStr(filename, ". DAT ") �рини�ает �начение 0, е�ли �тр��а .DAT не ��жет �ыть найдена в �начении �тр���� в�й �ере�енн�й filename. Е�ли та�а� �тр��а в �начении �ере�енн�й �ри�ут�твует,
Функции VBScript 91 выражение �рини�ает �начение, ���твет�твующее ���иции, � ��т�р�й начинает�� .D A T. Ра����три� �ри�ер: filename = "TEST.DAT" pos = InStr(filename, ". DAT ") В данн�� �лучае �ере�енна� pos ��лучает �начение 5, ��т��у чт� . DAT в filename начинает�� � ��т��� �и�в�ла. Е�ли �тр��а .DAT не �удет �ри�ут�тв�вать в �начении �ере�енн�й filename, �ере�енна� pos ��лучит �начение 0. В �р��ра��е эти� ��жн� в����ль��вать�� �ледующи� ��ра���: if InStr(filename, ". DAT ") > 0 then msgbox filename & " является файлом .DAT!" end if Следует ���нить, чт� фун�ци� InStr чув�твительна � ре�и�тру �и�в�л�в. На� �ри�ер, «.DAT» не ��жет �ыть найдена в �тр��е «som�����.d��». П�эт��у, ���да filename ��жет ��держать �и�в�лы �а� в верхне� та� и в нижне� ре�и�тре, �ра� вильнее �ыл� �ы �р�ве�ти �р�вер�у �ледующи� ��ра���: if InStr(Ucase(filename), " .DA T") > 0 then Фун�ци� UCase в��вращает �тр��у, идентичную т�й, ��т�ра� ей �ыла �ередана, н� �и�в�лы нижне�� ре�и�тра в ней �ре��ра��ваны в �и�в�лы верхне�� ре�и�тра. Зате� фун�ци� InStr ведет ��и�� �тр��и .DAT, ���т��щей и� �и�в�л�в верхне�� ре�и�тра. ▼▼ При работе со строками нужно постоянно учитывать регистр символов. Для компьютера буквы «a» и «A» отличаются друг от друга. При ра��те � данны�и в�е�да нужн� ду�ать � �ри�ут�твии в них �и�в�л�в верх� не�� и нижне�� ре�и�тра. О�ычн� �еред �р�вер��й �рих�дит�� ��нвертир�вать ве�ь те��т, введенный ��ль��вателе�, и и�ена файл�в в верхний или нижний ре�и�тр, в �р�тивн�� �лучае �ридет�� �рать в ра�чет ре�и�тр �и�в�л�в. Е�ли �ервы� ар�у�ент�� фун�ции InStr �вл�ет�� чи�л�в�е �начение, �н� ин� тер�ретирует�� в �аче�тве ���иции �и�в�ла, � ��т�р��� начинает�� ��и��. В эт�� �лучае фун�ции InStr нужн� �ередать три ар�у�ента. Следующее выражение в��вращает �начение 4: InStr(2, "ABCABC", "AB") Стр��а «A�» ���вл�ет�� в �тр��е «A�CA�C» в ���ици�х 1 и 4, н� фун�ции In- Str �ред�и�ан� начать ��и�� � ���иции 2. П�эт��у �ерв�е ���вление �р��у��ает��. Фун�ци� InStrRev() ��х�жа на фун�цию InStr(), �а и��лючение� т���, чт� �на ведет ��и�� � �рав��� �ра� �тр��и. Следующий ��д вернет 4, ��т��у чт� найдет �а��е �рав�е �тр���в�е �начение «A�»: InStrRev("ABCABC", "AB ") Извлечение части строки с помощью функций Left(), Right() и Mid() В V�S���p� и�еет�� не���ль�� фун�ций и�влечени� ча�тей �тр�� на ��н�ве на� чальн�й ���иции и длины тре�уе���� фра��ента.
92 Глава 2. Руководство по VBScript Функция Возвращаемое значение Left(строка, длина) Са�ые левые �и�в�лы, и�влеченные и� �тр��и Right(строка, длина) Са�ые �равые �и�в�лы, и�влеченные и� �тр��и Mid(строка, начальная_позиция) Ча�ть �тр��и � �и�в�ла, у�а�анн��� в начальн�й ��� �иции и далее д� ��нца �тр��и Mid(строка, начальная_позиция, длина) К�личе�тв� �и�в�л�в, у�а�анн�е в длине, и�влеченн�е � у�а�анн�й начальн�й ���иции Ра����три� не���ль�� �ри�ер�в. Выражение Возвращаемое значение Left("ABCDEF ", 3) "A BC" Right("ABCDEF", 3) "D EF" Mid("ABCDEF", 3) "CDEF" Mid("ABCDEF", 3, 2) "C D" В реальн�й �итуации эти фун�ции �удут и���ль��вать�� � �ере�енны�и, а не � фи��ир�ванны�и �тр��а�и, �а� «A�C». На�ри�ер, дл� ��ределени� �а��в��� и�ени файла �е� ти�а файла или е�� ра�ширени� ��жн� в����ль��вать�� �леду� ющи� ��д�� V�S���p�: filename = "My file.DAT" ' присваивание имени файла переменной dot = InStrRev(filename, ". ") ' поиск самой правой . в имени basename = Left(filename, dot-1) ' базовое имя всегда ПЕРЕД . Эт�т ��д �ри�ваивает �ере�енн�й dot чи�л�, ��редел�ющее ���ицию �и�в�ла т�ч�и, � ��т�р��� начинает�� та ча�ть и�ени файла, � ����щью ��т�р�й ��редел�� ет�� е�� ти�. Дл� ��и��а эт�й ���иции и���ль�ует�� фун�ци� InStrRev, �����ль�у у и�ени файла ��жет �ыть ��лее �дн�й т�ч�и, на�ри�ер, file.doc.txt — в��лне д��у�ти��е и��, ��т��у чт�, е�ли в и�ени файла ��лее �дн�й т�ч�и, нужн� �а� рантир�вать нах�ждение �а��й ���ледней и� них. Зате� в �ценарии �ере�енн�й basename �ри�ваивает�� �начение т�й ча�ти и�ени файла, ��т�ра� нах�дит�� д� найденн�й т�ч�и, н� не в�лючает ее. В �риведенн�� �ри�ере �ере�енн�й basename �удет �ри�в�ен� �начение My file. (Е�ли в��ни�нут ���нени�, ��жете у�едить�� в �рав�те ��а�анн���, �р�делав в�ю эту ра��ту � �арандаш�� и �у�а��й.� Чт� же �р�и��йдет, е�ли т�ч�а в���ще �т�ут�твует в и�ени файла? В��ни�нет �р��ле�а: �ере�енна� dot ��лучит нулев�е �начение, и V�S���p� �ри ���ыт�е �ри�в�ить �ере�енн�й basename �начение, ��держащее �а�ые левые �и�в�лы �а вычет�� �дн���, �ре�ратит ра��ту � выдачей ����щени� �� �ши��е! Пра�ти�а �р��ра��ир�вани� �ред�и�ывает ��равл�ть�� � данн�й �итуацией �ледующи� ��ра���. ШАБЛОН Для извлечения базового имени из полного имени файла с расширением используется следую- щая последовательность операторов:
Функции VBScript 93 ' Файл примера script0208.vbs filename = "test.file" ' присваивание имени файла переменной dot = InStrRev(filename, " .") ' пои ск сам ой правой точки (.) в имени ifdot=0then basename = filename ' Символ . отсутствует, берем имя целиком else basename = Left(filename, dot-1) ' базовое имя всегда ПЕРЕД точкой (.) end if MsgBox "Базовое имя — " & basename Не�л�х� �удет �а�у�тить эт�т улучшенный �ценарий � filename = "xxx" и � filename = "xxx.yyy .zzz", чт��ы у�едить�� в е�� ра��т�������н��ти не�ави�и� �� �т ��личе�тва т�че�, ��держащих�� в и�ени. Другие строковые операции Следующие фун�ции та�же �ри��д�т�� ва� дл� ра��ты �� �тр��а�и. Функция Возвращаемое значение Len(строка) Длина �тр��и в �и�в�лах Lcase(строка) Та же �а�а� �тр��а, н� �� в�е�и алфавитны�и �и�в�ла�и в ниж� не� ре�и�тре Ucase(строка) Стр��а �� в�е�и алфавитны�и �и�в�ла�и в верхне� ре�и�тре Trim(строка) Стр��а � удаленны�и лидирующи�и и �а�ы�ающи�и �р��е� ла�и Ltrim(строка) Стр��а � удаленны�и лидирующи�и �р��ела�и Rtrim(строка) Стр��а � удаленны�и �а�ы�ающи�и �р��ела�и Ра����три� не���ль�� �ри�ер�в. Выражение Возвращаемое значение Len("ABC") 3 Lcase("My Documents") "my documents" Ucase("My Documents") "MY DO CUM ENT S" Trim(" ABC ") "AB C" Ltrim(" ABC ") "ABC " Rtrim(" ABC ") " ABC" Преобразование строк в другие типы данных, и наоборот В V�S���p� и�еет�� на��р фун�ций, ���в�л�ющие ��нвертир�вать �тр��и в данные дру�их ти��в. Б�льшин�тв� этих фун�ций ��жет �рини�ать ар�у�енты лю���� ти�а и ��нвертир�вать их в дру��й у�а�анный ти�. Са�ы�и ��ле�ны�и и� них ��жн� �читать �ледующие.
94 Глава 2. Руководство по VBScript Функция Возвращаемое значение cstr(значение) Стр���в�е �ред�тавление �начени�. И���ль�ует�� дл� �ревра� щени� чи�ла или �начени� даты�вре�ени в те��т�вую �тр��у. На�ри�ер, cstr(47) в��вращает �тр��у 47 clng(значение) Длинн�е (32�ра�р�дн�е� цел�е чи�л�. И���ль�ует�� дл� �ре� вращени� �тр���в��� �ред�тавлени� чи�ла в чи�л�в�е �начение. На�ри�ер, clng("47 ") в��вращает цел�е чи�л� 47 cdbl(значение) Значение чи�ла � �лавающей т�ч��й дв�йн�й т�чн��ти. И���ль� �ует�� дл� �ревращени� �тр���в��� �ред�тавлени� чи�ла в чи�л� � �лавающей т�ч��й. На�ри�ер, cdbl("1.23") в��вращает 1.23 cdate(значение) Значение даты�вре�ени. И���ль�ует�� дл� �ревращени� те�� �т�в�й �тр��и, �ред�тавл�ющей дату или дату�вре�� в �начение даты�вре�ени. На�ри�ер, cdate ("10-Jan-2011 11:30 AM") в��� вращает ���твет�твующее �начение даты�вре�ени chr(значение) В��вращает �дн��и�в�льную �тр��у, ��держащую �и�в�л, ���т� вет�твующий цел�чи�ленн��у �начению ��да ASCII asc(строка) В��вращает �начение ��да ASCII �ерв��� �и�в�ла �тр��и Е�ть и дру�ие фун�ции ��нвертир�вани�. Их ��лный �еречень �риведен в ��ра� в�чн�� �атериале ����ании M���oso�� �� V�S���p� ��д �а��л�в��� Fu����o�s. Функции даты-времени Дл� ва�, наверн�е, не �удет не�жиданн��тью, чт� в V�S���p� и�еет�� р�д в�тр�� енных фун�ций дл� ��ле�чени� ра��ты � данны�и даты и вре�ени, �����ль�у ����ьютеры д�в�льн� ча�т� ��ылают�� на эти данные. Считывание показаний системных часов с помощью функций Date(), Time() и Now() Фун�ции Date() и Time() в��вращают ���твет�твенн� те�ущую �алендарную дату и вре�� л��альных �и�те�ных ча��в, ��т�рые ��редел�ют�� ��ераци�нн�й �и�те��й. На�ри�ер, дл� �т��ражени� те�ущей даты и вре�ени в ��не ����щени� ��жн� в����ль��вать�� �ледующи� ��д��: ' Файл примера script0209.vbs MsgBox "Текущая дата: " & Date() & " и время: " & Time() Фун�ци� Now() в��вращает ��четание те�уще�� вре�ени и даты. ▼) Использование оператора & для объединения строк с функцией, возвращающей даты, может показаться странным, но это одна из весьма изящных особенностей VBScript. Поскольку ин- VBScript. Поскольку ин- . Поскольку ин- терпретатору известно, что символ & всегда работает со строками, он «понимает», что нужно конвертировать значения даты и времени в их строковые представления. Значени� даты и вре�ени хран�т�� в виде чи�ел. Значение даты хранит�� в виде цел��� чи�ла дней, �р�шедших � 1 �нвар� 0099 ��да, а �начени� вре�ени хран�т��
Функции VBScript 95 в виде де��тичн�й др��и дней (1 �е�унда равна 0,0000115741�. Бе�����ить�� � т��, �а� эт� делает��, ��вершенн� и�лишне, н� �нать �� эт�� ��ле�н�, �����ль�у эт� ���в�лит ра��тать � дата�и, и���ль�у� ариф�етиче��ий ��ерат�р +. На�ри�ер, �ледующий ��д �ри�ваивает �е��дн�шнюю дату �лю� �дин день �ере�енн�й, ���� �начающей �автрашний день — tomorrow: tomorrow = date()+1 Н� в�е же лучше в����ль��вать�� ��ециальны�и в�тр�енны�и фун�ци��и вычи�лени� даты и вре�ени, �ред��тавл�е�ы�и V�S���p�, ��т�рые �удут ра����� трены далее в эт�й �лаве. Вычисление будущей даты с помощью функции DateAdd И���ль�у� фун�цию DateAdd, ��жн� �ри�авл�ть � �аданны� дате, вре�ени или � ��четанию даты�вре�ени у�а�анные интервалы. Дл� эт�й фун�ции и���ль�ует�� �ледующий �инта��и�: DateAdd(интервал, количество, дата) Ар�у�ент дата и���ль�ует�� дл� �адани� и�х�дн�й даты. Ар�у�ент интервал �вл�ет�� ти��� интервала, на�ри�ер, �е��ц, день или ��д, а ар�у�ент количество �вл�ет�� ��личе�тв�� �ри�авл�е�ых интервал�в. С�и��� ти��в интервал�в �ред� �тавлен в та�л. 2 .5 . Они д�лжны �ыть �ереданы фун�ции DateAdd в виде �тр��и, �а�люченн�й в �авыч�и. Таблица 2.5. Типы интервалов для функции DateAdd() Интервал Описание YYYY Г�ды Q Кварталы M Ме��цы W Недели D Дни H Ча�ы N Минуты S Се�унды Ра����три� не���ль�� �ри�ер�в. Выражение Возвращаемое значение DateAdd("M", 2, Date()) Се��дн�шн�� дата �лю� два �е��ца DateAdd("H", -1, Time()) Те�ущее вре�� �ину� �дин ча� Функция DateDiff() Фун�ци� DateDiff() вычи�л�ет интервал �ежду дву�� дата�и. Дл� нее и���ль�у� ет�� �ледующий �инта��и�: DateDif(интервал, дата1, дата2)
96 Глава 2. Руководство по VBScript Ар�у�ент интервал ��и�ывает ф�р�ат т��� ре�ультата, ��т�рый нужн� вернуть. Е�� �начени� �риведены в та�л. 2 .5 . На�ри�ер, DateDiff("D", "9/9/1999", "1/2/2001") в��вращает ��личе�тв� дней �ежду 9 �ент��р� 1999 ��да и 2 �нвар� 2001 ��да. Эта фун�ци� ����енн� ��ле�на в �ценари�х, вычи�л�ющих в��ра�т файл�в. На�ри�ер, ��жет ��тре��вать�� удалить �аданный файл, е�ли �н �тарше трех ча��в. Е�ли �ере�енна� timestamp ��держит дату и вре�� ���ледне�� и��енени� файла, т� �ледующа� �р�вер�а ��ределит, ��длежит данный файл удалению или нет: if DateDiff("H", timestamp, time()) > 3 then Другие функции работы с датами Далее ���а�ан еще р�д фун�ций даты и вре�ени, � �уще�тв�вании ��т�рых �ле� д�вал� �ы �нать. Функция Возвращаемое значение Day(дата) День �е��ца �аданн�й даты в диа�а��не �т 1 д� 31 Weekday(дата) День недели �аданн�й даты в виде чи�ла �т 1 д� 7, �де 1 ���твет�твует в���ре�енью, 2 — ��недельни�у и т. д . Month(дата) Ме��ц �аданн�й даты, �де 1 ���твет�твует �нварю и т. д. WeekdayName(дата) День недели �аданн�й даты, в��вращенный в виде �тр��и MonthName(дата) На�вание �е��ца, в ��т�рый ���адает �аданна� дата Hour(время) Ча� (�т 0 д� 23� �аданн��� вре�ени Minute(время) Минута (�т 0 д� 59� �аданн��� вре�ени Second(время) Се�унда (�т 0 д� 59� �аданн��� вре�ени Date(время) С ар�у�ент�� фун�ци� Date в��вращает т�ль�� ту ча�ть �начени� даты�вре�ени, ��т�ра� �тн��ит�� � дате, фа�� тиче��и ��лн�чь у�а�анн�й даты. (Бе� ар�у�ента фун�� ци� Date в��вращает �е��дн�шнюю дату� Time(время) С ар�у�ент�� фун�ци� Time в��вращает т�ль�� ту ча�ть �начени� даты�вре�ени, ��т�ра� �тн��ит�� � вре�е� ни. (Бе� ар�у�ента фун�ци� Time в��вращает те�ущее вре��� В V�S���p� и�еют�� �ред��ределенные ��н�танты �� �начени��и дней недели vbSunday, vbMonday и т. д., ��т�рые ��жн� и���ль��вать дл� �р�вер�и �начений, в��вращае�ых фун�цией Weekday в If и дру�их ��ерат�рах. К�н�танта vbMonday и�еет ��лее выра�ительный вид, че� чи�л� 2 дл� тех, �т� не�на��� � данн�й фун�� цией. Ра����три� р�д �ри�ер�в �начений, в��вращае�ых V�S���p�, ���да выра� жение вычи�л�ет�� в 3:10:37 ���ле ��лудн� (в 15:10:37� в� вт�рни�, 11 �нвар� 2000 ��да.
Функции VBScript 97 Выражение Возвращаемое значение Day(now()) 11 Weekday(now()) 3 (дл� вт�рни�а� Month(now()) 1 (дл� �нвар�� WeekdayName(Weekday(now())) "в торник" MonthName(Month(now())) "Январь" Hour(now()) 15 Minute(now()) 10 Second(now()) 37 Приемы работы с датами Ра����три� р�д �рие��в ра��ты � дата�и, ��т�рые � ча�т� и���ль�ую дл� вычи�� лени� �ерв��� и ���ледне�� дней �аданн��� �е��ца. Они ���ут ва� �ри��дить��, ���да ��тре�ует�� на�и�ать �ценарий, ��т�рый, � �ри�еру, нужен дл� ��наружени� в�ех файл�в, ���данных в течение �редыдуще�� �е��ца. Прие� ��н�ван на т�� фа�те, чт� дл� лю���� �начени� даты dt выражение dt - Day(dt) в��вращает ���ледний день �редыдуще�� �е��ца. На�ри�ер, е�ли dt — эт� �ервый день лю���� �е��ца, dt - 1 в��вращает �редыдущий день, ��т�рый �вл�ет�� ���ледни� дне� �редыдуще�� �е��ца. Т� же �а��е �р�и�х�дит дл� вт�р��� дн� �е��ца: dt - 2 ���ть�та�и в��вращает ���ледний день �редыдуще�� �е��ца. Эт�т �ринци� ��тает�� ��раведливы� в���ще дл� лю��й даты, не�ави�и�� �т т���, ���ль�� в�е�� дней в �е��це. Е�ли ��жн� ��ределить ���ледний день �редыдуще�� �е��ца, т� �ате� ��жн� вычи�лить начальную и ��нечную даты �редыдуще�� �е��ца. Ра����три� �ри�ер: ' Файл примера dates.vbs prev_m _last = Date() - Day(Date()) ' пос ледний день предыдущего ' мес яца prev_m _first = prev_m _last - Day(prev_m _last) + 1 ' переход к первому дню ' предыдущего месяца this_m _first = Date() - Day(Date()) + 1 ' первый день этого месяца this_m _last = this_m_first+40 ' гарантированный переход ' в следующий месяц this_m_last = this_m_last - Day(this_m_last) ' зат ем воз вращение ' к пос леднему дню ' те кущего месяца next_m_first = Date() - Day(Date()) + 40 ' гарантированный переход ' в с ледующий месяц next_m_first = next_m_first - Day(next_m_first) + 1 ' затем возвращение ' к п ервому дню следующего ' мес яца next_m_last = next_m_first + 40 ' г арантированный переход ' в с ледующий за ним месяц next_m_last = next_m_last - Day(next_m_last) ' воз вращение к концу ' сл едующего месяца
98 Глава 2. Руководство по VBScript (За�ружае�а� вер�и� эт��� �ценари� в�лючает ��ерат�ры wscript.echo, ���а� �ывающие ре�ультаты, а �де�ь ���а�ан ���ращенный вариант.� Эти �рие�ы ����енн� ��ле�ны �т�ут�твие� не��х�ди���ти учета ��личе�тва дней в �ажд�� �е��це. При вычи�лении эт��� �нать не нужн�. Н� нужн� ���лю� дать ��т�р�жн��ть в дру���. Даты, вычи�ленные эти�и выражени��и, е�ли �ни интер�ретируют�� �а� дата�вре��, фа�тиче��и у�а�ывают на ��лн�чь �аданн�й даты. Е�ли, ��аже�, вы ���ираете�ь и���ль��вать их дл� �т��ра файл�в, ���дан� ных в �аданн�� диа�а��не дат, �ледует �р��вить ����ую ����трительн��ть. Эта �р�вер�а if file_time >= prev_m_first and file_time <= prev_m_last then не да�т в����жн��ти �т��рать ��льшин�тв� файл�в, ���данных в ���ледний день �е��ца, ��т��у чт� �начение �ере�енн�й prev_m_last фа�тиче��и �ред�тавл�ет ����й ��лн�чь ���ледне�� дн�, 23 ча�а, 59 �инут и 59 �е�унд, т� е�ть ���а�атель, �ли��ий � на�т��ще�у ��нцу �е��ца. Дл� файла, ���данн���, ��аже�, в 15 ча��в ���ледне�� дн�, �начение �ере�енн�й file_time �удет ��льше, че� �начение �ере� �енн�й prev_m _last, и �р�вер�а ���людени� у�л�ви� if �риведет � т��у, чт� эт�т файл не ���адет в ��и���. Дл� ��рре�тн�й ��д��р�и в�ех дат диа�а��на ��жн� у�тр�ить �ледующую �р�вер�у: if file_time >= prev_m_first and file_time < (prev_m_last+1) then Не��льша�, н� ве�ь�а важна� ��рре�тир�в�а! В эт�й вер�ии ��ерат�ра if ведет� �� �р�вер�а дл� файл�в, ���данных перед полуночью дня после окончания нужного диапазона, ��эт��у в вы��р�у в��лне ре��нн� ���адает файл, ���данный в лю��е вре�� ���ледне�� дн�. В�е�т� эт��� ��жн� �а�тавить V�S���p� �р�верить т�ль�� лишь ту ча�ть �т� �ет�и вре�ени ���дани� файла, ��т�ра� �тн��ит�� � дате: if Date(file_time) >= prev_m_first or Date(file_time) <= prev_m _last then Та��й вариант та�же �удет ра��тать �а �чет и�ъ�ти� ча�ти «вре��» и� �начени� �ере�енн�й file_time. Взаимодействие с пользователем V�S���p� не ра�ра�атывал�� дл� на�и�ани� �р��ра�� �� �л�жны� ��ль��ва� тель��и� интерфей���, н� �н ��жет выв�дить �р��тые ����щени� и ��лучать �т ��ль��вател� �р��тые �тр��и вв�да � ����щью и�еющих�� у не�� фун�ций MsgBox и InputBox. ▼) Кроме этого, сценарии могут читать и записывать файлы, а также общаться посредством окна командной строки, используя объект TextFile, рассматриваемый в главе 4 «Доступ к файлам и реестру». В данной главе рассматриваются только основные методы ввода-вывода, имею- щиеся в VBScript.
Взаимодействие с пользователем 99 Функция MsgBox() В �в�ей наи��лее ��щей ф�р�е фун�ци� MsgBox выв�дит те��т ����щени� ��ль��� вателю. На�ри�ер, �ледующий ��д ��уще�твл�ет выв�д, ���а�анный на ри�. 2 .2: ' Файл примера script0210.vbs MsgBox "Это сообщение было выведено VBScript в " & time() Рис. 2 .2 . Основное окно сообщений, в котором выведена строка для пользователя сценария Фун�цию MsgBox ��жн� та�же и���ль��вать дл� �р��тых в��р���в ��ль��вате� лю �ценари�, на ��т�рые �ред��ла�ает�� �твет «да» или «нет». Чт��ы �адать та��й в��р��, и���ль�ует�� ра�ширенна� ф�р�а фун�ции MsgBox, и�еюща� �ледующий �инта��и�: MsgBox(вопрос [, кнопки][, заголовок]) Зде�ь и���ль�уют�� �ледующие три ар�у�ента: y y вопрос ��редел�ет �т��ражае�ый те��т; y y кнопки ��редел�ют те �н���и, ��т�рые �удут �редл�жены ��ль��вателю; y y заголовок �вл�ет�� те��т�вы� �а��л�в���, �т��ражае�ы� в верхней ча�ти диа� л���в��� ��на, ��т�р�е выв�дит�� в ре�ультате вы��лнени� фун�ции. Ар�у�енты кнопки и заголовок ��жн� ��у�тить, в �лучае их �т�ут�тви� V�S���p� выведет �н���у OK и �а��л�в�� «V�S���p�». Значение ар�у�ента �н���и д�лжн� �ыть в��т� и� �еречн�, �риведенн��� в та�л. 2 .6 . М�жн� в����ль��вать�� и�ене� ��н�танты или чи�л�вы� �начение�. Таблица 2.6. Выбор кнопок для функции MsgBox() Имя константы Значение Отображаемые кнопки VbOKOnly 0 OK VbOKCancel 1 OK и Отмена (C������ VbAbortRetryIgnore 2 Прервать (Abo���, Повтор (R���y� и Про- пустить (Ig�o��� VbYesNoCancel 3 Да (Y�s�, Нет (No� и Отмена (C������ VbYesNo 4 Да (Y�s� и Нет (No� VbRetryCancel 5 Повтор (R���y� и Отмена (C������
100 Глава 2. Руководство по VBScript В����ль��вавши�ь, � �ри�еру, �ледующи� ��д��, ��жн� ����щить ��ль��ва� телю, чт� �а�р�шенный файл не найден, и ��р��ить, нужн� ли �р�д�лжить ра��ту: choice = _ MsgBox("Файл персональных настроек отсутствует, продолжить работу?", vbYesNo) Фун�ци� MsgBox в��вращает ли�� �начение vbYes, ли�� �начение vbNo, в �ави�и� ���ти �т т���, на �а��й �н���е �ыл �р�и�веден щелч��. В����жные в��вращае�ые фун�цией MsgBox �начени� �еречи�лены в та�л. 2.7 . Они ���а�ывают, �а�а� и� �н���� �ыла вы�рана ��ль��вателе�. Таблица 2.7. Значения, возвращаемые функцией MsgBox() Имя константы Значение VbOK 1 VbCancel 2 VbAbort 3 vbRetry 4 vbIgnore 5 VbYes 6 VbNo 7 Нар�ду � ����щение�, �т V�S���p� ��жн� ��тре��вать �т��ражени� �нач�а, д�� V�S���p� ��жн� ��тре��вать �т��ражени� �нач�а, д�� ��жн� ��тре��вать �т��ражени� �нач�а, д�� �авив � ар�у�енту кнопки еще �дн� �начение и� �еречн�, �риведенн��� в та�л. 2 .� . Таблица 2.8. Значения значков, используемых в функции MsgBox() Имя константы Значение Отображаемый значок VBCritical 16 Важн�е ����щение VBQuestion 32 В��р�� VbExclamation 4� В���лицание VBInformation 64 Инф�р�аци� Следующий ��д выв�дит ����щение �� �нач��� Инф�р�аци�: ' Файл примера script0211.vbs x=33 MsgBox "Переменная x имеет значение " & x, vbOKOnly + vbInformation,_ "Отладочная информация" Ре�ультат ���а�ан на ри�. 2.3. Вы��р �нач�а vbInformation та�же �а�тавл�ет W��dows ��давать ��ециальный �ву��в�й �и�нал «Инф�р�аци�»; чт��ы е�� у�лы� шать, нужн� �а�у�тить уче�ный �ценарий. Ин��да нужн�, чт��ы фун�ци� MsgBox выв�дила �а�ие�ни�удь интере�ные ��� ��щени�, н� �ри эт�� �ыл� �ы а���лютн� �е�ра�личн�, на �а��й и�енн� �н���е щел�нул ��ль��ватель или �а��е �начение вернула фун�ци� MsgBox. В та��� �лучае �ри вы��ве MsgBox �ру�лые �����и нужн� ��у�тить. Эт�т в��р�� уже ра���атри� вал�� в данн�й �лаве в ра�деле «Вы��в фун�ций и ��д�р��ра��».
Взаимодействие с пользователем 101 Рис. 2 .3. Результат работы функции MsgBox с заголовком и значком ▼) Функцию MsgBox можно использовать для отображения содержимого переменных и значений внутри программы для облегчения ее отладки. Например, если в самом начале вашей програм- мы присвоить значение переменной debug = True то по всей программе можно будет добавлять средства отладки, подобные следующему: if debug then MsgBox "Значение переменной x равно " & x Когда удастся добиться от программы приемлемой работы, можно будет отключить все отла- дочные сообщения, поменяв первую строку программы на следующую: debug = False Особую пользу это принесет при работе с отладчиком WSH, которая рассмотрена в конце гла- WSH, которая рассмотрена в конце гла- , которая рассмотрена в конце гла- вы 1 «Windows Script Host». Отладчик покажет, какой оператор вашего сценария был запущен, а оператор MsgBox сможет показать содержимое важных переменных. Фун�ци� MsgBox выв�дит диал���в�е ��н�, ��т�р�е ��тает�� на э�ране, ���а ��ль��ватель не щел�нет на �н���е. Ее не �ледует и���ль��вать в �ценарии, ��� т�р��у нужн� ра��тать в авт��атиче���� режи�е! Ваш �ценарий ни���да не �а� вершит��, �����ль�у �удет ждать реа�ции ��ль��вател�, не ��ращающе�� на не�� ни�а���� вни�ани�. Е�ли нужн� выве�ти инф�р�ацию �е� ��тан�в�и ра��ты �ценари�, ��жн� в��� ��ль��вать�� ��ерат�р�� Wscript.Echo, ��т�рый �удет ра����трен в �ледующе� ра�деле. Функция InputBox() V�S���p� ���в�л�ет ���р��ить ��ль��вателей вве�ти �р��тую те��т�вую �тр��у. Дл� эт��� и���ль�ует�� фун�ци� InputBox: ' Файл примера script0212.vbs UserName = InputBox("Введите, пожалуйста, свое имя ") MsgBox "Привет, " & UserName Эт�т �ценарий выведет диал���в�е ��н� дл� на��ра вв�ди�ых данных, ���а� �анн�е на ри�. 2 .4 . Фун�ци� в��вращает �начение, введенн�е ��ль��вателе�. В ���а�анн�� выше �ри�ере эт� �начение ��хран�ет�� в �ере�енн�й UserName. Ка� и �ри вы��ве MsgBox, �ри вы��ве фун�ции InputBox ��жн� д��авить ар�у� �енты, у�равл�ющие ее внешни� вид��. Дл� эт��� ��жн� и���ль��вать не���ль��
102 Глава 2. Руководство по VBScript вариант�в ар�у�ент�в, наи��лее интере�ны�и и� ��т�рых �ред�тавл�ют�� �леду� ющие: InputBox(приглашение, заголовок, умолчание) Рис. 2 .4 . Работа функции InputBox(), демонстрируемая пользователю Зде�ь приглашение �вл�ет�� ����щение�, �т��ра жае�ы� над ��ле� вв�да, за­ головок �вл�ет�� �а��л�в���, �т��ражае�ы� в верхней ча�ти диал���в��� ��на, а умолчание ���ещает у�а�анную �и�в�льную �тр��у в реда�тируе��е ��ле �ри �ерв�� е�� ���влении; �ате� ��ль��ватель ��жет �рин�ть эт� �начение или вне�ти в не�� и��енени�. На �ра�ти�е фун�цию InputBox ��жн� �ри�енить дл� вы��ра �а��и, ��ра�а� тывае��й �ценарие�: fldr = InputBox("Введите имя очищаемой папки", "Сценарий Очищение", "C:\TEMP") V�S���p� �р��вл�ет ве�ь�а ��льшую �и����ть в �тн�шении ти��в данных, храни�ых в е�� �ере�енных: е�ли ��ль��ватель введет 23, �начение, в��вращенн�е фун�цией InputBox, ��жет ра���атривать�� в �аче�тве чи�ла или �тр��и. Ра����три� д�в�льн� ��ле�ный �ценарий дл� вычи�лени� �вадратных ��р� ней (� уверен, чт� ва�, ��р�й, �рих�дит�� эти� �ани�ать�� �� не���ль�у ра� �а день�: do num = InputBox("Введите число", "Вычислитель квадратного корня", "0") ifnum<0then MsgBox "Нельзя извлечь квадратный корень из отрицательного числа " & _ num, VbOKOnly+VbExclamation elseif num = 0 then exit do ' в вод нуля завершает работу программы else MsgBox "Квадратный корень из " & num & " равен " & sqr(num), VbOKOnly end if loop Е�ли ��ль��ватель введет �а��е�ни�удь нечи�л�в�е �начение, на�ри�ер «XYZ», эт�т �ценарий да�т ���й � выв�д�� ����щени� �� �ши��е. Лучше в�е�да �р�вер�ть ��ль��ватель��ий вв�д на д��у�ти���ть, чт��ы �р��ра��а или ����щала � нед�� �у�ти��� вв�де, или, �� �райней �ере, вела �е�� �а��т� �� �����енн��у.
Взаимодействие с пользователем 103 Реали��вать эт�т �а�ы�ел ��жн� �ледующи� ��ра���. ШАБЛОН Когда у пользователя запрашивается ввод числа или даты, то для подтверждения допустимо- сти введенного значения используется функция IsNumeric(), или функция IsDate(): ' Файл примера script0213.vbs do num = InputBox("Введите число", "Вычислитель квадратного корня ", "0") if not IsNumeric(num) then MsgBox "Разве это число?" elseif num < 0 then MsgBox _ "Нельзя извлечь квадратный корень из отрицательного числа " & _ num, VbOKOnly+VbExclamation elseif num = 0 then exit do ' ввод нуля завершает работу программы else MsgBox " Квадратный корень из " & num & " равен " & _ sqr(num), VbOKOnly end if loop Фун�ци� InputBox �т��ражает �н���у Отмена (C������. Е�ли ��ль��ватель щел�ает на �н���е Отмена (C������, а не на �н���е OK, фун�ци� InputBox в��вра� щает �у�тую �тр��у (""�. О�наружить эт� ��жн� � ����щью �ледующе�� ��ера� т�ра: str = InputBox("Введите, пожалуйста, свое имя:") if len(str) = 0 then ... Зате� ��жн� ���твет�твующи� ��ра��� �треа�ир�вать на эт�, выйд� и� �це� нари�, �авершив ци�л и т. д . В вычи�лителе �вадратн��� ��рн� �итуаци� ��лады� вает�� та�, чт� �у�та� �тр��а ��дх�дит ��д �р�вер�у, ��уще�твл�е�ую фун�цией IsNumeric, и вычи�л�ет�� в нуль, ��эт��у вычи�литель �равильн� реа�ирует на щелч�� на �н���е Отмена (C������, не тре�у� �вн�й �р�вер�и на наличие �у�т�й �тр��и. Вывод простых текстовых сообщений с помощью метода Wscript.Echo При �тлад�е �лиш��� �а�ри�н��� �ценари� в не��т�рые ���енты нужн� ������ треть, чт� хранит�� в е�� �ере�енных �ри вы��лнении �р��ра��ы. Н� е�ли нужн� выве�ти �тлад�чную инф�р�ацию и� ци�ла или нужн� выве�ти �начени� де��т��в �ере�енных, а дл� эт��� и���ль�ует�� фун�ци� MsgBox, ва� �чень ���р� над�� е�т щел�ать ра� �а ра��� на �н���е OK. Е�ть ��лее ��дх�д�щий ������: ��ерат�р Wscript.Echo ��жет выве�ти те��т, не ��танавлива� вашу �р��ра��у. Эт�т ��ерат�р �ри��дит�� в �ценари�х не т�ль�� дл� �тлад�и — ин��да нуж� н�, чт��ы �ценарий выв�дил те��т�вую инф�р�ацию на ваш э�ран. Чуть ���же,
104 Глава 2. Руководство по VBScript в �лаве 4 и в ���ледующих �лавах �удут ���а�аны �ценарии, выв�д�щие ��и��и ��держи���� �а���, учетных �а�и�ей ��ль��вателей, �етевых ре�ур��в и дру��й инф�р�ации. Эт�т ��ерат�р вы�л�дит �чень �р��т�: wscript.echo выражение Он выв�дит �начение лю���� выражени� лю���� ти�а: дату, чи�л�, те��т или �улев� �начение. М�жн� �еречи�лить лю��е ��личе�тв� выражений, �тдел�� их дру� �т дру�а �а��ты�и, �а� в ��ерат�ре wscript.echo выражение, выражение, выражение, и V�S���p� выведет �начение �ажд��� и� них, �тделенн�е �т дру�их �начений �дин�чны� �р��ел��. ▼) Оператор Wscript.Echo может оказаться полезным только при запуске сценария с помощью команды cscript. Если сценарий будет запущен с помощью Wscript, WSH выведет весь текст Wscript.Echo с помощью появляющегося диалогового окна, точно так же, как при вызове функ- .Echo с помощью появляющегося диалогового окна, точно так же, как при вызове функ- Echo с помощью появляющегося диалогового окна, точно так же, как при вызове функ- с помощью появляющегося диалогового окна, точно так же, как при вызове функ- ции MsgBox. На�ри�ер, �ценарий username="Mary Smith" lastlogondate=#03/04/2011# wscript.echo "Последний вход в систему пользователя " _ & username & " состоялся ", lastlogondate выв�дит те��т Последний вход в систему пользователя Mary Smith состоялся 04.03.2011 Ка� �ыл� ���а�ан� ранее, V�S���p� �р��вл�ет �и����ть �ри ��ъединении �тр�� � ����щью ��ерат�ра & и ���в�л�ет ��ъедин�ть �� �тр���й �ере�енную лю���� ти�а — �н �ре��ра�ует �улев� �начение, дату или чи�л� в �тр��у, а �ате� ��ъедин�ет в�е в ре�ультирующую �тр��у. Эт� �в�й�тв� ��жн� и���ль��вать дл� д��авлени� т�ч�и � дате в ��нце �редл�жени�: username="Mary Smith" lastlogondate=#03/04/2011# wscript.echo "Последний вход в систему пользователя " _ & username & " состоялся ", lastlogondate & " ." Выв�д ��лучает�� � �равильн� ���тавленны� �на��� �ун�туации: Последний вход в систему пользователя Mary Smith состоялся 04.03.2011. Наболевшая тема П��в�льте �делать не��льш�е �т�ту�ление на те�у ф�р�атир�вани� ����щений. Ва� �рих�дил��ь ���да�ни�удь видеть, �а� ����ьютер выв�дит та��е в�т ве�ь�а не�ри�л�дн�е ����щение? 1 файлов удалено. Личн� �ен� та�ие ����щени� �ильн� ра�дражают. Не��н�тн�, ��че�у �ни ���тавлены �т�ль не�режн�, ведь ����щени� ��д��н��� ти�а ве�ь�а нетрудн� �т� ф�р�атир�вать и �риве�ти � н�р�альн��у литературн��у ��ы�у.
Более сложные темы, касающиеся VBScript 105 ШАБЛОН При подсчете в нашем обычном языке для единичного экземпляра предмета используется на- звание в единственном числе, в противном случае используется название предмета во множе- ственном числе. Это правило действует для любых чисел от нуля и выше. Рассмотрим пример: ' Файл примера script0214.vbs fornfiles=0to3 if nfiles = 1 then plural = "" else plural = "а(ов)" wscript.echo "Уже обработан(o) ", nfiles, "файл" & plural next В �дн�ра��в�й, черн�в�й �р��ра��е на эт� вни�ание ни�т� не ��ращает, н� е�ли ваша �р��ра��а �редна�начена дл� и���ль��вани� дру�и�и людь�и, �т�ит уделить вни�ание и ��ы�у. В �аче�тве у�ражнени� � �редла�аю ва� и��енить уче�ный �ценарий script0206.vbs, чт��ы �н выв�дил в ��нце �е�ни «1 �утыл�а» а не «1 �утыл��». Более сложные темы, касающиеся VBScript В эт�� ра�деле х�чет�� ра����треть р�д важных те� дл� ��лее ��ытных �р��ра�� �и�т�в, чт��ы ����чь и� дви�ать�� в �равильн�� на�равлении. Е�ли на данный ���ент эти те�ы �удет трудн� у�в�ить, не �т�ит �ереживать: �фера их �ри�енени� �тн��ит�� � наи��лее �л�жны� �р��ра��а� на V�S���p�. Обработка ошибок Не �е�рет, чт� �ценарии и дру�ие �р��ра��ы �� вре�ене� �тал�ивают�� � �р�� �ле�ны�и �итуаци��и: файл �т�ут�твует в �жидае��� �е�те, или ��ль��ватель ввел неверные данные, или... эт�т ��и��� ��жн� �р�д�лжать д� �е���нечн��ти. Сценарий ��жн� �делать та�и�, чт��ы �н ��хран�л ра��т�������н��ть �ри в��� ни�н�вении ��д��ных �р��ле�, в����ль��вавши�ь дл� эт��� �в�й�тв�� V�S���p�, ��т�р�е на�ывает�� ��ра��т��й �ши���. О�ычн�, е�ли ��ерат�р V�S���p� или ��ъе�т �т�л�нут�� � �р��ле��й, WSH �р��т� выв�дит ����щение �� �ши��е и ��танавливает вы��лнение �ценари�, не �авершив �аду�анн�й ра��ты. О�ра��т�а �ши��� ���в�л�ет �а�тавить V�S���p� �р�и�н�рир�вать �ши��и и �р�д�лжить вы� V�S���p� �р�и�н�рир�вать �ши��и и �р�д�лжить вы� �р�и�н�рир�вать �ши��и и �р�д�лжить вы� ��лнение �ценари�. Эт� в��ла�ает на ва� ����анн��ти �а���т��тельн�й �р�вер�и в��ни�н�вени� �ши���. О�ерат�р в����н�влени� вы��лнени� �ри �ши��е — on error resume next, �ред�и�ывает интер�ретат�ру V�S���p� �р�д�лжить вы��лнение �ценари�, е�ли �а��й�ни�удь ��ерат�р �т�л�нул�� � �ши���й. При и���ль��вании эт��� ��ерат�ра ��жн� �р�верить �начение в�тр�енн��� �в�й�тва err.number, чт��ы у�нать � �уще� �тв�вании �ши��и. Е�ли �ши��а дей�твительн� �лучила�ь, эт� �в�й�тв� �рини�ает ненулев�е �начение. Значение� �в�й�тва err.description �вл�ет�� �тр��а, ��ъ��� н�юща�, чт� и�енн� �р�и��шл� не та�, �а� над�. В���тан�вить ��ычн�е ��ведение,
106 Глава 2. Руководство по VBScript �ри ��т�р�� вы��лнение �ценари� �ри в��ни�н�вении �ши��и �ре�ращает��, ��жн� � ����щью ��ерат�ра on error goto 0. В ��льшин�тве �лучаев нужн� давать в����жн��ть V�S���p� �тлавливать �ши�� V�S���p� �тлавливать �ши�� �тлавливать �ши�� �и и �ре�ращать вы��лнение �ценари�, �����ль�у ��льшин�тв� �ши��� �ценари� �р�и�х�дит �� �ричине реальных �р��чет�в, � ��т�рых нужн� �нать, чт��ы и�еть в����жн��ть �т них и��авить��. О�ра��т�у �ши��� �ледует и���ль��вать т�ль�� дл� �ащиты т��� ��ерат�ра, � ��т�р�� и�ве�тн�, чт� е�� �т�а� �р�и��йдет, ���рее в�е��, �� не�ави��щи� �т ва� ���т��тель�тва�. В та��� �лучае �ледует �ридержи� вать�� �ледующей �хе�ы. ШАБЛОН Для защиты оператора, выполнение которого может закончиться неудачно, используется сле- дующий код VBScript: ... on error resume next ' не останавливать выполнение при ошибке оператор (операторы), ' вып олн ени е действия, в результате которые могут вызвать проблему ' кот орого может произойти ошибка failed = err.number <> 0 ' зап омн ить, если произошла ошибка err_cause = err.description ' сохранить описание ошибки (если была) on error goto 0 ' вос ста нов ить обычную остановку по ошибке if failed then ' вып олн ить действия при ошибке, например msgbox "Возникла следующая проблема: " & err_cause ... end if ... При в��ни�н�вении �ши��и эта ���лед�вательн��ть ��ерат�р�в �ценари� у�танавливает �начение �ере�енн�й failed в True. (Эт�т ре�ультат д�лжен �ыть �а�и�ан д� вы��лнени� ��ерат�ра on error goto 0, ��т��у чт� лю��й ��ерат�р on error ��ра�ывает инф�р�ацию.� В ��ще�, �ащищенную ча�ть нужн� делать �а� ��жн� ��р�че, ��т��у чт� е�ли вы��лнение �дн��� ��ерат�ра �авершит�� неудачн�, т� те ��ерат�ры, ��т�рые �а ни� �ледуют, в����жн�, та�же �удут нера��т�������ны�и. Е�ли �ши��а ��нару� жена, ��жн� вы��лнить лю��е �рие�ле��е дей�твие: решить �р��ле�у ��х�дны� ��������, ���ытать�� ее у�транить, ��вт�рить ���ыт�у вы��лнени� ��ерат�ра или �делать еще че���ни�удь ��дх�д�щее дл� данн�й �итуации. При�енение эт�й �хе�ы �удет ���а�ан� в� �н��их уче�ных �ценари�х данн�й �ни�и. ▼) Режим работы, устанавливаемый оператором on error, относится к вполне определенному ме- on error, относится к вполне определенному ме- error, относится к вполне определенному ме- error, относится к вполне определенному ме- , относится к вполне определенному ме- сту. Если он будет изменен в основном теле сценария, то он будет действовать только в нем, а не в каждой вызываемой функции или подпрограмме. Если изменить режим работы, устанав- ливаемый оператором on error внутри кода функции или подпрограммы, он будет действовать только внутри этого кода.
Более сложные темы, касающиеся VBScript 107 Процедуры: функции и подпрограммы Пр�цедуры �вл�ют�� �тр�ительны�и �л��а�и ��льших �р��ра��, на�и�анных на V�S���p�. Пр�цедура в вашей �р��ра��е — эт� �тдельна� �е�ци� ��да, вы��л� н�юща� ��н�ретную �адачу. Пр�цедуры �ывают двух ти��в: фун�ции и ��д�р�� �ра��ы. Мн��ие в�тр�енные фун�ции V�S���p� ва� уже �рих�дил��ь и�учать, н� ��жн� та�же ���дать и �в�ю ����твенную фун�цию. М�жн� та�же ���дать и ��д�р��ра�� �у, ��т�ра� ��х�жа на фун�цию, не в��вращающую �начение. Главн�е д��т�ин�тв� �р�цедур �а�лючает�� в т��, чт� ���ле �дн��ратн�й �а�и�и их в ��де �р��ра��ы �ни ���ут вы�ывать�� ���ль у��дн� ча�т�. При на� �и�ании фун�ции ��жн� т�ль�� �дин ра� ���ред�т�чить�� на т��, �а� вы��лнить ��н�ретную �адачу, чт��ы �ате� ��лучить в����жн��ть �р��т��� и���ль��вани� эт�й фун�ции, не вни�а� в детали ее ра��ты. Функции Чт��ы ���дать фун�цию, и���ль�уют�� ��ерат�ры Function и End Function. Лю�ую фун�цию или ��д�р��ра��у нужн� ���ещать после ��н�вн��� тела �ценари�. (Х�т� интер�ретат�р V�S���p� вы��лн�ет лю�ые ��ерат�ры, ��т�рые нах�д�т�� �ежду ваши�и фун�ци��и или ���ле них �а� ча�ть «��н�вн�й �р��ра��ы», ��д��н�е ра��еивание ��да �� файлу �ценари� ��жет �ильн� �а�утать тех, �т� �удет эт�т �ценарий читать.� На�ри�ер, �ледующа� �р��та� фун�ци� ��лучает �дин ар�у�ент и в��вращает �начение эт��� ар�у�ента � �ри�авленны� � не�у чи�л�� 2: function addtwo (value) addtwo = value+2 end function Ча�ть (value) ����щает V�S���p�, чт� фун�ци� �жидает �ередачи ей �дн��� ар�у�ента и чт� е�� �начение �на �удет хранить в �ере�енн�й �� и�ени value. Эта �ере�енна� �вл�ет�� локальной �� �тн�шению � фун�ции; е�ли в ваше� �ценарии та�же и���ль�ует�� �ере�енна� �� и�ени value, �ри вы��ве фун�ции addtwo ее �начение не изменяется. У фун�ции addtwo и�еет�� �в��, вре�енна� �ере�енна� �� и�ени value, ��т�ра� �уще�твует т�ль�� �ри ра��те addtwo. Следующа� �тр��а ��да ���а�ывает, �а� эта фун�ци� ��жет и���ль��вать�� в лю��� �е�те �ценари�: a = addtwo(3) К��да интер�ретат�р V�S���p� в�тречает выражение addtwo(3), �н начинает ���лед�вательн�е вы��лнение ��ерат�р�в фун�ции, �ри эт�� в �ере�енн�й value хранит�� �начение ар�у�ента 3. В��вращае��е �начение фун�ции у�танавливает��, ���да �р��ра��а �ри�ваивает �начение �ере�енн�й addtwo (т� е�ть �ере�енн�й � и�ене� �а��й фун�ции�. Нетрудн� д��адать��, чт� вы��в фун�ции �а�анчивает�� �ри�ваивание� �ере�енн�й a �начени� 5. Та�и� ��ра���, в�тр�енные фун�ции V�S���p� ��жн� д���лнить �в�и�и ���� �твенны�и фун�ци��и. При вы��ре и�ен �ере�енны� ар�у�ент�в, та�и� �а� value
108 Глава 2. Руководство по VBScript в �риведенн�� выше �ри�ере, нужн� �тдавать �ред��чтение те� и� них, ��т�рые и�еют �а��й�ни�удь ��ы�л, ����н�� те� �а�ы�, �а���� р�да инф�р�аци� �т них �жидает��. На�ри�ер, ���да фун�ции �ередает�� и�� файла (������m��, � ча�т�, уже �� �ривыч�е, на�ываю ар�у�ент fname. В ��их �ценари�х �ере�енна� или ар�у�ент �� и�ени fname в�е�да ��держит и�� файла. Следующа� фун�ци� ��лучает и�� файла, удал�ет и� не�� ра�ширение (у�а� �ывающее на ти� эт��� файла� и д��авл�ет � не�у ра�ширение .OLD . Эту фун�цию ��жн� и���ль��вать в �р��ра��е, ��т�ра� ���ирает�� ��н�вить файл. Е�ли нужн� ���дать ре�ервную ���ию файла д� вне�ени� и��енений в �ри�инал, �ледует в��� ��ль��вать�� эт�й фун�цией. Фун�ци� ��ределит нужн�е и�� файла ре�ервн�й ���ии на ��н�ве и�х�дн��� и�ени файла: ' Файл примера script0215.vbs function backup_file_name (fname) idot = InStrRev(fname, "." ) ifidot>0then backup_file_name = left(fname, idot-1)+" .OL D" else backup_file_name = fname+".O LD" end if end function Эта фун�ци� ра��тает �ледующи� ��ра���: фун�ци� InStrRev ведет ��и�� в �в�е� �ерв�� ар�у�енте (в данн�� �лучае в fname� �а���� �рав��� ���влени� вт�р��� ар�у�ента (в данн�� �лучае эт� �р��т� �и�в�л т�ч�и�. Она в��вращает �начение 0, е�ли вт�р�й ар�у�ент не найден, в �р�тивн�� �лучае �на в��вращает ���ицию внутри �ерв�й �тр��и, в ��т�р�й �удет найден эт�т ар�у�ент — 1, 2 и т. д . П�эт��у в данн�� �лучае �ере�енна� idot ��лучает �начение 0, е�ли т�ч�и не �удет в ар�у�енте и�ени файла fname, или же ��лучает �начение ��льше нул�, е�ли т�ч�а �удет найдена. (Е�ли ���ните, эта техн�л��и� уже и���ль��вала�ь ранее в данн�й �лаве, в �ри�ере script0208.vbs.� О�тальна� ча�ть фун�ции �ани�ает�� и�ене� ре�ервн�й ���ии файла. Е�ли т�ч�а �ыла найдена, фун�ци� ���тавл�ет н�в�е и�� файла и� �ервых �и�в�л�в �тар��� и�ени в�л�ть д� т�ч�и, н� и��люча� ее, д��авл�� � ни� �тр���в�е �начение .O L D. Е�ли т�ч�а в �тар�� и�ени не �ыла найдена, фун�ци� в�е равн� д��авл�ет . O LD . При вы��лнении �ледующих ��ерат�р�в �ере�енн�й file1 �ри�ваивает�� �начение MY.OLD, а �ере�енн�й file2 �ри�ваивает�� �начение SOMEFILE.OLD: file1 = backup_file_name("MY.DATA ") file2 = backup_file_name("SOMEFILE") Подпрограммы П�д�р��ра��ы ��х�жи на фун�ции, �а и��лючение� т���, чт� �ни не в��вращают ни�а�их �начений. Они и���ль�уют�� дл� вы��лнени� �а��й�ни�удь ��ределенн�й ра��ты —эти� ��жн� в����ль��вать�� и� в�е�� ��тальн��� ��да ваше�� �ценари�. На�ри�ер, �ледующа� ��д�р��ра��а ��лучает в �аче�тве �в�е�� ар�у�ента и�� файла. Она ��рашивает у ��ль��вател�, ��жн� ли удалить эт�т файл, и, е�ли ��ль� ��ватель щел�ает на �н���е OK, удал�ет е��:
Более сложные темы, касающиеся VBScript 109 ' Файл примера maybedel.vbs sub maybe_delete (fname) if msgbox("Удалить файл " & fname & "? ", vbYesNo) = vbYes then set fso = CreateObject("Scripting.FileSystemObject") fso.DeleteFile(fname) end if end sub В ��д�р��ра��е и���ль�ует�� в�тр�енна� фун�ци� MsgBox, �адающа� в��р�� ��ль��вателю �ценари�, д�лжен ли файл удал�ть��. Она выв�дит диал���в�е ��н� � дву�� �н���а�и: Да (Y� s � и Нет (No�. Е�ли ��ль��ватель щел�нет на �н���е Да (Y� s �, �р��ра��а и���ль�ует ��ъе�т FileSystemObject дл� реальн��� удалени� файла. (О�ъе�т FileSystemObject ра���атривает�� в �лаве 4.� Е�ли эта ��д�р��ра��а �удет ���ещена в ��нец файла �ценари�, в �р��ра��е ��жн� �удет в����ль��вать�� �ледующи�и ��ерат�ра�и: maybe_delete filename maybe_delete "OLD.DATA" К��да и�ве�тн�, чт� подробностями удалени� файл�в �ани�ает�� �р�цедура, ��н�тн�, чт� �ри на�и�ании �ценари� ��жн� ���нцентрир�вать�� на ��лее а�ту� альных �адачах (на решении �� удалении ��н�ретных файл�в�. Массивы Я�ы� V�S���p� ��ддерживает �ере�енные �а��ив�в. Ма��ивы �вл�ют�� �ере�ен� ны�и, в ��т�рых ��хран�ет�� ��лее �дн��� �тдельн��� �начени�. Ма��ив не�н��� ��х�ж на �н����вартирный д��, �де в �ажд�й �вартире и�еет�� �в�й жилец. Т�ч� н� та� же, �а� �ажда� �вартира и�еет �в�й н��ер, �тдельные �начени� в �а��иве идентифицируют�� �� н��ера�, на�ывае�ы� индексами. Ма��ивы и���ль�уют�� в т�� �лучае, ���да �ценарию �рих�дит�� ра��тать � �ере�енны� чи�л�� эле�ент�в (на�ри�ер, � и�ена�и ��ль��вателей или файл�в�. О�ычную �ере�енную в V�S���p� ��жн� ���дать �р��ты� �ри�ваивание� ей �начени�, а �еред �ервы� и���ль��вание� �ере�енн�й �а��ива нужн� ����щить � ее �уще�тв�вании V�S���p�. Ма��ивы ��ъ�вл�ют�� � ����щью ��ерат�ра dim (и�� ��начает d�m��s�o� — ра��ер�, ��т�рый ����щает V�S���p� �а��е ��льш�е �начение инде��а, ��т�р�е вы на�ерены и���ль��вать. Инде��аци� �а��ив�в на� чинает�� � нул�, ��эт��у ��ерат�р dim var(10) в дей�твительн��ти ���дает 11�эле�ентный �а��ив, � эле�ента�и var(0), var(1),..., var(10). П��ле ��ъ�влени� �а��ива е�� эле�ента� ��жн� �ри�в�ить �начени�: var(0) = "Первое значение" var(1) = "Второе значение" var(2) = "Третье значение" Б�льши� �реи�уще�тв�� и���ль��вани� �а��ив�в �вл�ет�� т�, чт� �ни ���в�� л�ют ���давать �р��ра��ы, не�ави�и�ые �т т��� ��личе�тва эле�ент�в, ��т�р�е
110 Глава 2. Руководство по VBScript тре�ует�� ��ра��тать. И���ль�у� ��ерат�ры ци�ла, ра����тренные ранее в данн�й �лаве, ��жн� ��уще�твл�ть ���лед�вательный �ере��р эле�ент�в �а��ива и ве�ти ���чередную ��ра��т�у �ажд��� эле�ента. Ра����три� �ри�ер: ' формирование массива из трех элементов dim var(3) var(0) = "Первое значение" var(1) = "Второе значение" var(2) = "Третье значение" nitems = 3 ' п осл едовательный перебор всех элементов массива с помощью For Each for each value in var wscript.echo value next ' п осл едовательный перебор всех элементов массива с помощью индексов for i = 0 to nitems-1 wscript.echo var(i) next В данн�� �ри�ере �начала ���дает�� �а��ив и� трех эле�ент�в, в �аждый и� ��т�рых ���ещает�� инф�р�аци�. Е�ли �аранее неи�ве�тн�, ���ль�� эле�ент�в �удет ���ещен� в �а��ив, е�� ��жн� ��ъ�вить � ��личе�тв�� эле�ент�в, �ре� вышающи� �р��н��ируе�ые ��тре�н��ти, а и���ль��вать в�е эле�енты не����а� тельн�. В �риведенн�� �ри�ере ��держи��е �а��ива выв�дит�� дважды. В �ервый ра� дл� эт��� и���ль�ует�� ци�л For Each, ��т�рый �� �череди �ри�ваивает и�еющие�� в �а��иве �начени� �ере�енн�й value. Ци�л For Each — �а�ый �р��т�й в на�и�а� нии, н� ��ль�у и� не�� ��жн� и�влечь т�ль�� в т�� �лучае, е�ли нужн� ��ра��тать а���лютн� �аждый эле�ент �а��ива. Вт�р�й ци�л ��уще�твл�ет ���лед�вательный �ере��р �а��ива, и���ль�у� �� �череди инде�� �ажд��� эле�ента. Эт�т ци�л �л�жнее в на�и�ании, �����ль�у инде��аци� �а��ива начинает�� � 0, и эт� ���т��тель�тв� нужн� �рать в ра�чет �ри �рин�тии решени� � �е�те ��тан�в�и �ере��ра. Дл� ��ращени� � �ажд��у эле�енту инде��ы д�лжны начинать�� � 0 и в��ра�тать д� ��личе�тва эле�ент�в �ину� 1. В �риведенн�� �ри�ере и�еет�� три эле�ента, ��эт��у на� нужен ци�л For, �ере�ирающий �начени� 0, 1 и 2. Да, эт� неуд��н�, н� и�енн� та� ра��тают �а��ивы в та�их ��ы�ах, �а� C и V�S���p�, и и�енн� та��й ��р�д�� �ал�жен в ��ще� �рин�тую �хе�у ра��ты � ни�и. При в�ей �в�ей �р��т�те данный �ри�ер ���а�ывает, �а� �а��ивы ������ны ��� �ратить ��ъе� ра��ты � ��льши� ��личе�тв�� эле�ент�в. Зде�ь �начени� �а��ива в�е�� лишь выв�дили�ь на э�ран, н� в����жн��ти �ценари� ��ра�д� шире. При и���ль��вании �а��ив�в нужн� т�ль�� лишь на�и�ать ��ерат�р ��ще�� �лана дл� ра��ты � �дни� эле�ент�� (на�ри�ер, var(i)�, а ци�л ���а��тит�� � ��вт�рении ра��ты � �ажды� и� эле�ент�в, тре�ующих ��ра��т�и.
Более сложные темы, касающиеся VBScript 111 ШАБЛОН Для обращения к элементам массива VBScript, где количество фактически используемых эле- ментов может быть меньше размера массива, используйте цикл For. Если количество исполь- зуемых элементов представлено значением переменной nitems, воспользуйтесь следующим оператором цикла: for i = 0 to (nitems-1) работа с элементом массива (i)... next Е�ли нужн�, �а��ивы ���ут �ыть на�тр�ены та�и� ��ра���, чт��ы их ра��ер ��� и��ен�ть�� в �р�це��е вы��лнени� �р��ра��ы. Сначала �а��ив д�лжен �ыть ��ъ�влен: dim varname() Зате�, �еред е�� �ервы� и���ль��вание� и в лю��е вре�� ���ле эт���, ра��еры �а��ива ���ут �ыть у�тан�влены или �ереу�тан�влены � ����щью ��ерат�ра ReDim: ReDim [preserve] имя_переменной(индекс) [, ...] При�ут�твие �лючев��� �л�ва preserve �а�тавл�ет V�S���p� ��хран�ть �уще� �твующие данные �ри и��енении ра��ера �а��ива; �ри �т�ут�твии preserve �ере� �енные �чищают�� �т �начений и дл� в�ех эле�ент�в у�танавливает�� �начение Nothing. (Ра�у�еет��, даже �ри и���ль��вании �лючев��� �л�ва preserve у��р�� чение �а��ива �рив�дит � ��тере в�ей инф�р�ации, хранившей�� в �а�ы�ающих эле�ентах, �т ��т�рых �а��ив и��авл�ет��.� Область видимости переменных П� у��лчанию, ���да �ере�енна� ��ъ�влена или ���дана в ��н�вн�� теле файла �ценари�, �на и�еет глобальную область видимости, т� е�ть �на та�же д��ту�на лю��й �р�цедуре, вы�ывае��й в �ценарии. А в�т �ере�енные, ��ъ�вленные внутри фун�ций или ��д�р��ра��, и�еют �� у��лчанию закрытую область видимости. Они д��ту�ны т�ль�� внутри �р�цедуры, в ��т�р�й �ыли ��ъ�влены. Е�ли в �р�� цедуре и�еет�� �ере�енна� �� и�ени var, т� �ри вы��ве дру��й �р�цедуры �на не �удет и�еть д��ту�а � эт�й �ере�енн�й. П�д��на� �хе�а �ащищает �ере�енные в ваших �р�цедурах �т не�редна�еренн��� и��енени� дру�и�и �р�цедура�и. К��да �р�цедура, ��ределивша� �ере�енную, �ре�ращает �в�ю ра��ту, �ере�енна� уничт�жает��. Е�ли нужн� �вны� ��ра��� ���дать �ере�енные � �л��альн�й ��ла�тью види� ���ти, эт� ��жн� �делать � ����щью �т�ерат�ра public. Т� же �а��е �тн��ит�� и � �а�рыты� �ере�енны�, ��т�рые ��жн� ���дать � ����щью ��ерат�ра private. Пу�личные �ере�енные д��ту�ны лю��й �р�цедуре и �уще�твуют д� тех ��р, ���а �ценарий не �ре�ратит ра��ту. На�ри�ер, �р�цедура ��жет и���ль��вать �ледую� щий ��ерат�р дл� ��ъ�влени� �ере�енн�й Fsh и �а��ива MyArray, ��т�рые �удут д��ту�ны в�е� �р�цедура� в �ценарии: public Fsh, MyArray(10)
112 Глава 2. Руководство по VBScript П� у��лчанию �ере�енные ���ут и���ль��вать�� �е� �редварительн��� ��ъ� �влени� (или ��ределени� ра��ера�. О�ытные �р��ра��и�ты �нают, чт� эт� ��жет �риве�ти � трудн� ��наруживае�ы� �ши��а�, �����ль�у в та��� �лучае трудн� найти ��ечат�и; ���ира��ь и��енить �начение уже �уще�твующей �ере�енн�й, ��жн� �р��т� ���дать н�вую, на�и�анную � �ши��а�и �ере�енную. О�ерат�р Option Explicit и��равл�ет данную �итуацию, тре�у� �т ва� ��ъ�влени� в�ех �ере�енных �еред их �ри�енение�, � и���ль��вание� ��ерат�р�в dim, public или private. Я ре���ендую �ри�ен�ть эт�т �тиль �р��ра��ир�вани� в �л�жных �ценари�х. При �ерв�� на�и�ании �р��ра��ы дл� эт��� ��тре�ует�� не�н��� д�� ��лнительн�й ра��ты, н� �ат� эт� ����жет и��авить�� �т цел�й �ате��рии �ши���. Чт��ы в����ль��вать�� данн�й в����жн��тью, �делайте ��ерат�р Option Explicit �ерв�й �тр���й �в�е�� файла �ценари�. Зате� ���тавьте ���ле не�� ��ера� т�р dim, у�а�ыва� в ��де �аждую �ере�енную, и���ль�уе�ую в �ценарии. К�нечн�, ��ерат�р dim и���ль�ует�� дл� ��ъ�влени� �ере�енных �а��ива, н� �н та�же ��жет и���ль��вать�� и дл� ��ределени� ��ычных �ере�енных. В�т �ри�ер �ценари� � ��ечат��й: option explicit dim myname myname = "Брайан" wscript.echo "Привет, ", mynam Эт�т �ценарий ��енерирует ����щение �� �ши��е, �а� т�ль�� �т�л�нет�� � не� ��ределенн�й, на�и�анн�й � �ши���й �ере�енн�й mynam. Бе� ��ерат�ра Option Explicit эт�т �ценарий �р��т� ра��ечатает «Привет, », �е� �а�их�ли�� дру�их �ри�на��в �ши��и. Дополнительные источники информации Суще�твует еще �н�же�тв� инф�р�ации � V�S���p�, �р��е т�й, ��т�ра� �ыла и�� л�жена в данн�й �лаве. В �нижн�� �а�а�ине ��жн�, наверн�е, на�рать целую ��л�у �ни�, ���в�щенных и��лючительн� V�S���p�. Дл� ��лучени� �рат��й ��рав�и �� в�е� ��ерат�ра�, фун�ци��, ��ъе�та� и ��н�танта� V�S���p� �а�ру�ите ��рав�чни� �� ��ы�у (V�S���p� L��gu�g� R��������� � ве���айта technet.microsoft.com/scriptcenter. В�е ин�тру�ции �� �р����тру и �а�ру��е � уже давал в начале эт�й �лавы. И на��нец, � �читаю, чт� ���аты� и�т�чни��� инф�р�ации дл� в�ех, �т н�вич� ��в д� �нат���в, ���ут �тать не��т�рые н�в��тные �ру��ы M���oso��. О���енн� ��ле�ны�и �не �ред�тавл�ют�� �ру��ы www.microsoft.public.scripting.vbscript и www. microsoft.public.scripting.wsh. М�жн� �н����у научить��, �т�лежива� х�д ди��у��ий, и, в �тличие �т ��льшин�тва дру�их н�в��тных �ру��, ���ла�н� ��е�у ��ыту, �де�ь и�еет�� реальный шан� ��лучить ��ле�ный �твет на ��у�ли��ванный в��р��. Х�т� не��т�рые ���уждени� �а�ают�� и���ль��вани� V�S���p� на ве���ервере и в �рил�жени�х ве���рау�ера, ��льшин�тв� ���уждений �ри�ени�� и � на�и�а� нию �ценариев.
Создание сценариев и работа с объектами Эту �лаву ��жн� ра���атривать �а� введение в та�ие ��н�ти�, �а� ��ъе�ты, �ет�ды и �в�й�тва. За�ладывают�� ��н�вы �наний, не��х�ди�ых дл� у�в�ени� �атериала �ледующих �е�и �лав. y Зде�ь �удет ра����трен ��р�д�� и���ль��вани� ��ъе�т�в, �ред��тавл�е�ых W��dows S���p� Hos� �ри ра��те � ра�личны�и ��ы�а�и �ценариев. y Наи��льшую ��ль�у и� �ред�тавленн��� �атериала ��жн� и�влечь ���ле ��на� ���лени� х�т� �ы � �дни� и� ��ы��в �р��ра��ир�вани� �ценариев. y В ���ледне� ра�деле вы увидите, �а� ��жн� и�учить �н�же�тв� нед��у�енти� р�ванных ��ъе�т�в, �ред��тавл�е�ых W��dows. Введение в объекты В�е ��ы�и �ценариев, ра����тренные в �лаве 1 «W��dows S���p� Hos�», �ред��тавл�� ют �а��вый ин�тру�ентарий дл� у�равлени� вы��лнение� �ценари� и дл� ра��ты �� �тр��а�и, чи�ла�и, дата�и и т. д., н� �ни не в�е�да �ред��тавл�ют ������ в�а� и��дей�тви� � W��dows, файла�и или �ри�ладны�и �р��ра��а�и. Эти фун�ции �ред��тавл�ют�� объектами — д���лнительны�и �����нента�и, ра�шир�ющи�и в����жн��ти, �в�й�твенные ��ы�а� �р��ра��ир�вани�. В данн�� ра�деле ��ъ� ��н�ет��, чт� та��е ��ъе�ты, и дает�� введение в те ��н�ти�, � ��т�ры�и �ридет�� �тал�ивать�� �ри ра��те � ни�и. В �ледующих ра�делах ра���атривают�� в��р��ы и���ль��вани� ��ъе�т�в в не���ль�их ��ы�ах �р��ра��ир�вани�. В �а��� ��ще� ��ы�ле объекты — эт� не��льшие �р��ра��ные �л��и, ��т�рые �ани�ают�� ��ра��т��й и �ерен���� инф�р�ации. Они �вл�ют�� �р��ра��ны� �ред�тавление� че���ни�удь веще�твенн���, на�ри�ер файла, �а��и, �етев��� ��д� �лючени�, ����щени� эле�тр�нн�й ��чты или д��у�ента �x���. У ��ъе�т�в и�еют� �� �в�й�тва и �ет�ды. Свойства — эт� �начени� данных, ��и�ывающие �ри�на�и т��� �ред�ета, �ред�тавителе� ��т�р��� �вл�ет�� ��ъе�т. Методы — эт� дей�тви�, �в�е��ра�ные ��д�р��ра��ы, ��т�рые ��жн� и���ль��вать дл� и��енени� или у�равлени� в�е�, чт� �ред�тавл�ют ��ъе�ты. 3
114 Глава 3. Создание сценариев и работа с объектами На�ри�ер, файл на ваше� же�т��� ди��е и�еет ра��ер, дату ���дани� и и��. Стал� �ыть, в�е эт� �ринадлежит � �в�й�тва�, наличие ��т�рых ��жн� �жидать в ��ъе�те File. Файл ��жн� �ереи�ен�вать, удалить, �р�читать или �а�и�ать в не�� данные, �тал� �ыть, ��ъе�т File д�лжен �ред��тавл�ть �ет�ды дл� вы��лнени� в�ех этих �адач. Важны� а��е�т�� ��ъе�т�в �вл�ет�� их и��лир�ванн��ть и ���� ���ленн��ть �т т�й �р��ра��ы, ��т�ра� их и���ль�ует. Ка� ��ъе�т хранит внутри �е�� �в�и данные и ра��тает � ни�и — эт� е�� ����твенн�е дел�. Ка�ие и�енн� данные и �р�цедуры �танут д��ту�ны внешне�у �иру, вы�ирает авт�р ��ъе�та. На �р��ра��и�т���� жар��не ��в�рит��, чт� ��ъе�т выставляет �в�й�тва и �ет�ды; и� этих эле�ент�в и ���тавлен е�� интерфейс. На ри�. 3 .1 ���а�ан интерфей� �и� ��тетиче����� ��ъе�та File. Рис. 3 .1. Данный гипотетический объект File имеет интерфейс, который может использоваться другими программами. От внешних программ скрыто, как именно объект File хранит информацию и проделывает свою работу О�ъе�ты нуждают�� в �ехани��е, ���ред�тв�� ��т�р��� �ни ���ут ���ени� вать�� инф�р�ацией � �в�й�твах и �ет�дах � �р��ра���й или �ценарие�. П�� ���ль�у у �ажд��� ��ы�а �р��ра��ир�вани� е�ть �в�й ����твенный уни�альный ������ хранени� и �ередачи данных, ��ъе�ты и �р��ра��ы д�лжны и���ль��вать не�ие ���ла��ванные, ��щие ������ы ���ена данны�и. Дл� ���дани� �ценариев и дл� ��льшин�тва �рил�жений W��dows ����ани� M���oso�� и���ль�ует �ред� �тв� ��д на�вание� модель компонентных объектов — Compo���� Obj��� Mod�� (COM�. COM���ъе�ты ���ут и���ль��вать�� лю�ы�, ��в�е�ти�ы� � ни�и ��ы� ���, в�люча� V�S���p�, JS���p�, C, C++, C#, V�su�� ��s��, P��� и т. д . COM���ъе�ты ���ут та�же на�ывать�� ��ъе�та�и A���v�X — ActiveX Objects, ��ъе�та�и авт��а� ти�ации — Automation Objects или OL����ъе�та�и — OLE objects, е�ли у них и�еют� �� в��лне ��ределенные д���лнительные �в�й�тва, н� не�ави�и�� �т т���, �а� �ни на�ывают��, техн�л��и� �а�ирует�� на ��дели �����нентных ��ъе�т�в — COM. В �ледующих не���ль�их �лавах �удут ���а�аны ��ъе�ты, �ред�тавл�ющие фай� лы, �а��и, �етевые ��д�лючени�, ��ль��ватель��ие учетные �а�и�и, �ринтеры, �а� �и�и рее�тра, �рил�жени� W��dows, ����щени� эле�тр�нн�й ��чты и �н��ие дру�ие а��е�ты ваше�� ����ьютера и �ети. W��dows ���тавл�ет�� � �р��ра��ны� ��е��ече� ние�, �на�жающи� ва� ��р��ны� ��личе�тв�� ��ъе�т�в. Д���лнительные ��ъе�ты ��жн� та�же �а�ру�ить, �ри��ре�ти или ���дать �� �в�е�у ����твенн��у �а�ы�лу.
Введение в объекты 115 Классы и экземпляры Два дру�их ��н�ти�, � ��т�ры�и вы ��жете �т�л�нуть�� �ри ра��те � ��ъе�та� �и, — эт� класс и экземпляр. Ра�ница �ежду ни�и та�а� же, �а� �ежду ра��чи�и чертежа�и д��а и �а�и� д����. Сл�в� класс �тн��ит�� � ��ределению ��ъе�та: е�� интерфей�а (�ред��тавл�е� �ых и� �в�й�тв и �ет�д�в� и е�� реали�ации (��рыт��� �р��ра��н��� ��держи��� ��, вы��лн�юще�� в�ю ра��ту�. W��dows �ред��тавл�ет ��тни ��ле�ных �ла���в ��ъе�т�в, и вы ��жете д��авить � ни� (или ���дать� �а�ие�ни�удь д���лнитель� ные ��ъе�ты. Ка� уже ��в�рил��ь, ���дание ��ъе�т�в ��и�ан� в �рил�жении G, «C������g You� Ow� S���p��b�� Obj���s» («С��дание �в�их ����твенных ��ъе�т�в, �ри�ен�е�ых в �ценари�х»�, ��т�р�е ��жн� �а�ру�ить � ве��адре�а www.helpwin7. com/scripting. К��да ��ъе�т и���ль�ует�� в �ценарии, �р��ра��а �ла��а ���дает �дин или не���ль�� экземпляров ��ъе�та. Э��е��л�р �вл�ет�� уча�т��� ����ьютерн�й �а��ти, �редна�наченны� дл� хранени� данных ��ъе�та. Зате� �р��ра��а �ла��а дает вашей �р��ра��е ссылку дл� ее и���ль��вани� �ри ра��те � ��ъе�т�� — иден� тифи�аци�нн�е �начение, ��т�р�е �р��ра��а �ла��а ��жет и���ль��вать, чт��ы ��ределить, �а��й ��н�ретн� э��е��л�р ��ъе�та и���ль�ует ваш �ценарий или �р��ра��а. Эта �тади� ���а�ана на ри�. 3.2: �ере�енные file1 и file2 и �вл�ют�� те�и �а�ы�и �ере�енны�и, ��т�рые ��ылают�� на два э��е��л�ра ��ъе�та File. "" Рис. 3 .2 . Переменные obj1 и obj2 ссылаются на объекты класса File. На этой иллюстрации показаны два экземпляра объекта File С�ыл�а ра���атривает�� та� же, �а� и лю�а� дру�а� �ере�енна� в вашей �р�� �ра��е. Мет�ды и �в�й�тва ��ъе�т�в ��жн� и���ль��вать дл� ра��ты �� ��ыл��й на ��ъе�т т�чн� та� же, �а� фун�ции sqrt() и left() ��жн� и���ль��вать дл� ра��ты � чи�л�вы�и и �тр���вы�и �ере�енны�и. Контейнеры и коллекции Ка� уже у���инал��ь, объект �вл�ет�� �ред�тавление� не��т�р�й, в��лне реальн� �уще�твующей вещи, та��й �а� д��у�ент или же�т�ий ди��, и у не�� и�еют�� �в�й� �тва, ��т�рые �ред�тавл�ют реальные �ри�на�и вещей. На�ри�ер, ��ъе�т ��л��� ��жет и�еть та�ие �ри�на�и, �а� цвет или �и�лый в�у�.
116 Глава 3. Создание сценариев и работа с объектами Фа�тиче��ие данные, ��хран�е�ые дл� цвета, ���ут �ыть �тр���й �и�в�л�в, на�ри�ер "red" (�ра�н�е� или "green" (�елен�е�. Ки�лый в�у� ��жет �ыть �ред� �тавлен чи�л�� �т 0 (�лад��е �а� �ахар� д� 10 (�ле�у выши�ает�. О�ъе�т, ��и�ывающий файл на же�т��� ди��е, ��жет и�еть та�ие �в�й�тва, �а� и�� — name (�и�в�льна� �тр��а� и ра��ер — size (чи�л��. О�ъе�т, �ред�тавл�ющий же�т�ий ди��, ��жет и�еть �в�й�тва, ��и�ывающие ��ъе� же�т���� ди��а, и�� т��а, а та�же инф�р�аци�нн�е на��лнение ди��а. Те�ерь ��держи��е же�т���� ди��а ��жет �ыть �ред�тавлен� в виде ��и��а и�ен файл�в или �а��ива �тр���вых �начений. Н�, в����жн�, ��ле�нее �удет, е�ли же�т�ий ди�� ���жет выдать ��и��� ��ъе�т�в file, ��т�рые �ате� ��жн� �удет и���ль��вать дл� ра��ты � �а�и�и файла�и. И�енн� та� и ра��тают �н��ие ��ъе�ты. Та�, �де эт� в����жн�, ��ъе�ты ���ут вернуть ��ыл�и на дру�ие ��ъе�ты. К��да ��ъе�т д�лжен �ред��тавить ва� не���ль�� дру�их ��ъе�т�в, �н выда�т ва� ��ециальный ��ъе�т, ��т�рый на�ывает�� коллекцией — �н хранит внутри �е�� �р�� и�в�льн�е чи�л� дру�их ��ъе�т�в. На�ри�ер, ��ъе�т Folder ��жет �ред�тавл�ть �а��у на ваше� же�т��� ди��е, и е�� �в�й�тв� Files ��жет выдавать ��лле�цию ��ъе�т�в File, ��т�рые, �а� эт� ���а�ан� на ри�. 3 .3, �ред�тавл�ют �аждый файл в �а��е. Рис. 3 .3 . Объекты File и Folder могут представлять содержимое жесткого диска. Содержимое папки может быть представлено коллекцией объектов File и Folder О�ъе�т���лле�ци� ��жет ��держать внутри �е�� ��ъе�ты любого ти�а, и у не�� �а���� е�ть �в�и �в�й�тва и �ет�ды, ���в�л�ющие ве�ти ��д�чет этих ��ъе�т�в, а та�же и�вле�ать их и ра��тать � ни�и. «К�нтейнер» ��ъе�т�в, ��держащий дру�ие ��ъе�ты лю���� �р�и�в�льн��� ти�а, — ��ычн�е �вление в ��ъе�тн���риентир�� ванн�� �р��ра��ир�вании. О�ъе�ты W��dows A���v�X и���ль�уют ��ъе�ты���нтейнеры, и�еющие два �в�й�тва: эле�ент — Item и длина — Length. Св�й�тв� Length ���а�ывает, ���ль��
Введение в объекты 117 эле�ент�в нах�дит�� в ��лле�ции. Св�й�тв� Item и�вле�ает �дин и� эле�ент�в. В не��т�рых ��лле�ци�х �тдельные ��ъе�ты и� ��лле�ции ��жн� и�влечь � и�� ��ль��вание� �а�и�и Item(0), Item(1) и т. д . Н� дл� �н��их ��лле�ций �в�й�тв� Item тре�ует и�� или дру�ую ��рытую ���тавл�ющую идентифи�аци�нн�й ин� ф�р�ации. П�эт��у �аждый ��ы� �ценариев �ред��тавл�ет ��лее ��щий ������, ���в�л�ющий �р�верить в�е ��ъе�ты в ��лле�ции. Далее в эт�й �лаве данный в��р�� �удет ра����трен ��лее ��др��н�. К�лле�ции в �р��ра��ир�вании �ценариев W��dows в�тречают�� ��в�юду, и у не��т�рых ��ы��в и�еют�� ��ециальные �ред�тва дл� ра��ты � ни�и. При�еры и���ль��вани� ��лле�ций в �ажд�� и� ��ы��в �р��ра��ир�вани� ра���атрива� ют�� далее. Обозначение объектов П����ль�у ��ъе�ты �вл�ют�� �тдельны�и �р��ра��ны�и �����нента�и, �ценарии и дру�ие �р��ра��ы, ��т�рые их и���ль�уют, нуждают�� в ������е их ��наружени� и ����щени� W��dows � не��х�ди���ти их а�тиви�ации. В данн�� ра�деле �удет ра���а�ан�, �а� эт� делает��. Каждый �р��ра��и�т, ���дающий �ла�� ��ъе�та, дает е�у в т�й или ин�й �те�ени ��н�тн�е и��. На�ри�ер, �ла�� Scripting.FileSystemObject ра�ра��тан дл� и���ль��вани� �р��ра��а�и W��dows S���p� Hos� (WSH� � целью �р����тра ��держи���� же�т�их ди���в и у�равлени� ди��а�и, файла�и и �а��а�и. В �аж� д�� и� ��ы��в �р��ра��ир�вани�, д��ту�н�� дл� и���ль��вани� � WSH, и�еет�� ������ ���дани� э��е��л�ра ��ъе�та � у�а�ание� т�ль�� эт��� и�ени. На�ри�ер, в V�S���p� эту ра��ту вы��лн�ет ��ерат�р set fsobj = CreateObject("Scripting.FileSystemObject") а в Op�� Obj��� R�XX е�у ���твет�твует ��ерат�р fsobj = .OL EObject~New("Scripting.FileSystemObject") В лю��� �лучае ��ерат�р �а�тавл�ет интер�ретат�р WSH �а�р��ить у W��dows ���дание э��е��л�ра у�а�анн��� ��ъе�та. W��dows ведет ��и�� и�ени ��ъе�та в рее�тре, ищет и�� файла �р��ра��ы, ��т�ра� ра��тает � �ла���� эт��� ��ъе�та (��ычн� эт� файл, чье и�� �а�анчивает�� ра�ширение� .dll или .ocx�, и �а�у��ает д���лнительную �р��ра��у. Пр��ра��а �ла��а ���дает э��е��л�р ��ъе�та и �ред�� �тавл�ет ваше�у �ценарию ��ыл�у, ��т�рую �н ��жет и���ль��вать �ри ра��те � ��ъе�т��. Чуть ���же в эт�й �лаве �удет ���а�ан�, �а� эт� делает�� в �ажд�� ��ы�е, ��� в�е�ти��� � WSH. П�чти в� в�ех �луча�х эт��� ва� �удет в��лне д��тат�чн� дл� ра��ты. В ��тавшей�� ча�ти данн�й �лавы �удет ���а�ан�, �а� и���ль��вать ��ъе�ты в V�S���p� и в дру�их ��ы�ах. В �ледующе� ра�деле, ���в�щенн�� V�S���p�, и�� ��ль�ует�� та��й же �тиль, ��т�рый и���ль��вал�� в �лаве 2 «Ру��в�д�тв� �� V�S���p�», а ��и�ание �атериала дл� дру�их ��ы��в �ред��ла�ает наличие ��лее ��лидн��� ��ыта �р��ра��ир�вани�. И на��нец, в �авершение данн�й �лавы �удет ����щен�, �а� ��жн� найти ��� ле�ные ��ъе�ты, не в�тречающие�� в ���ледующих �лавах эт�й �ни�и.
118 Глава 3. Создание сценариев и работа с объектами Использование объектов в VBScript Дл� и���ль��вани� ��ъе�т�в в V�S���p� �начала нужн� ���дать э��е��л�р ��ъе�та и ��хранить ��ыл�у на не�� в �ере�енн�й V�S���p�. Зате� ��жн� �удет ��лучить д��ту� � �ет�да� и �в�й�тва� ��ъе�та, и���ль�у� выражени� переменная.имя_свой­ ства или переменная.имя _метода. Пр�ще �удет ���а�ать, че� ��ъ��нить, ��эт��у ра����три� �ри�ер. Эт�т не��льш�й �ценарий ����щает, и�еет�� ли на ваше� ди��е C: �а��а � и�ене� \windows: set fso = CreateObject("Scripting.FileSystemObject") if fso.FolderExists("c:\windows") then WScript.echo "Папка с именем c:\windows существует" end if В �ерв�й �тр��е �ценари� ���дает�� э��е��л�р ��ъе�та Scripting.FileSystem- Object. Эт� �ла�� ��ъе�та, �ред��тавл�е�ый WSH, у ��т�р��� и�еют�� уд��ные �в�й�тва и �ет�ды, д��ту�ные дл� и���ль��вани� �ри анали�е ���т��ни� ди���в и �ри ра��те � ни�и, и � их файла�и. Е�ли у�рать �л�в� set, в�е эт� �танет ��х�жи� на ��ычный вы��в фун�ции � в��вращае�ы� �начение�, ��т�р�е �ри�ваивает�� �ере�енн�й. На �а��� деле эт� та� и е�ть. CreateObject — эт� фун�ци�, ���дающа� н�вый э��е��л�р ��ъе�та. Н�вы� дл� на� �де�ь �вл�ет�� �л�в� set, ��т�р�е ��ы� V�S���p� тре�ует и���ль��� вать, чт��ы �ыл� видн�, чт� ��хран�ет�� не ��ычн�е �начение, а ��ыл�а на ��ъе�т. В ��ще� виде �инта��и� ���дани� э��е��л�ра ��ъе�та в V�S���p� вы�л�дит �ледующи� ��ра���: set имя_переменной = CreateObject("имя_объекта") �де имя_переменной — эт� �ере�енна�, ��т�рую вы х�тите и���ль��вать дл� хра� нени� ��ыл�и на ��ъе�т, а имя_объекта — эт� ти� ��ъе�та, э��е��л�р ��т�р��� вы х�тите ���дать. В� вт�р�й �тр��е �ри�ера и���ль�ует�� �ет�д FolderExists, ���в�л�ющий ��ределить, �уще�твует ли у�а�анна� �а��а. Следует ���нить, чт� �ет�ды и �в�й� �тва ��х�жи на ��ы�н�венные фун�ции и ��д�р��ра��ы; �р��т� �ни «живут» в �тдельн�й �р��ра��е, ��т�рую �ред��тавл�ет �ла�� ��ъе�та. При�ут�твие fso. �еред FolderExists ����щает V�S���p�, чт� фун�ци� FolderExists �вл�ет�� ча�тью �ла��а ��ъе�та, на ��т�рый ��ылает�� fso и ��т�рый в данн�� �ри�ере �вл�ет�� э��е��л�р�� ��ъе�та Scripting.FileSystemObject. Не��т�ры� �в�й�тва� и �ет�да� �ередают�� ар�у�енты, чт� видн� на �ри�ере FolderExists. При их �ередаче нужн� и���ль��вать �ру�лые �����и, т�чн� та� же, �а� эт� делает�� �ри вы��ве лю��й дру��й фун�ции или ��д�р��ра��ы V�S���p�. Е�ли �ет�д или �в�й�тв� в��вращает �начение фун�ции, нужн� и���ль��вать �ру�лые �����и: переменная = объект.свойство("аргументы", "в", "скобках") Е�ли �ет�д не в��вращает �начени�, �����и ��жн� не �тавить: объект.метод "аргументы", "без", "скобок"
Использование объектов в VBScript 119 В�е эт� уже �на����, не �равда ли? О�ъе�ты �а� та��вые �ы и���ль��вали �� в�е�у ру��в�д�тву �� V�S���p� в �лаве 2, в ��ерат�рах �ледующе�� вида: WScript.echo "Сегодняшнее число — ", date Те�ерь уже ��жн� ра����нать в WScript ��ыл�у на ��ъе�т, а в echo — вы��в �дн�� �� и� е�� �ет�д�в. Н� дл� у�тан�в�и WScript и���ль��вать CreateObject не нужн�, �����ль�у V�S���p� �ред��тавл�ет ��ыл�у на эт�т ��ъе�т авт��атиче��и. О�ъе�т WScript и�еет р�д дру�их ��ле�ных �ет�д�в и �в�й�тв, ��т�рые �удут ра����трены в данн�й �лаве чуть ���же. Ка� уже у���инал��ь, не��т�рые �в�й�тва и �ет�ды в��вращают в �в�их �на� чени�х ��ыл�и на дру�ие ��ъе�ты. На�ри�ер, ��ъе�т Scripting.FileSystemObject и�еет �ет�д GetFile, в��вращающий ��ыл�у на ��ъе�т File, ��т�ра� �ате� ��жет �ыть и���ль��вана дл� �р�вер�и ���т��ни� файла и ра��ты � ни�. Ра����три� уче�ный �ценарий, �ред��тавл�ющий ра��ер и дату ���дани� файла �р��ра��ы Бл��н�т — \windows\notepad.exe: set fso = CreateObject("Scripting.FileSystemObject") set file = fso.GetFile("c:\windows\notepad.exe") WScript.echo "Файл Notepad.exe был создан ", file.DateCreated WScript.echo "и имеет длину ", file.Size, " байт" Перва� �тр��а та�а� же, �а� и в �редыдуще� �ценарии, �на ���дает э��е��л�р ве�ь�а ��ле�н��� ��ъе�та Scripting.FileSystemObject. В� вт�р�й �тр��е ��ъе�ту FileSystemObject делает�� �а�р�� на в��вращение ��ъе�та File, �ред�тавл�юще�� файл c:\windows\notepad.exe. П����ль�у эт�т ��ъ� е�т нужн� и���ль��вать не���ль�� ра�, ��ыл�а на не��, �ла��дар� и���ль��ванию �лючев��� �л�ва set, ��хран�ет�� в �ере�енн�й file. (Х�т� в V�su�� ��s�� file �вл�ет�� �аре�ервир�ванны� �л�в��, в V�S���p� эт� не та�, ��эт��у е�� ��жн� и���ль��вать в �аче�тве и�ени �ере�енн�й.� В �ледующих двух �тр��ах и���ль�уют�� �в�й�тва ��ъе�та File ��д на�вани��и DateCreated и Size. П����ль�у ар�у�енты и� не нужны, �ру�лые �����и �т�ут�тву� ют. В��вращае�ые �начени� даты�вре�ени и чи�ла выв�д�т�� �ет�д�� WScript. echo. На ��е� ����ьютере эт�т выв�д и�ел �ледующий вид: Файл Notepad.exe был создан 14.07 .2009 2:41:04 и имеет длину 179712 байт Автоматизация и файлы документов Фун�ци� GetObject ��жет и���ль��вать�� дл� ��лучени� ��ъе�та, �ред�тавл�юще� �� не�ий уже �уще�твующий файл д��у�ента, чере� �р�це��, ��т�рый в ����ании M���oso�� на�ывает�� Автоматизацией (Au�om���o��. Фун�ци� GetObject и���ль�у� ет и�� файла д��у�ента дл� ��и��а ���твет�твующе�� �ервера �ла��а ��ъе�та чере� �тандартный �ехани�� �����тавлени� ти�а файла и �рил�жени�. С����тавлени� ти��в файл�в ��жн� увидеть в W��dows XP в W��dows �xp�o���, щел�нув на Сер- вис (Too�s�, Свойства папки (Fo�d�� Op��o�s�, Типы файлов (F��� Typ�s�. В W��dows 7 и V�s�� эт� �����тавление ��жн� ��лучить чере� Панель управления (Co���o� P�����,
120 Глава 3. Создание сценариев и работа с объектами Программы по умолчанию (P�og��ms�, Сопоставление типов файлов или протоколов конкретным программам (M�k� � F��� Typ� A�w�ys Op�� �� � Sp������ P�og��m�. В �ледующе� уче�н�� �ценарии фун�ци� GetObject и���ль�ует�� дл� ���дани� ��ъе�та д��у�ента Wo�d, �ред�тавл�юще�� �уще�твующий файл, и ��лучени� ра�� �ечат�и эт��� д��у�ента: set obj = GetObject("C:\docs\userlist.doc") ' получение объекта для ' существующего документа obj.Printout ' печ ать документа set obj = Nothing ' осв обождение объекта Фун�ци� GetObject ��жет та�же ��лучить ��ыл�у на уже �уще�твующий ��ъ� е�т, ���данный �а��й�ни�удь дру��й �р��ра���й чере� и��, ��т�р�е на�ывает�� псевдонимом (mo��k���. Дл� у�равлени� �етевы� ���ен��, W��dows и учетны�и �а�и���и ��ль��вателей в A���v� D�����o�y ��жет �ыть и���ль��ван р�д уже �у� ще�твующих ��ъе�т�в. Эта те�а �удет ра����трена в �лаве 7 «Ин�тру�ентарий у�равлени� W��dows» и в �лаве � «A���v� D�����o�y S���p���g I��������». Разница между свойствами и методами Не �наю �а� вы, н� � �� вре�ене� ��н�л, чт� вы��н��, в че� ра�ница �ежду �в�й� �тва�и и �ет�да�и, нетрудн� �а�утать��. На данный ���ент �����й нужды в ��� ни�ании эт�й ра�ницы нет, н� е�ли ва� интере�н�, � ра���ажу, �а�, в ��нце ��нц�в, �не удал��ь �рийти � не��т�р��у ��ни�анию данн��� в��р��а. Е�ли вернуть�� � �редыдуще�у ра�делу, ��жн� увидеть, чт� � у���инал � �ет�� де FolderExists �а� � ча�ти ��ъе�та FileSystemObject. А ��че�у FolderExists — эт� �ет�д, а не �в�й�тв�? Ответ на данный в��р�� �в�дит�� � �ледующи� ��н�вны� ��л�жени��: y y Св�й�тва �тн���т�� не���ред�твенн� � аспектам ��ъе�та или, е�ли т�чнее, � т�й вещи, ��т�рую �ред�тавл�ет ��ъе�т. y y Св�й�тва ведут �е�� �а� �ере�енные: на них �р��т� ��ылают�� �� и�ени. y y Кажд�е �в�й�тв� в��вращает не��т�р��� р�да �начение. И�влечение �начени� �в�й�тва не �рив�дит � и��енению че���ни�удь, �а�ающе���� ��ъе�та или т�й вещи, ��т�рую �н �ред�тавл�ет. y y Не��т�рые �в�й�тва ���в�л�ют �ри�ваивать и� н�вые �начени�. Те� �а�ы� и��ен�ют�� �ри�на�и ��ъе�та и и�х�дн�й вещи, ��т�рую �н �ред�тавл�ет. y y Мет�ды — эт� т�, чт� �р��ра��а ��ъе�та ��жет дл� ва� �делать. y y Мет�ды ведут �е�� �а� фун�ции и ��д�р��ра��ы и и� ��жн� �ередавать ар� �у�енты. y y Мет�ды не ����аны в��вращать �начение, н� не��т�рые и� них делают эт�. y y Вы��в �ет�да ��жет и��енить чт��ни�удь, �а�ающее�� ��ъе�та или вещи ре� альн��� �ира, ��т�рую �н �ред�тавл�ет. Стал� �ыть, FolderExists �вл�ет�� �ет�д��, �����ль�у е�у �ередает�� ар�у�ент (и�� т��� файла, ��т�рый нужн� найти�. Св�й�тва не нуждают�� в ар�у�ентах, ��т��у чт� �ни �тн���т�� � внутренни� атри�ута� �а���� ��ъе�та. П� �ути, �ни не нуждают�� в д���лнительн�й инф�р�ации дл� т���, чт��ы вернуть �начение.
Использование объектов в VBScript 121 О �в�й�твах нужн� у����нуть в�т еще чт�: в� �н��их �луча�х �в�й�тва ��ж� н� и вычи�лить (�р�верить их �начение� и �ри�в�ить и� н�в�е �начение. В эт�� ��ы�ле �ни ра��тают �а� �ере�енные. Ра�ница в �ледующе�: ���да �в�й�тву �ри�ваивает�� н�в�е �начение, �р��ра��а ��ъе�та вн��ит ���твет�твующие и�� �енени� в реальную вещь, �ред�тавленную ��ъе�т��. На�ри�ер, �ри�ваивание н�в��� �начени� �в�й�тву Name ��ъе�та File �рив�дит � и��енению на�т��ще�� и�ени файла: WScript.echo file.Name ' определение значения свойства file.Name = "newname" ' присваивание свойству нового значения Те� не �енее �ледует ���нить, чт� не��т�рые ��ъе�ты не ра�решают и��ен�ть �начение �в�й�тва. В эт�� �лучае в д��у�ентации �� ��ъе�ту та�ие �в�й�тва на� �ывают�� �в�й�тва�и только для чтения. А не��т�рые ��ециали�ир�ванные ��ъ� е�ты у�тр�ены та�, чт� и��енение �в�й�тв ��ъе�та не �рив�дит � не�едленн��у и��енению т�й вещи, ��т�рую �ред�тавл�ет ��ъе�т д� тех ��р, ���а ва�и не �удет и���ль��ван ��ециальный �ет�д, ��т�рый «фи��ирует» и��енение. И ���ть же, эт� ���варивает�� в д��у�ентации �� ��ъе�ту (� та�их ��ъе�тах �ы ����в�ри� в �ледующих �лавах�. Вложенные объекты В�т еще �дн� ���т��тель�тв�, �а�луживающее вни�ани�: ��вершенн� не����а� тельн� ��хран�ть �аждую ��ыл�у на ��ъе�т в �ере�енн�й. В �редыдуще� �ри�ере, в ��т�р�� �т��ражала�ь инф�р�аци� � файле Notepad.exe, е�ли нужн� т�ль�� ��� ���треть на дату ���дани�, ��жн� �р��у�тить эта� ��хранени� ��ыл�и на ��ъе�т File в �ере�енн�й file и в����ль��вать�� �ледующи�и ��ерат�ра�и: set fso = CreateObject("Scripting.FileSystemObject") WScript.echo "Файл Notepad.exe был создан ",_ fso.GetFile("c:\windows\notepad.exe ").DateCreated В эт�� �лучае V�S���p� ��ылает�� на fso дл� вы��ва �ет�да GetFile, и в��� вращенна� ��ыл�а на ��ъе�т и���ль�ует�� дл� и�влечени� �в�й�тва DateCreated. В �ценари�х та��е и���ль��вание не���ль�их ур�вней ��ъе�т�в в�тречают�� д�� в�льн� ча�т�, эт�т �рие� на�ывает�� вложенной ссылкой на объект. При ра��те � ��ъе�та�и M���oso�� Wo�d та�а� �ра�ти�а �читает�� в��лне ��ыч� н�й. В �ценари�х или �а�р��ах Wo�d ча�т� ���адают�� ��ерат�ры �ледующе�� вида: ActiveDocument.PageSetup.Orientation = wdOrientLandscape ActiveDocument.PageSetup.TopMargin = InchesToPoints(0.5) ActiveDocument.PageSetup.BottomMargin = InchesToPoints(0.5) ActiveDocument.PageSetup.PageWidth = InchesToPoints(11) В данн�� �ри�ере ��ъе�т ActiveDocument в��вращает ��ъе�т PageSetup, и�ею� щий �в�й�тва orientation и margin, �начени� ��т�рых ��жн� у�тан�вить. С�хранив ��ыл�у на ��ъе�т PageSetup �ри ���дании эт��� �ценари�, ��жн� �э��н��ить не� �н��� вре�ени на на��ре те��та: set ps = ActiveDocument.PageSetup ps.Orientation = wdOrientLandscape ps.TopMargin = InchesToPoints(0.5) ps.BottomMargin = InchesToPoints(0.5) ps.PageWidth = InchesToPoints(11)
122 Глава 3. Создание сценариев и работа с объектами Между �р�чи�, в V�S���p� и�еет�� ��ециальна� �р��ра��на� ��н�тру�ци�, и���ль�ующа� ��ерат�р �� и�ени With, ��т�рый ���в�л�ет еще ��льше у�р��тить �адачу. Предыдущий �ри�ер ��жн� �ере�и�ать �ледующи� ��ра���: with ActiveDocument.PageSetup .Orientation = wdOrientLandscape .TopMargin = InchesToPoints(0.5) .BottomMargin = InchesToPoints(0.5) .PageWidth = InchesToPoints(11) end with О�ерат�р With ���в�л�ет ��ределить ��ыл�у на ��ъе�т, ��т�ра� �ежду �лючевы� �и �л�ва�и With и End With �ерет�� �а� ��ъе�т «�� у��лчанию». Внутри ��ерат�ра With ��жн� ��ылать�� на �ет�ды и �в�й�тва ��ъе�та �� у��лчанию, �редвар�� их не и�ене� �ере�енн�й, а т�ч��й. Эт� не т�ль�� э��н��ит вре�� на на��ре те��та, н� и у�р�щает чтение, а та�же у�еньшает ра��чую на�ру��у на V�S���p�, у���р�� те� �а�ы� вы��лнение ваше�� �ценари�. ▼) Если нужно, внутри оператора With можно сослаться на другие объекты, воспользовавшись полной формой синтаксиса «объект.метод.и _так _далее». Освобождение объектов При ���дании ��ъе�та W��dows а�тивирует �ерверную �р��ра��у �ла��а ��ъе�та, чт��ы у�равл�ть ��ъе�т�� в ваших интере�ах. При и���ль��вании Scripting. FileSystemObject �дин и� этих ��ъе�т�в ���дает�� ��ычн� в �а��� начале �ценари� и и���ль�ует�� �� в�е�у �ценарию. К��да �ценарий �авершает �в�ю ра��ту, W��dows ��в���ждает ���данный ва�и ��ъе�т. Пр��ра��а �ервера �ла��а �ерет на �е�� вы�в���ждение �ани�ае��й и� �а� ��ти и дру�ие ���ут�твующие ра��ты, ��эт��у ва� не�аче� �� эт�� �е�����ить��. Н�, е�ли �ценарий и���ль�ует�� дл� ���дани� �н�же�тва ��ъе�т�в, ��жет в��ни�нуть �итуаци�, �ри ��т�р�й �удет целе����ра�н� ��в���дить эти ��ъе�ты �вны� ��ра��� �� ���нчании их и���ль��вани�. На�ри�ер, �ценарий, ��т�рый ���дает не���ль�� д��у�ент�в Wo�d, д�лжен �ри�а�ать Wo�d �а�рывать �аждый д��у�ент, ���да ра��та � ни� �удет �авершена, а �ате� �ценарий д�лжен ��в���дить ��ъе�т д��у�ента, чт��ы у ва� не ��тавали�ь �дн�вре�енн� �т�рыты�и ��тни д�� �у�ент�в. М�жн� в��лне ��ределенн� ����щить ��ъе�ту � �авершении ра��ты � ни�, у�та� н�вив дл� �ере�енн�й, в ��т�р�й ��держит�� ��ыл�а на ��ъе�т, �начение Nothing. При�еры та���� ��в���ждени� �удут �риведены далее. Работа с коллекциями Е�ли ���р��ить у ��ъе�та Scripting.FileSystemObject файлы или ��д�атал��и, ��� держащие�� в �а��е или на ди��е, т� ��жет ��над��ить�� вернуть �ра�у не���ль�� ��ъе�т�в файл�в — File или �а��� — Folder. Чт��ы ��равить�� � эт�й �адачей, ��ъе�т в��вращает �дин�чную коллекцию ��ъе�т�в, ��держащую внутри �е�� в�е
Использование объектов в VBScript 123 ��ъе�ты File или Folder. П��ле эт��� ��жн� и�учить ��держи��е ��лле�ции, чт��ы �����треть на �тдельные эле�енты. В ��ъе�те���лле�ции е�ть �в�й�тв� Count, ����щающее � ��личе�тве нах�д�� щих�� внутри эле�ент�в, и �в�й�тв� Item, в��вращающее у�а�анный эле�ент и� ��лле�ции. Они ���в�л�ют �ред��л�жить, чт� дл� выв�да и�ен файл�в ��рнев�й �а��и ваше�� же�т���� ди��а ��жн� на�и�ать �ледующий �ценарий: set fso = CreateObject("Scripting.FileSystemObject") set files = fso.GetFolder("c:\").Files for i = 1 to files.Count WScript.echo files.Item(i).Name next Н� эт�т �ценарий ра��тать не �удет. При ра��те � ��лле�цией �а��и �в�й�тв� Item не ���в�л�ет и�вле�ать эле�енты �� н��ера�. Он� тре�ует у�а�ани� имени ��н�ретн��� тре�уе���� ��ъе�та, а е�ли и�ена еще не и�ве�тны, ��ль�ы �т не�� не та� уж и �н���. Каждый ��ы� �ценариев �ред��тавл�ет ������ ��анир�вани� ��лле�ций �е� �редварительн�й инф�р�ации �� их ��держи���. В V�S���p�, на�ри�ер, �ред�� �тавл�ет�� ��ециальна� вер�и� ци�ла For, ��т�ра� на�ывает�� «дл� �ажд���» — For Each. ШАБЛОН Для сканирования объектов именованной коллекции в VBScript, используется следующий цикл For Each: for each переменная_объекта in коллекция операторы, использующие переменную_объекта next Ци�л For Each ���лед�вательн� вы��лн�ет в�е �в�и ��ерат�ры �� �дн��у ра�у дл� �ажд��� ��ъе�та ��лле�ции, а переменная_объекта ���дает�� дл� ���че� редн�й ��ыл�и на �аждый �тдельный ��ъе�т. Те�ерь, �ри и���ль��вании ци�ла For Each и �ере�енн�й �� и�ени file дл� хранени� �тдельных ��ъе�т�в, �ред� �тавл�ющих файлы, наш �ценарий выв�да ��и��а ��держи���� �а��и д�лжен �ара��тать: set fso = CreateObject("Scripting.FileSystemObject") set files = fso.GetFolder("c:\").Files for each file in files WScript.echo file.Name next М�жн� даже в����ль��вать�� �ледующей ��лее ����а�тн�й вер�ией: set fso = CreateObject("Scripting.FileSystemObject") for each file in fso.GetFolder("c:\").Files WScript.echo file.Name next Те�ерь, е�ли вы не �ланируете ���дани� �ценариев на �а�их�ни�удь дру�их ��ы�ах, �ерех�дите � и�учению ра�дела «И���ль��вание ��ъе�та WS���p�» данн�й �лавы, �де �удет дана д���лнительна� инф�р�аци� �� эт�� в�тр�енн�� ��ъе�те.
124 Глава 3. Создание сценариев и работа с объектами Использование объектов при работе с JScript JS���p�, �а� и V�S���p�, �вл�ет�� �у�у�� ��ъе�тн���риентир�ванны� ��ы���, ��� эт��у �жидает��, чт� �р��ра��и�ты дл� ра�ширени� е�� в����жн��тей �удут и�� ��ль��вать ��ъе�ты. JS���p� �ред��тавл�ет 11 в�тр�енных ти��в ��ъе�т�в, и ��жн� ���давать в �ценари�х универ�альные и �тру�турир�ванные ти�ы ��ъе�т�в. Зде�ь внутренние ти�ы ��ъе�т�в ра���атривать�� не �удут, �����ль�у данна� �ни�а ��� �в�щена ���данию внешних �ценариев и ��ъе�т�в у�равлени� W��dows. Внешние ��ъе�ты COM�A���v�X ���дают�� � и���ль��вание� ��ерат�ра new: имя_переменной = new ActiveXObject("имя_объекта"); Зде�ь имя_переменной �вл�ет�� ��ъ�вленн�й �ере�енн�й, �редна�наченн�й дл� ��лучени� ��ыл�и на н�вый ��ъе�т. П��ле т��� �а� �ере�енна� ��ъе�та ��ажет� �� в ваше� ра���р�жении, д��ту� � �ет�да� и �в�й�тва� ��жн� �удет ��лучить � ����щью выражений переменная.имя_свойства или переменная.имя _метода. Ра����три�, � �ри�еру, не��льш�й �ценарий, ����щающий � т��, е�ть ли на ваше� ди��е C: �а��а �� и�ени \windows: var fso; fso = new ActiveXObject("Scripting.FileSystemObject"); if (fso.FolderExists("c:\\windows")) WScript.echo("Папка по имени c:\\windows существует"); Кру�лые �����и д�лжны и���ль��вать�� �ри �ажд�� вы��ве �ет�да, даже е�ли в��вращае��е �начение не и���ль�ует��. О�ерат�ры, ��д��ные WScript.echo "Эта папка называется c:\windows" д��у�ти�ы в V�S���p�, н� в Js���p� та�а� ф�р�а �а�рещена. Чувствительность к регистру символов Ра��та� в �реде WSH, �р��ра��ы на JS���p� и�еют д��ту� � �ред��ределенн��у ��ъе�ту �� и�ени WScript, ��т�рый �ред��тавл�ет р�д ��ле�ных �ет�д�в и �в�й�тв, �а�ающих�� �реды ��ружени� �ценари�, е�� вы��лнени� и �тлад�и. П����ль�у JS���p� �вл�ет�� ��ы���, чув�твительны� � ре�и�тру �и�в�л�в, дл� и���ль��вани� эт��� ��ъе�та нужн� на�ирать е�� и�� в виде WScript, � �а�лавн�й �у�в�й W, в т�ч� н��ти ��хран�� ���а�анн�е �де�ь на�и�ание. А в�т и�ена �ет�д�в и �в�й�тв ��ъе�т�в A���v�X и COM чув�твительн��тью � ре�и�тру �и�в�л�в не ��ладают. На�ри�ер, JS���p� ���в�л�ет на�ирать WScript. echo или WScript.Echo. Работа с коллекциями Е�ли у ва� уже е�ть �ра�ти�а и���ль��вани� JS���p� � I������� �xp�o��� в �ценари�х �рау�ера или в �ценари�х на �т�р�не �ервера, вы, д�лжн� �ыть, �на���ы � ��ъ� е�та�и, в��вращающи�и ��лле�ции ��ъе�т�в. Мн��ие ��ъе�ты I������� �xp�o��� ���в�л�ют �р�в�дить ��анир�вание ��лле�ции ��ъе�т�в, и���ль�у� и�еющий�� в Js���p� ��ерат�р for...in.
Использование объектов при работе с JScript 125 И те� не �енее ��льшин�тв� дру�их ��лле�ций ��ъе�т�в не ра��тают � ��ерат�� р�� for...in, вынужда� и���ль��вать ��ъе�т�ну�ерат�р Enumerator. Эт� �тн��ит�� � ��льшин�тву ��ъе�т�в, в�тречающих�� в �реде WSH. Js���p����ъе�т Enumerator �ред��тавл�ет ������ ��ращени� � ��лле�ции �уте� ��эле�ентн��� �ере�ещени� в�еред и на�ад �� ��и��у ��ъе�т�в ��лле�ции. Дл� и���ль��вани� ��лле�ции, �ред��тавл�е��й ��ъе�т��, �аданны� �ценари� е� или ��ъе�т�� A���v�X, нужн� �начала �ревратить ее в ну�ерат�р: enumObject = new Enumerator(collectionObject); О�ъе�т Enumerator не и�еет �в�й�тв (в ча�тн��ти, у не�� нет �в�й�тва длины — Length; е�ли нужн� у�нать � ��личе�тве эле�ент�в, эту инф�р�ацию ��жн� ��лу� чить и� �в�й�тва Count и�х�дн�й ��лле�ции�. В не� и�еет�� внутреннее �ред�тав� ление � е�� «���иции» в ��лле�ции и и�еют�� �ет�ды, ���в�л�ющие �ере�ещать те�ущую ���ицию в�еред или на�ад � началу ��лле�ции. И�еющие�� в не� четыре �ет�да �еречи�лены в ��рав�е 3.1 . СПРАВКА 3.1. МЕТОДЫ JSCRIPT-ОБЪЕКТА ENUMERATOR Item В��вращает те�ущий эле�ент ��лле�ции. В��вращае��е �начение �вл�ет�� ��держащи��� в ��лле�ции ��ъе�т�� лю���� ти�а. Е�ли ��лле�ци� �у�та или те�уща� ���ици� не ��ределена, в��вращает�� �тр���в�е �начение undefined. AtEnd В��вращает �улев� �начение: True, е�ли те�ущий эле�ент �вл�ет�� ���лед� ни� в ��лле�ции, е�ли те�уща� ���ици� не ��ределена или е�ли ��лле�ци� �у�та. В �р�тивн�� �лучае в��вращает�� False. moveFirst Делает те�ущи� �ервый эле�ент ��лле�ции. Е�ли ��лле�ци� �у�та, atEnd тут же в��вращает �начение True. moveNext Делает те�ущи� �ледующий эле�ент ��лле�ции. Е�ли ��лле�ци� �у�та или те�ущий эле�ент уже �вл�ет�� ���ледни� в ��лле�ции, �ет�д item в��вращает �начение undefined. Т�ль�� чт� ���данный ну�ерат�р д�лжен �ыть ���ици�нир�ван на �ервую �а� �и�ь авт��атиче��и, н� в�е же лучше �еред те�, �а� �р�вер�ть ��лле�цию �ет�да�и atEnd или item, в����ль��вать�� �ет�д�� moveFirst. ШАБЛОН Для сканирования коллекции объектов по имени obj нужно воспользоваться нумератором: e = new Enumerator(obj); for (e.moveFirst(); ! e.atEnd(); e.moveNext()) { x = e.item(); операторы, использующие x }
126 Глава 3. Создание сценариев и работа с объектами Ра����три� �ри�ер. Следующий �ценарий выв�дит ��и��� и�ен в�ех файл�в в ��рнев�й �а��е ди��а C:: var fso, e, file; fso = new ActiveXObject("Scripting.FileSystemObject"); e = new Enumerator(fso.GetFolder("c:\\").files); for (e.moveFirst(); ! e.atEnd(); e.moveNext()) { file = e .item(); WScript.echo(file.name); } Те�ерь, е�ли вы �ланируете ���давать �ценарии т�ль�� на JS���p�, ��жн� �ерей� ти � и�учению ра�дела «И���ль��вание ��ъе�та WS���p�», �де �удет дана д���лни� тельна� инф�р�аци� �� эт�� в�тр�енн�� ��ъе�те. Использование объектов при работе с ActivePerl A���v�P��� ����ании A���v�S���� ���в�л�ет вы��лн�ть �ценарии на ��ы�е P��� в �реде WSH. Среда �а���� ��ы�а P��� уже ��ладает �н�же�тв�� ин�тру�ент�в дл� ра��ты � файла�и и �етевы�и ��д�лючени��и, и е�ли у ва� уже е�ть д��та� т�чный ��ыт �р��ра��ир�вани� на ��ы�е P���, ��жет в��ни�нуть в��р��, че�� же еще та���� ������на д��авить �� в�е�у эт��у �реда WSH? Ины�и �л�ва�и, �аче� и���ль��вать �s���p� или ws���p� дл� вы��лнени� �р��ра��ы на P���, ���да ��жн� �р��т� на�р��ую �а�у�тить perl.exe? Ответ �а�лючает�� в ��держи��� �реды WSH, и�еюще� �р��тые �ред�тва д�� �ту�а � ��ъе�та� COM, OL� (Au�om���o�� и A���v�X. В �реде WSH и�еет�� ��ле�� ный �ред��ределенный ��ъе�т $WScript. COM���ъе�ты �вл�ют�� �люч��, �т�ры� вающи� д��ту� � �етев�й ��нфи�урации, A���v� D�����o�y и W��dows M���g�m��� I�s��um������o� (WMI�. В����жн�, ва� не �ах�чет�� �в��ывать�� � ��ъе�та�и �ценари� W��dows дл� у�равлени� файла�и и �атал��а�и, н� ради ин�тру�ент�в у�равлени� �и�те��й на WSH в�е же �т�ит ��ратить вни�ание. Выполнение Perl-сценариев в WSH У�тан�вщи� A���v�P��� ���дает два файл�вых �����тавлени� дл� файл�в P���: файлы .pl (P���� �����тавл�ют�� � �р��ра���й Perl.exe, а файлы .pls (P���S���p�F���� �����тавл�ют�� � WSH. Е�ли дл� �р��ра�� на P���, ��т�рые нужн� �а�у�тить в �реде WSH, и���ль�ует� �� �ривычн�е ра�ширение и�ени файла .pl, дл� их �а�у��а нужн� в����ль��вать�� �ледующей ���анд�й: cscript /engine:Perlscript myscript.pl П����ль�у ��жет ��тре��вать�� �а�у�� �ценариев и� ���андн�й �тр��и или и� �xp�o���, в�е �начительн� у�р��тит��, е�ли дл� �р��ра��, �редна�наченных дл� �реды WSH, �удет и���ль��ван� ра�ширение .pls. Т��да ��жн� �удет дважды
Использование объектов при работе с ActivePerl 127 щел�нуть на �нач�е файла в �xp�o��� или в����ль��вать�� дл� �а�у��а файл�в �ценариев �ледующи�и ���анда�и: start myscript.pls myscript cscript myscript.pls а WSH уже �нает, чт� делать дальше. М�жн� та�же и���ль��вать P���S���p� внутри �тру�турир�ванных файл�в .WSF — �� эт�� �удет ра���а�ан� в �лаве 9 «И���ль��� вание �ценариев дл� у�равлени� ����ьютера�и и �ет��и». При на�и�ании на P��� �ценариев, �редна�наченных дл� �а�у��а в �реде WSH, нужн� ���нить � �ледующих важных ���т��тель�твах: y y Нель�� и���ль��вать �ривычные �лючи ���андн�й �тр��и P���, на�ри�ер -w: не����ательные �начени� д�лжны у�танавливать�� не���ред�твенн� в �ценарии. y y Лю�ые ар�у�енты, у�а�анные в �s���p� или ws���p�, не ���ещают�� в �а��ив ARGV. В�е�т� эт��� ар�у�енты ���андн�й �тр��и д�лжны и�вле�ать�� и� ��л� ле�ции $WScript->Arguments. Интерфейс с объектами, используемый в Perl A���v�P��� ��жет в�аи��дей�тв�вать � ��ъе�та�и COM, A���v�X и OL� (Au�om�� ��o��. Ра�ширенный �инта��и� дл� д��ту�а � �ет�да� и�еет �ледующий вид: $имя_объекта->Метод[(аргументы [,...])]; На�ри�ер: $myobject->SomeMethod $myobject->Anothermethod("argument", 47); Дл� д��ту�а � �в�й�тву и���ль�ует�� �ледующий �инта��и� $имя_объекта->{Имя_свойства} На�ри�ер: value = $myobject->{Length}; $myobject->{color} = "Red"; П����ль�у �инта��и�ы дл� д��ту�а � �ет�да� и ��ъе�та� �тличают�� дру� �т дру�а, нужн� и�учить д��у�ентацию �� COM���ъе�та�, чет�� ��ределив, чт� и�енн� вы х�тите и���ль��вать, �в�й�тв� или �ет�д. ▼o При попытке доступа к несуществующему методу или свойству или при опечатке в имени, Perl по умолчанию не генерирует ошибку. В результате просто возвращается неопределенное зна- чение (undef). Это усложняет отладку сценария. Чтобы не угодить в эту ловушку, вставьте в начало каждого файла сценария строку $^W=1; Она заставит Perl выводить сообщение об ошибке при попытке сослаться на неопределенный метод или свойство. Я столкнулся с тем, что сообщение об ошибке может и не объяснить, что причина проблемы состоит в нераспознанном свойстве или методе, но вы, по крайней мере, будете предупреждены.
128 Глава 3. Создание сценариев и работа с объектами Дл� у�тан�в�и �начени� �в�й�тва, д��у��ающе�� чтение и �а�и�ь, е�у ��жн� �р��т� �ри�в�ить �начение: $file->{name} = "newname "; Стандартный ��ъе�т WScript, ��т�рый ��лее ��др��н� �удет ра����трен чуть ���же, �ред��редел�ет�� �ред�й WSH и д��ту�ен �ценарию на ��ы�е P���. На�ри� �ер, те�уща� вер�и� WSH ��жет �ыть выведена � ����щью �ледующе�� �ценари�: $WScript->Echo("Используется версия ", $WScript->Version); М�жн� в����ль��вать�� ��ычн�й дл� P��� ф�р��й вв�да�выв�да и на�и�ать в�е�т� эт��� �ледующий ��ерат�р: print "Используется версия ", $WScript->Version; Н� ��ерат�р print ��уще�твл�ет �а�и�ь в �тандартн�е у�тр�й�тв� выв�� да (stdout�, ��т�р�е �ри �а�у��е �ценари� � ����щью WS���p� (���нн�й вер�ии WSH� не ��ределен�. Сценарий, и���ль�ующий ��ерат�р print, ра��тает ��д у�равление� Cs���p� и не ра��тает ��д у�равление� WS���p�. Дел�, ��нечн�, ваше, н� е�ли нужн� чт��ы ваш �ценарий ра��тал �дина��в� х�р�ш� в лю��й �реде, и�� ��ль�уйте дл� выв�да �ет�д $WScript.Echo. ▼) Perl является языком, чувствительным к регистрам символов, и такие имена переменных со ссылками на объект, как $WScript, должны быть набраны точно так, как они здесь показаны. Но имена методов и свойств объектов к регистру символов нечувствительны. Дл� ���дани� э��е��л�ра ��ъе�та Au�om���o�, OL� или A���v�X ��жн� в��� ��ль��вать�� лю�ы� и� двух �ледующих �ет�д�в. Пр�ще в�е�� в����ль��вать�� �ет�д�� CreateObject, ��т�рый �ред��тавл�ет�� в�тр�енны� ��ъе�т�� $WScript: $myobj = $WScript->CreateObject("Scripting.FileSystemObject"); М�жн� та�же в����ль��вать�� ра�ширение� A���v�P��� W��32::OL�, �ред��тав� л�е�ы� ��ы��� A���v�P���: use Win32::OLE; $excel = Win32::OLE->new('Excel.Application') or die "Создать новый объект OLE не удалось"; Инф�р�ацию �� ра�ширени�� OL� ��жн� найти в файле ��рав�и �� A���v�P���. Работа с коллекциями Не��т�рые COM���ъе�ты, в�тречающие�� в эт�й �ни�е и в дру�их и�т�чни�ах, в��� вращают ��ъе�ты���лле�ции, ��т�рые ��держат ��и��� дру�их ��ъе�т�в. На�ри� �ер, �в�й�тв� Drive ��ъе�та Scripting.FileSystemObject в��вращает ��лле�цию ��ъе�т�в Drive, а �в�й�тв� WScript.Arguments в��вращает ��лле�цию ��ъе�т�в Argument. Св�й�тва и �ет�ды ��ъе�та���лле�ции ра���атривали�ь ранее в эт�й �лаве. П����ль�у эле�енты ��ъе�та���лле�ции не ���ут �ыть ��лучены �� инде��н�� �у �начению (�� �райней �ере, не на�р��ую�, �ни д�лжны �ыть «�р���анир�ваны» � и���ль��вание� ��ъе�та�ну�ерат�ра. Ну�ерат�р �ред��тавл�ет д��ту� � ��ъе�ту� ��лле�ции �уте� ��ддерж�и ��н�ти� те�ущей ���иции в ��и��е, ��т�рую �ате�
Использование объектов при работе с ActivePython 129 ��жн� ��ша��в� и��ен�ть. Дл� ��анир�вани� ��и��а в� вт�р�й ра� нужн� �ере� ве�ти те�ущую ���ицию в начал� ��и��а, а �ате� ���ть ��ша��в� �р�йти ��и���. Дл� ну�ерации ��лле�ции �уще�твуют три ������а. Первый и� них �ред��ла� �ает ���дание �вны� ��ра��� ��ъе�та�ну�ерат�ра, �а� эт� делает�� в �ледующе� �ри�ере: $^W=1; $fso = $WScript->CreateObject("Scripting.FileSystemObject"); $fls = $fso->GetFolder("C:\\ ")->Files; # получение коллекции файлов папки c:\ $n = $fls->{Count}; # определение количества ради любопытства print $n, " files\n"; $enum = Win32::OLE::Enum->new($fls); # создание объекта-нумератора while (defined($file = $enum->Next)) { # поочередное присваивание переменной # $file ссылки на каждый объект print $file->{Name}, "\n"; # вывод имен файлов } В� вт�р�� ������е и���ль�ует�� фун�ци�, ��рывающа� ну�ерат�р: ��ерат�р in в��вращает выражение Win32::OLE::Enum->All(объект), ��т�р�е, в �в�ю �чередь, в��вращает �а��ив P���, �ред��тавл�ющий ��ъе�т���лле�цию. В�е�т� т��� чт��ы, �а� в �редыдуще� �ри�ере, ���давать �ере�енную $enum и и���ль��вать ци�л while, ��жн� на�и�ать �ледующий ��д: foreach $file (in $fls) { print $file->{Name}, "\n"; } Гл�д� на третий ������, нетрудн� д��адать�� � т��, чт� �н �а�лючает�� в ���� дании �а��ива ��д��ъе�т�в, � ��т�р��у �ате� ��жн� ��ратить�� в �вн�� виде: @file = in($fls); for ($i = 0; $i < $fls->{Count}; $i++) { print $file[i]->{Name}, "\n"; } И� этих трех �ет�д�в наи��лее �р��ты� �ред�тавл�ет�� �ет�д � и���ль��вание� ��ерат�ра foreach, �н ���трит�� лучше в�ех и ��держит �еньше �на��в. П��а ва� дей�твительн� не ��над��ит�� �а��ив, � ре���ендую и���ль��вать foreach. А те�ерь, �ри желании, вы ��жете �ерейти � и�учению ра�дела «И���ль��вание ��ъе�та WS���p�», �де �удет дана д���лнительна� инф�р�аци� �� эт�� в�тр�енн�� ��ъе�те WSH. Использование объектов при работе с ActivePython На ��ы�е Py�ho� на�и�ан� �н�же�тв� эффе�тивных CGI��рил�жений (��н�ван� ных на ве��техн�л��и�х�, и ����ани� A���v�S���� �� �в�и� �р�ду�т�� A���v�Py�ho� �рила�ает ��льшие у�или� дл� инте�рир�вани� ��ы�а Py�ho� в �реду ���дани� �ценариев ASP. Эт� ��начает, чт� �н та�же ��жет �ыть и���ль��ван и в �реде WSH.
130 Глава 3. Создание сценариев и работа с объектами В Py�ho�, �а� и в P���, и�еет�� ���атый на��р в�тр�енных и д���лнительных фун�� ций, �ред��тавл�ющих ��лный д��ту� � W��dows API, ��эт��у �р��ра��и�т�в, ра��тающих на ��ы�е Py�ho�, вр�д ли �ильн� �аинтере�уют �адавае�ые �ценарие� �ерви�ные ��ъе�ты, ра���атривае�ые в данн�й �ни�е. И в�е же ��жет ���вить�� желание и���ль��вать �ценарные ��ъе�ты в интере�ах ��вышени� �ерен��и��� �ти ваше�� ��ы�а �ценариев, и еще ��т��у, чт� ��ъе�ты COM�A���v�X �вл�ют�� един�твенны� �������� ��лучени� �р��ра��н��� д��ту�а � �ервера� Au�om���o�, та�и� �а� M���oso�� Wo�d. В �тличие �т P��� Py�ho� � �а���� начала ра�ра�атывал�� �а� ��ъе�тн���ри� ентир�ванный ��ы�. О�ъе�ты, �в�й�тва и �ет�ды — ���тавл�ющие е�� ар�енала. Е�ли � �р��ра��ир�ванию на Py�ho� �ерех�дить, и�е� �а��вые �нани� �� дру�и� ��ы�а� �р��ра��ир�вани�, нужн� уче�ть �ледующие ���т��тель�тва: y y О�ъе�т WScript, ��в�е�е�тн� ра���атривае�ый в данн�й �лаве, �вл�ет�� �ред�� �ределенны� ��ъе�т��. Py�ho� чув�твителен � ре�и�тру �и�в�л�в, ��эт��у ��ыл�а на ��ъе�т д�лжна в т�чн��ти выдерживать ф�р�у WScript. y y Х�т� Py�ho� в цел�� чув�твителен � ре�и�тру �и�в�л�в, � и�ена� �ет�д�в и �в�й�тв COM���ъе�т�в эт� не �тн��ит��. y y В����жн�, �а��й �р��т�й ������ ���дани� ��ъе�т�в A���v�X�COM �а�лючает�� в и���ль��вании �ет�да CreateObject, �ред��тавл�е���� WScript. На�ри�ер: fso = WScript.CreateObject("Scripting.FileSystemObject") files = fso.GetFolder("C:\\") .Files y y Значение �в�й�тву COM���ъе�та нель�� �ри�в�ить на�р��ую. В�е�т� эт��� нужн� в����ль��вать�� выражение� object.SetValue("имя _свойства", новое_значение) y y Py�ho� авт��атиче��и и���ртирует в�е �ред��ределенные ��н�танты, �в��ан� ные � OL����ъе�т�� в ���ент ���дани� э��е��л�ра ��ъе�та. Значени� ��н�тант ���дают�� в виде �в�й�тв ��ъе�та win32com.client.constants. На�ри�ер, е�ли вы �удете ���давать д��у�ент M���oso�� Wo�d, т� �удет ��ределен� и �начение win32com.client.constants.wdWindowStateMinimize. Д���лнительна� инф�р�аци� �� инте�рации COM � Py�ho� �риведена в д�� �у�ентации A���v�S���� дл� �а�ета w��32�om. Работа с коллекциями Py�ho� авт��атиче��и ра���атривает ��ъе�ты���лле�ции COM �а� �еречи�лени�. Са�ый �р��т�й ������ ��анир�вани� ��держи���� �еречи�лени� �а�лючает�� в и���ль��вании ��ерат�ра for...in: fso = WScript.CreateObject("Scripting.FileSystemObject") files = fso.GetFolder("c:\\").Files for file in files: print file.name Те�ерь �ерейде� � �ледующе�у ра�делу, чт��ы ��лучить ��лее ��др��ную ин� ф�р�ацию � в�тр�енн�� ��ъе�те WScript.
Использование объекта WScript 131 Использование объекта WScript WSH �ред��тавл�ет дл� в�ех �ценариев в�ех ��ы��в в�тр�енный ��ъе�т �� и�ени WScript. В� �н��их �ри�ерах, �рив�ди�ых в данн�й �ни�е, и���ль��вал�� �ри� надлежащий эт��у ��ъе�ту �ет�д Echo. В WScript и�еет�� р�д дру�их �ет�д�в и �в�й�тв, ��т�рые ���ут ��а�ать�� ��ле�ны�и �ри на�и�ании �ценариев. Они �еречи�лены в ��рав�е 3.2 . СПРАВКА 3.2. СВОЙСТВА И МЕТОДЫ ОБЪЕКТА WSCRIPT СВОЙСТВА Arguments В��вращает ��лле�цию ��ъе�т�в WshArguments, �ред�тавл�ющую �тр���вые �начени� ���андн�й �тр��и, и���ль��ванн�й дл� �а�у��а WS���p� или Cs���p�. На�ри�ер, е�ли �ценарий �ыл �а�ущен ���андн�й �тр���й WScript myscript.vbs aaa bbb или myscript aaa bbb т� выражение WScript.arguments.item(0) выда�т �начение "aaa", а выраже� ние WScript.arguments.item(1) выда�т �начение "bbb". Выражение WScript. arguments.length выдает ��личе�тв� ар�у�ент�в. Б�лее ��др��н� ар�у�енты �удут ра����трены в �ледующе� ра�деле. BuildVersion В��вращает н��ер, идентифицирующий те�ущую вер�ию W��dows S���p� Hos�. Эт�т н��ер ��жет варьир�вать�� �т вер�ии � вер�ии W��dows, а ��н�вле� ние WSH �р�и�х�дит чере� �ехани�� W��dows Upd���. Случал��ь, чт� в WSH на W��dows 7 дл� эт��� �в�й�тва в��вращал��ь �начение нуль. Я ���неваю�ь, чт� эт� �в�й�тв� ��жет �ыть и���ль��ван� � �а��й�ни�удь ��ль��й. FullName В��вращает ��лн�е и�� �ути и и�� файла �р��ра��ы WSH, �а�у�тившей ваш �ценарий (на�ри�ер, c:\Windows\System32\cscript.exe�. Interactive В��вращает �улев� �начение: True, е�ли �ценарий �а�ущен в интера�тив� н�� режи�е, и False, е�ли �н �а�ущен в �а�етн�� режи�е. Значение дл� эт��� �в�й�тва ��жн� у�тан�вить, и���ль�у� �люч ���андн�й �тр��и //I или //B, или же ��жн� на�р��ую у�тан�вить дл� не�� �начение в �ценарии (на�ри�ер, WScript.Interactive = False�. В �а�етн�� режи�е ��на ����щений и вв�да не ���вл�ют��. Name В��вращает и�� х��т��р��ра��ы �ценари� (на�ри�ер, "Windows Script Host"�.
132 Глава 3. Создание сценариев и работа с объектами Path В��вращает и�� �атал��а, в ��т�р�� ��держит�� х��т��р��ра��а �ценари� (на�ри�ер, "c:\Windows\System32"�. ScriptFullName В��вращает ��лный �уть и и�� файла ваше�� �ценари� (на�ри�ер, "c:\ test\myscript.vbs"�. ScriptName В��вращает и�� файла ваше�� �ценари� (на�ри�ер, "myscript.vbs"�. StdErr, StdIn и StdOut Эт� файл�вые ��т��и, ��т�рые ���ут и���ль��вать�� дл� чтени� и� файл�в �тандартн��� вв�да или дл� �а�и�и в файлы �тандартн��� выв�да и �ши��и. Эти �в�й�тва ра���атривают�� в �лаве 4 «Д��ту� � файла� и � рее�тру». Эти �в�й�тва д��ту�ны т�ль�� �ри �а�у��е �ценари� � ����щью �s���p�, в ws���p� �ни не ра��тают. Version В��вращает вер�ию WSH (на�ри�ер, "Версия 5.7"�. МЕТОДЫ CreateObject(progid [, prefix]) Анал��ичен в�тр�енн�й фун�ции CreateObject. С ар�у�ент�� prefix ���дает ��д�люченные ��ъе�ты, ������ные �в��ывать ���ыти� �� �ценарие�. (С��ыти� в данн�й �ни�е не ра���атривают��.� ConnectObject object, prefix Св��ывает �уще�твующий ��ъе�т �� �ценарие�, и���ль�у� фун�ции ��ра� ��т�и ���ытий, чьи и�ена начинают�� �� �тр���в��� �рефи��а prefix. DisconnectObject object От�лючает �ценарий �т ���ытий ��ъе�та. Echo arg [, arg]... Выв�дит лю��е ��личе�тв� ар�у�ент�в лю���� ти�а. Ар�у�енты �ри эт�� �тф�р�атир�ваны ��д �тр��и и �тделены дру� �т дру�а �р��ела�и. Cs���p� �а� �и�ывает их на �тандартный выв�д, а WS���p� �т��ражает их в ���вл�юще��� ��не ����щений. GetObject(filename [, progid ][, prefix]) С��дает ��ъе�т на ��н�ве инф�р�ации, хран�щей�� в файле (на�ри�ер, д�� �у�ент�. Е�ли �р��ра��ный идентифи�ат�р — progid — не у�а�ан, е�� �начение ��редел�ет�� и� ти�а файла. Дл� �в��и ���ытий ��ъе�та �� �ценарие� ��жет �ыть у�а�ан ар�у�ент prefix. Мет�д GetObject ��жет та�же ��лучить ��ыл�у на уже �уще�твующий ��ъ� е�т �уте� у�а�ани� ��ециальн��� и�ени, на�ывае���� псевдонимом (mo��k���. Эт� �удет не�дн��ратн� �р�иллю�трир�ван� в �лавах 7 и �.
Использование объекта WScript 133 Quit [errorcode] Пре�ращает вы��лнение �ценари�. Е�ли у�а�ан� чи�л�в�е �начение, �н� в��вращает�� в �аче�тве ��да вых�да и� �р�це��а, чт� ��жет �ыть и���ль��ван� �ри �а�у��е �ценари� и� �а�етных файл�в. Sleep msec За�тавл�ет �ценарий в��ть �ау�у в msec �илли�е�унд. На�ри�ер, WScript. sleep 1000 �ри��танавливает вы��лнение на �дну �е�унду. И� �еречи�ленных �в�й�тв и �ет�д�в наи��лее ��ле�ны�и �ред�тавл�ют�� Echo и Arguments. А те�ерь давайте �����три�, �а� ��жн� в����ль��вать�� ар�у�ента�и дл� у�равлени� те�, чт� �ценарий делает ���ле �а�у��а. Извлечение аргументов командной строки И���ль��вание ар�у�ент�в ���андн�й �тр��и — ��ычный ������ у�а�ани� инф�р� �ации �ценарию в ���ент е�� �а�у��а. Наи��лее ча�т� эт�т �рие� �ри�ен�ет�� дл� на�и�ани� �ценариев, ра��тающих � файла�и, учетны�и �а�и���и ��ль��вателей или ����ьютера�и. Сценарий д�лжен �ыть на�и�ан универ�альны� ��ра���, чт��ы е�у ��жн� �ыл� у�а�ать ��н�ретные файлы, людей или т���, че� вы ра���ла�аете на ���ент е�� �а�у��а. На�ри�ер, �ценарий дл� ��ра��т�и файла ��жет �ыть на� �и�ан �ледующи� ��ра���: filename = "specialdocument.doc" ' и нструкции для работы с файлом по имени, хранящемся в filename ... Н� е�ли нужн� и���ль��вать эт�т �ценарий дл� ра��ты � дру�и� файл��, е�� нужн� �треда�тир�вать. Е�ли нужен ��лее универ�альный ��дх�д, на�ишите та��й �ценарий, ��т�рый ��лучает и�ена файл�в и� �в�ей ���андн�й �тр��и, чт��ы вы ����ли �р��т� на�ирать чт��ни�удь вр�де: C:\> myscript some.doc another.doc П��ле эт��� �ценарий �удет ра��тать � файла�и, чьи и�ена на�раны, а не � те� файл��, и�� ��т�р��� в�тр�ен� в �ценарий. Ка� �равил�, у �ажд��� ��ы�а �р��ра��ир�вани� и�еет�� �в�й ����твенный ���� ��� �ред��тавлени� ар�у�ент�в ���андн�й �тр��и �р��ра��е, н� в �реде WSH и�е� ет�� т�ль�� �дин ������ их ��лучени� — чере� �в�й�тв� Arguments ��ъе�та WScript. Св�й�тв� WScript.Arguments в��вращает ��лле�цию ��ъе�т�в, �� �дн��у дл� �ажд��� эле�ента, �еречи�ленн��� в ���андн�й �тр��е �ценари�. Сценарий дл� и���ль��вани� этих ар�у�ент�в ��жн� на�и�ать �ри�ли�ительн� та�и� ��ра���: for each filename in WScript.arguments ' инс трукции для работы с файлом по имени, хранящемся в filename ... next Ра�у�еет��, нужн� и���ль��вать т�т �ет�д ра��ты � ��ъе�та�и и ��лле�ци��и, ��т�рый ��дх�дит дл� �ри�ен�е���� ва�и ��ы�а �ценариев (эт�т �ри�ер �риведен дл� V�S���p��. В �ценарии myscript.vbs ���андна� �тр��а C:\> myscript some.doc another.doc
134 Глава 3. Создание сценариев и работа с объектами ���дает ��лле�цию WScript.Arguments � дву�� эле�ента�и: some.doc и another.doc. О�ерат�р for each, и�еющий�� в V�S���p�, ���в�л�ет ваше�у �ценарию �р�ве�ти ���чередную ��ра��т�у этих эле�ент�в. Е�ли в ���андн�й �тр��е не у�а�ать в���ще ни�а�их ар�у�ент�в, эт�т �ценарий ниче�� делать не �удет. И в�е же лучше в та��� �лучае, чт��ы �ценарий ����щал ��ль��вателю, �а� е�� �равильн� и���ль��вать. Следующий ша�л�н ���а�ывает, �а� ���давать �ценарии ���андн�й �тр��и, ��т�рые ���ут �рине�ти в��лне ��ре� деленную ��ль�у. ШАБЛОН Когда сценарий использует аргументы командной строки для определения, с какими файлами (или именами пользователей, компьютерами или чем-нибудь еще) ему работать, то при отсут- ствии аргументов командной строки он должен объяснить порядок его использования: if WScript.arguments.length = 0 then ' Нет аргументов? Вывод информации по использованию ' и за вершение работы WScript.echo "Этот сценарий обрабатывает указанные файлы, " WScript.echo "делая с ними то-то и то-то". WScript.echo "Порядок использования: myscript файл [файл ...]" WScript.quit end if for each filename in WScript.arguments ' с юда помещаются операторы для обработки файла filename ... next В�е�т� эт��� ��жет ��над��ить��, чт��ы �ри �т�ут�твии в ���андн�й �тр��е у�а�аний и�ен файл�в ваш �ценарий ра��тал � файл�� �� у��лчанию. Та��й �ценарий д�лжен и���ль��вать дл� ��ра��т�и файл�в ��д�р��ра��у, чт��ы ее ��жн� �ыл� вы�ывать ли�� � файл�� �� у��лчанию, ли�� � у�а�анны�и файла�и. В V�S���p� эт� вы�л�дит �ледующи� ��ра���: if WScript.arguments.length = 0 then ' нет аргументов в командной строке – обработка файла "default.file" process "default.file" else ' обработка каждого файла, указанного в командной строке for each filename in WScript.arguments process filename next end if sub process (filename) ' инс трукции обработки файла filename ... end sub И���ль��вание ��лее эффе�тивных ти��в ��ра��т�и ���андн�й �тр��и �удет ���а�ан� в �лаве 9.
Поиск и использование необычных объектов 135 Поиск и использование необычных объектов К���ани� M���oso�� в ��рав�чных д��у�ентах �� W��dows S���p���g (на�и�анию �ценариев дл� W��dows� дает ��и�ание р�да эффе�тивных, ча�т� и���ль�уе�ых ��ъе�т�в, �ред��тавл�е�ых W��dows. О�н�вна� ча�ть та�их ��ъе�т�в ра���атри� вает�� в �лавах 4–9 . Е�ли у ва� нет ��ыта на�и�ани� �ценариев, дл� начала в�е�� эт��� �удет в��лне д��тат�чн�, ��эт��у, ��жет �ыть, ва� �т�ит �ра�у �ерейти � и�учению �лавы 4. В д��авление � эти� �тандартны� ��ъе�та� �н��ие ра�ра��тчи�и и ����ании �е��латн� или �а �лату �ред��тавл�ют д���лнительные ��ъе�ты. Н� ��р��н�е ��личе�тв� ��ъе�т�в уже �ри�ут�твует на ваше� ����ьютере, в�е�те � W��dows ���тавл�ют�� ��тни COM���ъе�т�в и ��тни д���лнительных ��ъе�т�в д��авл�� ют�� �ри у�тан�в�е та�их �рил�жений, �а� Wo�d, �x��� и V�s�o. Мн��ие и� них ра�ра��таны т�ль�� дл� и���ль��вани� � �р��ра��а�и ��ределенных �рил�жений и ��вершенн� �е���ле�ны дл� ���дателей �ценариев. Дру�ие же �тн���т�� � уни� вер�альны� ��ъе�та�, �редна�наченны� дл� и���ль��вани� в �ценари�х и ����и� лируе�ых �р��ра��ах. Н� �а� ��жн� у�нать, �а�ие ��ъе�ты у�тан�влены на ваше� ����ьютере и �а�ие и� них ��жн� и���ль��вать дл� ���дани� �ценариев? Е�ли че�тн�, идентифи�аци� ��ъе�т�в не та��е уж �р��т�е дел�, н� е�ли ва� нравит�� ра��та �ыщи�а, читайте ра�дел дальше. Чт��ы ��н�ть, чт� � ��дра�у�евал ��д «��тн��и ��ъе�т�в», в��л�не� на рее�тр W��dows. ▼o Опрометчивые изменения реестра Windows могут привести ваш компьютер в нерабочее со- стояние. Поскольку в Редакторе реестра команда отката к прежнему состоянию отсутствует, постарайтесь при изучении реестра не вносить в него никаких изменений. Дл� �р����тра рее�тра на W��dows 7 или V�s�� щел�ните на �н���е Пуск (S�����, на�ерите в ��ле ��и��а regedit и наж�ите �лавишу Ввод. На W��dows XP щел� �ните на �н���е Пуск (S�����Выполнить (Ru��, на�ерите regedit и наж�ите �ла� вишу Ввод. Ра��р�йте эле�ент ра�дела HKE�_CLASSES_ROOT, �р��рутите ��и��� вни�, �р��у��а� эле�енты вида .xxx-format, и д��ерите�ь, �а� ���а�ан� на ри�. 3 .4, д� ��дра�дел�в � на�вани��и вида «чт��ни�удь�т�ч�а �чт� �ни�удь». Б�льшин�тв� ��дра�дел�в, начина� � эт��� �е�та и далее, �ред�тавл�ют �ла��ы ��ъе�т�в. Чт� �аждый и� них делает, ��жет ��д��а�ать наличие �ара�етра CLSID или CurrVer, на� х�д�ще���� ��д и�ене� ��ъе�та. На ри�. 3.4 у ��дра�дела FaxControl.FaxControl.1 и�еет�� �ара�етр CLSID, �тал� �ыть, эт� ��ъе�т. Эле�ент CLSID (или ���ss ID — идентифи�ат�р �ла��а� — эт� длинн�е, �� �ути дела, �лучайн�е чи�л�, ��т�р�е ���датели ��ъе�т�в и���ль�уют дл� т���, чт��ы дать �в�е�у ��ъе�ту уни�альный «�т�ечат�� �альца». Эле�ент CurrVer, �а� т�т, ��т�рый нах�дит�� ��д эле�ент�� FaxControl.FaxControl, и���ль�у� ет��, ���да е�ть вер��тн��ть у�тан�в�и на ваше� ����ьютере ��лее �дн�й вер�ии �р��ра��ы �ла��а. Значение �ара�етра CurrVer ����щает W��dows, �де �ледует и��ать инф�р�ацию � �ла��е дл� �а��й ���ледней вер�ии ��ъе�та. Найдите эт�т эле�ент, и вы найдете CLSID ��ъе�та.
136 Глава 3. Создание сценариев и работа с объектами Рис. 3 .4 . Классы COM-объектов перечислены в реестре в разделе HKE�_CLASSES _ ROOT, после подразделов вида .xxx. У объектов имеется связанный с ними параметр CLSID Первы� ша��� �ри ра�вед�е н�вых и интере�ных ��ъе�т�в �танет ��на���ление � рее�тр�� в цел�х ��и��а интере�ных и�ен. Дл� �ри�ера, � �р��лежу �а ��ъе�т�� FaxControl.FaxControl.1, ��дра�дел ��т�р��� ���а�ан на ри�. 3 .4 . К��да �удет найден� �начение �ара�етра CLSID ��тенциальн� интере�н��� ��ъ� е�та, найдите ���твет�твующее е�у �начение в ра�деле Компьютер (My Compu����\ HKE�_CLASSES _ROOT\Clsid, �де нах�дит�� инф�р�аци�, ��т�рую и���ль�ует W��dows дл� ��наружени� и �а�у��а файла �р��ра��ы, ��т�ра� у�равл�ет ��ъе�т��. На ри�. 3 .5 ���а�ана инф�р�аци� � �ла��е дл� FaxControl.FaxControl.1. Пара�етр InprocServer32 ���а�ывает т�т �а�ый �р��ра��ный ��дуль (��ычн� эт� файл DLL или OCX�, ��т�рый у�равл�ет ��ъе�т��. В данн�� �лучае эт� �р��ра��а \WINDOWS\system32\Setup\fxsocm.dll. И�� эт��� ��ъе�та и ра��ещение е�� DLL� �и�ли�те�и ��д��а�ывает, чт� е�� ��жн� �удет и���ль��вать дл� на�тр�й�и �луж� �ы ра��ты � фа��и�ильны�и а��арата�и. Н� �а� эт� �делать? Сначала нужн� �р�верить, ��дх�дит ли данный ��ъе�т дл� и���ль��вани� в �ценари�х, �����ль�у не��т�рые ��ъе�ты не ��дх�д�т дл� эт���. П�эт��у в �ер� вую �чередь нужн� ��н�ть, ��жн� ли ���дать ��ъе�т на вы�ранн�� ва�и ��ы�е �ценариев. Дл� эт��� в����ль�уйте�ь и�ене� сервер.объект, найденны� в ра�деле HKE�_CLASSES _ROOT. В V�S���p� эт� �удет вы�л�деть �ледующи� ��ра���: set obj = CreateObject("FaxControl.FaxControl.1") WScript.echo "CreateObject работает!" Е�ли эт�т �ценарий выда�т ����щение �� �ши��е, �начит, ��ъе�т не ��жет �ыть и���ль��ван в �ценари�х. Е�ли �н �а�у�тит�� �е� выдачи ����щени� �� �ши��е, �а� эт� �р�и�х�дит �ри �р�вер�е FaxControl.FaxControl.1, �начит, ��ъе�т �ерв�е �ре� ��т�твие уже �ре�д�лел.
Поиск и использование необычных объектов 137 Рис. 3 .5 . Информация Class ID для объекта FaxControl.FaxControl.1 На �ледующе� эта�е нужн� ��и��ать в Интернете ��ыл�и на и�� ��ъе�та (на� �ри�ер, �р�ве�ти ��и�� �� и�ени FaxControl.FaxControl.1 или FaxControl.FaxControl�. Начинать, на ��й в��л�д, �ледует � ��и���в�й �и�те�ы Goog��. Е�ли увидите ��ыл� �и на �траницы на �айте msdn.microsoft.com, та� ���ут �ыть у�а�атели на ��лную д��у�ентацию дл� и��ледуе���� ��ъе�та. Не �а�удьте та�же ��и��ать в ра�деле Goog�� «Гру��ы» («G�oups»�. Мн��ие �р��ра��и�ты ча�т� ���ещают �ру��ы вида comp.xxx, и, е�ли ��ве�ет, та� ��жн� найти �аархивир�ванные ди��у��ии, �а�аю� щие�� ��ъе�та. (К ��жалению, е�ли и��ать в Goog�� �ведени� � FaxControl.FaxControl, вы, ���рее в�е��, найдете т�ль�� ��ыл�и на �атериалы данн�й �ни�и или ее �ерв��� и�дани�, ��т�р�е на�ывал��ь «W��dows XP U�d�� �h� Hood», н� ��ыл�� на д��у� �ентацию та� не �удет.� Е�ли нель�� найти д��у�ентацию в �ети, M���oso�� или ���датель ��ъе�та ���ут �ред��тавить ��рав�чный файл � ��и�ание� ��ъе�та. П����трите, нет ли в �наче� ни�х �ара�етра рее�тра Clsid ��и��а ��рав�чных файл�в � ра�ширени��и .hlp или .chm. Е�ли та��й ��и��� и�еет��, на�ерите в ��не ���андн�й �тр��и start путевое_имя\файл_справки.xxx �де путевое_имя\файл_справки.xxx �вл�ет�� ��лны� �утевы� и�ене� � файлу ��рав�и, ��т�рый у����нут в рее�тре. Эт�т файл ��жет ���а�ать, �а� ра��тает ��ъ� е�т. Чт� же �а�ает�� ��ъе�та FaxControl.FaxControl.1, у не�� ��рав�чн��� файла нет. ▼) Если файл справки имеет расширение .hlp и вы работаете под Windows 7, Vista или Windows Server 2008, то перед тем как открыть файл с расширением .hlp, нужно будет установить ста- рую программу просмотра файлов справки Windows Help. Зайдите на сайт www.microsoft.com и проведите там поиск по строке «download winhlp32.exe». Е�ли и�ени файла ��рав�и не у�а�ан�, не �т�ит �давать��. П����ль�у COM� ��ъе�ты ра�ра��таны дл� и���ль��вани� в� �н��их ��ы�ах �р��ра��ир�вани�, �ни
138 Глава 3. Создание сценариев и работа с объектами ���ут, е�ли эт��� �т них �ах�тел ра�ра��тчи�, �ред��тавить лю��й �р��ра��е �� ее �а�р��у ��и��� �ет�д�в, �в�й�тв и �в�их ар�у�ент�в. Е�ли ваш таин�твенный ��ъе�т ра���ла�ает та�и� �в�й�тв��, ��жн� �����ать�� в файле �р��ра��ы ��ъ� е�та, чт��ы найти инф�р�ацию �� е�� и���ль��вании. Пр�ще в�е�� эт� �делать � ����щью браузера объектов (obj��� b�ows���, �р�� �ра��ы, ра�ра��танн�й и�енн� дл� та�их и��лед�ваний. M���oso�� �ред��тавл�ет та�ую �р��ра��у �� �н��и�и �в�и�и �рил�жени��и. Е�ли у ва� е�ть M���oso�� Wo�d, �x��� или Pow��Po���, т� Obj��� ��ows�� в�лючен в них �а� ча�ть реда�т�ра �а�р���в — M���o �d��o�. За�у�тите �рил�жение и щел�ните на �ун�тах �еню Разработчик (Too�s�Visual BasicViewObject Browser. Е�ли у ва� у�тан�влена ��л� на� вер�и� ра�ра��тчи�а V�su�� ��s��, �а�у�тите ее и щел�ните на �ун�тах �еню ViewObject Browser. Чт��ы �р����треть инф�р�ацию �� интере�ующе�у �ла��у, нужн� �а�тавить Wo�d (или V�su�� ��s�� и т. д.� �а�л�нуть в файл �р��ра��ы �ла��а. Дл� эт��� щел�ните на �ун�тах �еню Tools, References. Щел�ните на �н���е Browse и найдите DLL� или OCX�файл, ��т�рый �ыл ранее найден в рее�тре. Щел�ните на �н���е Open, и �и�ли�те�а ���вит�� в виде эле�ента � у�тан�вленны� флаж��� в ��и��е Available References, �а� ���а�ан� на ри�. 3 .6 . К��да ти� ��ъе�та вы�ран в ��и��е и на�р�тив не�� у�тан�влен флаж�� в ��ле �� ��и���� Available References, щел�ните на �н���е OK. П��ле эт���, �а� ���а�ан� на ри�. 3 .7, вы�ерите и�� �ла��а и� �и�ли�течн��� ��и��а в верхне� лев�� у�лу ��на Obj��� ��ows��. Вы�ерите ти�ы ��ъе�т�в в ле� в�й �анели, и �рау�ер ���ажет в �рав�й �анели ��д �л�в�� Members и�еющие�� в ��ъе�те �ет�ды, �в�й�тва и �ред��ределенные ��н�танты. М�жн� ���чередн� вы�ирать ��ъе�ты и� эт��� ��и��а, и в нижней �анели �рау�ер �удет ���а�ывать ар�у�енты �ет�да или �р�цедуры, е�ли та��вые и�еют��, и ве�ь ��наруженный и� те��т ��ъ��нени�. Рис. 3 .6 . Выбор библиотеки типа класса объекта для просмотра в Object Browser
Поиск и использование необычных объектов 139 Рис. 3 .7. Просмотр информации типа класса в Object Browser Е�ли ни �дн��� и� у����нутых �н�й �рил�жений у ва� нет, ин�тру�ентальный на��р W��dows XP и W��dows 2000 R�sou��� ���s �ред��тавл�ют еще �дн� �ред�тв�, ��т�р�е на�ывает�� OL��COM Obj��� V��w��. Эт�т на��р ��жн� �а�ру�ить � ве�� �айта www.microsoft.com. А �а�� эт� �ред�тв� ��жн� �а�ру�ить � www.microsoft.com, е�ли �р�ве�ти ��и�� �� �тр��е «OL��COM Obj��� V��w��». П�ль��вать�� �ред�тв�� OL��COM Obj��� V��w�� на�н��� �л�жнее, че� Obj��� ��ows��. В�т не���ль�� ��вет�в �� е�� и���ль��ванию: y y П��р��уйте найти интере�ующий ва� ��ъе�т в ра�делах Object Classes, All Objects. Я ��наружил, чт� не в�е ��ъе�ты, ��т�рые �ен� интере��вали, та� �еречи�лены. На�ри�ер, Scripting.Dictionary �ри�ут�твует, а Scripting.FileSystemObject — нет. Е�ли �де�ь найти ��ъе�т не уда�т��, ��ищите е�� в ра�деле Type Libraries. y y Дл� �р����тра инф�р�ации � �ла��е дважды щел�ните на на�вании �и�ли�те� �и или ��ъе�та. Эта инф�р�аци� ра�ра�атывала�ь дл� �р��ра��и�т�в COM� ��ъе�т�в, а не дл� ��нечных ��ль��вателей, ��эт��у �на ��жет �ыть трудна в у�в�ении. y y Эле�енты Typedef выв�д�т ��и��� �начений не��т�рых �ред��ределенных ��н� �тант, и���ль�уе�ых в�е�и ��ъе�та�и, �ред��тавл�е�ы�и �ервер��. y y Эле�енты Coclass ��редел�ют ��ъе�ты, ��т�рые ���ут �ыть ���даны �ервер�� �ла��а. Е�ли �р����треть ��держи��е эле�ента coclass, ��жн� найти �ред� ��ределенные ��н�танты, �в�й�тва и �ет�ды. Х�т� ��а �рау�ера ��ъе�т�в ���ут ва� ���а�ать, �начени� �а���� ти�а �ет�ды и �в�й�тва �жидают и в��вращают, �ни не ���ут ��д��а�ать, чт� ��начают эти �начени�, ��эт��у дл� ��ределени� ��р�д�а их и���ль��вани� нужн� э���ери� �ентир�вать. Чт� же �а�ает�� FaxControl.FaxControl.1, Obj��� ��ows�� ���а�ывает два �в�й�тва и два �ет�да, �еречи�ленные в ��рав�е 3.3 . В�е эт� в���рини�ает�� д�в�льн� �р��т�. Нет ар�у�ент�в, �ред��тавл�е�ых эти� �ет�да�, �начит, �де�ь не тре�ует�� ра��та �ыщи�а. К т��у же на�вани� ��� в�р�т �а�и �а �е��. Эт�т ��ъе�т ���в�л�ет у�нать, у�тан�влена ли �луж�а фа���в
140 Глава 3. Создание сценариев и работа с объектами (F�x s��v���� и �ринтер фа���в (F�x P�������, и ��жет их у�тан�вить. Н� ра��тает ли в�е эт�? СПРАВКА 3.3. СВОЙСТВА И МЕТОДЫ ОБЪЕКТА FAXCONTROL.FAXCONTROL СВОЙСТВА IsFaxServiceInstalled В��вращает �улев� �начение. IsLocalFaxPrinterInstalled В��вращает �улев� �начение. МЕТОДЫ InstallFaxService Ниче�� не в��вращает и не �рини�ает в �аче�тве ар�у�ент�в. InstallLocalFaxPrinter Ниче�� не в��вращает и не �рини�ает в �аче�тве ар�у�ент�в. В�т �р��т�й �ценарий, ��т�рый � на�и�ал дл� �р�вер�и: set obj = CreateObject("FaxControl.FaxControl.1") WScript.echo "IsFaxServiceInstalled =", obj.IsFaxServiceInstalled WScript.echo "IsLocalFaxPrinterInstalled =", obj.IsLocalFaxPrinterInstalled П��ле �а�у��а �ценари� на ����ьютере ��д у�равление� W��dows XP, у ��т�р�� �� и�ел�� ��де�, н� не �ыл� у�тан�вленн�й �луж�ы фа���в, � ��лучил �ледующий ре�ультат: IsFaxServiceInstalled = 0 IsLocalFaxPrinterInstalled = 0 К��да � �а�у�тил �ценарий set obj = CreateObject("FaxControl.FaxControl.1") obj.InstallFaxService �р��ра��а у�тан�в�и W��dows �а�р��ила ��й ����а�т�ди�� � W��dows XP и у�та� н�вила �луж�у фа���в и �ринтер фа���в. П��ле эт��� ре�ультат �а�у��а �ерв��� �ценари� �тал та�и�: IsFaxServiceInstalled = -1 IsLocalFaxPrinterInstalled = - 1 Зде�ь -1 ��начает True (лю��е ненулев�е �начение ��начает True�, �лед�ва� тельн�, ��ъе�т вы��лнил �жидае�ую �т не�� ра��ту. А в�т ва� �ценарий, ��т�рый авт��атиче��и ��е��ечивает у�тан�в�у на ��ль��ватель���й �и�те�е W��dows XP �луж�ы фа���в, а та�же у�тан�в�у фа��а и �ринтера фа���в: set obj = CreateObject("FaxControl.FaxControl.1") if not obj.IsFaxServiceInstalled then WScript.echo "Установка службы факсов..." obj.InstallFaxServic elseif not obj.IsLocalFaxPrinterInstalled then
Поиск и использование необычных объектов 141 WScript.echo "Переустановка принтера факсов..." obj.InstallLocalFaxPrinter else WScript.echo "Принтер факсов готов к работе. " end if Эт� не�л�х�й �ри�ер тех фун�ци�нальных в����жн��тей, ��т�рые ��жн� �ты� ��ать, и��леду� т� �н�же�тв� ��ъе�т�в, ��т�рые ���тавл�ют�� � W��dows. Зде�ь ���а�ана та ра�н�видн��ть �ценариев, ��т�рую ��жн� ���давать дл� у�равлени� ����ьютера�и, ра��тающи�и ��д W��dows, чт��ы дру�и� ��ль��вател�� не �ри� шл��ь �а�и� в��ить�� � Панелью у�равлени�. (В W��dows V�s�� эт�т �ценарий ра��тает т�ль�� в �us���ss, �����p��s� и U���m��� и�дани�х. И�дание Hom� не ���тавл�ет�� �� в�тр�енн�й ��ддерж��й фа��а, �ат� эта ��ддерж�а в�лючена в� в�е вер�ии W��dows 7.�
Доступ к файлам и реестру В эт�й �лаве вы у�наете ��р�д�� и���ль��вани� «��т�вых» ��ъе�т�в, �ред��тавл�е� �ых W��dows S���p� Hos� дл� чтени� файл�в, �а��� и ра��ты � ни�и, дл� на�тр�й�и ��нфи�урации, а та�же дл� чтени� рее�тра и ра��ты � ни�. y y Перед чтение� эт�й �лавы нужн� �а� �ледует у�в�ить �атериал �лавы 3 «С��� дание �ценариев и ра��та � ��ъе�та�и». y y Дл� ��и�ани� в�ех в����жн��тей �ажд��� ��ъе�та �де�ь �р��т� не хватает �е� �та. Я даю �ри�еры наи��лее важных фун�ций, а �����треть на в�е ��тальные д��ту�ные фун�ции ��жн� в ���твет�твующих и�т�чни�ах. y y При чтении �ажд��� ра�дела � �редла�аю �начала �р����треть �еречень �ет�� д�в и �в�й�тв, и�учить �ри�еры, а �ате� вернуть�� и �р����треть ��рав�чные ��и��и. Получение практических результатов В �ервых трех �лавах эт�й �ни�и ра���атривала�ь �реда W��dows S���p� Hos� (WSH�, �рив�дили�ь �рат�ие �ведени� �� �р��ра��ир�ванию на V�S���p� и ��� �а�ывал��ь, �а� и���ль�уют�� ��ъе�ты W��dows COM�A���v�X. Те�ерь �ы �ри� �ту�ае� � �ри�енению ��лученн�й инф�р�ации на �ра�ти�е. В эт�й и в �ледую� щих �лавах ра���атривает�� р�д �чень эффе�тивных ��ъе�т�в, �ред��тавл�е�ых W��dows в ваше ра���р�жение �ри ���дании �ценариев. Эти ��ъе�ты ���ут у�рав� л�ть файла�и, �а�у��ать �р��ра��ы, и��ен�ть ��нфи�урацию W��dows и �����ать в ад�ини�трир�вании �етей. П��ле �ред�тавлени� этих ��ъе�т�в �удут �рив�� дить�� ���на�т��ще�у ��ле�ные �ри�еры �р��ра�� �ценариев, ��т�рые ��жн� и���ль��вать в ��т�в�� виде или �рать �а ��н�ву дл� ���дани� �в�их ����твенных �ценариев. В ��тавших�� �лавах дл� ���дани� �ценариев �ра�тиче��и ��в�е�е�тн� и���ль� �ует�� т�ль�� V�S���p�. Е�ли вы ��ль�уете�ь дру�и�и ��ы�а�и, �ледует �а���нить, чт� не�ави�и�� �т �ри�ен�е���� ��ы�а, ��нце�ци� не и��ен�ет��, и ��ъе�ты ра��� тают абсолютно одинаково. Ва� �ридет�� �рать в ра�чет ��н�ретные ����енн��ти �инта��и�а �ри�ен�е���� ��ы�а и е�� �ет�ды ра��ты � ��ъе�та�и���лле�ци��и, 4
Работа с файлами и папками 143 н� ��веты, ��т�рые �ыли даны в �лаве 3, ���в�л�т �р�делать эту ра��ту �е� ������� труда. ▼) Для тех, кто только приступает к освоению программирования, эта глава начинается с рас- смотрения объекта Scripting.FileSystemObject. Позже в этой и последующих главах будет при- меняться более приемлемый метод изложения материала. Хотя для иллюстрации тех или иных вопросов будут по-прежнему применяться короткие фрагменты программ, я начну показывать более длинные сценарии, чтобы показать, как собрать все общие представления в единое целое для создания полезной программы. Работа с файлами и папками Одн�й и� ��н�вных �ричин, �� ��т�р�й люди �ерут�� �а ���дание �ценариев, �вл�� ет�� ра��та � файла�и и �а��а�и. Х�т� W��dows �xp�o��� у�р��тил и���ль��вание �ыши дл� ���ир�вани� и �ере�ещени� файл�в, ���да нужн� ра��тать � ��льши� ��личе�тв�� файл�в и �а��� �ри и���ль��вании �рафиче����� ��ль��ватель����� интерфей�а, эт� ��жет �ы�тр� �ревратить�� в ве�ь�а ут��ительн�е �ан�тие. В�т р�д �адач, ��т�рые �л�жн� вы��лнить в �xp�o���, н� ле��� ��жн� решить � ����� щью �ценариев: y y �ереи�ен�вание �ра�у не���ль�их файл�в; y y вне�ение и��енений в атри�уты в�ех файл�в в �а��е и в� в�ех лежащих ниже ур�вн�х ��д�а���; y y ра��ечат�а в�ех файл�в M���oso�� Wo�d ра��ер�� �енее 1 М� � US���арты флэш��а��ти � ����щью Wo�d и в�ех файл�в и���ражений � ����щью �р�� �ра��ы P����; y y �ери�диче���е ��анир�вание �а��и на наличие в ней файл�в � ��ределенны� и�ене� или ти��� файла и авт��атиче��а� их ра��ечат�а или �а�а��ни�удь ��ра��т�а. Б�льшин�тв� вы��лн�е�ых �ценари��и �адач, �в��анных � файла�и и �а��а�и, и���ль�уют ��ъе�т FileSystemObject, ��эт��у � не�� и начне�. Scripting.FileSystemObject О�ъе�т Scripting.FileSystemObject ���тавл�ет�� � WSH �а� «в������ательный». Е�� �ет�ды, �в�й�тва и ��д��ъе�ты �ред��тавл�ют ��н�вную ча�ть ин�тру�ента� ри�, не��х�ди���� дл� ра��ты � файла�и. Мн��ие �ценарии V�S���p� начинают�� � ��ерат�ра set fso = CreateObject("Scripting.FileSystemObject") ��т�рый ���дает э��е��л�р ��ъе�та FileSystemObject и ��хран�ет е�� в �ере�енн�й fso. Дл� �ажд��� �ценари� нужн� ���дать т�ль�� �дин э��е��л�р эт��� ��ъе�та. Е�ли �н �удет ���дан в �аче�тве �л��альн�й �ере�енн�й, т� �удет д��ту�ен дл� в�ех ча�тей ваше�� �ценари� и дл� лю�ых е�� ��д�р��ра�� или фун�ций.
144 Глава 4. Доступ к файлам и реестру ▼) В некоторых примерах фрагментов сценариев, которые будут показаны в данной главе, я исполь- зую объект, названный fso, не показывая при этом в явном виде вызов функции CreateObject. В любом из этих примеров можно предположить, что fso — это объект FileSystemObject, создан- ный в самом начале сценария. Св�й�тва и �ет�ды ��ъе�та FileSystemObject �еречи�лены в ��рав�е 4.1 . Мн�� �ие и� них �удут и���ль��ваны в дальнейших �ри�ерах. Ар�у�ента�и �ет�д�в ��ъе�та Scripting.FileSystemObject, е�ли в ��и�ании не ���в�рен� чт��ни�удь дру��е, �лужат �тр��и. ▼) В тех свойствах и методах, которые вызываются для имени файла или имени папки, можно указывать полное путевое имя, начинающееся с буквы диска, или же указывать относительный путь. Если используемый путь не начинается с буквы диска, предполагается, что он принадле- жит текущему диску. Если путь не начинается с символа обратного слэша, предполагается, что он задан относительно текущего рабочего каталога на текущем или указанном диске. Напри- мер, если при запуске сценария текущим является каталог c:\text, Windows интерпретирует путь \temp как c:\temp, а имя файла subfolder\something.doc — как c:\text\subfolder\something.doc. СПРАВКА 4.1. СВОЙСТВО И МЕТОДЫ SCRIPTING.FILESYSTEMOBJECT СВОЙСТВО Drives В��вращает ��лле�цию ��ъе�т�в Drive, �� �дн��у ��ъе�ту дл� �ажд��� фи�иче����� или �т��раженн��� �етев��� ди��а, и�еюще���� на л��альн�й �ашине. МЕТОДЫ BuildPath(путь, имя) Д��авл�ет и�� файла � и�ени �ути и в��вращает ��ъединенную �тр��у. Следует ���нить � д��авлении не��х�ди�ых �и�в�л�в : или \. На�ри�ер, fso. BuildPath("C:\temp","file.dat") в��вращает "C:\temp\file.dat". CopyFile источник, приемник [,перезапись] К��ирует �дин или не���ль�� файл�в и� �дн��� �е�та в дру��е. Е�ли нужн�, в ар�у�енте источник в и�ени файла ���ут ��держать�� �и�в�лы��а�е�тители. Ар�у�ент приемник ��жет �ыть и�ене� файла или �а��и. Е�ли у�а�ан �улев ар�у�ент перезапись, и�еющий �начение False, и е�ли �а��а��рие�ни� уже ��� держит файл � та�и� же и�ене�, �а� и у файла�и�т�чни�а, �ценарий �ре�ращает ра��ту � выдачей �ши��и; в �р�тивн�� �лучае �уще�твующие файлы �ере�а� �и�ывают��. П� у��лчанию дл� ар�у�ента перезапись и���ль�ует�� �начение True. В��вращае�ые �начени� �т�ут�твуют, ��эт��у �ри вы��ве �ет�да �ру�лые �����и и���ль��вать не нужн�. CopyFolder источник, приемник [,перезапись] К��ирует �а��у, у�а�анную в ар�у�енте источник и� �дн��� �е�та в дру��е. В �е�те � ней ���ируют�� та�же в�е файлы и ��д�а��и. Е�ли �а��а приемник
Работа с файлами и папками 145 уже �уще�твует, ��держи��е �а��и источник д��авл�ет�� � ��держи���у �а��и приемник, и дл� ��держи���� вы�тавление ар�у�ента перезапись ра��тает т�чн� та� же, �а� и в �лучае �ри�енени� �ет�да CopyFile. У�а�ание �и�в�л�в��а�е� �тителей в и�ени источника ���в�л�ет ���ир�вать �ра�у не���ль�� �а���, н� �и�в�лы��а�е�тители ���ут и���ль��вать�� т�ль�� в ���ледне� и�ени �ути. CreateFolder(имя_папки) С��дает �а��у и в��вращает ��ъе�т Folder, �ред�тавл�ющий н�вую �а��у. Е�ли �а��а уже �уще�твует, �ет�д �енерирует �ши��у, ��эт��у �еред вы��в�� CreateFolder нужн� и���ль��вать дл� �р�вер�и �уще�тв�вани� �а��и �ет�д FolderExists. Мет�д CreateFolder ���дает в у�а�анн�� �ути т�ль�� �а��у �а��� �� нижне�� ур�вн�. Вы��в fso.CreateFolder("C:\a\b\c") ра��тает т�ль�� е�ли �тру�тура C:\a\b уже �уще�твует. Чуть ���же в данн�й �ла� ве �удет ���а�ан�, �а� на�и�ать ��д�р��ра��у, ������ную ���давать ��д�а��у даже �ри �т�ут�твии �а��� ��лее вы������ ур�вн�. CreateTextFile(имя_файла[, перезапись[, юникод]]) С��дает файл � у�а�анны� и�ене� и в��вращает ��ъе�т те��т�в��� ��т��а — TextStream, ��т�рый ��жет и���ль��вать�� дл� чтени� файла или �а�и�и в не��. Те��т�вые ��т��и �удут ра����трены чуть ���же в данн�й �лаве. М��ут и���ль��вать�� �ледующие не����ательные ар�у�енты: y y перезапись — е�ли эт�т ар�у�ент ��ущен или и�еет �начение True и у�а�ан� ный файл уже �уще�твует, и�х�дный файл удал�ет��, и в�е�т� не�� ���да� ет�� н�вый файл. Е�ли эт�т ар�у�ент у�а�ан �а� False, а та��й файл уже �уще�твует, в��ни�ает �ши��а. П� у��лчанию и���ль�ует�� �начение True. y y Юникод — е�ли эт�т ар�у�ент у�а�ан и и�еет �начение True, файл ���дает�� � ��дир�в��й Юни��д. Е�ли эт�т ар�у�ент ��ущен или и�еет �начение False, файл ���дает�� � и���ль��вание� ��дир�в�и ASCII. DeleteFile спецификация_файла[, принудительно] Удал�ет у�а�анный файл. Удал�е�ый файл не ���ещает�� в К�р�ину, а и�че� �ает �е�в��вратн�. Файлы т�ль�� дл� чтени� не удал�ют��, ���а �улев ар�у�ент принудительно не �удет и�еть �начение True. С ����щью �и�в�л�в��а�е�тите � лей, и���ль�уе�ых в т�й ча�ти спецификации_файла, ��т�ра� �ред�тавл�ет и�� файла, ��жн� удалить �ра�у не���ль�� файл�в. DeleteFolder спецификация_папки[, принудительно] Удал�ет у�а�анную �а��у �� в�е� ее ��держи�ы�. Удаленные файлы и �а��и не ��хран�ют�� в К�р�ине. Па��и и файлы т�ль�� дл� чтени� не удал�ют��, ���а �улев ар�у�ент принудительно не �удет и�еть �начение True. Е�ли ар�у�ент принудительно ��ущен или и�еет �начение False и е�ли �ет�д DeleteFolder �т�л�нет�� � файл�� т�ль�� дл� чтени�, �н �ре�ращает ра��ту, не �авершив вы��лнение �адачи, и выдает �ши��у. Е�ли в и�х�дн�� и�ени и�� ��ль��вать �и�в�лы��а�е�тители, ��жн� удалить �ра�у не���ль�� �а���, н� �и�в�лы��а�е�тители ���ут и���ль��вать�� т�ль�� в ���ледне� и�ени �ути.
146 Глава 4. Доступ к файлам и реестру DriveExists(диск) В��вращает True, е�ли у�а�анный ди�� (на�ри�ер, «�:»� �уще�твует; в �р�� тивн�� �лучае в��вращает False. FileExists(имя_файла) В��вращает True, е�ли у�а�анный файл �уще�твует; в �р�тивн�� �лучае в��вращает False. FolderExists(папка) В��вращает True, е�ли у�а�анна� �а��а �уще�твует; в �р�тивн�� �лучае в��вращает False. GetAbsolutePathName(спецификация_пути) В��вращает а���лютн�е и�� файла или �утев�е и�� и� лю���� и�ени фай� ла или �утев��� и�ени. Е�ли у�а�анный �уть и�еет �тн��ительный ф�р�ат, дл� ���тр�ени� а���лютн��� �ути и���ль�ует�� те�ущий �атал��. На�ри�ер, е�ли те�ущи� �вл�ет�� �атал�� c:\ext, �ри �а�у��е �ценари� выражение fso. GetAbsolutePathName("some.doc") в��вращает �тр��у "c:\text\some.doc". GetFileVersion(путевое_имя) При �ередаче ��лн��� �утев��� и�ени и���лн�е��й �р��ра��ы W��dows или ��дул� дина�иче��и ��д�лючае��й �и�ли�те�и — Dy��m�� L��k L�b���y (DLL�, в��вращает идентифи�аци�нную �тр��у вер�ии, хран�щую�� в файле. При �т�ут�твии в файле инф�р�ации, ���в�л�ющей ��ределить вер�ию, или �ри �т�ут�твии файла в��вращает �у�тую �тр��у. Ти�ичн�е в��вращае��е �на� чение ��жет и�еть �ри�ерн� �ледующий вид: "6.1 .7600.0". GetBaseName(путевое_имя) В��вращает �а��в�е и�� у�а�анн��� файла, и��люча� �уть или ра�ширение файла. Е�ли путевое_имя �вл�ет�� и�ене� �ути и не ��держит и�� файла, �ет�д в��вращает и�� ���ледней �а��и в �ути. Н� в та��� �лучае �удьте ��т�� р�жны: е�ли у ���ледней �а��и е�ть нечт� ��х�жее на ра�ширение файла (.xxx�, �ет�д GetBaseName эту ча�ть удалит. Е�ли нужн� и�влечь и�� ���ледней �а��и в �ути, в����ль�уйте�ь лучше �ет�д�� GetFileName. GetDrive(спецификация_диска) В��вращает ��ъе�т Drive, ���твет�твующий у�а�анн��у диску. Х�т� �ыл� �ы не�л�х�, чт��ы �ет�д GetDrive и��ал �у�ву ди��а, у�а�анную в специфика­ ции_диска, е�у нель�� �ередавать ��лн�е �утев�е и��. Е�ли вы ���ытаете�ь эт� �делать, �ценарий ��енерирует �ши��у. Дл� и�влечени� �дн��� т�ль�� на�вани� ди��а ��жн� в����ль��вать�� �ет�д�� GetDriveName. GetDriveName(путь) В��вращает и�� ди��а, и���ль��ванн�е в у�а�анн�� �ути. GetExtensionName(путь) В��вращает ра�ширение и�ени дл� ���ледне�� файла или �а��и в �ути, т� е�ть лю�ые �и�в�лы, ��т�рые нах�д�т�� ���ле ���ледней т�ч�и в и�ени. (М�жет �ри��дить�� дл� ��лучени� ра�ширени� и�ени файла, н� �е���ле�ен
Работа с файлами и папками 147 �ри и���ль��вании и�ен �а���, �����ль�у �� те� или ины� �ричина� и�ена� �а��� ра�ширени� �ри�ваивают�� д�в�льн� ред��.� GetFile(спецификация_файла) В��вращает ��ъе�т Scripting.File, ���твет�твующий у�а�анн��у файлу. Зате� эт�т ��ъе�т ��жн� и���ль��вать дл� и��енени� и�ени файла и е�� атри� �ут�в, чт� �удет ра����трен� далее в данн�й �лаве. GetFileName(спецификация_пути) В��вращает и�� файла или и�� ���ледней �а��и в у�а�анн�� �ути. Эт�т �ет�д ��х�ж на �ет�ды GetBaseName и GetExtensionName, н� �н в��вращает ��ъ� единенн�е и�� и ра�ширение. GetFolder(спецификация_папки) В��вращает ��ъе�т Folder, ���твет�твующий у�а�анн��у �утев��у и�ени �а��и (на�ри�ер, "C:\temp"�. Зате� эт�т ��ъе�т ��жн� и���ль��вать дл� и��е� нени� и�ени �а��и и ее атри�ут�в, а та�же дл� и��лед�вани� е�� ��держи���� (эта �адача �удет ра����трена далее�. GetParentFolderName(путь) В��вращает в�е, чт� нах�дит�� выше ���ледне�� эле�ента �ути. Эти� ��ж� н� в����ль��вать�� �ри наличии ��ецифи�ации �ути, не ��держащей и�ени файла. GetSpecialFolder(спецификация_папки) В��вращает ��длинный �уть � у�а�анн�й ��ециальн�й �а��е, ���твет�тву� ющий ее реальн�й у�тан�в�е на л��альн�� ����ьютере. Спецификация_папки �вл�ет�� �дни� и� �ледующих �начений. Константа Значение Описание WindowsFolder 0 П�длинн�е на�вание вашей �а��и W��dows SystemFolder 1 П�длинн�е на�вание �а��и W��dows\Sys��m32 TemporaryFolder 2 Па��а, и���ль�уе�а� дл� вре�енных и в������атель� ных файл�в ▼) Если нужно, чтобы сценарий искал персональные папки, такие как папка Мои документы (My Documents), обратитесь к объекту WScript.Shell, рассматриваемому далее. ▼o WindowsFolder, SystemFolder и TemporaryFolder не являются предустановленными константами. Вам нужно либо определить их в своем сценарии, как в следующем VBScript-операторе const TemporaryFolder = 2 или воспользоваться в своей программе значениями 0, 1 или 2. Уделите этому вопросу особое внимание. Если в VBScript воспользоваться одним из этих имен без его определения, интерпре- татор будет использовать значение по умолчанию 0, при указании которого всегда возвраща- ется путь к папке Windows.
148 Глава 4. Доступ к файлам и реестру GetStandardStream(поток) В��вращает ��ъе�т TextStream, ���твет�твующий ��т��а� �тандартн��� вв�да, �тандартн��� выв�да и �тандартн�й �ши��и, и���ль�ующи��� дл� WSH. (При�ен�ет�� т�ль�� ���да �ценарий �а�у��ает�� � ����щью �s���p�.� Ар�у�ент поток ��жет и�еть �дн� и� �ледующих �начений. Константа Значение Описание StdIn 0 В��вращает ��т�� �тандартн��� вв�да StdOut 1 В��вращает ��т�� �тандартн��� выв�да StdErr 2 В��вращает ��т�� �тандартн�й �ши��и GetTempName() В��вращает �р�и�в�льн� ��енерир�ванн�е и��, ��т�р�е ��жет �ыть и�� ��ль��ван� дл� в������ательн��� файла. Ни�а���� и�ени �а��и эт��у �ет�ду не �ередает��. Дл� ���дани� вре�енн��� файла в на�наченн�й вре�енн�й �а��е в����ль�уйте�ь и�ене�, в��вращенны� �ледующи� �р��ра��ны� ��д��: const TemporaryFolder = 2 fso.BuildPath(fso.GetSpecialFolder(TemporaryFolder), fso.GetTempName()) Мет�д GetTempName не ���дает файл; �н дает и��, ��т�р�е, � ��льш�й �те� �енью вер��тн��ти, еще не и���ль�ует�� �а�и��ни�удь уже �уще�твующи� файл��. MoveFile источник, приемник Пере�ещает �дин или не���ль�� файл�в � �дн��� �е�та в дру��е. Источник ��жет �ыть и�ене� файла или и�ене� файла, ��держащи� �и�в�лы��а�е�ти� тели. Приемник ��жет �ыть и�ене� �а��и или и�ене� файла. Е�ли �рие�ни� �вл�ет�� и�ене� �а��и, не �а�удьте в ��нце у�а�анн��� и�ени ���тавить �и�в�л ��ратн��� �лэша (\�, чт��ы �и�те�е W��dows �ыл� ��н�тн�, чт� у�а�ывает�� и�� �а��и, а не файла. Е�ли приемник нах�дит�� на т�� же �а��� т��е (ди��е и ра�де� ле�, �р�и�х�дит ��ычн�е �ереи�ен�вание; в �р�тивн�� �лучае �р�и�х�дит ���и� р�вание � удаление� �ри�инала. Па��а приемник д�лжна �уще�тв�вать �аранее. Е�ли файл приемник уже �уще�твует или и�� источника ��держит �и�� в�лы��а�е�тители, не ���твет�твующие ни �дн��у файлу, в��ни�ает �ши��а. Е�ли �ши��а в��ни�ает в �р�це��е ра��ты � �ере�ещае�ы�и файла�и, в�е уже �ере�ещенные файлы ��тают�� на �в�е� н�в�� �е�те. MoveFolder источник, приемник Пере�ещает �дну или не���ль�� �а��� � �дн��� �е�та в дру��е. Пере�е� щают�� та�же и лю�ые ��д�а��и. Е�ли ���ледн�� �а��а в приемнике еще не �уще�твует, �на ���дает��. OpenTextFile(имя_файла[, режим_ввода_вывода[, создать[, формат]]]) От�рывает у�а�анный файл и в��вращает ��ъе�т TextStream, ��т�рый ��� жет и���ль��вать�� дл� чтени� и� файла, а та�же дл� �а�и�и или д��авлени�
Работа с файлами и папками 149 инф�р�ации в файл. При вы��ве �ет�да ���ут и���ль��вать�� �ледующие не� ����ательные ар�у�енты: y y режим_ввода_вывода — ��редел�ет ������ и���ль��вани� файла. Д��у��ает �ри�енение �ледующих �начений. Константа Значение Описание ForReading 1 От�рывает файл дл� чтени�. Эт� �начение и���ль�ует�� �� у��лчанию ForWriting 2 От�рывает файл дл� �а�и�и. Лю��е уже �уще�тв�вавшее ��держи��е в и�евше��� файле � та�и� же и�ене� унич� т�жает�� ForAppending 8 От�рывает файл дл� �а�и�и и д��авл�ет в�е �а�и�ыва� е�ые данные � ��нцу лю���� уже �уще�тв�вавше�� ��� держи���� y y создать — ��редел�ет, д�лжен ли ���давать�� н�вый файл, е�ли у�а�анн��� файла еще не �уще�твует. Е�ли эт�т ар�у�ент у�а�ан и и�еет �начение True, файл ���дает��. Е�ли эт�т ар�у�ент и�еет �начение False, файл д�лжен �у� ще�тв�вать �аранее. П� у��лчанию и���ль�ует�� �начение False. y y формат — у�а�ывает и���ль�уе�ую в файле ��дир�в�у �и�в�л�в. Д��у��ает �ри�енение �ледующих �начений. Константа Описание TristateTrue От�рывает или ���дает файл, и���ль�ующий Юни��д TristateFalse И���ль�ует ��д ASCII TristateUseDefault И���ль�ует ��д, у�тан�вленный в �и�те�е �� у��лчанию. Эт� �начение и���ль�ует�� в �ет�де, е�ли не у�а�ан� ни� �а��е дру��е �начение Ка� видите, �ет�ды, �ред��тавл�е�ые ��ъе�т�� FileSystemObject, �тн���т�� � дву� ��н�вны� �ате��ри��: ��ле�ны� фун�ци��, �����ающи� ра��тать � и�ена� �и файл�в и �р�вер�ть �уще�тв�вание файл�в и �а���, и �ет�да�, в��вращающи� ��ъе�ты, ���твет�твующие ди��а�, файла� и �а��а�. Сначала �удут ра����трены фун�ции, а �ате� �ы �ерейде� � ��ъе�та� ди���в, файл�в и �а���. Работа с файловыми и путевыми именами В �ценари�х, ра��тающих � файла�и и �а��а�и, ча�т� нужн� вы�траивать ��лные �утевые и�ена �уте� ��ъединени� и�ени файла � �утевы� и�ене�. С эти� �ри� х�дит�� �тал�ивать�� �ри ���ир�вании и �ереи�ен�вании файл�в, ���дании вре� �енных файл�в и т. д . П�лн��тью ��ределенные �утевые и�ена и�еют �ри�ерн� �ледующий вид: c:\users\bknittel\documents\chapter.doc
150 Глава 4. Доступ к файлам и реестру ▼) Кстати, здесь показан путь к моей папке Documents на моем компьютере, работающем под управлением Windows Vista. На компьютере с XP путь будет выглядеть следующим образом: c:\Documents and Settings\bknittel\My Documents. На вашем компьютере такой путь может во- обще выглядеть по-другому. Чуть позже в данной главе, когда будет рассматриваться объект WScript.Shell, я покажу вам, как получить правильный путь к вашим собственным папкам, что- бы ваш сценарий работал с любой версией Windows. С��дание ��лн��тью ��ределенн��� и�ени �уте� ��ъединени� �утев��� и�ени (ди��а и (или� �а��и� � и�ене� файла не �в�дит�� т�ль�� лишь � �р��т�й �адаче ��единени� в�е�те двух ча�тей � �и�в�л�� ��ратн��� �лэша �ежду ни�и, �а� ��� �а�ан� в данн�� �ри�ере: filename = "chapter.doc" path = " c:\users\bknittel\documents" fullpath = path & "\" & filename Пр��ле�а в т��, чт� �т��ни�удь ��жет у�а�ать �уть �а� "a:", ��дра�у�ева� ���ир�вание файла в текущую �а��у ди��а A:. Н�, эта уче�на� �р��ра��а выда�т и�� "a:\chapter.doc", в ре�ультате че�� файл ���адет в корневую �а��у ди��а A:. Б�лее т���, е�ли �т��ни�удь вв�дит та��й �уть, �а� "c:\temp\", �р��ра��а вы� дает �тр��у "c:\temp\\chapter.doc", ��т�ра� техниче��и �вл�ет�� не�рие�ле�ы� и�ене� файла. (Та��е и�� ра��тает, н� ра��читывать на эт� в �удуще� не �т�ит.� Решение эт�й �р��ле�ы �а�лючает�� в и���ль��вании �ет�да BuildPath, �ред�� �тавл�е���� ��ъе�т�� FileSystemObject. Е�� �адача — ��ъединить �ути � и�ена�и файл�в, и �н �ерет в ра�чет в�е т�н���ти эт�й �адачи. Предыдущую уче�ную �р�� �ра��у ��жн� �ере�и�ать �ледующи� ��ра���: filename = "chapter.doc" path = " c:\users\bknittel\documents" fullpath = fso.BuildPath(path, filename) О�ъе�т FileSystemObject ���тавл�ет�� � не���ль�и�и д���лнительны�и �ет�� да�и, �����ающи�и ра��тать � �утевы�и и�ена�и файл�в: GetAbsolutePathName, GetBaseName, GetDrive, GetDriveName, GetExtensionName, GetFileName и GetParent- FolderName. Эти �ет�ды ��жн� и���ль��вать в �ценари�х дл� ра��иени� и�ен файл�в на их ���тавные ча�ти. К �ри�еру, �ри ���дании �ценари�, ��нвертирующе�� ��держи��е �а��и, �а��л� ненн�й GIF�файла�и, в JPG�файлы, нужен ������ �ревращени� �ред��тавленных вх�дных и�ен в нужные вых�дные и�ена файл�в. Пр�ще в�е�� эт� �делать, и���ль� �у� �ет�д GetBaseName, удал�ющий �а� �утевую ча�ть и�ени файла, та� и е�� ра�ши� рение. И�е� в �в�е� ра���р�жении �а��в�е и��, ��жн� �удет дл� ��лучени� желае� ���� и�ени вых�дн��� файла �ри��единить � не�у н�в�е ра�ширение и и�� �а��и. Ра����три� фра��ент �ценари�, ��ра�атывающе�� в�е GIF�файлы в �аданн�й вх�дн�й �а��е, и ���дающе�� и� них JPG�файлы в вых�дн�й �а��е: set fso = CreateObject("Scripting.FileSystemObject") infolder = "C:\pictures\received" outfolder = "C:\pictures\converted" for each file in fso.GetFolder(infolder).Files if ucase(fso.GetExtensionName(file.name)) = "GIF" then basename = fso.GetBaseName(file.name)
Работа с файлами и папками 151 giffile = fso.BuildPath(infolder, basename & ".G IF") jpgfile = fso.BuildPath(outfolder, basename & ". JPG ") convertGIFtoJPG giffile, jpgfile ' ес ли кон вертация прошла успешно, удалить исходный файл if fso.FileExists(jpgfile) then file.Delete end if loop sub convertGIFtoJPG (giffile, jpgfile) . . . (Здесь должна находиться подпрограмма конвертации для создания JPG из GIF. Такая подпрограмма должна, наверное, использовать некий объект, обрабатывающий изображения) . . . end sub Следует ��ратить вни�ание на �ледующие ���енты: y y Ци�л for each вы��лн�ет�� �� �дн��у ра�у дл� �ажд��� файла �а��и, у�а�ан� н�й в �ере�енн�й infolder. Мет�д GetFolder в��вращает ��ъе�т Folder; .Files в��вращает ��лле�цию, ���т��щую и� в�ех файл�в в эт�й �а��е; а for each ��у� ще�твл�ет ���лед�вательный �ере��р в�ех эле�ент�в ��лле�ции. При �ажд�� �р�х�де ци�ла �ере�енна� file ��держит ��ыл�у на ��ъе�т Scripting.File, �ред�тавл�ющий �дин файл. y y Мет�д fso.GetFileExtension(file.name) в��вращает т�ль�� ра�ширение и�ени файла, и�вле�ае��е и� �в�й�тва name ��ъе�та, на ��т�рый ��ылает�� �ере�енна� file (�� ��ъе�те файла речь еще в�ереди�. Мет�д Ucase �ерев�дит �и�в�лы ра�ширени� в верхний ре�и�тр, �редвар�� те� �а�ы� е�� �равнение � "GIF"; в �р�тивн�� �лучае, е�ли �ы у файла �ыл� ра�ширение "gif" (� �и�в�ла�и в нижне� ре�и�тре�, �н� �ы не �р�шл� �равнение. y y О�ерат�ры внутри �тру�туры if ��ра�атывают �аждый и� GIF�файл�в в �а��е, у�а�анн�й в �ере�енн�й infolder. Е�ли в эт�й �а��е ��держат�� не GIF�файлы, �ни �ценарие� не ��ра�атывают��. y y Дл� и�влечени� т�ль�� т�й ча�ти и�ени файла, ��т�ра� �ледует �ра�у ���ле �ути и �еред ".gif", �ценарий и���ль�ует �ет�д GetBasename, ��т�� �н �ри� ��един�ет � ��лученн��у ре�ультату ра�ширение ".jpg" и и���ль�ует �ет�д BuildPath дл� ��ъединени� ��лученн��� ре�ультата � и�ене� вых�дн�й �а��и. В ит��е, дл� �ажд��� GIF�файла, и�еюще���� в �а��е, у�а�анн�й в �ере�енн�й infolder, �дн��ратн� вы�ывает�� ��д�р��ра��а convertGIFtoJPG, ��т�р�й у�а� �ывает�� и�� вв�ди���� GIF�файла и и�� желае���� выв�ди���� JPG�файла. Удаление и переименование файлов Мет�д DeleteFile �вл�ет�� �р��ы� анал���� ���анды del, �а�у��ае��й в ���анд� н�й �тр��е. На�ри�ер, ��ерат�р fso.Deletefile("c:\temp\somefile.tmp") удал�ет файл c:\temp\some�le.tmp. Е�ли вы не уверены, �а��й и�енн� �атал�� �в� л�ет�� те�ущи� ра��чи� �атал���� �ценари�, нужн� у�а�ать ��лный �уть � уда� л�е���у файлу.
152 Глава 4. Доступ к файлам и реестру Дл� �ереи�ен�вани� файла лучше в�е�� ��лучить �ред�тавл�ющий е�� ��ъе�т Scripting.File и и��енить �в�й�тв� ��ъе�та Name. О�ъе�т File �удет ра���атри� вать�� в данн�й �лаве чуть ���же, н� в �аче�тве �редварительн��� �р����тра ��жн� и���ль��вать �ледующий ��ерат�р: fso.GetFile("c:\temp\newfile.tmp").Name = "newfile.doc" Файл ��жн� та�же �ереи�ен�вать � ����щью �ет�да MoveFile. Н� эт�т �ет�д ра���атривает целев�е и�� �а� �утев�е, ��эт��у ��ерат�р fso.MoveFile("c:\temp\newfile.tmp", "newfile.doc") не т�ль�� �ереи�енует файл new�le.tmp, н� та�же и �ере�е�тит е�� и� �а��и c:\temp в те�ущую ра��чую �а��у �ценари�. Е�ли та��й ре�ультат нежелателен, ва� �ри� дет�� и���ль��вать в �аче�тве целев��� и�ени ��лн�е �утев�е и�� файла: fso.MoveFile("c:\temp\newfile.tmp", "c:\temp\newfile.doc") Создание папки Е�ли ва� нужн� ���дать файлы в ��н�ретн�й �а��е или �ере�е�тить их туда, �ыл� �ы не�л�х� и�еть �ценарий, �арантирующий �уще�тв�вание ����наченн�й �а��и, ����енн� е�ли �ценарий �ред��ла�ает�� вы��лн�ть не т�ль�� на ваше� ����твен� н�� ����ьютере. Сделать эт� ��жет �ет�д CreateFolder, �ринадлежащий ��ъе�ту Scripting.FileSystemObject. Е�ли �аду�ан� и���ль��вание �а��и �� и�ени C:\myscript\output, у ва� ��жет ���вить�� ���ла�н ���тавить в �а��е начал� �ценари� �ледующий ��ерат�р, чт��ы нужна� �а��а �ыла в�е�да ��д ру��й: fso.CreateFolder("C:\myscript\output") Н� и���ль��вание та���� ��ерат�ра ��жет �тать �ричин�й в��ни�н�вени� двух �р��ле�: y y Е�ли �а��а уже �уще�твует, WSH ��танавливает вы��лнение �ценари� � вы� дачей ����щени� �� �ши��е. y y Мет�д CreateFolder ��жет ���дать т�ль�� �а��у, нах�д�щую�� в �утев�� и�ени на �а��� ни���� ур�вне. В �риведенн�� �ри�ере, е�ли �а��а C:\myscript еще не �уще�твует, т� �ет�д CreateFolder не ��жет ���дать �ра�у ��е �а��и — и myscript, и output. В данн�� �лучае WSH ���ть ��тан�вит вы��лнение �ценари� и выда�т ����щение �� �ши��е. С����� ра�решени� ��д��ных �р��ле� �а�лючает�� в расширении фун�ци�наль� н��ти в�тр�енн�й фун�ции. Эт� ��жет �ыть �делан� �уте� на�и�ани� ��д�р��ра�� �ы, ��т�р�й ваш �ценарий ��жет в����ль��вать�� дл� вы��лнени� ��лее �ерье�н�й �адачи. Ра����три� �ценарий, ��держащий та�ую ��д�р��ра��у дл� ���дани� �а���, ��т�рый �ред�тавл�ет ����й ра�ширенную вер�ию �ет�да CreateFolder ��д на�вание� CreateFullPath. Первые две �тр��и эт��� �ценари� ��держат �р��тую «��н�вную �р��ра��у», т� е�ть �вл�ют�� ��н�вны� тел�� �ценари�. В�� ��тальна� ча�ть �ценари� �ред�тавл�ет ����й ��д�р��ра��у CreateFullPath: ' Файл примера script0401.vbs set fso = CreateObject("Scripting.FileSystemObject") CreateFullPath "c:\myscript\output"
Работа с файлами и папками 153 ' . .. здесь должен располагаться весь остальной сценарий, в котором проводится ' к ака я-нибудь работа с папкой \myscript\output ' ' --------------------------------------------------------------------- ' Подпрограмма CreateFullPath создает папку, указанную в 'path', ' с оздавая при необходимости и любую промежуточную папку. ' (Примечание: аргумент 'path' указан как 'byval', потому что мы изменяем его ' з нач ени е в нутри подпрограммы). ' --------------------------------------------------------------------- sub CreateFullPath (byval path) dim parent ' временная переменная path = fso.GetAbsolutePathname(path) ' гарантия полного указания пути parent = fso.GetParentFolderName(path) ' получение имени родительской папки if not fso.FolderExists(parent) then ' е сли родительская папка или папки ' н е существуют ... CreateFullPath parent ' ... то они создаются end if if not fso.FolderExists(path) then ' е сли подпапка не существует ... fso.CreateFolder(path) ' ... то она создается end if end sub Эту ��д�р��ра��у ��жн� и���ль��вать в лю��� �ценарии, ��т�рый нуждает�� в ���дании �а��и. С ней ваш �ценарий ни���да не �удет ���ты�ать�� на �уще�тв�� вании тре�уе��й �а��и или на �т�ут�твии р�дитель���й �а��и. ЗАЩИТА АРГУМЕНТОВ В и���ль��ванн�� �де�ь �ри�ере path �вл�ет�� не��ычн�й �ере�енн�й, — эт� ар�у�ент, �ереданный ��д�р��ра��е CreateFullPath вы�ывающей ее �р�� �ра���й. Чт� ��лучает��, ���да и��ен�ет�� �начение ар�у�ента, �ереданн��� фун�ции или ��д�р��ра��е? Суще�твует два ������а �ередачи ар�у�ент�в: �� �начению и �� ��ыл�е. К��� да ар�у�ент �ередает�� �� �начению, ��д�р��ра��а делает «���ию» �начени� ар�у�ента, ��эт��у, е�ли ��д�р��ра��а эту ���ию и��ен�ет, ни�а�их �р��ле� не в��ни�ает. К��да же ар�у�ент �ередает�� �� ��ыл�е, и��енени� ���ут �р�де� лать �уть на�ад � вы�ывающей �р�цедуре, е�ли �начение �вл�ет�� �ере�енн�й, а не выражение�. В V�S���p� и�еет�� в����жн��ть �вн��� ��ъ�влени� ар�у�ент�в �а� �ере� данных �� �начению — byval или �а� �ереданных �� ��ыл�е — byref; �� у��л� чанию в V�S���p� и���ль�ует�� ��ъ�вление byref, ��эт��у е�ли �ы не д��ави� в ��ределение ��д�р��ра��ы CreateFullPath �лючев�е �л�в� byval, и��енени�, �р�и�в�ди�ые � path, �тра��т�� на �ере�енн�й вы�ывающей �р�цедуры. В дан� н�й ��д�р��ра��е лучше у�а�ать byval, чт��ы и��енени� не ���ли �ередавать�� ��ратн�. В наше� �ри�ере эт� �����й р�ли не и�рает, н� е�ли ��д�р��ра��а CreateFullPath �удет и���ль��вать�� в дру�их �ценари�х, т� ��жет и �ы�рать. Следует �а�етить, чт� в JS���p� та��й в��р�� не в��ни�ает, ��т��у чт� та� в�е ар�у�енты в�е�да �ередают�� �� �начению.
154 Глава 4. Доступ к файлам и реестру Ка� в�е эт� ра��тает? П�д�р��ра��а CreateFullPath и���ль�ует �ет�д GetParentFolderName дл� ��лучени� и�ени �а��и, ��т�ра� ра���ла�ает�� выше у�а�анн�й в �ути �а��и ��лее ни����� ур�вн�, т� е�ть и�ени р�дитель���й �а��и, и е�ли та�а� �а��а �т�ут�твует, ���дает �начала эту �а��у. Т�ль�� ��т��, и т�ль�� е�ли эт� не��х�ди��, ���дает�� ���ледн�� у�а�анна� в �ути �а��а. Ве�ь �е�рет эт�й ��д�р��ра��ы �а�лючает�� в ������е ���дани� р�дитель� ���й �а��и: дл� эт��� �на вы�ывает �а�у �е��. Та�и� ��ра���, ��д�р��ра��а CreateFullPath �ри�ен�ет т�чн� та�ую же техн�л��ию дл� ��е��ечени� �уще� �тв�вани� т�й �а��и, ��т�ра� нах�дит�� выше р�дитель���й и та� далее, в�л�ть д� ��рнев�й �а��и. Та�а� техн�л��и� �р��ра��ир�вани� на�ывает�� рекурсией и �читает�� �чень эффе�тивн�й. Наи��лее �р�� ее и���ль��вание �р��вл�ет��, ���да ��жн� ра��ить �адание на не��льшие ча�ти и и���ль��вать дл� ��ра��т�и �ажд�й и� ча�тей �дну и ту же �р�цедуру. Далее в эт�й �лаве �удут ���а�аны и дру�ие �ри�еры ре�ур� �ий. Эта техн�л��и� ����енн� ча�т� в�тречает�� �ри ра��те � �а��а�и, �����ль�у �а��и �а�и �� �е�е ре�ур�ивны. Па��и ��держат дру�ие �а��и, в ��т�рых та�же ��держат�� �а��и. Е�ли е�ть желание на�и�ать �в�и ����твенные �ценарии или �р��ра��ы, и�� ��ль�ующие ре�ур�ию, ���ледуйте тре� ��вета�: y y В начальн�й �тадии ра�ра��т�и и���ль�уйте �тлад�чные ��ерат�ры выв�да инф�р�ации, чт��ы �ценарий ����щал ва�, чт� делает�� в �р�це��е е�� вы��л� нени�. На�ри�ер, �ри ���дании ��д�р��ра��ы CreateFullPath � и���ль��вал �ет�д wscript.echo дл� выв�да �ути в начале вы��лнени� CreateFullPath. Эт� ���в�л�л� �не видеть, ��че�у, ���да и �а� �на �аждый ра� вы�ывает��. y y У�едите�ь в т��, чт� лю�ые �ере�енные, ��т�рые и���ль�уют�� дл� вычи�лени� эле�ент�в внутри ��д�р��ра��ы, �вл�ют�� л��альны�и �ере�енны�и, ���дава� е�ы�и дл� �ажд��� э��е��л�ра ��д�р��ра��ы. П����ль�у �дн�вре�енн� ���ут ра��тать �ра�у не���ль�� ���ий ��д�р��ра��ы CreateFullPath, нужн� у�е� дить�� в т��, чт� �ни не �ытают�� и���ль��вать дл� хранени� инф�р�ации �дни и те же �ере�енные. В ��д�р��ра��е CreateFullPath эт� делает�� � ����щью ��ерат�ра dim parent. Е�ли и���ль�ует�� V�S���p� и нужн� и��енить �начение ар�у�ент�в ��д�р��ра��ы, �а� эт� делал��ь � ар�у�ент�� path в CreateFullPath, наверн�е, �ридет�� в����ль��вать�� �лючевы� �л�в�� byval, чт��ы ни�а�ие и��енени� не вли�ли на ��д, вы�вавший ��д�р��ра��у. y y Очень важн�й ���тавл�ющей ре�ур�ии �вл�ет�� ������ ее �ре�ращени�! П�д� �р��ра��а CreateFullPath �р�д�лжает �р�дви�ать�� вверх �� �атал��а� д� тех ��р, ���а р�дитель��а� �а��а не �удет ��наружена �уще�твующей. Она ��жет ��дн�ть�� д� ��рнев��� �атал��а, н� в�е�да в эт�� �е�те ��танавливает��, ��� т��у чт� ��рнева� �а��а �уще�твует в�е�да, е�ли т�ль�� �уще�твует у�а�анный ди��. Е�ли ре�ур�и� дл� ва� �вл�ет�� н�вы� ��н�тие�, �т�ит �а���т��тельн� �р�� ра��тать не���ль�� �ри�ер�в, чт��ы �����треть, �а� ра��тает ��д�р��ра��а. Ра��
Работа с файлами и папками 155 �ерите�ь, чт� �р�и�х�дит, е�ли вы�вать CreateFullPath "C:\files\plans\april" �ри �ледующих ���т��тель�твах: y y C:\�les\plans\april уже �уще�твует д� �а�у��а �ценари�. y y C:\�les\plans �уще�твует д� �а�у��а �ценари�, а ��д�а��а april не �уще�твует. y y C:\�les �уще�твует, а ��д�а��а plans не �уще�твует. y y C:\�les не �уще�твует. В �ажд�� �лучае вы у�едите�ь в т��, чт� ��д�р��ра��а CreateFullPath ра��� тает �равильн�. При эт�� ва� не��х�ди�� �нать � не���ль�их не�н��� �транных ����енн��т�х: на ди��е �а��а �а���� верхне�� ур�вн� (\� �уще�твует в�е�да, и, вы� ража��ь техниче��и� ��ы���, ее р�дитель���й �а���й �вл�ет�� �на �а�а, ��эт��у выражение GetParentFolderName("\") в��вращает "\". (М�жн� в����нить, чт� ��ъ� е�т Shell.Folder ведет �е�� ���дру���у. К��да ��ъе�т Folder �ред�тавл�ет �а��у �а���� верхне�� ур�вн�, е�� �в�й�тв� р�дител� — Parent, в��вращает ��ециальн�е �начение Nothing.� Копирование папки К��ир�вание ��держи���� �а��� — та�же ре�ур�ивный �р�це��, �����ль�у ���и� руе�а� �а��а ��жет ��держать ��д�а��и, ��т�рые та�же д�лжны �ыть ����ир�ва� ны. Мет�д CopyFolder делает эт� авт��атиче��и. Па��у ле��� ��жн� ����ир�вать и� �дн��� �е�та в дру��е: fso.CopyFolder "C:\book\04", "D:\bookbackup\04" Эт�т ��ерат�р ���ирует ��держи��е C:\book\04 в �а��у на ди��е D:, в�е�те � ней ���ируют�� и в�е файлы и ��д�а��и. (При на�и�ании данн�й �ни�и � и�� ��ль��вал ��д��ный �ценарий дл� ��хранени� ре�ервных ���ий �ажд�й �лавы на внешне� ди��е и на �етев�� ����ьютере.� Учтите, чт� �� у��лчанию CopyFolder �удет �ере�а�и�ывать уже �уще�твующие файлы. Е�ли эти файлы нужн� �ащитить �т �ере�а�и�и, �ледует в �аче�тве третье�� ар�у�ента �ет�да CopyFolder у�а�ать False. Объект Scripting.Drive О�ъе�т Drive в��вращает�� ��ъе�т�� FileSystemObject и дает в����жн��ть у�нать, �а� �р�ани��ван ди��, ���ль�� на не� �в���дн��� �р��тран�тва, �а��в� е�� ���т��ние ��д�лючени� (��т�вн��ти�, и ��лучить дру�ую ��ле�ную инф�р� �ацию. П�лучить ��ъе�т Drive ��жн� дву�� ������а�и: y y П�лучить �ред�тавление у�а�анн��� ди��а, и���ль�у� �ет�д GetDrive ��ъе�та FileSystemObject. Ра����три� �ри�ер на V�S���p�: set drv = fso.GetDrive("C:") WScript.Echo "На диске C свободно", drv.FreeSpace, "байт"
156 Глава 4. Доступ к файлам и реестру y y П�лучить ��лле�цию, ���т��щую и� в�ех ди���в, и�еющих�� на ����ьютере, и���ль�у� �в�й�тв� Drives ��ъе�та FileSystemObject. Зате� ��жн� �р���ани� р�вать ��лле�цию, и���ль�у� �ет�д, ��дх�д�щий дл� ваше�� ��ы�а �ценариев. В V�S���p� ��жн� в����ль��вать�� �ледующи� ��д��: for each drv in fso.Drives if drv.IsReady then WScript.Echo "На диске", drv.DriveLetter, "имеется",_ drv.FreeSpace, "свободных байт" else WScript.Echo "Диск", drv.DriveLetter, "не готов" end if next Зате�, е�ли эт� не��х�ди��, ��жн� внутри ци�ла for в����ль��вать�� ��ера� т�ра�и if, чт��ы вы�рать ��н�ретные ди��и или ти�ы ди���в. У ��ъе�та Drive и�еет�� �н�же�тв� �в�й�тв, ��т�рые ���ут ����щить � �в�� ��дн�� и �ан�т�� �р��тран�тве ди��а, е�� ���т��нии ��т�вн��ти и ти�е. Св�й�тва ��ъе�та Drive �еречи�лены в ��рав�е 4.2 . СПРАВКА 4.2. СВОЙСТВА ОБЪЕКТА DRIVE AvailableSpace В��вращает ��личе�тв� д��ту�ных ��ль��вателю �ценари� �айт на ди��е. Е�ли �адей�тв�ван� выделение ди���в��� �р��тран�тва, е�� �начение ��жет �ыть �еньше че� у FreeSpace. Ра��тает �а� дл� �етевых, та� и дл� л��альных ди���в. И�еет �тату� т�ль�� дл� чтени�, �лед�вательн�, е�� �начение ��жн� и���ль��вать, н� �ри�ваивать е�у н�в�е �начение нель��. DriveLetter В��вращает �у�ву ди��а ��ъе�та Drive в ф�р�ате �тр��и (на�ри�ер, "A"�. (Т�ль�� чтение.� DriveType В��вращает �начение, ���а�ывающее ти� у�а�анн��� ди��а. (Т�ль�� чтение.� В����жны �ледующие �начени�. Параметр Значение 0 Неи�ве�тный ти� ди��а 1 С�енный ди�� (�и��ий, Z�p и т. д .� 2 Не�ъе�ный ди�� 3 Сетев�й (�т��раженный� ди�� 4 К���а�т�ди�� или ди�� DVD 5 Виртуальный ди�� FileSystem В��вращает ти� файл�в�й �и�те�ы, и���ль�уе�ый дл� у�а�анн��� ди��а. М�жет вернуть �начени� "FAT", "NTFS" и "CDFS". (Т�ль�� чтение.�
Работа с файлами и папками 157 FreeSpace В��вращает ��личе�тв� �в���дных �айт на ди��е. Е�ли �адей�тв�ван� выделение ди���в��� �р��тран�тва, е�� �начение ��жет �ыть �еньше че� у AvailableSpace. (Т�ль�� чтение.� IsReady В��вращает �улев� �начение True, е�ли у�а�анный ди�� ��д�лючен и ��т�в � ра��те; в �р�тивн�� �лучае в��вращает False. Эт� �в�й�тв� ����щает, в�тавлен ли �и��ий или дру��й ��енный ди��. (Т�ль�� чтение.� Path В��вращает �уть � ди��у (на�ри�ер, "C:"�. (Т�ль�� чтение.� RootFolder В��вращает ��ъе�т Folder, �ред�тавл�ющий ��рневую �а��у на у�а�анн�� ди��е. (Эт� �в�й�тв� и�еет �тату� «Т�ль�� дл� чтени�», х�т�, �а� �удет ���а�ан� в данн�й �лаве, в��вращенный ��ъе�т Folder ��жн� и���ль��вать дл� ра��ты � ��рнев�й �а���й.� SerialNumber В��вращает уни�альный де��тичный �ерийный н��ер, идентифицирую� щий в�е не�ъе�ные и ��енные т��а ди���в � ф�р�ата�и FAT и NTFS. (Т�ль�� чтение.� ShareName В��вращает �етев�е ��щее и�� дл� у�а�анн��� ди��а, е�ли эт�т ди�� �тн�� �ит�� � �т��ражае���у �етев��у ди��у. В��вращает �у�тую �тр��у (""�, е�ли �н не �вл�ет�� �т��ражае�ы� ди����. (Т�ль�� чтение.� TotalSize В��вращает ��щее �р��тран�тв� ди��а в �айтах. (Т�ль�� чтение.� VolumeName В��вращает и�� т��а. Эт� �в�й�тв� и�еет �тату� чтени���а�и�и, �лед�� вательн�, и�� т��а ди��а ��жн� и��енить, �ри�в�ив н�в�е �начение эт��у �в�й�тву. Мет�д�в у ��ъе�та Drive нет. Эт�т ��ъе�т ��жн� и���ль��вать дл� ���ра и �т�� �ражени� инф�р�ации � ди��ах, дл� �р�вер�и д��тат�чн��ти �в���дн��� �р��тран� �тва и дл� �р�вер�и �уще�тв�вани� ди���в и их ��т�вн��ти �еред ���ир�вание� на них файл�в. Подтверждение существования диска При ���ир�вании или ���дании ди���в нужен �ценарий, ������ный у�едить�� в �уще�тв�вании ди��а � у�а�анн�й �у�в�й и в ��т�вн��ти е�� � и���ль��ванию, а та�же у�еющий эле�антн� �авершать ра��ту или �редла�ать в����жн��ть ��х�да �р��ле�ы, е�ли у�а�анный ди�� не �уще�твует или не ��т�в � ра��те.
158 Глава 4. Доступ к файлам и реестру Ра����три� �ценарий, ра�ра��танный дл� ���ир�вани� файл�в и� �дн��� �е�та в дру��е. Сначала �н у�еждает�� в �уще�тв�вании у�а�анн��� ди��а и �ре�ращает вы��лнение �ценари�, е�ли ди�� �т�ут�твует: ' Файл примера script0402.vbs set fso = CreateObject("Scripting.FileSystemObject") inpath = "C:\book\04" outpath = "G:\bookbackup\04" set drv = fso.GetDrive(fso.GetDriveName(outpath)) if not drv.IsReady then msgbox "Сменный диск не готов " WScript.quit 1 end if CreateFullPath outpath fso.CopyFolder inpath, outpath msgbox "Резервное копирование " & inpath & " завершено." ' --------------------------------------------------------------------- sub CreateFullPath (path) dim parent ' временная переменная path = fso.GetAbsolutePathname(path) ' гарантия полного указания пути parent = fso.GetParentFolderName(path) ' получение имени родительской папки if not fso.FolderExists(parent) then ' создание родительской папки ' или па пок, если это необходимо CreateFullPath parent end if if not fso.FolderExists(path) then ' есл и н еобходимо, создание подпапки fso.CreateFolder(path) end if end sub Важн�й ча�тью данн��� �ри�ера �вл�ет�� ��ерат�р drv.IsReady. Мет�д fso. GetDrive в��вращает ��ъе�т Drive, ���твет�твующий ди��у G:, а �в�й�тв� IsReady �р�вер�ет в�лючение �итани� �рив�да, наличие в не� ��енн��� ди��а и ��т�вн��ть � ра��те. Е�ли ди�� не ��т�в, �ценарий выв�дит ����щение в ���вл�юще��� ��не и �авершает ра��ту. Е�ли ди�� ��т�в, �ценарий и���ль�ует ранее ра����тренную ��д�р��ра��у CreateFullPath, чт��ы �арантир�вать �уще�тв�вание вых�дн�й �а��и и �ате� ����ир�вать в нее ��держи��е. Определение диска с наибольшим свободным пространством В уче�н�� �ценарии ���а�ывает�� ������ ��ределени� ди��а � наи��льши� �в�� ��дны� �р��тран�тв�� �реди в�ех ди���в ����ьютера. О�ратите вни�ание на т�, чт� в не� и���ль�ует�� �в�й�тв� IsReady, чт��ы у�едить�� в ��т�вн��ти ди��а �еред ���ыт��й ��ределени� и�еюще���� на не� �в���дн��� �р��тран�тва. В �р�тивн�� �лучае �т�люченный ди�� ��жет вы�вать �ре�ращение вы��лнени� �ценари� � вы� дачей �ши��и:
Работа с файлами и папками 159 ' Файл примера script0403.vbs freedrv = "?" ' содержит букву самого подходящего из ' просмотренных дисков freespace = 0 ' ко лич ест во свободного места на диске freedrv for each drv in fso.Drives if drv.IsReady then if drv.AvailableSpace > freespace then freespace = drv.AvailableSpace ' этот диск более подходящий, freedrv = drv.DriveLetter ' по это му запомним его данные end if end if next ' в ывод результата Wscript.echo "У диска", freedrv, "места больше всех:", freespace, "байт. " В ��нце �ценари� в �ере�енн�й freespace хранит�� ��личе�тв� �р��тран�тва на т�� ди��е, у ��т�р��� �в���дн��� �е�та ��льше, че� у в�ех ��тальных ди���в, а в �ере�енн�й freedrv ��держит и�� эт��� ди��а. Объект Scripting.Folder О�ъе�т Folder в��вращает инф�р�ацию � �в�й�твах и ��держи��� �а���. П� ана� л��ии � ��ъе�т�� Drive, ��ъе�т Folder ��жн� ��лучить дл� ра��ты � у�а�анн�й, и�ве�тн�й �а���й или ��жн� ��лучить ��лле�цию, ���т��щую и� в�ех �а��� на у�а�анн�� ди��е или в у�а�анн�й �а��е. Дл� ��лучени� инф�р�ации �� у�а�анн�й �а��е и���ль�ует�� �ет�д GetFolder. Ра����три� �ри�ер: set fso = CreateObject("Scripting.FileSystemObject") set fldr = fso.GetFolder("C:\temp") Чт��ы �р����треть в�е �а��и, ��держащие�� внутри дру��й �а��и, и���ль�у� ет�� �в�й�тв� SubFolders, в��вращающее ��лле�цию, ��т�ра� ��держит ��и��� в�ех ��д�а���: fldrs = fldr.SubFolders или fldrs = fso.GetFolder("C:\temp").SubFolders Зате� дл� ���лед�вательн��� �ере��ра в�ех и�еющих�� в ��лле�ции �а��� ��жн� в����ль��вать�� ��ерат�р�� for each. ▼) Коллекция, возвращаемая свойством SubFolders, не включает подпапок с именами “.” и “..”, которые показывает команда DIR, запускаемая в командной строке. Эти две «виртуальные» папки представляют соответственно текущую папку и ее родительскую папку, но не являются при этом настоящими подпапками и не перечисляются в коллекции. Дл� ��лучени� ��ъе�та Folder дл� у�а�анн�й �а��и, на�ри�ер дл� �атал��а Desktop или Windows, не �ытайте�ь �а���т��тельн� �тр�ить д��ад�и �тн��ительн� �утев��� и�ени или �ани�ать�� е�� ���тавление�! Ме�т� нах�ждени� ��еци� альных �а��� ��жет и��ен�ть�� �т вер�ии � вер�ии W��dows, а в ��р��ративн�й �ети �н� ��жет �ыть в���ще не�ред��а�уе�ы�. В�е�т� эт��� в����ль�уйте�ь
160 Глава 4. Доступ к файлам и реестру �ет�д�� GetSpecialFolder или �ет�д�� WScript.Shell.SpecialFolders ��ъе�та FileSystemObject, чт��ы ��лучить �утев�е и�� ��ециальн�й �а��и и �ередать эт� и�� �ет�ду GetFolder дл� ��лучени� ��ъе�та. Следующий ��ерат�р ��лучает ��ъ� е�т Folder дл� �а��и хранени� вре�енных файл�в: fldr = fso.GetFolder(fso.GetSpecialFolder(2)) Св�й�тва и �ет�ды ��ъе�та Folder �еречи�лены в ��рав�е 4.3 . СПРАВКА 4.3. СВОЙСТВА И МЕТОДЫ ОБЪЕКТА FOLDER СВОЙСТВА Attributes Атри�уты файл�в�й �и�те�ы, �ринадлежащие данн�й �а��е. В чи�л� атри�ут�в �а��и вх�д�т ���d o��y (т�ль�� дл� чтени��, sys��m (�и� �те�на��, h�dd�� (��рыта��, �omp��ss�d (�жата�� и т. д. Каждый в����жный атри�ут �ред�тавлен чи�л�вы� �начение�, а �в�й�тв� Attributes �вл�ет�� �у���й �начений, фа�тиче��и и�еющих�� у �а��и. (Ка� эт� ра��тает, �удет ���а�ан� в �дн�й и� �ледующих уче�ных �р��ра��.� Св�й�тв� Attributes в ��� н�вн�� и�еет �тату� чтени���а�и�и, х�т� не��т�рые атри�уты не ���ут �ыть и��енены �ценарие�. Значени� �в�й�тва Attributes �еречи�лены ниже в та�л. 4 .1 . DateCreated Значение даты�вре�ени, ���а�ывающее дату и вре�� ���дани� �а��и. (Т�ль� �� чтение.� DateLastAccessed Дата и вре�� ���ледне�� ��ращени� � �а��е. (Т�ль�� чтение.� DateLastModified Дата и вре�� ���ледне�� и��енени� �а��и. (Т�ль�� чтение.� Drive Бу�ва ди��а, на ��т�р�� ра��ещена �а��а. (Т�ль�� чтение.� Files К�лле�ци� ��ъе�т�в Scripting.File, �ред�тавл�ющих в�е ��держащие�� в �а��е файлы, в�люча� и те, у ��т�рых у�тан�влены атри�уты ��рытый — hidden и �и�те�ный — system. (Т�ль�� чтение.� IsRootFolder Прини�ает �начение True, е�ли �а��а �вл�ет�� дл� ди��а ��рнев�й, в �р�� тивн�� �лучае �рини�ает �начение False. (Т�ль�� чтение.� Name И�� �а��и. При�ваивание н�в��� �начени� �в�й�тву Name �рив�дит � �ере� и�ен�ванию �а��и. (Дл� чтени� и �а�и�и.� ParentFolder О�ъе�т Folder, �ред�тавл�ющий р�дитель��ую �а��у, в ��т�р�й ��держит�� �а��а, �ред�тавленна� ��ъе�т��. (Т�ль�� чтение.�
Работа с файлами и папками 161 Дл� ��рнев�й �а��и в��вращает�� ��ециальный ��ъе�т �� ��ыл��й на Nothing, ��т�рый �ри и���ль��вании вы�ывает �ши��у. Е�ли �ценарий ��жет �ани�ать�� ��и���� дл� �а��и �а���� верхне�� ур�вн�, нужн� �р�верить наличие эт��� ��ециальн��� �начени�, в����ль��вавши�ь �ри�ерн� та�и� те�т��: ... set parent = fldr.ParentFolder if parent is Nothing then wscript.echo "Эта папка уже является папкой самого верхнего уровня" else wscript.echo "Родительской является папка ", parent.path end if Path А���лютный �уть � �а��е. ShortName И�� �а��и, �а�и� е�� «вид�т» �тарые �р��ра��ы DOS и W��dows 3.1, тре�у� ющие �ридерживать�� ранее �уще�тв�вавше�� ���лашени� �� и���ль��ванию и�ен в ф�р�ате �.3 �и�в�л�в. ShortPath П�лный �уть � �а��е, �а�и� �н виден �тары� �р��ра��а�, тре�ующи� �ридерживать�� �режне�� ���лашени� �� и���ль��ванию и�ен в ф�р�ате �.3 . (Т�ль�� чтение.� Size Ра��ер в �айтах в�ех файл�в и ��д�а���, ��держащих�� в �а��е. (Т�ль�� чтение.� SubFolders К�лле�ци� ��ъе�т�в Folder, �ред�тавл�юща� в�е ��д�а��и, �ринадлежащие данн�й �а��е, в�люча� и те, у ��т�рых у�тан�влены атри�уты hidden и system. Type Дале�� не �а��е ��ле�н�е �в�й�тв�. Дл� �а���, и�еющих в �в�е� и�ени ра�� ширение, Type �вл�ет�� ��и�ательны� и�ене�, �в��анны� � файла�и � та�и� ра�ширение�. На�ри�ер, е�ли �а��а на�вана folder.txt, �начение� Type �удет "Text File" (те��т�вый файл�. (Т�ль�� чтение.� МЕТОДЫ Copy место_назначения[, перезапись] К��ирует �а��у и� �дн��� �е�та в дру��е. CreateTextFile(имя_файла[, перезапись[, юникод]]) Ра��тает в ���твет�твии � ��и�ание� CreateTextFile в ��рав�е 4.1, �а �дни� и��лючение�: е�ли и�� файла не в�лючает �уть или у�а�ан� � и���ль��вание� �тн��ительн��� �ути, файл ���дает�� в �а��е, �ред�тавленн�й ��ъе�т�� Folder, или в �а��е, у�а�анн�й �тн��ительн� нее.
162 Глава 4. Доступ к файлам и реестру Delete [принудительно] Удал�ет �а��у. Е�ли у�а�ан� не����ательн�е �улев� �начение принудительно, ��т�р�е равн� True, �а��а �удет удалена, даже е�ли �на и�еет у�тан�вленный атри�ут «Т�ль�� дл� чтени�». Move место_назначения Пере�ещает файл или �а��у в н�в�е �е�т�. Па��а �тан�вит�� ��д�а���й дл� места_назначения. Значения атрибутов файлов и папок Атри�уты файла и �а��и, на�ри�ер �и�те�ный (�и�те�на�� (system� и т�ль�� дл� чтени� (readOnly�, хран�т�� в виде чи�ел. Каждый в����жный атри�ут и�еет �в�� �анн�е � ни� чи�л�в�е �начение, и чи�л�, ��храненн�е в ��ъе�те File или Folder, �вл�ет�� �у���й �начений у�тан�вленных атри�ут�в. Эти �начени� ���твет�твуют �тдельны� ра�р�да� дв�ичн��� чи�ла и �еречи�лены в та�л. 4 .1 . Таблица 4.1. Значения атрибутов папок и файлов Название атрибута Значение Степень защиты атрибута Описание О�ычный (No�m��� 0 Е�ли не у�тан�влены ни�а�ие атри�уты, �начение равн� нулю, и файл на�ывает�� «��ычны�» Т�ль�� дл� чтени� (R��dO��y� 1 Чтение� �а�и�ь Файл т�ль�� дл� чтени� С�рытый (H�dd��� 2 Чтение� �а�и�ь Файл или �а��а �тн���т�� � ��рыты� Си�те�ный (Sys��m� 4 Чтение� �а�и�ь Файл �ринадлежит ��ераци�нн�й �и�те�е Т�� (Vo�um�� � Т�ль�� чтение Эта �у�ва ди��а �тн��ит�� � т��у фи�иче����� ди��а Катал�� (D�����o�y� 16 Т�ль�� чтение Эт� �а��а (�атал��� Архивный (A��h�v�� 32 Чтение� �а�и�ь Файл и��енил�� �� вре�ени ���ледне�� ре�ервн��� ���ир�вани� П�евд�ни� (A���s� 64 Т�ль�� чтение Эт� ��ыл�а или �рлы� Сжатый (Comp��ss�d� 12� Т�ль�� чтение Файл или �а��а �тн���т�� � �жаты� Файл, у ��т�р��� у�тан�влен т�ль�� �дин ра�р�д R��dO��y (т�ль�� дл� чтени��, и�еет �начение �в�й�тва Attributes, равн�е 1. А файл � у�тан�вленны�и атри�ута�
Работа с файлами и папками 163 �и Скрытый (H�dd��� и Системный (Sys��m� и�еет �начение эт��� �в�й�тва, равн�е 6(2+4�. Проверка значений атрибутов файлов и папок П����ль�у �начение �в�й�тва Attributes ��жет �ыть �у���й не���ль�их �тдель� ных атри�ут�в, е�� ��жн� �равнивать � ��ределенны� чи�л��. На�ри�ер, �р�вер�а if file.Attributes = 1 then ... не ра��тает, е�ли у файла е�ть еще и у�тан�вленный атри�ут Архивный (A��h�v��, �����ль�у т��да �начение �удет равн� 33, а не 1. ▼▼ При использовании атрибутов файлов и папок сценарий будет легче понять, если для значе- ний атрибутов определить вместо чисел поименованные константы. Поместите в самое начало сценария строки кода const ReadOnly = 1 const Hidden = 2 и т. д ., а затем воспользуйтесь при проверке установки атрибутов более описательными име- нами. При использовании констант можно написать следующий код: const ReadOnly = 1 if file.Attributes and ReadOnly then ... Лучше в�е�� решить эту �р��ле�у �уте� поразрядного те�тир�вани� �начений атри�ут�в. С����� вы��лнени� ��ра�р�дн��� те�тир�вани� и�еет�� в �ажд�� ��ы�е �ценариев. Ра����три� �ри�ер на V�S���p�: if file.Attributes and 1 then ... Значение выражени� File.Attributes and 1 равн� 0, е�ли �ервый ра�р�д не у�тан�влен, и равн� 1, е�ли �н у�тан�влен; ��ерат�р if ра���атривает 0 �а� False, а лю��е ненулев�е чи�л� �а� True. П�эт��у е�ли у �начени� Attributes у�тан�влен �ервый ра�р�д, �р�вер�а выда�т ре�ультат True. Проверка установки сразу нескольких атрибутов Е�ли нужн� �р�верить у�тан�в�у �ра�у не���ль�их атри�ут�в, �ледует �р��вить ����ую ����трительн��ть. На�ри�ер, �р�вер�а if file.Attributes and Hidden and Readonly then ... ра��тать не �удет. Фа�тиче��и эта �р�вер�а ни���да не да�т и�тинн��� ре�ультата. У файл�вых атри�ут�в чи�л�вые �начени�, а �ри и���ль��вании чи�ел ��ерат�ры and и or, в��ре�и ваши� в����жны� �ред�тавлени��, не ра��тают. Они вы��л� н�ют � чи�ла�и ��ра�р�дные л��иче��ие ��ерации. Дл� у�в�ени� ��ра�р�дн�й �ате�ати�и нужн� �рил�жить ��ределенные у�или�, н� �де�ь �ы эти� �ани�ать�� не �уде�. Одна�� ��жн� в����ль��вать�� �ледующей �хе��й и ��дифицир�вать �ри�еры в ���твет�твии � ваши�и �а�р��а�и.
164 Глава 4. Доступ к файлам и реестру ШАБЛОН Для выбора файлов, имеющих любой один или несколько установленных атрибутов, восполь- зуйтесь следующим оператором: if File.Attributes and (атрибут or атрибут or атрибут ...) then Например, для вывода списка всех файлов, помеченных либо как скрытые, либо как только для чтения, либо тех, у которых установлены оба этих атрибута, можно воспользоваться следую- щими операторами: const Readonly = 1 const Hidden =2 for each file in fso.GetFolder("c:\windows\system32").Files if file.attributes and (Hidden or Readonly) then WScript.echo file.name end if next А для выбора файлов, у которых установлены все нужные вам атрибуты, воспользуйтесь сле- дующим оператором: if (File.Attributes and (атрибут or атрибут or атрибут ...)) = _ (атрибут or атрибут or атрибут ...) then Например, следующие операторы выводят список всех файлов, помеченных как скрытые и только для чтения: for each file in fso.GetFolder("c:\windows\system32").Files if (file.attributes and (Hidden or Readonly)) = (Hidden or Readonly) then WScript.echo file.name end if next Изменение значений атрибутов файлов и папок Значени� не��т�рых атри�ут�в файл�в или �а��� ��жн� и��ен�ть �уте� �ри� �ваивани� �в�й�тву Attributes н�в��� �начени�. Н� �ценарий ��жет и��енить �начени� т�ль�� тех атри�ут�в, дл� ��т�рых в �т�л�це «Сте�ень �ащиты атри�ута» та�л. 4 .1 у�а�ан� «Чтение��а�и�ь» . Нель��, на�ри�ер, у�тан�вить атри�ут Каталог (D�����o�y�, та� �а� эт� �ыл� �ы �р�дни ���ыт�е �ревратить файл в �а��у. Дл� у�тан�в�и или �н�ти� �тдельных атри�ут�в нужн� и���ль��вать ��ра�� р�дную �ате�ати�у, в ��т�р�й дл� �л�жени� �начений ра�р�д�в и���ль�ует�� ��ерат�р or. Дл� у�тан�в�и ра�р�да и���ль�ует�� ��ерат�р or: file.Attributes = file.Attributes or (устанавливаемый разряд или разряды) Ра����три� �ри�ер, у�танавливающий дл� файла атри�уты Т�ль�� дл� чтени� (R��dO��y� и С�рытый (H�dd���: file.Attributes = file.Attributes or (ReadOnly or Hidden) Преи�уще�тва эт��� выражени� �еред �ледующи� выражение� ���т�ит в т��, чт� выражение, и���ль�ующее ��ра�р�дный ��ерат�р or, ра��тает не�ави�и�� �т т���, �ыли ли у�тан�влены атри�уты д� е�� �а�у��а: file.Attributes = file.Attributes + ReadOnly + Hidden Е�ли же ра�р�ды Т�ль�� дл� чтени� и С�рытый уже �ыли у�тан�влены, т� вы� ражение чи�л�в��� �л�жени� (+� дает неверный ре�ультат, в Attributes �р�и�х�дит дв�йн�е �л�жение!
Работа с файлами и папками 165 Дл� �н�ти� т��� или ин��� атри�ута и���ль�ует�� ��четание and not: file.Attributes = file.Attributes and not (снимаемый разряд или разряды) В ре�ультате вы��лнени� эт��� ��ерат�ра �удут ��тавлены у�тан�вленны�и в�е и�начальн� у�тан�вленные ра�р�ды, �а и��лючение� тех, чт� �ыли �еречи�лены. На�ри�ер, ��ерат�р file.Attributes = file.Attributes and not (Hidden or ReadOnly) удал�ет дл� файла у�тан�в�у атри�ут�в С�рытый и Т�ль�� дл� чтени�. ▼) Файлы с установленными разрядами Скрытый (Hidden), Системный (System) и Только для чте- ния (ReadOnly) называются суперскрытыми. Они обычно не показываются в окнах Explorer, пока не будет разрешено отображения как скрытых, так и системных файлов. Кроме этого, объект Scripting.File позволяет распоряжаться простыми атрибутами, такими как Скрытый, но не предоставляет способов распоряжения правами доступа на уровне пользо- вателей, хранящимися в дисковом разделе NTFS. Для этого следует использовать программу командной строки cacls, которая рассматривается в главе 14 «Windows PowerShell», или сред- ствами безопасности, предоставляемыми инструментарием управления Windows — Windows Management Instrumentation (WMI). WMI рассматривается в главе 7 «Инструментарий управ- ления Windows». Объект Scripting.File О�ъе�т Scripting.File ���в�л�ет �р���атривать инф�р�ацию �� �тдельных файлах, в�люча� и�ена, атри�уты, ра��еры и даты, и вн��ить в нее и��енени�. Ка� и �ри ра��те � ��ъе�та�и Drive и Folder, вы ��жете ��лучить ��ъе�т File дл� файла, чье и�� �ыл� у�а�ан�, или же ��жете ��лучить ��лле�цию, ���т��щую и� в�ех файл�в �аданн�й �а��и. При желании ��жн� ��уще�твить ���лед�вательный �ере��р в�ех эле�ент�в ��лле�ции и вы�рать файлы �� и�ени, ра�ширению, ра�� �еру, дате и т. д. Св�й�тва и �ет�ды ��ъе�та File �еречи�лены в ��рав�е 4.4 . СПРАВКА 4.4. СВОЙСТВА И МЕТОДЫ ОБЪЕКТА FILE СВОЙСТВА Attributes У�танавливает или в��вращает атри�уты файла, �еречи�ленные в та�л. 4 .1 . Эт� �в�й�тв� и�еет �тату� чтени���а�и�и, �ри�ен�е�ый т�ль�� � �тдельны� ��н�ретны� атри�ута�. DateCreated В��вращает дату и вре�� ���дани� у�а�анн��� файла. (Т�ль�� чтение.� DateLastAccessed В��вращает дату и вре�� ���ледне�� ��ращени� � у�а�анн��у файлу. (Т�ль� �� чтение.� DateLastModified В��вращает дату и вре�� ���ледне�� и��енени� у�а�анн��� файла. (Т�ль�� чтение.�
166 Глава 4. Доступ к файлам и реестру Drive В��вращает �у�ву ди��а, на ��т�р�� ра��ещен у�а�анный файл. (Т�ль�� чтение.� Name У�танавливает или в��вращает и�� у�а�анн��� файла. При�ваивание �в�й� �тву Name н�в��� �начени� �рив�дит � �ереи�ен�ванию файла. (Дл� чтени� и �а�и�и.� ParentFolder В��вращает ��ъе�т т�й �а��и, в ��т�р�й ра��ещен файл. (Т�ль�� чтение.� Path В��вращает а���лютный �уть � файлу, в�люча� и�� эт��� файла. (Т�ль�� чтение.� ShortName В��вращает ��р�т��е и��, и���ль�уе��е �р��ра��а�и, тре�ующи�и �ри� держивать�� ранее �уще�тв�вавше�� ���лашени� �� и���ль��ванию и�ен в ф�р�ате �.3 �и�в�л�в. (Т�ль�� чтение.� ShortPath В��вращает ��р�т�ий �уть, и���ль�уе�ый �р��ра��а�и, тре�ующи�и �ридерживать�� ранее �уще�тв�вавше�� ���лашени� �� и���ль��ванию и�ен в ф�р�ате �.3 �и�в�л�в. (Т�ль�� чтение.� Size В��вращает ра��ер у�а�анн��� файла в �айтах. (Т�ль�� чтение.� Type В��вращает ��и�ательн�е и�� ти�а файла, �в��анн�е � ра�ширение� и�ени эт��� файла. На�ри�ер, дл� файл�в, �а�анчивающих�� на .txt, в��вращает�� "Text Document" (те��т�вый д��у�ент�. (Т�ль�� чтение.� МЕТОДЫ Copy место_назначения[, перезапись] К��ирует файл в н�в�е �е�т�, ��т�р�е ��жет �ыть у�а�ан� и�ене� �а��и или файла. П� у��лчанию, е�ли файл��рие�ни� уже �уще�твует, �н �ере�а� �и�ывает��. Е�ли у�а�ан �улев ар�у�ент перезапись и �н и�еет �начение False, �ценарий в�е�т� эт��� �ре�ращает ра��ту и выв�дит ����щение �� �ши��е. Delete принудительно Удал�ет файл. Е�ли у�а�ан �улев ар�у�ент принудительно и �н и�еет �на� чение True, файл �удет удален, даже е�ли �н и�еет у�тан�вленный атри�ут «Т�ль�� дл� чтени�»; в �р�тивн�� �лучае �ри ���ыт�е удалени� та���� файла �енерирует�� �ши��а. Move место_назначения Пере�ещает файл в н�в�е �е�т�, у�а�анн�е �а� �уть место_назначения . Е�ли файл � и�ене�, у�а�анны� в месте_назначения, уже �уще�твует, �ценарий �енерирует �ши��у.
Работа с файлами и папками 167 OpenAsTextStream([режим_ввода_вывода, [формат]]) От�рывает у�а�анный файл и в��вращает ��ъе�т TextStream, ��т�рый ��� жет �ыть и���ль��ван дл� чтени� и� файла, �а�и�и в не�� или дл� д��авлени� инф�р�ации � е�� ��держи���у. (Эти дей�тви� �удут ра����трены ���же.� Переименование файла Сценарий ��жет �ереи�ен�вать файл, ��лучив дл� не�� ��ъе�т File и и��енив �начение е�� �в�й�тва Name: fso.GetFile("C:\folder\somefile.txt").Name = "somefile.bak" Учтите, чт� � ����щью эт��� ��ерат�ра ��жн� и��енить т�ль�� и��, н� не �а��у. Дл� реальн��� �ере�ещени� файла нужн� в����ль��вать�� �ет�д�� Move или Copy. В �начение �в�й�тва Name в�лючен� и ра�ширение файла, ��эт��у �ри и��енении и�ени файла � "test.doc" на "newname", ра�ширение .doc �удет утрачен�. Сканирование для поиска файлов по именам, типам, размерам Е�ли нужн� ��ра��тать, удалить, �ереи�ен�вать или ����ир�вать файлы, ��н�� выва��ь на не��т�рых их �в�й�твах, нужн� �р���анир�вать в�е файлы в �а��е. Ра����три� �ценарий, удал�ющий в �аданн�й �а��е в�е файлы � ра�ширени��и .TMP или .BAK: ' Файл примера script0404.vbs set fso = CreateObject("Scripting.FileSystemObject") cleanpath = "C:\TEMP" for each file in fso.GetFolder(cleanpath).Files upext = ucase(fso.GetExtensionName(file.Name)) if upext = "TMP" or upext = "BAK " then wscript.echo "deleting", file.path file.Delete end if next В данн�� �ри�ере дл� ��лучени� ��лле�ции в�ех файл�в, ��т�рые нах�д�т�� в C:\TEMP, и���ль�ует�� ��ъе�т GetFolder и е�� �в�й�тв� Files. Внутри ци�ла for дл� ��лучени� ра�ширени� и� и�ени файла и �ре��ра��вани� е�� �и�в�� л�в в �и�в�лы верхне�� ре�и�тра и���ль�ует�� �ет�д GetExtensionName ��ъе�та FileSystemObject. Зате� ра�ширение �равнивает�� �� �тр��а�и "TMP" и "BAK". При ��в�адении файл удал�ет��. А �а� на� �чи�тить �т этих файл�в \TEMP и в�е �а��и внутри TEMP? В����ль� �уе��� ра����тренн�й ранее ре�ур�ивн�й техн�л��ией. На� нужна ��д�р��ра��а дл� удалени� в�ех ненужных файл�в в �аданн�й �а��е и в� в�ех ее ��д�а��ах. Ра����три�, �а� ��жет вы�л�деть та�а� �р��ра��а: ' Файл примера script0405.vbs set fso = CreateObject("Scripting.FileSystemObject") cleanpath = "C:\TEMP" cleanup fso.GetFolder(cleanpath) ' ---------------------------------------------------------------------
168 Глава 4. Доступ к файлам и реестру sub cleanup (folder) dim file, subfolder ' объявление локальных переменных for each file in folder.Files ' о чис тка от не нужных файлов upext = ucase(fso.GetExtensionName(file.Name)) if upext = "TMP" or upext = "BAK" then wscript.echo "deleting", file.path file.Delete end if next ' очи стк а л юбых подпапок for each subfolder in folder.SubFolders cleanup subfolder next end sub Эт�т �ценарий ��держит ��д�р��ра��у дл� �чи�т�и �т вре�енных и ре�ервных файл�в �аданн��� ��ъе�та Folder. Сценарий начинает�� � вы��ва ��д�р��ра��ы cleanup дл� ��ъе�та Folder, ���данн��� дл� �т��ражени� C:\TEMP. П�д�р��ра��а cleanup и���ль�ует ту же �а�ую техн�л��ию, ��т�ра� и���ль��вала�ь в �редыду� ще� �ри�ере дл� удалени� в�ех, и�еющих�� в �а��е файл�в BAK и TMP. А �ате� начинает�� в�е �а��е интере�н�е: cleanup ��анирует в�е ��д�а��и, и�е� ющие�� в \TEMP. Св�й�тв� �а��и SubFolders в��вращает ��лле�цию, ���т��щую и� в�ех нах�д�щих�� внутри �а���. Зате� cleanup ���чередн� вы�ывает �а�у �е�� дл� �ажд�й ��д�а��и. П����ль�у cleanup вы�ывает�� дл� �ажд�й ��д�а��и, �на вы��лн�ет наш �а�ы� �ел: ���лед�вательн� �ере�ирает в�е файлы и удал�ет те и� них, ��т�рые �тн���т�� � BAK и TMP, а та�же �на ��анирует в�е ��лее �лу���ие ��д�а��и и вы�ывает �а�у �е�� дл� удалени� ненужных файл�в и� этих ��д�а���. Т�чн� та�ую же техн�л��ию ��жн� и���ль��вать дл� ра��ты � файла�и на ��� н�ве их ра��ера, атри�ут�в, даты ���ледне�� и��енени� или даты ���дани� и т. д ., в �ави�и���ти �т ваших ��тре�н��тей. Эт� д��тат�чн� ра��р��траненна� техн�л�� �и�, �а�луживающа� выделени� в �тдельную �хе�у. ШАБЛОН Для обработки всех файлов в папке и всех подпапках используется рекурсивная подпрограмма, работающая с объектом Folder: ' Файл примера script0406.vbs set fso = CreateObject("Scripting.FileSystemObject") startfolder = "c:\xxx" ' указание имени начальной папки dofolder fso.GetFolder(startfolder) ... ' --------------------------------------------------------------------- sub dofolder (folder) dim file, subfolder ' объявление локальных переменных for each file in folder.Files ' обработка файлов wscript.echo "Обрабатывается файл " & file.path ... next
Работа с файлами и папками 169 ' п овт орный вызов для обработки подпапок for each subfolder in folder.SubFolders dofolder subfolder next end sub При необходимости, для ограничений по различным категориям обрабатываемых файлов и (или) папок, можно воспользоваться проверками в условных операторах If...Then. Дл� вы��ра файл�в, � ��т�ры� не �ыл� ��ращений �выше ��ределенн��� ��� личе�тва дней, ��жн� выче�ть и� �е��дн�шней даты дату ���ледне�� ��ращени� � файлу: if (Now()-file.DateLastModified) > 3 then wscript.echo file.Name, "не был востребован более 3 дней" ... end if М�жн� та�же вы�рать файлы на ��н�ве ���т��ни� их атри�ут�в. К��да � на�и� рал эту �лаву, �ришл� ����щение �� эле�тр�нн�й ��чте �т ��е�� реда�т�ра, Ри�а Ку�ена (R��k �ugh���, в ��т�р�� �н �ен� ��рашивал, нет ли �а�����ни�удь �р�� �т��� ������а �н�ть в�е атри�уты «Т�ль�� дл� чтени�» �� в�ех MP3�файл�в в е�� �у�ы�альн�й �а��е и в�ех ее ��д�а��ах. (Эт� � � т��у, чт� в��р�� �ришел�� �а� ра� в те�у!� В�т вер�и� нашей �хе�ы дл� решени� �аданн�й и� �адачи: ' Файл примера script0407.vbs const ReadOnly = 1 ' Разряд файлового атрибута ReadOnly set fso = CreateObject("Scripting.FileSystemObject") makerw fso.GetFolder("C:\music") ' с тарт в C:\music и спуск вниз ' --------------------------------------------------------------------- sub makerw (folder) dim file, subfolder ' оп овещение пользователя о текущем месте wscript.echo "Обрабатывается ", folder.Path, ". .." for each file in folder.Files ' и справление атрибутов только в MP3-файлах if (instr(ucase(file.Name), ".M P3") > 0) and _ (file.Attributes and ReadOnly) then file.Attributes = file.Attributes and not ReadOnly end if next for each subfolder in folder.Subfolders makerw subfolder next end sub Учитыва� ��личе�тв� д��ту�ных �в�й�тв файла и �а��и, ��жн� ���тавить ��е� рат�ры if, �твечающие лю�ы� �адача� вы��ра и�еющих�� у ва� файл�в. ▼▼ При тестировании процедуры выбора файлов сначала установите внутри оператора if исключи- тельно один оператор WScript.Echo. Когда вы убедитесь в том, что выбираются только нужные файлы, вернитесь назад и установите те операторы, которые реально вносят изменения, на- пример удаляют или копируют файлы.
170 Глава 4. Доступ к файлам и реестру Следует д��авить, чт� ���ле на�и�ани� эт��� �ценари� � ��н�л, чт� эту �адачу ��жн� решить, на�рав в ���андн�й �тр��е в�е�� �дну ���анду. Сценарии �вл�� ют�� д�в�льн� ��щны� �ред�тв��, н�, �а� ���а�ан� в ча�ти II «Среда ��ружени� ���андн�й �тр��и», у ���андн�й �тр��и т�же е�ть �в�и �инуты �лавы. К�тати, решение� �адачи �удет вв�д и �а�у�� и� �а��и верхне�� ур�вн� \music ���анды attrib -r *.mp3 /s. Б�лее ��др��н� �� эт�� ��йдет ра���в�р в �лаве 13 «Утилиты ���андн�й �тр��и». Чтение и запись файлов Сценарии ча�т� и���ль�уют�� дл� чтени� и �а�и�и те��т�вых файл�в. Эту в����ж� н��ть ��жн� реали��вать не���ль�и�и ������а�и: y y Сценари�� ча�т� �рих�дит�� ра��тать � �ру��а�и ��ль��вателей, ����ьютер�в, файл�в или � дру��й целев�й инф�р�ацией. В�е�т� ра��ещени� эт�й инф�р� �ации в �а��� �ценарии, лучше хранить ее �тдельн� �т �р��ра��ы �ценари� в те��т�в�� файле, �де �на ��жет �ыть �треда�тир�вана �е� �ривлечени� �а���� �ценари�. Дл� ��лучени� ��и��а эле�ент�в, � ��т�ры�и нужн� ра��тать, �це� нарий ��жет эт�т файл �р�читать. y y Сценарии ���ут ве�ти в те��т�в�� файле журнал �в�их дей�твий. y y Сценарии ���ут ра��тать � файла�и данных, ��енерир�ванны�и внешни�и �ред�тва�и, на�ри�ер � э����ртны�и файла�и �р��ра��ы эле�тр�нн�й та�ли� цы, �де в �аче�тве ра�делителей и���ль�уют�� �а��тые. y y Сценарии ���ут �енерир�вать и ���ещать данные в те��т�вый файл дл� их ���ледующей ра��ечат�и или дл� и���ртир�вани� в �р��ра��у эле�тр�нн�й та�лицы или �а�ы данных. y y Сценарий ��жет ра��тать �а� фильтр, �а� ���анды sort и more, �читыва� дан� ные и� �тандартн��� вв�да и �а�и�ыва� их на �тандартный выв�д. При вв�де�выв�де те��т�в��� файла и���ль�ует�� ��ъе�т TextStream. Эт�т ��ъ� е�т �ред�тавл�ет файл в виде ���лед�вательн��ти �и�в�л�в, и� ��т�р�й ��жн� читать инф�р�ацию и в ��т�рую ��жн� �а�и�ывать н�вые данные. Объект TextStream Те��т�вый файл ���т�ит и� �и�в�л�в, дл� ��т�рых и���ль�ует�� ��дир�в�а Am�� ����� S���d��d Cod� �o� I��o�m���o� I�����h��g� (ASCII� или ��дир�в�а Юни��д. Внутри файла �хе�а ��дир�в�и �т��ражает �у�вы и �и�в�лы в виде их чи�л�в�� �� �ред�тавлени�. К�дир�в�а ASCII и���ль�ует�� �� у��лчанию и �вл�ет�� на �ер��нальных ����ьютерах ��ычны� ф�р�ат��, ��эт��у, ���а не и���ль�ует�� �а��й�ни�удь �н����айт�вый на��р �и�в�л�в �дн��� и� а�иат��их ��ы��в, вы�и� рает�� на��р �и�в�л�в ASCII. Е�ли нужн� в����ль��вать�� Юни��д��, �и�те�у W��dows ��жн� �а�тавить и���ль��вать дл� чтени� или �а�и�и файл�в е�� на��р �и�в�л�в.
Чтение и запись файлов 171 О�ъе�ты TextStream ���дают�� � и���ль��вание� �ет�д�в CreateTextFile и OpenTextFile ��ъе�та FileSystemObject или � и���ль��вание� �ет�да OpenAsText- Stream ��ъе�та Scripting.File. Начальн�е �на����тв� � ни�и уже ���т��л��ь в эт�й �лаве в ��рав�чных ��и��ах 4.1 и 4.4 . ШАБЛОН Есть три типовых способа открытия файла: y Чтобы открыть существующий файл для чтения, воспользуйтесь методом OpenTextFile: set stream = fso.OpenTextFile("some input file.txt") Кроме этого, если для данного файла есть объект File, можно воспользоваться следующим оператором: set stream = file.OpenAsTextStream(forReading) y Чтобы создать новый текстовый файл, заменяющий любую предыдущую версию файла, вос- пользуйтесь методом CreateTextFile с аргументом перезапись, установленным в True: set stream = fso.CreateTextFile("some input file.txt", True) Если есть объект файла, можно воспользоваться следующим оператором: set stream = file.OpenAsTextStream(forWriting) y Чтобы создать новый файл или добавить новую информацию к любому предыдущему со- держимому уже существующего файла, воспользуйтесь методом OpenTextFile в режиме ForAppending, и с необязательным аргументом создать, установленным в True: set stream = fso.OpenTextFile("some input file.txt", ForAppending, True) Если есть объект File, воспользуйтесь следующим оператором: set stream = file.OpenAsTextStream(forAppending) Получившийся объект stream является объектом TextStream, который можно использовать для чтения или записи файла, воспользовавшись описанием, которое будет дано в остальной части этого раздела. ▼) Если нужно принудительно задать использование кодировки Юникод или ASCII, методу CreateTextFile или OpenTextFile можно указать дополнительный аргумент, показанный в справ- ке 4.1 . Например, чтобы заставить метод использовать кодировку Юникод, в предыдущей схе- ме нужно изменить три оператора: set stream = fso.OpenTextFile("some input file.txt", ForReading,_ False, TriStateTrue) set stream = fso.CreateTextFile("some input file.txt", True, True) set stream = fso.OpenTextFile("some input file.txt", ForAppending,_ True, TriStateTrue) Между ��да�и �у�в и чи�ел нах�д�т�� ��ециальные �и�в�лы, ���а�ывающие ��нец �ажд�й �тр��и файла, та�ул�цию и т. д . На ����ьютерах, ра��тающих ��д у�равление� DOS и W��dows, �тр��и �тделены дру� �т дру�а ��ециальны�и �и�� в�ла�и в��врата �арет�и (������g� ���u�� — CR� и �ерев�да �тр��и (�������d — LF; ��т�рый та�же на�ывает�� н�в�й �тр���й�, �начени� ��д�в ��т�рых равны, ��� �твет�твенн� 13 и 10. В U��x, L��ux и не��т�рых дру�их ��ераци�нных �и�те�ах
172 Глава 4. Доступ к файлам и реестру �л�жила�ь �ривыч�а �тдел�ть �тр��и дру� �т дру�а т�ль�� �и�в�л�� �ерев�да �тр��и (н�в�й �тр��и�. Эти ��ециальные ��ды в�тречают�� �ри ���и�в�льн�� чтении или �а�и�и фай� ла. Н� ��льшин�тву �рил�жений �р�ще в�е�� читать и �а�и�ывать те��т ���тр�чн�, дл� та���� �луча� ��ъе�т�� TextStream �ред��тавл�ют�� �чень уд��ные �ет�ды, ���в�л�ющие не ��ращать вни�ание на т�н���ти ра�делени� �тр�� � ����щью ��ециальных у�равл�ющих �и�в�л�в. О�ъе�т TextStream �ред�тавл�ет ��держи��е те��т�в��� файла и �т�леживает «те�ущую ���ицию» в файле. При чтении и� файла �и�в�л�в или �тр�� ��ъе�т TextStream �а���инает �ледующий, �жидающий �р�чтени� �и�в�л. Он та�же �а���инает, ���ль�� �тр�� и ���ль�� �и�в�л�в �р�читан� в те�ущей �тр��е. При �а�и�и файла �н �а���инает те�ущую �тр��у и те�ущую ���ицию в ней. Св�й�тва и �ет�ды ��ъе�та TextStream �еречи�лены в ��рав�е 4.5 . СПРАВКА 4.5. СВОЙСТВА И МЕТОДЫ ОБЪЕКТА TEXTSTREAM СВОЙСТВА AtEndOfLine Булев� �начение. Е�ли �ри чтении и� ��т��а эт� �в�й�тв� и�еет �начение True, �ледующий, ��т�вый � �читыванию �и�в�л, �вл�ет�� у�равл�ющи� �и�� в�л�� в��врата �арет�и или �ерев�да �тр��и. AtEndOfStream Булев� �начение. Е�ли �ри чтении и� ��т��а эт� �в�й�тв� и�еет �начение True, �начит, файл �ыл ��лн��тью �р�читан и данных ��льше не ��тал��ь. (Т�ль�� чтение.� Column В��вращает н��ер ��л�н�и �ледующе�� �и�в�ла, ��т�в��� � �читыванию или �а�и�и. П��ле �читывани� или �а�и�и �и�в�л�в в��врата �арет�и и �ерев�да �тр��и в��вращает�� � 1. (Т�ль�� чтение.� Line В��вращает н��ер �ледующей �тр��и, ��т�в�й � �читыванию или �а�и�и. (Т�ль�� чтение.� МЕТОДЫ Close За�рывает ��т��. П��ле �а�рыти� ��ъе�т ��льше не ��жет и���ль��вать��. Мет�д �ледует и���ль��вать �� �авершении чтени� или �а�и�и ��т��а дл� фи�� �ации в�ех и��енений на ди��е и дл� ра��л��ир�вани� файла, чт��ы и� ���ли ��ль��вать�� дру�ие �рил�жени�. Е�ли не �а�рыть ��ъе�т TextStream, файл не �удет �а�рыт, ���а не �авершит�� вы��лнение �ценари�. Read(nread) Считывает и� ��т��а nread �и�в�л�в и в��вращает их в виде �тр��и. Е�ли в файле ��тал��ь �еньше че� nread �и�в�л�в, в��лне ре��нн� �ред��л�жить,
Чтение и запись файлов 173 чт� �ет�д в��вращает т�, чт� е�у д��ту�н�. Н�, �� �райней �ере, в WSH вер� �ии 5.6 �ценарий �ри ���ыт�е �р�читать чт��ни�удь �а �редела�и файла �р�� �т� �ави�ает. П�эт��у �ледует �р��вл�ть ��т�р�жн��ть и ��лучать �ведени� � длине файла и� �в�й�тва Size ��ъе�та File, чт��ы у�едить�� в ���твет�твии эт�й длины ваши� �жидани��. ReadAll В��вращает в�е ��держи��е файла в виде �тр���в��� ��ъе�та. С �чень ��льши�и файла�и (��аже�, длин�й ��лее не���ль�их �е�а�айт� ���ут �ыть �р��ле�ы, н� эт�т �ет�д ���в�л�ет в����ль��вать�� фун�ци��и ра��ты �� �тр��а�и дл� �р��т��� ��и��а в файле и вне�ени� в не�� и��енений. ReadLine Считывает ��лную �тр��у те��та и� файла д� ��четани� �и�в�л�в CR+LF или �и�в�ла н�в�й �тр��и в�лючительн� и в��вращает те��т в виде �тр��и. Н� в��врат �арет�и и (или� �ерев�д �тр��и ча�тью в��вращае��й �тр��и не �вл�ют��. Skip nskip Пр��у��ает �ледующие nskip �и�в�л�в в ��т��е, не �читыва� их. SkipLine Пр��у��ает �ледующую �тр��у в ��т��е, не �читыва� ее. (Пр��у��ает �и�� в�лы д� ��четани� �и�в�л�в CR+LF или �и�в�ла LF в�лючительн�.� Write строка За�и�ывает �тр��у в файл. Си�в�лы CR+LF или н�в�й �тр��и не �а�и�ы� вают��, е�ли т�ль�� �ни не �вл�ют�� ча�тью �тр��и. WriteBlankLines nlines За�и�ывает nlines чи�тых �тр�� в файл; т� е�ть �а�и�ывает nlines �ар �и�� в�л�в CR+LF. WriteLine [строка] За�и�ывает те��т строки в файл, �аверша� е�� �и�в�ла�и CR+LF. Е�ли строка ��ущена, �а�и�ывает т�ль�� �и�в�лы CR+LF. Чтение текста из файлов Дл� чтени� �тр�� и� файла �уще�твует не���ль�� �������в. Ра����три� �дну и� ��н�вных �хе�. ШАБЛОН Для чтения всех строк файла с пропуском пустых строк и обработкой каждой строки подпро- граммой можно воспользоваться следующей схемой: ' Файл примера script0408.vbs ' указание имени обрабатываемого файла, которое также может быть ' передано через аргумент командной строки filename = "c:\somefolder\somefile.txt" set fso = CreateObject("Scripting.FileSystemObject")
174 Глава 4. Доступ к файлам и реестру ' проверка существования файла и сообщение, если он отсутствует if not fso.FileExists(filename) then MsgBox "Файл '" & filename & "' отсутствует" wscript.quit 1 end if ' открытие потока и построчное считывание set stream = fso.OpenTextFile(filename) do while not stream.AtEndOfStream str = stream.ReadLine ' есл и с трока не пустая, вызов подпрограммы "process" if len(trim(str)) > 0 then process str loop stream.Close ' --------------------------------------------------------------------- ' подпрограмма для обработки строк из входного файла sub process (str) Wscript.Echo "Ввод:", str ' (здесь делается что-нибудь полезное) end sub В эт�й �хе�е и�� файла �адан� в �а��� �ценарии. Эт� и�� ��жн� и�влечь и� ��лле�ции ар�у�ент�в ���андн�й �тр��и, ���в�лив ��ль��вателю те� �а�ы� у�а� �ать е�� в эт�й �тр��е: if Wscript.Arguments.Length <> 1 then MsgBox "Порядок использования: " & Wscript.ScriptName & " имя_файла" Wscript.Quit 1 end if filename = WScript.Arguments.Item(0) П�д�р��ра��а process ��жет вы��лн�ть лю�ую нужную ра��ту. Е�ли, � �ри�е� ру, эт�т �ценарий ра�ра��тан дл� ���дани� н�вых учетных �а�и�ей ��ль��вателей, ��жет ��над��ить��, чт��ы в �ажд�й �тр��е файла у�а�ывала�ь инф�р�аци�, �т� н���ща��� � �дн��у ��ль��вателю. А ��д�р��ра��а process вы��лнит ра��ту �� ���данию �дн�й учетн�й �а�и�и ��ль��вател�. ▼) Метод ReadLine работает с текстовыми файлами как DOS- (CR+LF-разделитель), так и Unix-типа (LF-разделитель). Дл� ра��ты �� �тр��а�и, �читанны�и и� вх�дн��� файла, ��жн� в����ль��вать� �� фун�ци��и ��ра��т�и �тр�� �ред��читае���� ва�и ��ы�а �ценариев. Запись текста в файлы Сценарии ���в�л�ют �в���дн� ве�ти �а�и�ь в те��т�вые файлы. Эти� ��жн� в��� ��ль��вать�� дл� ���дани� журнал�в ре�и�трации дей�твий, э����рта данных, и�влеченных �ценарие� в эле�тр�нную та�лицу или в те��т�вый �р�це���р, или дл� ���тавлени� ��и���в, ��т�рые ��жн� ра��ечатать.
Чтение и запись файлов 175 Ка� уже ранее у���инал��ь в данн�й �лаве, дл� ���дани� н�в��� файла, �ере� �а�и�ывающе�� лю��й �редыдущий файл, нужн� в����ль��вать�� �ледующи� ��ерат�р��: set outstream = fso.CreateTextFile("\somefolder\filename.txt") И�ена дл� TextStream���ъе�та outstream и дл� и�ени файла ���ут �ыть вы�ра� ны �р�и�в�льн�. М�жн� та�же д���лнить ��держи��е уже �уще�твующе�� файла, в����ль��вавши�ь ��ерат�р�� set outstream = fso.OpenTextFile("\somepath\filename.txt", ForAppending, True) ��т�рый ли�� д��авит н�вые данные � лю���у �редыдуще�у ��держи���у, ли�� ���да�т файл, е�ли т�т еще не �уще�твует. ▼▼ Добавление пригодится, когда нужно, чтобы сценарий вел журнал своих действий при каждом запуске. Ведение файла журнала особенно принесет пользу при запуске сценария в автомати- ческом режиме с использованием Планировщика заданий (Task Scheduler). ▼▼ Если у вас есть принтер, подключенный к параллельному порту, или общий сетевой принтер, можно заставить сценарий отправлять текстовый вывод прямо на него, для чего нужно ис- пользовать CreateTextFile с именем принтера. Для локального принтера, подключенного к порту LPT1, нужно использовать имя "LPT1", а для общего сетевого принтера — имя вида "\\sumatra\ okidata". (Если принтер подключен черезa USB или через беспроводную связь, приходится об- ращаться к нему как к общему принтеру и использовать его сетевое имя, поскольку имя порта LPT (с его использованием CreateTextFile может вести запись) есть только у принтеров, подклю- ченных к параллельному порту.) Чтобы при отправке вывода на лазерный принтер на нем была распечатана последняя страница, нужно перед закрытием потока отправить символ подачи страницы — form feed (ASCII-код 12). В VBScript это можно сделать с помощью следующего кода: outstream.Write(vbFormFeed) outstream.Close П��ле ���дани� ��ъе�та TextStream �а�и�ь файл�в �р�ще ве�ти � и���ль��ва� ние� �ет�да WriteLine; �н �а�и�ывает �тр��у и авт��атиче��и д��авл�ет ���твет� �твующие �и�в�лы в��врата �арет�и и �ерев�да �тр��и. На�ри�ер, �ледующий �ценарий выв�дит ��и��� и�ен лю�ых, найденных в ва� шей �а��е Моя музыка ([My] Music) или в лю��й ее ��д�а��е, файл�в MP3 или WMA в те��т�вый файл �� и�ени Music Listing.txt: ' Файл примера script0409.vbs set fso = CreateObject("Scripting.FileSystemObject") set shl = CreateObject("WScript.Shell") ' Выполнение довольно непростой задачи получения путевого имени папки ' Моя Музыка ([My] Music). ' В XP и в Vista она находится в разных местах. ' В XP папка Моя Музыка (My Music) находится внутри папки Мои Документы ' (My Documents). ' В Windows 7 и в Vista папка Моя музыка (Music) находится внутри папки ' профиля пользователя. ' Метод shl.SpecialFolders позволяет определить реальное местонахождение папки
176 Глава 4. Доступ к файлам и реестру ' Мои документы ([My] Documents), но надежного способа обнаружения папки ' Моя музыка (Music) нет. Поэтому: ' и спо льзуется переменная среды USERPROFILE, и эта папка ищется в Win7/Vista. ' Если папку Моя музыка (Music) найти не удается, используется имя ' и место ее нахождения в XP. musicfolder = shl.ExpandEnvironmentStrings("%USERPROFILE%\Music") if not fso.folderexists(musicfolder) then musicfolder = fso.BuildPath(shl.SpecialFolders("MyDocuments"), "My Music") end if wscript.echo "Поиск в", musicfolder, "файлов MP3 и WMA ..." ' с оздание выходного файла set out = fso.CreateTextFile(fso.BuildPath(musicfolder, "Music Listing.txt")) nfiles = 0 ' со ста вле ние сп иск а музыкальных файлов listdir "" out.Close ' за крытие выходного файла ' со общение пользователю о проделанной работе wscript.echo "Количество перечисленных файлов: ", nfiles ' --------------------------------------------------------------------- ' l istdir – составление списка музыкальных файлов в подпапке 'path' ' п апк и Мои документы (My Documents). ' Для улучшения внешнего вида списка путь выводится относительно папки ' Моя музыка ([My] Music ), но для использования метода GetFolder ' э то отн оси тел ьно е путевое имя нужно добавить к "музыкальному" пути ' (в переменной musicfolder). sub listdir (path) dim fldr, file, folder, extn, first first = True ' пок а в эт ой папке мы не увидели файлов ' п олучение информации о папке путем создания полного пути set fldr = fso.GetFolder(fso.BuildPath(musicfolder, path)) ' с кан ирование для поиска файлов MP3 или WMA for each file in fldr.Files extn = ucase(fso.GetExtensionName(file.name)) if extn = "MP3" or extn = "WMA" then if first then ' вы вод имени папки перед первым именем файла out.WriteLine path out.WriteLine replicate("- ", len(path)) first = False end if ' выв од в список имени музыкального файла out.WriteLine " " & file.name nfiles = nfiles+1 end if next ' Если в список выведены какие-нибудь файлы, печать пустой строки if not First then out.WriteLine ' а те перь перечисление содержимого любых подпапок for each folder in fldr.subfolders listdir fso.BuildPath(path, folder.Name)
Чтение и запись файлов 177 next end sub ' --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ' replicate – возвращение строки 'str', продублированной 'n ' раз function replicate (str, n) dim i replicate = "" ' нач ина ем с пустой строки fori=1ton ' добавление требуемого количества копий replicate = replicate & str next end function Дл� улучшени� внешне�� вида ра��ечат�и в эт�� �ценарии �ред�рин�т р�д интере�ных �рие��в. Следует ��ратить вни�ание на три ����енн��ти данн��� �ценари�: y y Он выв�дит и�� ��анируе��й �а��и, т�ль�� е�ли в ней �удет найден �у�ы� �альный файл. Та�и� ��ра���, �а��и и���лнителей, ��т�рые ��ычн� ��держат т�ль�� ф�т� ��л�же� аль���а, в ��и��� не ���адают. Пере�енна� first �т�ле� живает, �ыли ли в данн�й �а��е файлы, ���авшие в ��и���. Е�ли first и�еет �начение True, �начит, файл�в, ���авших в ��и���, в �а��е не �ыл�. y y Он выв�дит и�� �а��и, ���ле че�� выв�дит �тр��у, ���т��щую и� �и�в�л�в тире, и�еющую та�ую же длину, чт� и и�� �а��и. Бла��дар� эт��у в��ни�ает эффе�т ��дчер�ивани�. Фун�ци� replicate ���ирует �и�в�л тире (-� нужн�е ��личе�тв� ра�. П��ле выв�да ��и��а файл�в �а��и, е�ли в ��и��� ���али �а�ие�ни�удь файлы (т� е�ть �ере�енна� first ��лучила �начение False�, дл� ви�уальн��� �тделени� �ажд�й �а��и выв�дит�� �у�та� �тр��а. y y П�д�р��ра��а listdir и���ль�ует в �аче�тве �в�е�� ар�у�ента �утев�е и�� в �тр���в�й ф�р�е. В �редыдуще� уче�н�� �ценарии, ��т�рый �ани�ал�� у�лу�ление� в �а��и, �ы и���ль��вали �а� ��ъе�т Folder, чт� �ыл� �р�ще. Н� в данн�� �ценарии на� �ах�тел��ь выве�ти т�ль�� ча�ть �утев��� и�ени после �а��и Мои документы, ��эт��у �т�леживала�ь т�ль�� ча�ть �тр��и, а дл� ���дани� фа�тиче����� ��лн��� �ути, ���да эт� �ыл� нужн� �ет�ду GetFolder, и���ль��вал�� �ет�д BuildPath. Са��й �а�утанн�й ча�тью данн��� �ценари� �вл�ет�� ��и�� �у�ы�альн�й �а�� �и. Пред��ла�ает��, чт� ��ъе�т WScript.Shell �ред��тавл�ет не�ави�и�ый �т ти�а �ри�ен�е��й ��ераци�нн�й �и�те�ы �ет�д ��лучени� �ути � ��ециальны� �а��а�, н� е�у неи�ве�тн�, �а� найти �а��у Моя музыка (Music). Хуже т���, в XP �а��а Моя музыка (My Music) �вл�ет�� ��д�а���й внутри �а��и Мои документы (My Documents), а в V�s�� эта �а��а на�ывает�� Моя музыка (Music) и не �вл�ет�� ��д�а���й внутри �а��и Мои документы (Documents), а вх�дит в ���тав �а��и �р�фил� ��ль��вател�, ��т�ра� нах�дит�� р�д�� � �а���й Мои документы (Documents). О�ерат�р fso.BuildPath(shl.SpecialFolders("MyDocuments"), "My Music") ра��тает в XP, н� не ра��тает в V�s��. П�эт��у �ценарий �начала �р��ует ра��тать � и�ене� и �е�т��, ��т�рые и���ль�уют�� в V�s��, и е�ли �а��а не �удет найдена, �р��ует найти ее та�, �де �на �ывает в XP.
178 Глава 4. Доступ к файлам и реестру Сценарий выв�дит ��и��� �ри�ерн� та���� вида: Baguette Quartet\Rendez-Vous --- --- --- --- --- --- --- --- --- --- --- --- - Ça gaze.wma Si l'on ne s'était pas connu.wma Reine de musette.wma Iris Dement\Infamous Angel --- --- --- --- --- --- --- --- --- --- --- -- Let the Mystery Be.wma These Hills.wma Hotter Than Mojave in My Heart.wma Создание более сложных текстовых файлов В �редыдуще� �ри�ере ��и��� ���давал�� �уте� ���тр�чн�й �а�и�и. И���ль�у� �ет�д Write ��ъе�та TextStream, ��жн� ���давать те��т�вые файлы ���и�в�льн�. Мет�д Write выв�дит лю��й �ереданный е�у те��т, н� �н не д��авл�ет ра�де� лителей �тр��. В ���и�в�льн�� режи�е те��т�вые �тр��и ��жн� �енерир�вать �ледующи� ��ра���: outstream.Write "Имя файла: " outstream.Write filename outstream.WriteLine Эти ��ерат�ры ���дают в вых�дн�� файле �дну �тр��у �уте� �а�и�и двух �тр���вых �начений и д��авлени� ���ле них в��врата �арет�и и �ерев�да �тр��и. И���ль�у� �ет�д Write, ��жн� та�же �а�и�ать �ару �и�в�л�в CR�LF. В V�S���p� �ледующие три варианта ��да выдают в вых�дн�� файле �дин и т�т же ре�ультат: outstream.Write "Имя файла: " outstream.Write filename outstream.WriteLine outstream.Write "Имя файла: " & filename & vbCRLF outstream.WriteLine "Имя файла: " & filename В те��т�вые файлы ��жн� та�же в�тавл�ть �и�в�лы та�ул�ции (ASCII 9�; эт� ����енн� �ри��дит��, е�ли нужн� ���дать файл, и���ртируе�ый в эле�тр�нную та�лицу, �а�у данных или в те��т�вый �р�це���р. Дл� ��ле�чени� эт�й �адачи в V�S���p� е�ть даже уд��на� �ред��ределенна� ��н�танта vbTab. Следующий �ценарий �вл�ет�� еще �дни� вариант�� �р��ра��ы выв�да ��и��а файл�в MP3. В�е�т� ���дани� �ра�ив� �тф�р�атир�ванн��� те��т�в��� файла, �редна�наченн��� дл� �р����тра или ра��ечат�и, �ценарий ���дает та�лицу и� трех �т�л�ц�в (и�� �а��и, и�� файла и ра��ер�: ' Файл примера script0410.vbs set fso = CreateObject("Scripting.FileSystemObject") set shl = CreateObject("WScript.Shell") ' Выполнение довольно непростой задачи получения путевого имени папки ' Моя Музыка ([My] Music). ' Для ее поиска в Win7/Vista используется переменная среды USERPROFILE.
Чтение и запись файлов 179 ' Если папку Моя музыка (Music) найти не удается, используется имя ' и место ее нахождения в XP. musicfolder = shl.ExpandEnvironmentStrings("%USERPROFILE%\Music") if not fso.folderexists(musicfolder) then musicfolder = fso.BuildPath(shl.SpecialFolders("MyDocuments"), "My Music") end if wscript.echo "Поиск в ", musicfolder, "файлов MP3 и WMA ... " set out = fso.CreateTextFile(fso.BuildPath(musicfolder, "Music Listing.txt")) nfiles = 0 ' с оздание списка музыкальных файлов listdir "" out.Close ' закрытие выходного файла ' сообщение о результатах проделанного wscript.echo "В списке находится ", nfiles, "файл(а,ов)" ' --------------------------------------------------------------------- 'listdir – составление списка музыкальных файлов в подпапке 'path' ' п апк и Мои документы (My Documents). ' Для улучшения внешнего вида списка путь выводится относительно папки ' Моя музыка ([My] Music ), но для использования метода GetFolder ' э то отн оси тел ьно е путевое имя нужно добавить к "музыкальному" пути ' (в переменной musicfolder). Данная версия создает не список с ' о тформатированным текстом, а таблицу с символами табуляции в качестве ' разделителей. sub listdir (path) dim fldr, file, folder, extn ' п олучение информации о папке путем создания полного пути set fldr = fso.GetFolder(fso.BuildPath(musicfolder, path)) ' с кан ирование для поиска файлов MP3 или WMA for each file in fldr.Files extn = ucase(fso.GetExtensionName(file.name)) if extn = "MP3" or extn = "WMA" then ' форматирование пути, имени и размера out.WriteLine path & vbTab & file.name & vbTab & file.Size nfiles = nfiles+1 end if next ' а те перь перечисление содержимого любых подпапок for each folder in fldr.subfolders listdir fso.BuildPath(path, folder.Name) next end sub В ре�ультате вы��лнени� �ценари� �удет ���дан файл �ледующе�� вида: Baguette Quartet\Rendez-Vous— >Ça gaze.wma — >1031008 Baguette Quartet\Rendez-Vous— >Sil'on ne s 'était pas connu.wma— >883952 Baguette Quartet\Rendez-Vous— >Reine de musette.wma — >1286196 Iris Dement\Infamous Angel— >Let the Mystery Be.wma — >1349134 Iris Dement\Infamous Angel— >These Hills.wma— >1784372 Iris Dement\Infamous Angel— >Hotter Than Mojave in My Heart.wma — >1196018 Эт�т файл �ра�у же ��жет �ыть и���ртир�ван в �x���.
180 Глава 4. Доступ к файлам и реестру Запись Unix-совместимых текстовых файлов Мет�ды WriteLine и WriteBlankLines �а�и�ывают файлы DOS�ти�а, и���ль�у� в �аче�тве ра�делител� �тр�� �ару �и�в�л�в CR+LF. Дл� �а�и�и те��т�вых файл�в в �и�те�е W��dows, �ри��дных дл� и���ль��вани� в �и�те�ах, ���данных на ��н�ве U��x, нужн� �а�и�ывать ��ды ��нца �тр��и �а���т��тельн�. В�е�т� и���ль��вани� WriteLine в����ль�уйте�ь �ет�д�� Write и д��авьте �и�в�л �ерев�да �тр��и �а��� �т��тельн�. П� �райней �ере, в V�S���p� эт� �делать не�л�жн�. В V�S���p� в�е�т� и���ль��вани� W����L��� ��жн� на�и�ать ��ерат�р �леду� юще�� вида: stream.Write(str & vbLF) Он д��авит � �тр��е �и�в�л �ерев�да �тр��и �еред те�, �а� ее �а�и�ать. В�е�т� и���ль��вани� выражени� WriteBlankLines n ��жн� на�и�ать �ледующий ��д: fori=1ton stream.Write(vbLF) next ▼) В VBScript имеются предопределенные строковые константы, которыми можно воспользоваться при записи текстовых файлов. Значение константы vbCRLF содержит пару возврат каретки + перевод строки, а значение константы vbLF содержит только перевод строки. Значение кон- станты vbNewLine является «независимым от платформы» разделителем, которым можно вос- пользоваться при написании сценариев, запускаемых либо под Unix, либо под DOS/Windows; но вам, скорее всего, захочется непосредственно контролировать создание разделителей строк, используя константу vbCRLF или константу vbLF. Список предопределенных строковых констант можно посмотреть в справочнике по Microsoft VBScript под заголовком «Constants». Работа со стандартным вводом (Stdin) и стандартным выводом (Stdout) При �а�у��е �ценари� и� ���андн�й �тр��и � и���ль��вание� ���анды cscript ваш �ценарий ��лучает д��ту� � файла� �реды ���андн�й �тр��и «�тандартный вв�д» и «�тандартный выв�д». И�и �� у��лчанию �вл�ют�� вв�д � вашей �ла� виатуры и выв�д на э�ран, н� их ��жн� �ерена�равить в файлы, и���ль�у� и�� ве�тные ар�у�енты �р��ра��н��� �инта��и�а ���андн�й �тр��и <входной_файл >выходной_файл, ��т�рые �а�тавл�ют �р��ра��у �читывать вв�д в нее и� файла входной_файл и �а�и�ывать выв�д и� нее в файл выходной_файл. ➔ Ка� и��енить х��т, и���ль�уе�ый �� у��лчанию, ��. �лаву 1, ра�дел «С�����ы �а�у��а �ценариев». ➔ Д���лнительные �ведени� � ���андн�й �тр��е и �ерена�равлени�х даны в �ла� ве 10 «К��андна� �тр��а CMD». Эти� ��жн� в����ль��вать�� �ри на�и�ании �ценариев, чт��ы ��вы�ить их е�те�твенную «универ�альн��ть». На�ри�ер, е�ли ���дан �ценарий дл� выв�да ��и��а файл�в, ��т�рый �т�равл�ет ��енерир�ванные данные на �тандартный вы� в�д, �н делает �ледующее: y y Выв�дит ��и��� на э�ран, е�ли �ценарий �ыл �а�ущен в �р��т�й ���андн�й �тр��е.
Чтение и запись файлов 181 y y Выв�дит ��и��� ��э�ранн� �ри д��авлении � ���андн�й �тр��е ар�у�ент�в | more. y y С�хран�ет ��и��� в файле �ри д��авлении � ���андн�й �тр��е ар�у�ент�в >имя_файла. y y Выв�дит ��и��� на �ечать �ри д��авлении � ���андн�й �тр��е ар�у�ент�в >prn1. y y Выв�дит т�ль�� эле�енты, ��держащие "jazz" �ри д��авлении � ���андн�й �тр��е ар�у�ент�в | find /i "jazz". Анал��ичн� эт��у, �ценарий, �читывающий данные и� �тандартн��� вв�да, ��лучает данные �ледующи� ��ра���: y y С ��ль��ватель���й �лавиатуры, е�ли �ценарий �а�ущен в �р��т�й ���андн�й �тр��е. y y И� файла �ри д��авлении � ���андн�й �тр��е ар�у�ента <имя_файла. y y И� выв�да дру��й �р��ра��ы, е�ли �еред ���анд�й �а�у��а �ценари� �т�ит ар�у�ент ���андн�й �тр��и программа |. (Та� на�ывае�ый канал.� Ка� видите, и���ль��вание �тандартн��� вв�да и выв�да �ред��тавл�ют �це� нарию �ри �а�у��е �н�же�тв� вариант�в, реали�уе�ых фа�тиче��и �е� ����ых у�илий. Чт��ы в�е� эти� в����ль��вать��, нужн� лишь �адей�тв�вать �ред��ределен� ные ��ъе�ты TextStream, �ред��тавл�е�ые WSH. В�е�т� т��� чт��ы ���давать ��т�� дл� выв�да ��и��а � ����щью �ет�да fso.CreateTextFile или ��т�� дл� чтени� вх�дн��� файла � ����щью �ет�да fso.OpenTextFile, в����ль�уйте�ь �ред� ��ределенны�и ��ъе�та�и, �еречи�ленны�и в та�л. 4 .2 . Таблица 4.2. Предопределенные объекты TextStream Объект Использование WScript.Stdin Стандартный вв�д. И���ль�ует�� дл� чтени� данных, вв�ди�ых � ��ль��ватель���й �лавиатуры, или, е�ли �н �ерена�равлен, и� файла или и� �р��ра��ы WScript.Stdout Стандартный выв�д. И���ль�ует�� дл� �а�и�и в ��ль��ватель���е ��н�, или, е�ли �н �ерена�равлен, в файл или в дру�ую �р��ра��у WScript.Stderr Выв�д �тандартн�й �ши��и. И���ль�ует�� �реи�уще�твенн� дл� вы� в�да ����щений �� �ши��ах, ��т�рые нужн� ���а�ать ��ль��вателю, даже е�ли �тандартный выв�д �ерена�равлен. М�жет �ыть �ерена� �равлен � ����щью ар�у�ента 2>имя_файла ▼▼ В Windows XP, если запустить сценарий простым набором его имени, WSH некорректно обра- батывает перенаправление стандартного ввода из файла или канала. Например, если набрать имя_сценария <имя_файла и сценарий попытается прочитать данные с помощью WScript.Stdin, он будет остановлен с выдачей ошибки. Сценарий нужно запускать с явным указанием команды cscript (например, cscript имя_сценария.vbs <имя_файла, или программа | cscript имя_сцена- рия.vbs). При работе под Windows 7 и Vista перенаправления и каналы работают корректно, даже если сценарий запустить, просто набрав его имя. 1 Ра��тает т�ль�� е�ли �ринтер ��д�лючен � �араллельн��у ��рту LPT1, дл� ��ще�� �ете� LPT1, дл� ��ще�� �ете� 1, дл� ��ще�� �ете� в��� �ринтера и���ль�ует�� ���анда, ���а�анна� в �лаве 13.
182 Глава 4. Доступ к файлам и реестру Ра����три� уче�ный �ценарий, �читывающий те��т�вые �тр��и и� �тандартн�� �� вв�да, �а�ен�� �ри эт�� �и�в�лы та�ул�ции �а��ты�и и �а�и�ыва� ре�ультат на �тандартный выв�д: ' Файл примера file script0411.vbs do while not WScript.Stdin.AtEndOfStream str = WScript.Stdin.ReadLine do i = instr(str, vbTab) ifi<=0thenexitdo str = left(str, i-1) & ", " & mid(str, i+1) loop WScript.Stdout.WriteLine str loop Пр��ра��ы, �читывающие данные �� �тандартн��� вв�да, �ани�улирующие вв�ди�ы�и данны�и, а �ате� �а�и�ывающие их в �тандартный выв�д, на�ывают�� фильтра�и. Фильтры ���ут �ыть ве�ь�а ��ле�ны� ин�тру�ент��, �����ль�у их ��жн� вы�траивать в р�д: программа | фильтр | еще_один_фильтр > выходной_файл Е�ли �ри ���дании �ценариев, ��ра�атывающих инф�р�ацию, ��жн� ра��чи� тывать на �ри�енение фильтр�в, ��жет ��лучить�� та�, чт� ��н�вна� ча�ть ра��ты делает�� �е� ����ых у�илий � вашей �т�р�ны. ▼) В Windows XP есть ошибка, не позволяющая использовать сценарии в качестве фильтров, если в командной строке набрать только имя сценария. Например, в XP someprogram | script0411 не удаляет символы табуляции из данных, выводимых из «someprogram», а выводит сообщение об ошибке. Для нормальной работы требуется явный набор команды на запуск: someprogram | cscript script0411.vbs В Vista или Windows 7 этой проблемы нет, что позволяет воспользоваться упрощенной команд- ной строкой someprogram | script0411. Запрос пользовательского ввода П�т��и вв�да�выв�да ��жн� и���ль��вать дл� в�аи��дей�тви� � ��ль��вателе�. Эт� в�аи��дей�твие и���ль�ует�� в WSH��р��ра��ах д�в�льн� ред��, а не��х�� ди���ть и���ль��вани� �ри�лашени� на вв�д ���анды ��жет ���а�ать�� �уте� ше�твие� в ����ьютерную и�т�рию на 20 лет на�ад, н� в�е же эт�т �рие� ��жет �ри��дить�� и �ейча�. Один и� �р��тых �������в ��лучени� �р��ра���й ��ль��ватель����� вв�да �а� �лючает�� в выдаче �ри�лашени� на вв�д � ���ледующе� чтение� е�� �� �тандарт� н��� вв�да. Ра����три� в �ущн��ти �е���ле�ный уче�ный �ценарий, ���в�л�ющий �р�де��н�трир�вать, чт� � и�ею в виду: ' Файл примера script0412.vbs wscript.stdout.WriteLine "Для остановки программы введите QUIT" wscript.stdout.WriteLine do
Чтение и запись файлов 183 wscript.stdout.Write "Как вас зовут? " if wscript.stdin.AtEndOfStream then exit do name = wscript.stdin.ReadLine if ucase(name) = "QUIT" then exit do wscript.stdout.WriteLine "Привет, " & name & ". " wscript.stdout.WriteLine loop Эт�т �ценарий выв�дит �ри�лашение на вв�д и �читывает и�ена д� тех ��р, ���а ��ль��ватель не на�ерет QUIT или не ����начит ��нец файла, нажав Ctrl+Z. Сценарий ведет �р�вер�у �а� на QUIT, та� и на AtEndOfStream, ��эт��у �н ра��тает и �ри �а�у��е � �ерена�равление� вв�да. ▼) При использовании запроса на ввод, проверку на конец потока — AtEndOfStream — следует по- ставить не до, а после набора приглашения. Тогда Windows сможет определить, собираетесь ли вы ввести еще что-нибудь или хотите завершить ввод, нажав Ctrl+Z. Если попытаться провести проверку на AtEndOfStream до выдачи приглашения на ввод, это приглашение не появится. Чтение двоичных файлов О�ъе�т TextStream ��жн� и���ль��вать дл� чтени� не т�ль�� те��т�вых, н� и дв�� ичных файл�в, �р��вл�� �ри эт�� ����ую ��т�р�жн��ть и ��ни�а� �тру�туру �читывае���� файла. (Эта те�а �тн��ит�� � ра�р�ду у�лу�ленных, ��эт��у н�вич�и в �р��ра��ир�вании, �тре��щие�� ��лучить �а��вые �нани�, ���ут ее ���а �р�� �у�тить.� Чт��ы �ри чтении дв�ичн�й инф�р�ации � и���ль��вание� TextStream ��лу� чить в����жн��ть чтени� и� �л���в данных, �ледует в�е�т� �ет�да readline в��� ��ль��вать�� �ет�д�� Read. На�ри�ер, дл� �р��у��а 10 �айт�в файла и чтени� �ледующих 50 ��жн� на�и�ать �ледующий ��д stream.skip(10) str = stream.read(50) ��т�рый �р�читает и ���е�тит в �тр��у 50 �айт�в. Зате� дл� и�влечени� дв�ич� н�й инф�р�ации нужн� �удет �р�ани��вать ���и�в�льную вы��р�у и� �тр��и. В V�S���p� выве�ти �айты т�ль�� чт� �р�читанн�й �тр��и ��жн� � ����щью �ледующе�� �р��ра��н��� ��да: fori=1to50 value = asc(substr(str, i, 1)) wscript.echo "Байт ", str(i,2) & ": ", value next Зде�ь фун�ци� substr() ��уще�твл�ет ���и�в�льную вы��р�у, а фун�ци� asc() выдает �айт�в�е �начение и�влеченн��� �и�в�ла. Дл� интер�ретации ���л�вных �начений �ледует �р�ани��вать ���лед�ватель� ную двух�айт�вую вы��р�у � их ���ледующи� ��ъединение� �а� в �ледующе� �ри�ере: wordval = asc(substr(str,10,1)) + 256*asc(substr(str,11,1)) Зде�ь �р�и�х�дит и�влечение �начени� 16�ра�р�дн��� �л�ва и� �айт�в 10 и 11, � учет�� �тандартн��� ��р�д�а �лед�вани� �айт�в, и���ль�уе���� в I�����x�6. (Х�т�
184 Глава 4. Доступ к файлам и реестру дру�ие ����ьютерные архите�туры ���ут и���ль��вать ин�й ��р�д�� �лед�вани� �айт�в, в ��льшин�тве M���oso�����в�е�ти�ых файл�вых ф�р�ат�в и���ль�ует�� ��р�д��, �рин�тый в I����, ��эт��у ��льшин�тв� файл�в д�лжн� �ыть �р�читан� и�енн� та�и� ��������.� В та��й же �анере, ��ъедин�� четыре �айта, ��жн� вы� �тр�ить �начение �o�g или DWORD: wordval = asc(substr(str,10,1)) + 256*asc(substr(str,11,1)) + _ 65536*asc(substr(str,12,1)) + 16777216*asc(substr(str,13,1)) Чт��ы ��лучить универ�альн�е решение �адачи и у�р��тить чтение �ценари�, дл� и�влечени� дв�ичных �начений и� �тр��и лучше в����ль��вать�� фун�цией. Ра����три� фун�цию, и�вле�ающую n��айт�в�е �начение, начина� � ���иции ��ещени� offset в �тр��е str: function binaryval (byref str, offset, n) dim i binaryval = 0 for i = offset+n-1 to offset step -1 binaryval = binaryval*256 + asc(mid(str,i+1,1)) next end function В эт�й фун�ции �начение offset начинает�� � нул�, ��т��у чт� и�енн� та��й ������ ��и�ани� ���иции �а�и�и в файл�вых �тру�турах и���ль�ует�� в ��льшин� �тве д��у�ентаций. Де��т��у �и�в�лу в �тр��е ���твет�твует ��ещение, равн�е 9, ��эт��у ��ерат�р wordval = binaryval(str, 9, 4) �вл�ет�� еще �дни� �������� ��лучени� ранее �р�иллю�трир�ванн��� DWORD��начени�. Пример: чтение данных изображения в формате BMP В �аче�тве иллю�трации чтени� дв�ичн�й инф�р�ации �ред�тави�, чт� на� нужен �ценарий, и�вле�ающий инф�р�ацию � �в�й�твах файла и���ражени� в ф�р�ате M���oso�� �MP. П�и��ав в Интернете инф�р�ацию �� �лючев�й фра�е «�MP F��� Fo�m�� Sp���������o�» («С�ецифи�аци� ф�р�ата �MP�файла»�, � ��наружил, чт� в�е �MP�файлы начинают�� �� �ледующих данных: Смещение 0 WORD bfType символы "BM " 2 DWORD bfSize длина файла 6 WORD bfReserved1 не используется 8 WORD bfReserved2 не используется 10 DWORD bfOffBits смещение в файле, ведущее к двоичному отображению 14 DWORD biSize размер содержимого заголовка, обычно 40 18 LONG biWidth ширина изображения в пикселах 22 LONG biHeight высота пикселов 26 WORD biPlanes число слоев изображения, всегда 1 28 WORD biBitCount количество битов на пиксел: 1, 4, 8, 16, 24 или 32 Та�и� ��ра���, е�ли �р�читать �ервые 30 �айт�в �MP�файла в �тр���вую �ере� �енную �� и�ени hdr, ��жн� и�влечь ширину и вы��ту и���ражени� в �и��елах, и���ль�у� ранее �ред�тавленную фун�цию binaryval: width = binaryval(hdr, 18, 4) height = binaryval(hdr, 22, 4)
Чтение и запись файлов 185 Эти� ��жн� в����ль��вать�� дл� ���дани� �ценари�, выв�д�ще�� ра��еры лю�ых �MP�файл�в, у�а�анных в ���андн�й �тр��е: ' Файл примера bmpsize.vbs set fso = CreateObject("Scripting.FileSystemObject") for each filename in Wscript.Arguments if not fso.FileExists(filename) then ' ес ли файл не существует result = "не существует" elseif fso.GetFile(filename).Size < 32 then ' файл слишком короток, чтобы считаться полноценным result = "не является файлом BMP" else ' от крытие файла и чтение первых 32 байт set stream = fso.OpenTextFile(filename) hdr = stream.Read(32) stream.Close ' з акрытие потока if left(hdr,2) <> "BM" then ' файл не начинается с требуемого маркера result = "не является файлом BMP" else ' и звл ече ние информации о размере width = binaryval(hdr, 18, 4) height = binaryval(hdr, 22, 4) result = "Ширина: " & width & " Высота: " & height end if end if ' выв од информации, полученной для данного файла wscript.echo filename & ": ", result next ' --------------------------------------------------------------------- function binaryval (byref str, offset, n) dim i binaryval = 0 for i = offset+n-1 to offset step -1 binaryval = binaryval*256 + asc(mid(str,i+1,1)) next end function При �а�у��е ���анды bmpsize test.txt xray.bmp "nasa sfbay.bmp" �ценарий ����рн� вывел �равильные ре�ультаты: test.txt: не Является файлом BMP xray.bmp: Ширина: 980 Высота: 980 nasa sfbay.bmp: Ширина: 1024 Высота: 725
186 Глава 4. Доступ к файлам и реестру Пример: чтение данных MP3-тега Ра����три� еще �дин �ри�ер чтени� дв�ичн��� файла, иллю�трирующе�� ������ и�влечени� инф�р�аци�нн�й �тр��и и� �л��а дв�ичных данных. В MP3�файлах е�ть инф�р�аци�нный �л��, ��т�рый на�ывает�� тегом и �вл�ет�� ��и�ание�, на�вание� �р�и�ведени�, и���лнител�, аль���а и т. д. Не���тр� на т� чт� �ыли ра�ра��таны ра�личные ф�р�аты те��в, �дин и� �а�ых ра��р��траненных ф�р�а� т�в �реду��атривает ра��ещение эт�й инф�р�ации в ���ледних 12� �айтах файла и и�еет �ледующую �тру�туру: Смещение 0 STRING(3) Тег должны быть буквы "TAG" 3 STRING(30) Название дополнено пробелами 33 STRING(30) Исполнитель 63 STRING(30) Альбом 93 STRING(4) Год 97 STRING(30) Комментарий 127 BYTE Жанр числовой код Чт��ы �р�читать эт�т �л��, ��жн� в����ль��вать�� �ет�д�� Skip ��ъе�та TextFileObject дл� �р��у��а в�е�� ��держи����, �р��е ���ледних 12� �айт файла. Зате�, дл� чтени� этих 12� �айт ��жн� в����ль��вать�� �ет�д�� Read. Дл� чтени� инф�р�ации и� MP3�файла �ы ��же� и���ль��вать �ценарий, ��х�жий на т�т, ��т�рый �ыл ���а�ан в �редыдуще� �ри�ере. Н� �ри и�влечении �тр��и нужн� и���ль��вать ���ицию в �тр��е, ��т�ра� начинает�� � единицы, а не ��ещение, ��т�р�е начинает�� � нул�. Сценарий дл� выв�да �а��л�в�чн�й инф�р�ации и� лю���� MP3�файла, у�а�анн��� в ���андн�й �тр��е, и�еет �ледующий вид: ' Файл примера script0413.vbs set fso = CreateObject("Scripting.FileSystemObject") genre = array("Blues","Classic Rock","Country","Dance","Disco", _ "Funk","Grunge","Hip-Hop", "Jazz","Metal", "New Age","Oldies",_ ... (полный список приведен в загружаемой версии сценария) "Punk Rock","Drum Solo","Acapella", "Euro-House","Dance Hall") for each filename in Wscript.Arguments if not fso.FileExists(filename) then ' файл не существует result = "не существует" else filelen = fso.GetFile(filename).Size if filelen < 128 then ' файл слишком короток, чтобы считаться полноценным WScript.echo filename, "не является файлом MP3" else ' о ткрытие файла и извлечение данных тега set stream = fso.OpenTextFile(filename) stream.Skip(filelen-128) hdr = stream.Read(128) stream.Close ' закрытие потока if left(hdr,3) <> "TAG" then
Чтение и запись XML 187 ' блок не начинается с требуемого маркера WScript.echo filename, _ " не име ет данных о названии и исполнителе" else ' изв леч ени е и вы вод информации о файле WScript.echo filename & ": " WScript.echo " Название: ", trim(mid(hdr, 4,30)) WScript.echo " Исполнитель: ", trim(mid(hdr,34,30)) WScript.echo " Альбом: ", trim(mid(hdr,64,30)) WScript.echo " Год: ", trim(mid(hdr,94, 4)) WScript.echo " Жанр: ", genre(binaryval(hdr,127,1)+1) end if end if end if next function binaryval (byref str, offset, n) ... (эта функция показана в предыдущем примере) Выв�ди�а� инф�р�аци� и�еет �ри�ерн� �ледующий вид: iris mojave.mp3: Название: Hotter Than Mojave In My Heart Исполнитель: Iris DeMent Альбом: Infamous Angel Год: 1993 Жанр: Folk Ра�у�еет��, в�е эт� ра��тает т�ль�� е�ли ���датель файла �арантирует, чт� ин� ф�р�аци� те�а д��авлена или �а�ружена в �равильн�� ф�р�ате. Чтение и запись XML Ра�шир�е�ый ��ы� ра��ет�и — �x���s�b�� M��kup L��gu�g� (XML�, �вл�ет�� ве�ь� �а важны� �ред�тв�� хранени� �л�жн�й инф�р�ации, ���в�л�ющи� �е� ������� труда ра���рать�� в ее ��держи��� �а� чел�ве�у, та� и �ашине. XML �тал ���у� л�рн�й ф�р��й хранени� инф�р�ации и ее ���ена �ежду ����ьютера�и. W��dows и���ль�ует XML в �аче�тве ф�р�ата у�а��в�и �ценариев (эт�т в��р�� ра���атрива� ет�� в �лаве 9 «И���ль��вание �ценариев дл� у�равлени� ����ьютера�и и �ет��и» и в �рил�жении App��d�x G, «C������g You� Ow� S���p��b�� Obj���s», ���в�щенн�� ���данию �в�их ����твенных ��ъе�т�в дл� и���ль��вани� в �ценари�х, ��т�р�е ��жн� �а�ру�ить � адре�а www.helpwin7.com/scripting�, и эт�т ��ы� �ри��ретает важ� н��ть �а� �ред�тв� дл� хранени� ��нфи�ураци�нн�й инф�р�ации. Са�а� ���лед� н�� �латф�р�а �р��ра��ир�вани�, ра�ра��танна� M���oso��, .N�T, �ти�улирует �р��ра��и�т�в вернуть�� � и���ль��ванию INI�файл�в на те��т�в�й ��н�ве в�е�т� и���ль��вани� рее�тра W��dows, и �н��ие �р��ра��и�ты ��наружили, чт� XML �вл�ет�� наилучши� ф�р�ат�� дл� хранени� инф�р�ации, ��т�рую люди ���ут �р�че�ть �е� �ри�енени� �р��ра��ных �ред�тв. И�х�д� и� эт���, чтение и �а�и�ь данных в ф�р�ате XML ��жет �ри��дить�� и в ваших �ценари�х.
188 Глава 4. Доступ к файлам и реестру ▼) Данный раздел слишком сложен для усвоения, поэтому начинающим лучше отложить его из- учение до лучших времен. В процессе первого чтения, как и в случае с разделами книги, по- священными объектам, вы, возможно, посчитаете целесообразным перейти сразу к примерам, которые следуют за каждым справочным разделом. Та�же �ледует �а�етить, чт� в�е ра���атривае�ые �де�ь XML���ъе�ты ���ут, �р��е т���, ��уще�твл�ть чтение и �а�и�ь в ф�р�ате ��ы�а XHTML, ��т�рый �в� л�ет�� вер�ией �и�те�ы ра��ет�и ве���траниц HTML, �ридерживающей�� �тр��их �равил �инта��и�а ��ы�а XML. Читать XHTML ���ут �н��ие �рау�еры, ��эт��у, �ри желании, ��жн� и���ль��вать ��и�ывае�ый �де�ь ��ъе�т XML дл� ра��ты � данны�и XHTML. Некоторые основы XML Файлы XML ��держат �а� те��т, та� и ра��ет�чные «те�и»: <?xml version='1.0 ' encoding='utf-8'?> <!-- XML-репрезентация слайд-шоу --> <slideshow title="Простое слайд-шоу" date="1/1/2002" author="Ваш покорный слуга "> <slide> <title>Оцените забавные виджеты WonderWidgets!</title> </slide> <slide> <title>Обзор</title> <item>Чем <em>WonderWidgets</em> привлекают внимание</item> <item/> <item>Кто <em>приобретает</em> WonderWidgets</item> </slide> </slideshow> В данн�� �ри�ере <slide> и <title> �вл�ют�� те�а�и. Эти те�и ра��раничи� вают и ��и�ывают на�начение или ��ы�л�в�е на��лнение ��держащей�� в файле инф�р�ации и �а�лючают�� в у�л�вые �����и, чт��ы их ��жн� �ыл� �тличить �т ��и�ывае�ых и�и данных. Те�и и���ль�уют�� ���арн�, на�ыва��ь �ри эт�� от­ крывающим и закрывающим те�а�и (на�ри�ер, <slide> и </slide>�, ��т��у чт� их �адача �а�лючает�� в чет��� ��ределении начала и ��нца �ажд��� инф�р�аци�н� н��� �л��а. В вер�ии �а�рывающе�� те�а в�е�да и���ль�ует�� и�� �т�рывающе�� те�а, �редвар�е��е �и�в�л�� �лэша (/�. В�е эт� в�е�те, �т�рывающий, �а�рывающий те�и и т�, чт� нах�дит�� �ежду ни�и, на�ывает�� элементом. «В�е чт� �ежду ни�и» на�ывает�� содержимым эле� �ента, ��т�р�е ��жет ���т��ть и� те��та или и� ����инации те��та и дру�их те��в. В �ри�ере �� �лайд�ш�у ��держи�ы� �ажд��� те�а <title> �вл�ет�� �р��т�й те��т, а ��держи�ы� �ажд��� те�а <slide> �вл�ет�� ���лед�вательн��ть д�черних те��в. П� ��льшей ча�ти лю�ые �у�тые �р��тран�тва и в��враты �арет�и �ежду те�а�и и�н�рируют��, ��эт��у ф�р�ат, �ридавае�ый XML�файла�, �редна�начен т�ль�� дл� т���, чт��ы люд�� �ыл� их ле�че читать. Кр��е ра��ет�и, те�и ���ут не�ти в �е�е д���лнительную инф�р�ацию, на� �ывае�ую атрибутами и ��и�ывающую ��держи��е этих те��в. На�ри�ер,
Чтение и запись XML 189 <slideshow ...> �вл�ет�� те��� � атри�ута�и title, date и author. Е�ли вы �на���ы � �и�те��й ра��ет�и HTML, и���ль�уе��й дл� ве���траниц, в�е эт� �удет и�еть в��лне �ривычный вид. В �тличие �т HTML, �де и���ль�ует�� фи��ир�ванный на��р те��в (та�их �а� <TITLE> и <IMG>�, те�и в XML�файле ���ут �ыть ра�ны�и — �еречень д��у�ти�ых те��в и их атри�ут�в ��у�лавливает�� �хе��й или ��реде� ление� ти�а д��у�ента — do�um��� �yp� d�������o� (DTD�, ��т�р�е варьирует�� �т �рил�жени� � �рил�жению, н� �тру�тура XML в �в�ей ��н�ве ��тает�� �дн�й и т�й же. В �тличие �т HMTL XML тре�ует удел�ть �ри�тальн�е вни�ание и���ль��� ванию �а�рывающих те��в; �ни не ���ут �ыть не����ательны�и. Дл� э��н��ии �р��тран�тва �уще�твует ��ециальный ф�р�ат, и���ль�уе�ый дл� инди�ации эле�ента, не и�еюще�� ��держи����. Дл� �ажд��� �тдельн� в��т��� те�а <xxx> ф�р� �ат <xxx/> �вл�ет�� э�вивалент�� и���ль��вани� эле�ент�в <xxx></xxx> (т� е�ть �лед�вани� �а�рывающе�� те�а не���ред�твенн� �а �т�рывающи�, �е� �а�их�ли�� �и�в�л�в �ежду ни�и�. Следует ��ратить вни�ание на т�, �а� эт� и���ль�ует�� в �ри�ере �лайд�ш�у. Те� <item/> ���а�ывает, чт� �н �вл�ет�� эле�ент��, не и�е� ющи� ни�а���� ��держи����. П�жалуй, в��лне �чевидн�, чт� XML�файлы ��ладают �л�жн�й �тру�тур�й и ���ут и���ль��вать дл� �ред�тавлени� �дн�й и т�й же инф�р�ации не���ль�� ф�р�ат�в. Пр�читать, �р�анали�ир�вать и и���ль��вать в �ценарии та�ие файлы, ра���ла�а� т�ль�� лишь ��ъе�та�и те��т�в��� файла, ра����тренны�и в �реды� дущих ра�делах, �удет �чень трудн�. К �ча�тью, е�ть ��ъе�т, ��т�рый делает в�ю не��х�ди�ую ра��ту �а на�. О�ъе�т MSXML2.DOMDocument (DOM ��начает Dom��� Obj��� Mod�� — ��ъе�тна� ��дель д�� �у�ента� на �а��� деле не �вл�ет�� �тандартны� ��ъе�т�� WSH, н� �н ���тавл�� ет�� �� в�е�и ����ьютера�и, ра��тающи�и ��д у�равление� W��dows XP, V�s��, 7 и W��dows S��v��, и е�� ��жн� ��лучить и� �реды WSH. О�ъе�т MSXML2.DOMDocument ���в�л�ет �а�и�ывать и �читывать (�р�в�дить ра�� ��р� XML�файлы в �аче�тве ��ъе�т�в, а не те��т�вых файл�в. XML�файл ��жн� �р�читать �а� ти��в�й файл, �ред��тавленный ранее в ��ъе�те MSXML2.DOMDocument. О�ъе�т и�еет �в�й�тва и �ет�ды, ���в�л�ющие и�учать и и��ен�ть XML�данные — на�ри�ер, чт��ы �р���анир�вать данные slideshow в ��и��е эле�ент�в item или title. О�ъе�т та�же ���в�л�ет ���давать или и��ен�ть XML�данные, а �ате� ��хран�ть ре�ультаты в те��т�в�� файле XML. (Не���тр� на т� чт� эт� ��жет �э��н��ить �р��ра��и�ту �а��у вре�ени и �ил, е�ли � �уду на�ирать в�е эт� �н�ва и �н�ва, �, наверн�е, ��йду � у�а, ��эт��у в ��тальн�й ча�ти эт��� ра�дела � �уду на�ывать е�� �р��т� ��ъе�т�� DOMDocument.� О� ��ъе�те DOMDocument ��жн� ����щить �начительн� ��льше инф�р�ации, че� � ���у �редл�жить в данн�й �ни�е, е�� ��др��н�е ��и�ание �ан�л� �ы не� ���ль�� �лав. П�лный �еречень �в�й�тв и �ет�д�в ��ъе�та �де�ь не �рив�дит��, ра���атривают�� т�ль�� наи��лее ��ле�ные и� них, �ри�ен�е�ые в ���а�ывае�ых далее �ри�ерах. Не �рив�дит�� та�же и ���уждение ��рав�чн�й инф�р�ации �� ��ъе�те (на�ри�ер, та�их эле�ент�в, �а� и�еющий�� в HTML эле�ент &amp;�, �т�рывающей целые н�вые ��ла�ти, в ��т�рых ��жн� �а�утать��. Д���лнитель�
190 Глава 4. Доступ к файлам и реестру ную инф�р�ацию � �и�те�е DOMDocument ��жн� ��лучить, ���етив ве���айт msdn. microsoft.com и �р�вед� ��и�� �� �лючев�й фра�е «M���oso�� XML P��s��». Зде�ь �удет �ред�тавлен� д��тат�чн� инф�р�ации, ���в�л�ющей читать и �а�и�ывать XML�файлы, ��т�рые ���ут в�третить�� в ра��те �и�те�н��� ад�ини�трат�ра W��dows, и�еюще�� дел� �� �ценари��и у�тан�в�и �р��ра��ных �ред�тв, файла�и на�тр�й�и и т. д . ▼) Компания Microsoft постоянно обновляет программное обеспечение XML. Версия, включавша- яся в Windows 2000, имела порядковый номер 2, а в Windows XP, Vista и 7 включена версия с порядковым номером 3. Вы можете загрузить и установить обновленные версии XML-парсера, только не забудьте прочитать примечания к очередному выпуску, предоставляемые Microsoft, поскольку вам может понадобиться для активации новой версии передать методу CreateObject другое название. Ка� уже ранее у���инал��ь, XML�данные и�еют �� ��ределению иерархиче� ��ую �тру�туру: эле�енты XML�данных ���ут ��держать дру�ие эле�енты, а те, в �в�ю �чередь, та�же ���ут ��держать дру�ие эле�енты. К���ани� M���oso�� на� �ывает �аждый эле�ент XML�д��у�ента узлом, а лю�ые эле�енты внутри эле�ента �на на�ывает дочерними узлами. При наличии ��и��а �дн�ур�вневых эле�ент�в эти эле�енты на�ывают�� сиблингами (�е�трин��и�и у�ла�и�. Стру�тура �ред� �тавленн��� ранее XML��ри�ера ���а�ана на ри�. 4 .1 . Рис. 4 .1 . Структура узлов типового XML-документа
Чтение и запись XML 191 Си�те�а XML���ъе�та и���ль�ует не���ль�� ��ъе�т�в, в�люча� DOMDocument (��рнев�й у�ел �тру�туры данных XML�, IXMLDOMNode (�дин�чный у�ел дере� ва д��у�ента; у�лы ���ут ��держать те��т д��у�ента или ��дчиненные у�лы�, IXMLDOMParseError (инф�р�аци� �� �ши��ах, ��наруженных в �тру�туре XML� д��у�ента� и IXMLDOMNamedNodeMap (�еречень атри�ут�в и их �начений�. Наи��лее важные �в�й�тва и �ет�ды ��ъе�та DOMDocument �еречи�лены в ��рав� �е 4.6 . О�ъе�т DOMDocument ��и�ывает д��у�ент в цел��, эт� �а�ает�� и т��� д��у� �ента, ��т�рый на�еренн� ���дает�� � ����щью �ет�да CreateObject. СПРАВКА 4.6. СВОЙСТВА И МЕТОДЫ ОБЪЕКТА DOMDOCUMENT (НЕПОЛНЫЙ ПЕРЕЧЕНЬ) СВОЙСТВА async О�редел�ет, д�лжен ли ве�ь XML�д��у�ент �ыть �а�ружен � ����щью �ет�� да Load не�едленн� (async = False� или же XML��и�те�а ��жет вернуть�� и� вы� ��лнени� �ет�да Load и ра���рать д��у�ент ���же (async = True�. Следует �а�е� тить, чт� в �ценари�х эт� �в�й�тв� нужн� у�тан�вить в False. (Чтение��а�и�ь.� childNodes В��вращает ��лле�цию ��ъе�т�в IXMLDOMNode, �ред�тавл�ющих ����й ��� держи��е д��у�ента. Эту ��лле�цию ��жн� �р���анир�вать дл� ��и��а ��� держи���� или в����ль��вать�� �ет�д�� GetElements. (Т�ль�� чтение.� documentElement В��вращает ��рнев�й (наивы�ший� эле�ент д��у�ента; �н ��жет �тличать�� �т firstChild, е�ли в начале файла �ри�ут�твуют ин�тру�ции �� ��ра��т�е, ����ентарии или ти� д��у�ента. parseError В��вращает ��ъе�т IXMLDOMParseError, ��и�ывающий ���леднюю в�третив� шую�� �ши��у, в��ни�шую �ри чтении д��у�ента. У эт��� ��ъе�та е�ть четыре интере�ных �в�й�тва: errorCode, ��лучающее �ри в��ни�н�вении �ши��и ненулев�е �начение; reason, ��и�ывающее �р��ле�у; line, �ред��тавл�ющее н��ер �тр��и в файле, в ��т�р�� найдена �ши��а; и srcText, в��вращающее те��т т�й �тр��и, в ��т�р�й ��наружена �ши��а. Эт�й инф�р�ацией ��жн� в����ль��вать�� дл� ��ределени� т��� �е�та, в ��т�р�� XML��и�те�а ��нару� жила �р��ле�у, на�ри�ер �р��ущенный �а�рывающий те�, и дл� ���вещени� � ее �уще�тв�вании ��ль��вател� �ценари�. (Т�ль�� чтение.� xml В��вращает �ред�тавление в�е�� д��у�ента в виде XML�те��та в ��дир�в�е Юни��д. (Т�ль�� чтение.� МЕТОДЫ createCDataSection(data) Мет�ды Create... ���дают н�вые ��ъе�ты IXMLDOMNode�у�л�в. Дл� д��ав� лени� их � XML�д��у�енту нужн� на��лнить н�вые у�лы инф�р�ацией, а �а�
192 Глава 4. Доступ к файлам и реестру те� в����ль��вать�� �ет�да�и Insert... и Append... дл� д��авлени� н�вых у�� л�в � �уще�твующе�у д��у�енту. Эт�т в��р�� �удет ра����трен в данн�� ра�деле чуть ���же. Мет�д createCDataSection ���дает у�ел CDATA, ��держа� щий �р�и�в�льные неинтер�ретируе�ые данные. Ар�у�ент data �вл�ет�� �тр���й. createComment(text) С��дает у�ел Comment, ��держащий те��т�вую �тр��у. createDocumentType(name, publicid, systemid, internalsubset) С��дает у�ел Document Type, ��т�рый ��редел�ет и���ль�уе�ый DTD. Е�ли эт�т у�ел и���ль�ует��, �н д�лжен �ыть д��авлен в �аче�тве �ерв��� д�черне�� у�ла �� �тн�шению � у�лу document. createElement(name) С��дает у�ел Document Element � �аданны� и�ене� name. Эле�енты ���т� вет�твуют те�а� в XML�файле (на�ри�ер, <slideshow>�. Эле�енты ��ычн� на��лн�ют�� ��и��а�и дру�их эле�ент�в и те��т�вы�и у�ла�и. createProcessingInstruction(target, data) С��дает ин�тру�цию �� ��ра��т�е (те� <? ?>�. Б�льшин�тв� XML�файл�в на� чинают�� � ин�тру�ции �� ��ра��т�е � �адание� target, и�еющи� �начение "xml" и данны�и data, и�еющи�и �начение, ��х�жее на �ледующее: "version='1.0' encoding='utf-8'". createTextNode(text) С��дает у�ел Text � у�а�анны� те��т�� text. Эт�т у�ел �вл�ет�� те��т�� д��у�ента. getElementsByTagName(name) В��вращает ��лле�цию у�л�в эле�ент�в, и�еющих у�а�анн�е и�� те�а name. Зате� эту ��лле�цию ��жн� �р���анир�вать, и�учить ее ��держи��е и ��дчиненные у�лы этих эле�ент�в. С��твет�твующие эле�енты �еречи�л�� ют�� в ��лле�ции в �ледующе� �ред��ределенн�� ��р�д�е: �начала у�а�ы� вает�� р�дитель��ий у�ел, �ате� �� ��р�д�у �ледуют в�е е�� д�черние у�лы. Б�лее �л�жные ��и���вые ��ерации ���ут вы��лн�ть�� � ����щью �ет�да selectNodes. load(XMLSourceFile) За�ружает у�а�анный XML�файл. Ар�у�ент XMLSourceFile ��жет �ыть и�е� не� файла или URL�адре���. Лю��е �режнее ��держи��е ��ъе�та ��ра�ывает�� и �а�ен�ет�� ��держи�ы� файла. В��вращает False, е�ли �а�ру��а не удала�ь; в �р�тивн�� �лучае в��вращает True. loadXML(XMLSourceText) П�х�ж на Load, н� �а�ружает не���ред�твенн� и�х�дный те��т XML. Ар� �у�ент XMLSourceText �вл�ет�� ��лн�ценны� XML�д��у�ент�� или е�� �ра� вильн� ���тавленны� фра��ент��. В��вращает False, е�ли �а�ру��а не удала�ь; в �р�тивн�� �лучае в��вращает True.
Чтение и запись XML 193 Save destination С�хран�ет те�ущий XML�д��у�ент в у�а�анн�� �е�те destination. Дл� �це� нариев эт� �е�т� д�лжн� �ыть и�ене� файла, в�лючающи� �уть. selectNodes(expression) В��вращает ��лле�цию и� в�ех у�л�в д��у�ента, ���твет�твующих у�а�анн��у ��и���в��у выражению expression. Синта��и� ��и���в��� выражени� на�ывает� �� XPath (XSL P��h L��gu�g��. Следует �а�етить, чт� �ет�д SelectNodes �вл�ет�� наи��лее ��держательн�й ча�тью ��ъе�та XML. Е�� ��жн� и���ль��вать, начи� на� не���ред�твенн� � т�й инф�р�ации, ��т�рую нужн� и�влечь и� XML�файла. На�ри�ер, "/book//name" в��вращает в�е эле�енты name, в�треченные в лю��� �е�те внутри эле�ент�в book. Д���лнительные �ведени� ��жн� найти, �р�вед� на ве���айте msdn.microsoft.com ��и�� �� �лючев�й фра�е «XSLT R��������». selectSingleNode(expression) Мет�д ��х�ж на selectNodes, н� в��вращает т�ль�� �ервый у�ел и� в�ех у�� л�в, ��наруженных �� ��и���в��у выражению expression. Уд��ен в т�� �лучае, е�ли �жидает�� �ри�ут�твие т�ль�� �дн��� и������� у�ла, ���в�л�� не тратить вре�� на ��анир�вание в�ей ��лле�ции. Дл� чтени� XML�файла �ледует ���дать э��е��л�р ��ъе�та MSXML2.DOMDocument и в����ль��вать�� �ет�д�� Load дл� �читывани� в эт�т э��е��л�р файла или данных � URL�адре�а; �ате� дл� и�влечени� инф�р�ации и� файла ��жн� в��� ��ль��вать�� дру�и�и �ет�да�и и �в�й�тва�и ��ъе�та DOMDocument. Эт�т в��р�� �удет ра����трен чуть ���же. Фра��ент �ценари�, �а�ружающий �уще�твующий XML�д��у�ент, и�еет �ле� дующий вид: set xdoc = CreateObject("MSXML2.DOMDocument") xdoc.load("c:\mydata\test.xml") П��ле ��хранени� XML�д��у�ента в ��ъе�те DOMDocument дл� идентифи�а� ции ��н�ретных �����нент�в файла, и� ��т�рых ��жет ��тре��вать�� и�влечь инф�р�ацию, ��жн� �ри�енить �ет�ды selectNode или же �р���анир�вать в�ю ��лле�цию ��ъе�т�в. Далее �удет �риведен ��н�ретный �ри�ер. Чт��ы ���дать н�вый XML�файл, �ледует ���дать э��е��л�р ��ъе�та MSXML2. DOMDocument, ���дать н�вые данные внутри ��ъе�та, и���ль�у� �ет�ды CreateNode, и д��авить их � �тру�туре д��у�ента, и���ль�у� �ет�ды Insert... ��ъе�та IXMLNode. И на��нец, дл� ��хранени� д��у�ента в файле нужн� в����ль��вать�� �ет�д�� Save. В ��рав�е 4.7 �еречи�лен р�д важных �в�й�тв и �ет�д�в ��ъе�та IXMLDOMNode, ��и�ывающих �тру�туру и ��держи��е д��у�ента. СПРАВКА 4.7. СВОЙСТВА И МЕТОДЫ MSXML2- ОБЪЕКТА IXMLDOMNODE (НЕПОЛНЫЙ ПЕРЕЧЕНЬ) СВОЙСТВА attributes В��вращает IXMLDOmNamedNodeMap, ��т�рый �лужит ну�ерат�р�� атри�ут�в эле�ента. Эт� не ��лле�ци�, � ��т�р�й в V�S���p� ��жн� ��на���ить�� � �����
194 Глава 4. Доступ к файлам и реестру щью ��н�тру�ции for each. Св�й�тв� ра���атривает�� �ра�у же ���ле данн��� ��рав�чн��� ��и��а. Д��ту�н� т�ль�� дл� чтени�; дл� и��енени� или д��авле� ни� атри�ута �ледует в����ль��вать�� �ет�д�� setAttribute. childNodes В��вращает ��лле�цию д�черних у�л�в, �вл�ющих�� ��держи�ы� те�уще� �� эле�ента. С�держи��е эт�й ��лле�ции ��жн� �р���анир�вать или же дл� ��ращени� � ��и��у д�черних эле�ент�в ��жн� в����ль��вать�� �в�й�тв�� FirstChild, а �ате� �в�й�тв�� NextSibling. (Т�ль�� чтение.� firstChild В��вращает �ервый д�черний ��ъе�т. (Т�ль�� чтение.� lastChild П��ледний и� эле�ент�в д�черних у�л�в. (Т�ль�� чтение.� nextSibling Следующий у�ел в ��и��е эле�ент�в. Эт� �в�й�тв� д��ту�н� т�ль�� дл� чтени�. К ��жалению, и���а дефе�та ��ъе�та, �ри ��анир�вании ��и��а �ет�д�� ��ращени� � ��ъе�та� nextSibling, �ценарий выйдет �а �ределы эт��� ��и��а. Следует �реду���треть �ре�ращение ��анир�вани�, е�ли те�ущий ��ъе�т �вл�ет�� дл� е�� р�дитель����� ��ъе�та ���ледни� д�черни� — lastChild. В V�S���p� эт� ��редел�ет�� ���твет�твие� у�ла �начению выражени� node. parentNode.lastChild. nodeName Дл� у�л�в Element эт� �в�й�тв� в��вращает и�� те�а эле�ента (на�ри�ер, "Slideshow"�. Дл� у�л�в Document, Comment и Text в��вращает�� фи��ир�ванна� �тр��а "#document", "#comment" или "#text". (Т�ль�� чтение.� nodeType Нетрудн� �ред��л�жить, чт� эт� ти� у�ла. Значени� ти��в у�л�в �еречи�� лены в та�л. 4 .3 . (Т�ль�� чтение.� nodeTypeString Ти� у�ла в виде инф�р�аци�нн�й �тр��и (на�ри�ер, "element" или "text"�. (Т�ль�� чтение.� nodeValue С�держи��е у�ла Text или Comment. И�енн� �де�ь нах�дит�� те��т д��у�ен� та. (Чтение��а�и�ь.� ownerDocument Выдает ��ъе�т DOMDocument, ��т�рый �вл�ет�� «р�дитель��и�» д��у�ент�� эт��� у�ла. (Т�ль�� чтение.� previousSibling Предыдущий �и�лин��эле�ент ��и��а. Е�ли те�ущи� �вл�ет�� �ервый д�черний эле�ент р�дитель����� у�ла — firstChild, �редше�твующе�� е�у �и�лин��эле�ента не �уще�твует. (Т�ль�� чтение.�
Чтение и запись XML 195 xml В��вращает фра��ент те��та XML, ��т�рый ��и�ывает данный у�ел и е�� ��держи��е, в�люча� д�черние у�лы. (Т�ль�� чтение.� МЕТОДЫ appendChild(дочерний_узел) Д��авл�ет н�вый д�черний у�ел � ��и��у д�черних у�л�в. В��вращает ��ъ� е�т д�черне�� у�ла. hasChildNodes В��вращает True, е�ли у у�ла е�ть д�черние у�лы. (П�че�у эт� �читает�� �ет�д��, а не �в�й�тв��, нах�дит�� �а �редела�и ��е�� ��ни�ани�.� insertBefore(новый_дочерний_узел, дочерний_узел) В�тавл�ет новый_дочерний_узел �еред те� �е�т�� д��у�ента, в ��т�р�� на� х�дит�� дочерний_узел. removeChild(дочерний_узел) Удал�ет у�а�анный дочерний_узел и� ��и��а д�черних у�л�в. В��вращает ��ыл�у на удаленный д�черний у�ел (в виде �начени� ар�у�ента дочерний_узел.� replaceChild(новый_узел, старый_узел) Тре�ует два ар�у�ента IXMLDOMNode. За�ен�ет старый_узел в т�� �а��� �е�те, �де �н нах�дил�� в XML�д��у�енте, новым_узлом. Эти� ��жн� в��� ��ль��вать�� дл� �а�ены ча�ти д��у�ента. Мет�ду ReplaceChild в�е равн�, дл� �а���� ��ъе�та IXMLDOMNode �н вы�ывает��, �ет�д �удет ра��тать � лю�ы� у�л�� (т� е�ть любой_узел.replaceChild(...)�.Мет�д нах�дит старый_узел в д��у�енте и �а�ен�ет е��. selectNodes С�. selectNodes в ��рав�е 4.6. selectSingleNode С�. selectSingleNode в ��рав�е 4.6 setAttribute(имя, значение) При�ваивание атри�уту имя данн��� у�ла �тр���в��� значения. ▼) Для сохранения фрагмента XML-данных можно воспользоваться методами xml или save объекта DOMObject. В та�л. 4.3 �еречи�лены ра�личные ти�ы у�л�в, ��т�рые ���ут в�третить�� �ри ��анир�вании �тру�туры XML�д��у�ента. (Дру�ие ти�ы у�л�в ��и�аны в XML DOM�д��у�ентации ����ании M���oso��, н� �ри ��анир�вании �ни ва� вр�д ли в�трет�т��.� Св�й�тв� attributes ��ъе�та IXMLDOMNode в��вращает ��ъе�т, �ред�тавл�ющий в�е атри�уты эле�ента. Св�й�тв� attributes эле�ента ��и�ывает инф�р�ацию, хран�щую�� в �ере�енных эле�ента. На�ри�ер, эле�ент "font" ��жет и�еть атри�
196 Глава 4. Доступ к файлам и реестру �уты, ��и�ывающие �арнитуру шрифта (�yp������� и е�� ра��ер (�o�� s����. В XML эт� ��жет вы�л�деть �а� <font face="Times" size="3">. Таблица 4.3. Наиболее важные значения свойства nodeType объекта IXMLDOMNode Значение Тип 1 Эле�ент (Element�. Пред�тавл�ет <тег> 3 Те��т (Text�. Те��т д��у�ента ��держит�� в �в�й�тве NodeValue 4 CDATA. Пр�и�в�льные данные 5,6 С�ыл�а на �ри�итив и �а� �ри�итив (Entity� (�де�ь не ра���атривают��� 7 Ин�тру�ци� �� ��ра��т�е. С�ециальна� ���ет�а, не �вл�юща��� те��т�� д��у�ента � К���ентарий (Comment�. Те��т ��и�ани�, ��т�рый та�же не ра���атривает��, �а� ча�ть те��та д��у�ента 10 Ти� д��у�ента (Document type�. С��твет�твует эле�енту <!DOCTYPE >, ��реде� л�юще�у DTD д��у�ента С� �в�й�тв�� attributes �в��аны две �р��ле�ы: y y Эт� �в�й�тв� дей�твительн� т�ль�� дл� у�л�в Element, Entity и Notation. Дл� у�л�в дру�их ти��в, �� �райней �ере, в V�S���p� �в�й�тв� attributes д�лжн� вернуть �начение null. В�е�т� эт��� �н� в��вращает нечт� ��х�жее на �равиль� ный ��ъе�т, н� в��вращае��е �начение ��ъе�т�� не �вл�ет��. y y К ��жалению, attributes в��вращает не ��ъе�т���лле�цию, ��т�рую в V�S���p� ��жн� �р���анир�вать � ����щью ��ерат�ра for each. К�н�ретный атри� �ут ��жн� и�влечь � ����щью �ет�да getNameItem или же ��жн� �р���ани� р�вать ��и��� � ����щью ци�ла for, �а� ���а�ан� в �ледующе� ��рав�чн�� ��и��е 4.� . Н� � ��л�жительны� �т�р�на� ��жн� �тне�ти т�т фа�т, чт� ��и��� атри�ут�в и�еет�� у �ажд��� у�ла Element, Entity и Notation, даже е�ли �ри эт�� �н и�еет нулевую длину. О�ъе�т ��и��а атри�ут�в и�еет �дн� �в�й�тв� и два �ет�да, ��т�� рые �еречи�лены в ��рав�е 4.� . СПРАВКА 4.8. СВОЙСТВО И МЕТОДЫ КОЛЛЕКЦИИ IXMLDOMNAMEDNODEMAP СВОЙСТВО length К�личе�тв� атри�ут�в в ��лле�ции. (Т�ль�� чтение.� МЕТОДЫ getNamedItem(имя) Ищет атри�ут � у�а�анны� именем и в��вращает е�� в виде еще �дн��� ва� рианта ��ъе�та IXMLDOMNod�. (Св�й�тва эт��� ��ъе�та ра���атривают�� в �ледующей та�лице.�
Чтение и запись XML 197 item(индекс) И�вле�ает ��ъе�ты атри�ут�в �� н��еру инде��а, ��т�рый и�еет диа�а��н �т 0 д� длины ��лле�ции �ину� 1. При ра��те � XML�файла�и дл� и�влечени� у�а�анн��� атри�ута �� и�ени ��ычн� и���ль�ует�� �ет�д getNamedItem. Н� е�ли нужн� �р���анир�вать ве�ь ��и���, �ледует в����ль��вать�� ци�л��: set alist = node.attributes for i = 0 to alist.length-1 set attr = list.item(i) wscript.echo attr.nodeName, "=", attr.nodeValue next Атри�уты хран�т�� в ��ъе�тах IXMLDOCNode, чьи �а�ые интере�ные �в�й�тва �риведены в та�л. 4.4 . Таблица 4.4. Полезные свойства объекта IXMLDOCNode, имеющего атрибуты Свойство Описание NodeName И�� атри�ута. Т�ль�� чтение nodeValue Значение атри�ута. Чтение��а�и�ь specified Булев� �начение. Е�ли равн� True, �лед�вательн�, �начение атри�ута ��н� �ретн� у�а�ан� в XML�файле. Е�ли равн� False, т� �ерет�� �начение, и�� ��ль�уе��е �� у��лчанию, ��т�р�е ��редел�ет�� �хе��й д��у�ента. Т�ль�� чтение К �ри�еру, �ледующий фра��ент �ценари� выв�дит �начение атри�ута width в�ех те��в <img>, и�еющих�� в XML�д��у�енте: for each node in xmldoc.getElementsByTagName("img") wscript.echo node.attributes.getNamedItem("width") .nodeValue next Чтение XML-файла Ра���равши�ь �� ��рав�чны� �атериал��, ��жн� �ри�ту�ить � �ра�тиче����у �ри�енению ра����тренных ��ъе�т�в. Следующий �ценарий �читывает XML�файл и выв�дит е�� �тру�туру. Сначала �ценарий �а�ружает д��у�ент, а �ате� дл� выв�да �ерв��� эле�ента и���ль�ует ��д�р��ра��у xmldump; чт��ы выве�ти лю�ые ��д� чиненные эле�енты д� лю��й не��х�ди��й �лу�ины, в�л�ть д� выв�да те��т�вых у�л�в �а���� ни�ше�� ур�вн�, эта ��д�р��ра��а вы�ывает �а�у �е�� ре�ур�ивн�: ' Файл примера script0414.vbs const NODE_ELEMENT = 1 set xdoc = CreateObject("MSXML2.DOMDocument") xdoc.load("test.xml") ' з агрузка файла в объект xmldump xdoc, 0 ' распечатка всей структуры документа ' ---------------------------------------------------------------------
198 Глава 4. Доступ к файлам и реестру ' x mldump – вывод содержимого XML-объекта 'x'; lvl – текущая глубина sub xmldump (x, lvl) dim gap, child, i gap = space(lvl*3) ' создание отступа для показа глубины ' выв од типа и имени узла wscript.echo gap & " --- --- --- --- --- --- --- " wscript.echo gap & x.nodeTypeString, "'" & x.nodename & "'" ' в ывод любых атрибутов if x.nodetype = NODE _ELEMENT then set alist = x .attributes for i = 0 to alist.length-1 set attr = alist.item(i) wscript.echo gap & "Атрибут", attr.nodeName, "=", attr.nodeValue next end if ' е сли узел имеет текстовое содержимое, вывод текста if not isnull(x.nodeValue) then _ wscript.echo gap & "nodeValue:", "' " & x.nodeValue & "'" ' те перь вывод любых дочерних узлов на один отступ глубже if x.hasChildNodes then for each child in x.childNodes xmldump child, lvl+1 next end if end sub Начал� инф�р�ации, выв�ди��й эти� �ценарие� �ри и���ль��вании �ред�тав� ленн��� ранее уче�н��� XML�файла, вы�л�дит �ледующи� ��ра���: --- --- --- --- --- --- --- document '#document' --- --- --- --- --- --- --- processinginstruction 'xml' nodeValue: 'version="1.0 " encoding="utf-8" ' --- --- --- --- --- --- --- comment '#comment' nodeValue: ' XML-репрезентация слайд-шоу ' --- --- --- --- --- --- --- element 'slideshow' --------------------- element 'slide' --------------------- element 'title' --- --- --- --- --- --- --- text '#text' nodeValue: ' Оцените забавные виджеты WonderWidgets! ' --------------------- element 'slide' --------------------- element 'title' --- --- --- --- --- --- --- text '#text' nodeValue: 'Обзор' ---------------------
Чтение и запись XML 199 element 'item' --- --- --- --- --- --- --- text '#text' nodeValue: 'Чем ' --- --- --- --- --- --- --- element 'em' --------------------- text '#text' nodeValue: 'WonderWidgets' --- --- --- --- --- --- --- text '#text' nodeValue: ' привлекают внимание' ▼) Есть два способа просканировать элементы, содержащиеся внутри XML-элемента. Для сканиро- вания списка дочерних узлов можно, как в предыдущем примере, воспользоваться циклом for each или же можно воспользоваться свойством узла �rstChild для получения первого подчинен- ного элемента, а затем использовать nextSibling для прохода по списку. Список заканчивается, когда будет получена специальная ссылка на объект "Nothing". Если нужно пройти список дочерних узлов без использования цикла for each, воспользуйтесь этим методом: 'проход списка дочерних узлов объекта x по порядку следования сиблингов set child = x.firstChild do while not (child is Nothing) (обработка child) set child = child.nextSibling loop Создание XML- или HTML-файла XML���ъе�т ��жет выдавать не т�ль�� XML, н� и HTML�файлы. (В техниче���� ��ы�ле �н ��жет выдавать «XHTML», а не ��ычный HTML���д, �����ль�у эле� �енты, не и�еющие ��держи����, �а�и�ывают�� �� �на��� / в ��нце те�а, на�ри�ер <HR/>. Эт�т �инта��и� �рини�ает ��льшин�тв� �рау�ер�в.� С��давать XML� или HTML���д � ����щью �ценари� на�н��� труднее, че� е�� читать. Сл�жн��ть �а� �лючает�� в т��, чт� ��ъе�ты у�л�в �рих�дит�� ���давать индивидуальн�, а �ате� в�тавл�ть их в нужн�е �е�т� д��у�ента. И � �ред��тавлю ва� в����жн��ть у�е� дить�� в т��, чт� эт� ве�ь�а ут��ительн�е �ан�тие. Дл� начала ���дади� �р��т�й HTML�файл, ��т�рый ��держит нену�ер�ванный ��и��� (� �ар�ера�и� и� трех эле�ент�в. Эт�т �ценарий и�еет �ледующий вид: ' Файл примера script0415.vbs set xdoc = CreateObject("MSXML2.DOMDocument") ' создание внешнего HTML-элемента set html = xdoc.appendChild(xdoc.CreateElement("HTML")) ' добавление ненумерованного списка set list = html.appendChild(xdoc.createElement("UL")) ' добавление трех элементов списка (LI)
200 Глава 4. Доступ к файлам и реестру set item = list.appendChild(xdoc.createElement("LI")) item.appendChild xdoc.createTextNode("Это элемент 1") set item = list.appendChild(xdoc.createElement("LI")) item.appendChild xdoc.createTextNode("Это элемент 2") set item = list.appendChild(xdoc.createElement("LI")) item.appendChild xdoc.createTextNode("Это элемент 3") ' сохранение созданной структуры в виде HTML-файла xdoc.save "test.html" П�лучивший�� на вых�де HTML�файл �удет и�еть �ледующий вид: <HTML> <UL> <LI>Это элемент 1</LI> <LI>Это элемент 2</LI> <LI>Это элемент 3</LI> </UL> </HTML> (П����ль�у в дей�твительн��ти эт�т файл выв�дит�� в виде �дн�й длинн�й �тр��и, ��т�ра� в��лне ��дх�дит дл� ве���рау�ера, н� и�еет �лиш��� не�ри�л�д� ный вид дл� �ни�и, � ра��ил е�� на не���ль�� �тр��.� Сл�жн��ть �ценари� ��у�лавливает�� те�, чт� �аждый эле�ент в файле д�лжен �ыть ���дан, а �ате� ���ещен на �в�е �е�т�. Д��авление те��та в эле�ент, �а� эт� делает�� в уче�н�� �ценарии � ����щью <LI>�эле�ент�в, — еще �дин ша�. Е�ли нужн� в����ль��вать�� ф�р�атирующи�и те�а�и, та�и�и �а� <I> дл� �ур�ива, �ридет�� в��ть еще не���ль�� �арьер�в. На�ри�ер, дл� д��авлени� эле� �ента � наше�у HTML���и��у � ��держи�ы� «Эт� выделенный �ур�ив�� те��т», ��над��ит�� �ледующий ��д HTML: <LI>Это <I>выделенный курсивом</I> текст</LI> Фа�тиче��и эт� �тр��а, ���т��ща� и� трех �и�лин��в: те��т�в��� эле�ента, <I>�эле�ента � те��т�вы� ��держи�ы� и третье��, те��т�в��� эле�ента. Дл� д�� �авлени� эт��� эле�ента ��и��а нужн� в����ль��вать�� �ледующи� ��д��: set ital = xdoc.createElement("I") ital.appendChild xdoc.createTextNode("выделенный курсивом") set item = list.appendChild(xdoc.createElement("LI")) item.appendChild xdoc.createTextNode("Это ") item.appendChild ital item.appendChild xdoc.createTextNode(" текст") Ка� видите, ���дание HTML или XML в �ценарии — �ан�тие не и� ле��их, ��� т�р�е вр�д ли ��равдан� �ри ���дании �р��тых файл�в. А в�т дл� ���дани� ��лее �л�жных файл�в или дл� ���дани� файл�в � не ��ределенн�й �аранее ��нечн�й �тру�тур�й, ��т�рую ��жн� �удет д���ределить в �р�це��е ���дани�, �н� в��лне ��жет ��д�йти. Ра����три� �ри�ер. В �ледующе� файле �ценари� XML�файл «�лайд�ш�у» ���дает�� �уте� �читывани� �тр�� �� �тандартн��� вв�да. Е�ли вв�ди�а� �тр��а начинает�� �� �ве�д�ч�и (*�, �на ра���атривает�� в �аче�тве �а��л�в�а н�в���
Чтение и запись XML 201 �лайда. Лю�ые дру�ие �тр��и ра���атривают�� �а� «эле�енты», у�а�ывающие на те�ущий �лайд. Дл� эт��� и���ль�ует�� �ледующий ��д: ' Файл примера script0416.vbs set xdoc = CreateObject("MSXML2.DOMDocument") ' добавление стандартного маркера версии XML xdoc.appendChild xdoc.CreateProcessingInstruction("xml", "version=""1 .0" "") ' создание внешнего элемента slideshow set slideshow = xdoc.CreateElement("slideshow") xdoc.appendChild slideshow curslide = null ' текущего слайда пока еще нет ' чте ние строк из стандартного ввода do while not WScript.Stdin.AtEndOfStream str = WScript.Stdin.ReadLine if left(str,1) = "*" then ' это но вый слайд. Создание текстового узла set text = xdoc.CreateTextNode(mid(str,2)) ' добавление текста к элементу заголовка set title = xdoc.CreateElement("title") title.appendChild(text) ' добавление заголовка к новому элементу слайда set curslide = xdoc.CreateElement("slide") curslide.appendChild(title) ' добавление слайда к списку слайд-шоу slideshow.appendChild(curslide) elseif isnull(curslide) then ' добавить элемент перед первым слайдом невозможно wscript.echo "Файл должен начинаться с записи слайда с * символом!" wscript.quit 1 else ' нов ая зап ись : с оздание текстового узла set text = xdoc.CreateTextNode(str) ' добавление текста к новому элементу item set item = xdoc.CreateElement("item") item.appendChild(text) ' добавление item к текущему списку слайдов curslide.appendChild(item) end if loop ' сохранение в виде текста XML xdoc.save "myshow.xml" Е�ли вве�ти �ледующие данные: *первый слайд важный пункт еще один пункт *второй слайд заключительный пункт �ценарий ���да�т �ледующий XML�файл (�де�ь ���ть дл� уд���тва чтени� � ра�� �ил в�е �� �тр��а�, ��т��у чт� �ет�д Save �а�и�ывает в�е в виде �дн�й длинн�й �тр��и�: <?xml version="1.0 "?> <slideshow> <slide>
202 Глава 4. Доступ к файлам и реестру <title>первый слайд</title> <item>важный пункт</item> <item>еще один пункт</item> </slide> <slide> <title>второй слайд</title> <item>заключительный пункт</item> </slide> </slideshow> При в�ей �в�ей �л�жн��ти и труд�е����ти и���ль��вание XML DOM���ъе�та дл� ���дани� XML и�еет �реи�уще�тв�: �р��ра��а �арантирует �а�и�ь �равильн� �тф�р�атир�ванн��� XML�файла. Работа с программами и ярлыками Ин��да тре�ует��, чт��ы �ценарий �а�у�тил внешнюю �р��ра��у, на�ри�ер Бл��н�т, ���анду ��ртир�в�и или �а�ую�ни�удь дру�ую ��ле�ную �р��ра��у. Эт� ��жет �ри��дить�� �ри на�и�ании �ценари� дл� авт��атиче����� ���ра и ��� ра��т�и инф�р�ации. На�ри�ер, е�ли ваш �ценарий �енерирует ��льш�й ��ъе� те��та, �ыл� �ы не�л�х� выве�ти ре�ультаты в ��не Бл��н�та, чт��ы ��ль��вателю �ыл� �р�ще их �р��ручивать и и�учать. М�жет та�же в��ни�нуть ��тре�н��ть в �ценарии, ���дающи� �рлы�и на Ра��че� �т�ле и в �еню Пу��, в �р�це��е у�та� н�в�и �а��й�ни�удь �р��ра��ы, вх�да в �и�те�у или дл� ���луживани� �ети. В�е эти �адачи ���ут вы��лн�ть�� � и���ль��вание� ��ъе�та WScript.Shell. Сл�в� shell (���л�ч�а� выражает ��щее ��н�тие дл� ���андн��� интерфей�а, ��т�рый �ри�ен�ет�� ��ль��вател��и ����ьютер�в дл� �а�у��а �р��ра��. В M���oso�� W��dows ���л�ч��й �вл�ет�� Ра��чий �т�л, �т��ражение� ��т�р��� у�равл�ет W��dows �xp�o���. Объект WScript.Shell О�ъе�т WScript.Shell нар�ду � WScript.FileSystemObject �вл�ет�� �дни� и� тех ��ле�ных ��ъе�т�в, ��т�рые �ред��тавл�ют�� WSH. WScript.Shell �ред��тавл�ет ������ в�аи��дей�тви� � и�еющей�� в W��dows �ред�й вы��лнени� �р��ра�� и � W��dows �xp�o���. Св�й�тва и �ет�ды эт��� ��ъе�та ���в�л�ют в�аи��дей� �тв�вать �� ��ециальны�и �а��а�и, та�и�и �а� Рабочий стол (D�sk�op� и Мои до- кументы (My Do�um���s�; �а�у��ать �р��ра��ы, ра��тать � �рлы�а�и и �р�вер�ть �начени� �и�те�ных �ере�енных, та�их �а� PATH. О�ъе�т WScript.Shell та�же ��� �в�л�ет ра��тать � рее�тр�� W��dows, ��т�рый ра���атривает�� в �дн�� и� �ледую� щих ра�дел�в. Св�й�тва и �ет�ды ��ъе�та WScript.Shell �еречи�лены в ��рав�е 4.9 . СПРАВКА 4.9. СВОЙСТВА И МЕТОДЫ ОБЪЕКТА WSCRIPT.SHELL СВОЙСТВА CurrentDirectory В��вращает и�� «те�уще�� �атал��а» �р��ра��ы WSH. Те�ущи� �вл�ет�� �атал��, в ��т�р�� ведет�� ��и�� в �лучае ���ыт�и ��ращени� � файлу �е� у�а�а�
Работа с программами и ярлыками 203 ни� ди��а и �ути. Эт� �в�й�тв� д��ту�н� дл� чтени� и �а�и�и; те�ущий �атал�� �ценари� ��жн� и��енить, ��хранив в эт�� �в�й�тве н�в�е �тр���в�е �начение. Environment[(место)] Св�й�тв� Environment в��вращает ��лле�цию ��ъе�т�в WshEnvironment, ��т�� ра� �ред�тавл�ет ����й на��р �ере�енных �реды ��ружени�. В �ави�и���ти �т �начени� ар�у�ента место Environment в��вращает �дин и� четырех �тдельных на��р�в ��ъе�т�в. Место ��жет �рини�ать �дн� и� �ледующих �начений. Место Описание "system" О�н�вн�й на��р �ред��ределенных на�тр�е� �реды, �ред��тавл�е�ый �ажд��у ��ль��вателю "us er" О�ределени� �ере�енных �реды, �тн���щие�� � ��н�ретн��у ��ль� ��вателю, ��т�рые ���ут д���лн�ть или �а�ен�ть ��ределени�, �т� н���щие�� �� в�ей �и�те�е "process" Те�ущий на��р �ере�енных �реды и� данн�й �е��ии вх�да в �и�те�у в т�� виде, в ��т�р�� �ни �ыли �ред��тавлены �р��ра��е �ценари� �ри ее �а�у��е "volatile" С�и��� �ере�енных, ��т�рые вычи�л�ют�� и� дина�иче��их данных в �р�це��е вх�да в �и�те�у Н� не в�е та� �р��т�! Е�ли у�а�ать "system" или "user", ��лле�ци� ��ъе�т�в ���в�лит ва� �р���атривать и и��ен�ть ��и��� �ере�енных �реды, на�тр�й�а ��т�р��� �р�и��йдет �ри �ледующе� вх�де в �и�те�у, �а�у��е н�в��� �рил�� жени� или �т�рытии нового ��на ���андн�й �тр��и. Та�и� ��ра���, ��и��и "system" и "user" и���ль�уют�� � на�ерение� �ерена�тр�ить W��dows. П�д��� на� �итуаци� ��жет �л�жить�� �ри на�и�ании �ценари� дл� д��авлени� н�в�й �а��и � �начению �ере�енн�й PATH. Е�ли у�а�ать "process", ��лле�ци� ��ъе�т�в �удет �ред�тавл�ть те�ущий ��и��� �ере�енных �реды, уна�лед�ванных WSH. Эти �начени� ��жн� и���ль� ��вать дл� ��и��а �начени� �ере�енн�й �реды TEMP, чт��ы вре�енные файлы ��жн� �ыл� хранить в у�а�анн�й в эт�� �начении �а��е. ▼) Способов изменения переменных среды внутри сценария с оказанием влияния на другие за- пущенные программы не существует. Это отличается от ситуации с выполнением пакетных файлов — если изменить переменную среды внутри пакетного файла, это изменение повлияет на последующие программы, запущенные в том же самом окне командной строки. Кроме этого, обратите, пожалуйста, внимание на примечание в конце данного раздела — о внесении изменений в список переменных среды "system" в Windows Vista и Windows 7. ▼o Если не указать аргумент «место», при запуске сценария на Windows 7, Vista, XP, NT или 2000, свойство Environment вернет коллекцию "system", а при запуске на Windows 9x и Me будет возвращена коллекция "process". Чтобы гарантировать получение коллекции, нужно всегда указывать «место». Д���лнительна� инф�р�аци� �ред��тавлена в ра�деле «Ра��та �� �ред�й ��ружени�». Эт� �в�й�тв� д��ту�н� т�ль�� дл� чтени�, х�т� в��вращае�ые и� эле�енты ��лле�ции ���ут �ыть и��енены.
204 Глава 4. Доступ к файлам и реестру SpecialFolders[(папка)] В��вращает ��лле�цию ��ъе�т�в SpecialFolder. Эти ��ъе�ты �в��аны � �� ��ециальны�и, и�еющи�и �тн�шение � ��ль��вателю �а��а�и W��dows, та� �и�и �а� �а��а Рабочий стол (D�sk�op�, и � их фа�тиче��и� �е�т�� на же�т��� ди��е. М�жн� �а�р��ить �е�т�нах�ждение ��н�ретн�й �а��и, у�а�ав ее и�� в �аче�тве ар�у�ента �в�й�тву SpecialFolders. В эт�� �лучае в��вращае�ы� �начение� �удет �тр��а (а не ��ъе�т�, ��держаща� �уть � �а��е. И�ена ��еци� альных �а��� �еречи�лены в �ледующе� ��и��е: "AllUsersDesktop" "NetHood" "AllUsersStartMenu" "PrintHood" "AllUsersPrograms" "Programs" "AllUsersStartup" "Recent" "Desktop" "SendTo" "Favorites" "StartMenu" "Fonts" "Startup" "MyDocuments" "Templates" Эт� �в�й�тв� д��ту�н� т�ль�� дл� чтени�. В эт�й �лаве �в�й�тву Special- Folders �удет уделен� д���лнительн�е вни�ание. МЕТОДЫ AppActivate title А�тивирует ��н� �рил�жени� (выв�дит е�� на �ервый �лан и вы�ирает дл� ра��ты � �лавиатур�й и �ышью�.О�н� вы�ирает�� �� ���твет�твию те�� �та е�� �а��л�в�а title. В��вращает True, е�ли ��н� найден� и а�тивир�ван�; в �р�тивн�� �лучае в��вращает False. Е�ли и�ве�тен н��ер идентифи�ат�ра �р�це��а (PID�, е�� та�же ��жн� �ередать �в�й�тву AppActivate в �аче�тве чи�л�в��� ар�у�ента. П�лучить PID �рил�жени� ��жн�, е�ли �а�у�тить е�� � и���ль��вание� �ет�да Exec или и�влечь е�� и� WMI���ъе�т�в, ра���атри� вае�ых в �лаве 7. CreateShortcut(strPathname) С��дает н�вый �рлы� или �т�рывает �уще�твующий �рлы�. В��вращает ��ъе�т WshShortcut или ��ъе�т WshURLShortcut. Дл� реальн��� ���дани� ра� ��тающе�� �рлы�а нужн� �в�й�тва� эт��� н�в��� ��ъе�та �ри�в�ить ���твет� �твующие �начени�. П�др��н��ти и�л�жены в ра�деле «С��дание и и��енение �рлы��в». Exec(strCommand) За�у��ает �рил�жение в д�черней ���л�ч�е ���андн�й �тр��и. П�т��и �тандартн��� вв�да, �тандартн��� выв�да и �тандартн�й �ши��и �рил�жени� ���ут читать�� и �а�и�ывать�� �ценарие�. В��вращает ��ъе�т WshScriptExec, ра���атривае�ый далее в данн�й �лаве. ExpandEnvironmentStrings(strString) За�ен�ет лю�ые в�тречающие�� в �тр��е вв�да и�ена �ере�енных �реды, ���еченные �и�в�ла�и �р�цента (на�ри�ер, %path%� ��держи�ы� ���твет�тву� ющих �ере�енных �реды.
Работа с программами и ярлыками 205 LogEvent Type, Message[, Target] Д��авл�ет �а�и�ь ���ыти� в файл журнала. Значение Type ���а�ывает �те� �ень �ерье�н��ти ���ыти� и д�лжн� �ыть равн� �дн��у и� �ледующих �начений. Значение Тип события 0 У��ех 1 Оши��а 2 Преду�реждение 4 Инф�р�аци� � От�леживае�ый у��ех 16 От�леживае�ый �т�а� Ар�у�ент Message �вл�ет�� �тр���й � те��т�� �а�и�ывае���� ����щени�. Е�ли �н у�а�ан, ар�у�ент Target у�а�ывает �етев�е и�� ����ьютера, чей журнал ���ытий (�v��� Log� д�лжен �рин�ть н�вую �а�и�ь. Е�ли нужн�, LogEvent ��жет �т�равить �ведени� � ���ытии �� �ети на дру��й ����ьютер. Е�ли ар�у�ент Target не у�а�ан, �ведени� � ���ытии ��хран�ют�� в журнале л��альн��� ����ьютера. Popup(strText, [nWait], [strTitle], [nType]) Выв�дит те��т в ���вл�юще��� ��не ����щени�. Эт�т �ет�д анал��ичен фун�ции MsgBox, н� и�еет не����ательн�е �начение ли�ита вре�ени, ���в�л�� ющее �ценарию �р�д�лжить вы��лнение, е�ли ��ль��ватель не реа�ирует на �ри�лашение (�н �ри�ен�ет��, � �ри�еру, е�ли �ценарий �ыл �а�ущен �лани� р�вщи��� �аданий�. Мет�д и���ль�ует �ледующие ар�у�енты. strText Выв�ди�ый те��т nWait К�личе�тв� �е�унд �жидани� �еред �а�рытие� ��на; �начение 0 ��начает не��х�ди���ть �жидани� щелч�а ��ль��вател� на �н���е OK strTitle За��л�в��, выв�ди�ый в верхней ча�ти ���вл�юще���� ��на nType П��а�ывает, �а�ие �н���и и �нач�и �ледует выве�ти Ар�у�ент nType ��жет и�еть лю��е и� �ледующих �начений. Константа Значение Описание vbOKOnly 0 Выв�дит�� т�ль�� �н���а OK vbOKCancel 1 Выв�д�т�� �н���и OK и Отмена (C������ vbAbortRetryIgnore 2 Выв�д�т�� �н���и Прервать (Abo���, Повтор (R���y� и Пропустить (Ig�o��� vbYesNoCancel 3 Выв�д�т�� �н���и Да (Y�s�, Нет (No) и Отмена (C������ vbYesNo 4 Выв�д�т�� �н���и Да (Y�s� и Нет (No� vbRetryCancel 5 Выв�д�т�� �н���и Повтор (R���y� и Отмена (C������
206 Глава 4. Доступ к файлам и реестру К ар�у�енту nType ��жет �ыть д��авлена лю�а� и� �ледующих д���лни� тельных ��н�тант, на�траивающих внешний вид ���вл�юще���� ����щени�. Константа Значение Описание vbCritical 16 Выв�дит�� �нач�� важн��� ����щени� vbQuestion 32 Выв�дит�� �нач�� �реду�реждающе�� в��р��а vbExclamation 48 Выв�дит�� �нач�� �реду�реждающе�� в���лицани� vbInformation 64 Выв�дит�� �нач�� инф�р�аци�нн��� ����щени� vbDefaultButton1 0 П� у��лчанию �ред��ла�ает�� щелч�� на �ерв�й �н���е vbDefaultButton2 256 П� у��лчанию �ред��ла�ает�� щелч�� на вт�р�й �н���е vbDefaultButton3 512 П� у��лчанию �ред��ла�ает�� щелч�� на третьей �н���е vbDefaultButton4 768 П� у��лчанию �ред��ла�ает�� щелч�� на четверт�й �н���е VbSystemModal 4096 Ра��та в �и�те�н�� режи�е. На �и�те�ах W��32 эта ��н�танта �ред��тавл�ет �рил�жению ��дальн�е ��н� ����щени�, ��т�р�е в�е�да ��тает�� на �ерв�� �лане лю��й дру��й �р��ра��ы, ��т�ра� ��жет �ыть �а�ущена Мет�д Popup в��вращает �дн� и� �ледующих �начений, ���а�ывающее, на �а��й �н���е щел�нул ��ль��ватель, чт��ы �а�рыть ��н� ����щени�. Константа Значение Надпись на кнопке vbOK 1 OK vbCancel 2 Отмена (Cancel) vbAbort 3 Прервать (Abort) vbRetry 4 Повтор (Retry) vbYes 6 Да (�es) vbNo 7 Нет (No) Е�ли ��н� �а�рыл��ь и���а �ревышени� ли�ита вре�ени, �ет�д Popup в��� вращает –1 . ▼) Если хост WSH был запущен с ключом командной строки //B (batch – пакетный режим), метод PopUp ничего не делает. RegDelete strName Удал�ет �ара�етр или �дн� и� е�� �начений и� рее�тра. Ар�у�ент strName �вл�ет�� �уте� � �ара�етру или �начению. П�др��н��ти и�л�жены в ра�деле «Ра��та � рее�тр��».
Работа с программами и ярлыками 207 RegRead(strName) В��вращает и� рее�тра �ара�етр или �ри�в�енн�е е�у �начение. RegWrite strName, value[, strType] С��дает н�вый �ара�етр, д��авл�ет �начение � �уще�твующе�у �ара�етру или и��ен�ет �уще�твующее �начение. Run(strCommand, [intWindowStyle], [bWaitOnReturn]) За�у��ает �р��ра��у в �тдельн�� ��не. И���ль�ует три ар�у�ента. strCommand К��анда на �а�у��. В эт�й �тр��е д�лжны �еречи�л�ть�� и�� �р�� �ра��ы и в�е не��х�ди�ые ей ар�у�енты intWindowStyle Ра��ер ���давае���� ��на. М�жн� у�а�ывать �начение 1, �ри ��т�р�� �р�и��йдет ��ычн�е �т�рытие ��на; 3, �ри ��т�р�� �р�и��йдет �т� �рытие ��на на ве�ь э�ран; или 7, �ри ��т�р�� ��н� �удет �т�рыт� в �вернут�� в �нач�� виде bWaitOnReturn Булев� �начение. Е�ли �н� у�а�ан� и равн� True, �ценарий ждет, ���а �р��ра��а не �а��нчит��, и выдает �тату� ее �ши��и в �аче�тве в��� вращае���� �начени� �ет�да Run. Е�ли ар�у�ент не у�а�ан или равен False, �ценарий �р�д�лжает вы��лнение ���ле �а�у��а �р��ра��ы, а �ет�д Run в��вращает 0 SendKeys(string) От�равл�ет а�тивн��у ��ну �дну или не���ль�� �лавишных ���лед�ватель� н��тей (�а� �удт� �ни �ыли на�раны на �лавиатуре�. Запуск программ О�ъе�т WScript.Shell ��жет и���ль��вать�� дл� �а�у��а дру�их �р��ра�� �� у�а� �анию ваше�� �ценари�. Эт� ��жн� �делать в виде ча�ти �л�жн�й �р�цедуры дл� ���ра и у�равлени� инф�р�ацией или в �аче�тве ������а авт��ати�ации ��вт�р�� ющей�� �адачи. Дл� эт��� ���ут �ыть �адей�тв�ваны четыре �ет�да WScript.Shell: y y Run — �а�у��ает W��dows��р��ра��ы. y y SendKeys — �т�равл�ет �лавишные ���лед�вательн��ти �р��ра��е, �а� �удт� �ни �ыли на�раны вручную. y y AppActivate — вы�ирает �р��ра��у, � ��т�р�й ра��тает �ет�д SendKeys. y y Exec — �а�у��ает �р��ра��у в режи�е ���андн�й �тр��и и в�аи��дей�твует � ней. Запуск Windows-программ W��dows��р��ра��ы ��жн� �а�у��ать, и���ль�у� �ет�д Run ��ъе�та WScript.Shell, ��т�рый �а�у��ает �р��ра��у в ее ����твенн�� ��не. Первы� ар�у�ент�� �ет�да Run �вл�ет�� �тр��а, дающа� и�� �р��ра��ы (в�лю� ча� ��лный �уть � файлу, е�ли �р��ра��а не нах�дит�� в �дн�й и� �тандартных �а���, у�а�анных в �ере�енн�й �реды ��ружени� PATH� и лю�ые не��х�ди�ые ей
208 Глава 4. Доступ к файлам и реестру ар�у�енты. На�ри�ер, �ценарий ��жет �а� в �ледующе� �ри�ере �а�и�ать данные в те��т�вый файл и ���а�ать их в �р��ра��е Бл��н�т: ' Файл примера script0417.vbs Const TemporaryFolder = 2 set shell = CreateObject("WScript.Shell") ' со здание полезных объектов set fso = CreateObject("Scripting.FileSystemObject") ' по лучение имени рабочего файла tmpfile = fso.BuildPath(fso.GetSpecialFolder(TemporaryFolder),_ fso.GetTempName()) set file = fso.CreateTextFile(tmpfile) ' со здание текстового файла fori=100to0step-1 file.WriteLine i & " бутылок пива на стене!" next file.Close set file = Nothing ' ос вобождение объекта File ' з апуск Блокнота для отображения файла и ожидание окончания его работы shell.Run "notepad " & tmpfile, 1, True ' удаление рабочего файла fso.DeleteFile(tmpfile) В эт�� �ри�ере �ет�д Run �а�у��ает W��dows��р��ра��у Бл��н�т � и�ене� ���данн��� те��т�в��� файла в �аче�тве ар�у�ента. Вт�р�й ар�у�ент, 1, �ред�и�ы� вает �р��ра��е Бл��н�т �т�рыть�� в �тандартн�� ��не, а третий ар�у�ент, True, �ред�и�ывает �ценарию ждать, ���а ��ль��ватель не �а�р�ет Бл��н�т. С �а�ущенны�и на вы��лнение �р��ра��а�и ��жн� �р�ани��вать в�аи��дей� �твие в ��раниченн�� режи�е �уте� �т�рав�и и� �лавишных ���лед�вательн��тей, �а� �удт� ��ль��ватель на�рал их вручную. Я не вижу �����й ��ль�ы �т та��й в����жн��ти, ��эт��у ��ишу в�е эт� лишь в ��щих чертах. y y Ва� нужн� �нать �а��л�в�� ��на, � ��т�ры� не��х�ди�� �р�ани��вать в�аи��� дей�твие. Дл� �р��ра��, �ен�ющих �в�и �а��л�в�и на и�� �т�рыт��� файла, эт� ��жет ��а�ать�� не�р��т�й �адачей. Чт��ы �а�тавить W��dows �ереве�ти нужную �р��ра��у на �ервый �лан, �ледует в����ль��вать�� ��ерат�р�� AppActivate("заголовок"). При у��ешн�� вы��лнении �адачи �ет�д AppActivate вернет True; е�ли же �р�и��йдет �т�а�, �а�их�ли�� иных �������в решени� эт�й �адачи в ваше� ра���р�жении не �удет. y y От�равить �лавишную ���лед�вательн��ть �рил�жению ��жн� � ����щью �ет�да SendKeys. Эт�т �ет�д �т�равл�ет �рил�жению ����щени�, ��т�рые и� ра���атривают�� �а� нажатие ��ль��вателе� �лавиш на �лавиатуре. И�ити� р�вать ра��ту �ыши нель��, н� ��жн� �т�равить ����начени� ��ециальных �лавиш, на�ри�ер END, и���ль�у� �тр��у "{END}", и Alt+F, и���ль�у� �тр��у "%F"; ��лный ��и��� �лавишных ����начений ��жн� найти в д��у�ентации M���oso�� �� S���p� Hos�. П����ль�у в�е �и�в�лы +, ^, %, ~, { и } и�еют ��ециаль� н�е на�начение, �еред их и���ль��вание� не��х�ди�� и�учить д��у�ентацию. y y Между �т�рав�а�и �лавишных ���лед�вательн��тей лучше в��ть не��льшую �ау�у, чт��ы дать �рил�жению вре�� на ��ра��т�у �а�р��а. О�ерат�р WScript.
Работа с программами и ярлыками 209 Sleep 100 ���дает �ау�у в 100 �� (�дну де��тую �е�унды�, ��т�р�й в� �н��их �луча�х д�лжн� хватить. Мет�д SendKeys ���в�л�ет �ценарию в�аи��дей�тв�вать � W��dows��р��ра�� �а�и на��д��ие �иани�та. С ����щью эт��� �ет�да ��жн� и���лнить чт��ни�удь �л�жн�е, т�, чт� � на�ываю клавишной набивкой, на�ри�ер �а�у�тить �� ра��и�анию �тчет �а�ы данных. Н� ���дание ��д��ных �ценариев и их �тлад�а ���ут �ревратить�� в на�т��щий ��ш�ар. «Авт��атиче��ую» ��ра��т�у лучше и �р�ще �р�ани��вать � и���ль��ва� ние интерфей�а �рил�жени� Automation или интерфей�а ���андн�й �тр��и, е�ли та��вые и�еют��. Запуск программ командной строки Пр��ра��ы ���андн�й �тр��и (в���ще�т� их �равильнее на�ывать «��н��льны�и �рил�жени��и»� ��жн� �а�у�тить и� �ценари�, и���ль�у� �ет�д Run или �ет�д Exec ��ъе�та WScript.Shell. Е�ли нужн� т�ль�� лишь �а�у�тить �рил�жение, ��� �в�лив е�у вы��лн�ть�� в е�� ����твенн�� ��не, дл� эт��� в��лне ��д�йдет �ет�д Run. Н� у �ет�да Exec �� �равнению � �ет�д�� Run е�ть два �реи�уще�тва: y y Пр��ра��у ��жн� �а�у�тить, ���в�л�� �ценарию вы��лн�ть в т� же вре�� дру� �ие �адачи и чуть ���же ��ределить, �авершил��ь ли вы��лнение �р��ра��ы и � �а�и� и�енн� ре�ультат��. y y При �а�у��е �р��ра��ы ���андн�й �тр��и �ет�д Exec ���в�л�ет �т�равл�ть данные не���ред�твенн� �р��ра��е чере� ��т�� ее �тандартн��� вв�да, �р��е эт��� � ����щью ��ъе�т�в TextStream и�еет�� в����жн��ть читать данные �� �тандартн��� выв�да и �тандартн�й �ши��и �р��ра��ы. За�у�� �р��ра��ы ���андн�й �тр��и � и���ль��вание� �ет�да Exec ��ъе�та Shell и у�а�ание� ��лн�й ���андн�й �тр��и вы�л�дит �ледующи� ��ра���: set shell = CreateObject("WScript.Shell") set program = shell.Exec("ping www.someplace.com ") М�жн� у�а�ать ��лный �уть � �р��ра��е или, е�ли �уть ��жн� найти в �ере� �енн�й PATH, ��жн� �р��т� у�а�ать ее и��, �а� ���а�ан� в �редыдуще� �ри�ере. О�ратите вни�ание, чт� дл� ��лучени� �начени�, в��вращае���� �ет�д�� Exec, и���ль��ван ��ерат�р set. Мет�д Exec в��вращает ��ъе�т WshScriptExec, ��т�рый дает ��нтр�ль над �а�ущенн�й �р��ра���й. Св�й�тва и �ет�ды ��ъе�та WshScriptExec �еречи�лены в ��рав�е 4.10. П��ле С�рав�чн��� ��и��а ���а�ан уче�ный �ценарий, �а ��т�ры� �ледует ра�дел, ���в�щенный у�транению не� �р��тых �р��ле�, ��т�рые ���ут в��ни�ать �ри �а�у��е и� �ценари� �р��ра�� ���андн�й �тр��и. СПРАВКА 4.10. СВОЙСТВА И МЕТОД ОБЪЕКТА WSHSCRIPTEXEC СВОЙСТВА ExitCode В��вращает �тату� вых�да и� �рил�жени� ���ле �авершени� е�� ра��ты. Е�ли �р�це�� еще не �авершен, �в�й�тва ExitCode и Status и�еют �начение 0.
210 Глава 4. Доступ к файлам и реестру ProcessID В��вращает PID �рил�жени�. Эт�т идентифи�ат�р ��жн� и���ль��вать в �аче�тве ар�у�ента �ет�да AppActivate. Status П��а�ывает, ра��тает ли �р��ра��а: 0 ��начает, чт� �на ра��тает, а 1 ��начает, чт� ее ра��та �ре�ращена. StdErr О�ъе�т TextStream, ��т�рый ��жет �ыть �р�читан дл� ��лучени� лю���� выв�да, �а�и�анн��� �р��ра���й в ��т�� �тандартн�й �ши��и. StdIn О�ъе�т TextStream, в ��т�рый ��жн� �р�и�в�дить �а�и�ь. В�е чт� �удет �а� �и�ан� в StdIn, �т�равл�ет�� на �тандартный вв�д �р��ра��ы. StdOut О�ъе�т TextStream, ��т�рый ��жет �ыть �р�читан � целью ��лучени� лю� ���� выв�да, �а�и�анн��� �р��ра���й в �тандартный выв�д. ▼) При анализе состояния свойства AtEndOfStream объекта StdOut или объекта StdErr сценарий приостанавливает работу, пока программа не запишет что-нибудь в поток или пока программа не прекратит свою работу и не будут прочитаны все данные. Этот вопрос еще будет рассмотрен в данном разделе. МЕТОД Terminate Пре�ращает вы��лнение �р��ра��ы, е�ли �на в�е еще ра��тает. О�ычн� эт�т �ет�д и���ль�ует�� �ри нештатных �итуаци�х (на�ри�ер, ���да �р��ра��а, ра��та ��т�р�й д�лжна �ыла �авершить�� чере� не���ль�� �е�унд, �р�д�лжает ра��тать �верх �тведенн��� �р��а�. П��ле �а�у��а �р��ра��ы �ет�д�� Exec в�аи��дей�твие � ней ��ычн� �р�а� ни�ует�� �уте� �а�и�и в �тандартный вв�д �р��ра��ы или �уте� чтени� � ее �тандартн��� выв�да или �тандартн�й �ши��и. П�эт��у, чт��ы ����чь �ценарию ��равить�� � лю��й �адачей, ��жн� в����ль��вать�� внешней �р��ра���й. В �ледующе� �ри�ере �ценарий и���ль�ует �р��ра��у ping, чт��ы �р�те�ти� р�вать ��и��� интернет�х��т�в и у�едить�� в их �ри�ут�твии в �ети. Е�ли �а��й� ни�удь х��т �удет �т�лючен, выв�дит�� ����щение: ' Файл примера script0418.vbs set shell = CreateObject("WScript.Shell") hosts = arr ay("www.netsol.com ", "www.google.com ","www .yahoo.com") failed ="" ' список отключенных хостов for each host in hosts if not pingtest(host) then failed=failed&""&host ' есл и о ткл юче н, добавить в список end if next
Работа с программами и ярлыками 211 ' если есть отключенные хосты, вывести список if len(failed) > 0 then MsgBox "Внимание: отсутствует доступ к " & failed ' --------------------------------------------------------------------- ' p ingtest – попытка обмена пакетами с хостом по имени 'host'. Если будет ' в озвращен хоть один ответный пакет, считать тест успешным. function pingtest (host) pingtest = False ' предположение об отказе wscript.echo "Тестовый опрос ", host set ping = shell.Exec("ping " & host) ' запуск команды do while not ping.Stdout.AtEndOfStream str = ping.Stdout.ReadLine ' ч тен ие результатов if instr(str, "could not find") > 0 then exit do if instr(str, "Reply from") > 0 then pingtest = True ' " reply" означает успех exit do ' т ест мо жно прекращать end if loop ping.Terminate ' прекращение опроса, если он все еще идет end function В ��льшин�тве �лучаев тре�ует��, чт��ы �ценарий, �режде че� �р�д�лжить вы� ��лнение, д�ждал��, ���а �р��ра��а не �авершит �в�ю ра��ту. Е�ли ваш �ценарий �читывает ве�ь �р��ра��ный выв�д в ци�ле, у�равл�е��� StdOut.EndOfStream, �а� в �редыдуще� �ри�ере, т� в�е в ��р�д�е, �����ль�у EndOfStream не в��вращает True, ���а не �р�и��йдет вых�д и� �р��ра��ы, и не �удет �читана в�� выв�ди�а� ею инф�р�аци�. Н� е�ли �р��ра��ный выв�д не �читывает��, в �ценарии д�лжна �ыть �ред� у���трена �ери�диче��а� �р�вер�а на �р�д�лжение вы��лнени� �р��ра��ы (Status = 0�, и е�ли �р��ра��а в�е еще вы��лн�ет��, нужн� выждать: set shell = CreateObject("WScript.Shell") set program = shell.Run("someprogram") do while program.status = 0 ' ес ли программа все еще работает, WScript.Sleep 100 ' вы ждать 100 мс перед повторной проверкой loop Мет�д Sleep и���ль�ует�� �де�ь дл� �ри��тан�в�и вы��лнени� �ценари� в �жидании �авершени� ра��ты �р��ра��ы. Е�ли �ы �ау�а не �ыла в�тавлена, ци�л вы��лн�л�� �ы в �жидании �авершени� ра��ты �р��ра��ы �лиш��� �ы�тр�. Е�ли �р��ра��а �ценари� �удет выдавать �а�р��ы � �р�це���ру в �чень вы����� те��е, внешней �р��ра��е �удет ��тавать�� �еньше вре�ени дл� вы��лнени� ее �адачи. Е�ли нужн� �т�у�тить �р��ра��е, ��аже�, ��ть �е�унд на �а���т��тельн�е �а� вершение ра��ты, и, в �лучае �р�д�лжени� ра��ты �верх эт��� �р��а ��уще�твить
212 Глава 4. Доступ к файлам и реестру �ринудительн�е �авершение, ��жн� в����ль��вать�� ци�л�� for � ��раничение� ��личе�тва �р�х�д�в ци�ла: fornwait=1to50 if program.status <> 0 then exit for WScript.Sleep 100 next program.Terminate В данн�� �лучае вре�� �жидани� ���тавл�ет д� 50 ра� �� 100 ��, чт� в цел�� �ай�ет не ��лее ��ти �е�унд. Е�ли �р��ра��а �авершает�� раньше, ��ерат�р exit for и��авл�ет на� �т лишне�� �жидани�. П��ле вых�да и� ци�ла �ет�д Terminate �ре�ращает вы��лнение �р��ра��ы, е�ли �на еще не �делала эт��� �а���т��тельн�. Чтение текста из консольного приложения Е�ли внешнее �рил�жение �енерирует те��т�вый выв�д, т� ���а �а�у�� �р��ра��ы и чтение выв�ди��й ею инф�р�ации не �удут �лед�вать в у�а�анн�� �де�ь ��р�д�е, ваш �ценарий ��жет ра��тать не�равильн�: set program = Shell.Exec(command line) do while not program.StdOut.AtEndOfStream txt = program.StdOut.ReadLine ' (если нужно, совершение каких-нибудь действий с текстом) loop ' Если интересуют данные, записываемые в stderr, используется данный цикл, ' в противном случае он опускается: do while not program.StdErr.AtEndOfStream txt = program.StdErr.ReadLine ' (если нужно, совершение каких-нибудь действий с текстом) loop Даже е�ли � те��т�� ниче�� не делает��, эт�т �ценарий читает инф�р�ацию и� �рил�жени�. Е�ли не на�и�ать �ценарий и�енн� та�и� ��ра���, т� ваш �ценарий или �рил�жение ���ут «�ави�нуть» в �е���нечн�� �жидании дру� дру�а. О�ъ��н�ет�� эт� та�: �а�ущенн�е ва�и ��н��льн�е �рил�жение ��жет �а�и�ы� вать те��т в ��т�� �тандартн��� выв�да, ��т�� �тандартн�й �ши��и или в ��а этих ��т��а. К��да �н� эт� делает, W��dows ���ирает ве�ь �а�и�анный те��т и хранит е�� у �е��, ���а ваш �ценарий �читывает е��, и���ль�у� �ет�ды StdOut и StdErr ��ъе�т�в TextStream. Эт� на�ывает�� �уфери�ацией. Н� в�е эт� ра��тает т�ль�� д� ��ределенн��� ���ента — е�ли а��у�улир�ван� ��лее 4096 �и�в�л�в, W��dows ��танавливает �рил�жение д� тех ��р, ���а ваши� �ценарие� не �удет �читан ве�ь на���ленный те��т. Е�ли �ценарий в���ще не ���ирает�� �читывать те��т, �рил�жение ни���да не ��лучит ра�решени� на в����н�вление вы��лнени� и на �авершение �в�ей �адачи. Н� на эт�� трудн��ти не �а�анчивают��. К��да ��ъе�т TextStream и���ль�у� ет�� дл� чтени� данных и� файла, ��храненн��� на ди��е, W��dows �аранее �нает, ���ль�� инф�р�ации хранит�� в файле. Н� в данн�� �лучае чтение �р�и�х�дит и� вы��лн�ющей�� �р��ра��ы, и W��dows не ��жет �нать, ���ль�� те��та ���вит��, е�ли �н в���ще �удет. П�эт��у �ри в�е еще ра��тающей �р��ра��е, � ����щью
Работа с программами и ярлыками 213 �в�й�тва AtEndOfStream вы��лн�ет�� ве�ь�а не�р��та� �адача. В�е эт� �р�и�х�дит �ледующи� ��ра���: y y Е�ли �рил�жение в�е еще вы��лн�ет�� и �а�и�ал� те��т, ��т�рые еще не �ыл �читан, AtEndOfStream в��вращает False, ���в�л�� е�� �читать. y y Е�ли �рил�жение �авершил� �в�ю ра��ту и �р�и��шел вых�д и� не��, а та�же е�ли �ценарий �р�читал ве�ь �а�и�анный �рил�жение� те��т, AtEndOfStream в��вращает True, ���в�л�� �ре�ратить вы��лнение ци�ла и �р�д�лжить вы� ��лнение �ценари�. y y Е�ли �р��ра��а в�е еще ра��тает, а те��т, �редна�наченный дл� чтени�, �т�ут� �твует, AtEndOfStream �ри��танавливает вы��лнение �ценари�, ���а внешн�� �р��ра��а не �а�ишет �а��й�ни�удь те��т или не �авершит �в�ю ра��ту. При лю��� ра�витии ���ытий на данн�� эта�е �в�й�тв� AtEndOfStream ��жет дать �твет, чт� �н� и делает, в��враща� False или True. При эт�� нужн� уче�ть �ледующие ����енн��ти: y y Е�ли и�ве�тн�, чт� �р��ра��а ни���да не ��енерирует ��лее 4096 �и�в�л�в те��та, не �ледует �е�����ить�� � т��, чт� �на �удет «�а��р�жена» в �жидании �читывани� те��та, ��эт��у ��жн� ���давать лю�ые, нужные ва� ци�лы, и в�а� и��дей�тв�вать � �р��ра���й лю�ы� желае�ы� ��������. В данн�� �лучае в��лне ��д�йдет ���а�анный ранее ци�л, �жидающий и��енени� �начени� �в�й�тва Status � нул� на единицу. Следует лишь ���нить, чт� �ри ��ыл�е на �в�й�тв� AtEndOfStream ваш �ценарий ��жет выдерживать �ау�у. y y Е�ли �р��ра��а ������на �а�и�ать ��льш�й ��ъе� те��та в ��т�� StdOut �ра�у же ���ле �а�у��а, нужн� �читывать ве�ь ��енерир�ванный ею те��т, и���ль�у� �ри�ерн� �ледующий ци�л: do while not program.StdOut.AtEndOfStream txt = program.StdOut.ReadLine ' (если нужно, совершение каких-нибудь действий с текстом) loop При ��ращении � AtEndOfStream �ценарий ��жет в�йти в режи� �р�и�в�ль� н�й �� �р�д�лжительн��ти �ау�ы, �жида� �т �р��ра��ы �а�и�и или �авершени� ее ра��ты, ��эт��у у ва� не �удет в����жн��ти тре��вать �т �ценари� ниче��, �р��е ���т��нн��� вы��лнени� ци�ла чтени� и� ��т��а StdOut. y y Е�ли �рил�жение �а�и�ывает те��т в ��т�� StdErr, ��ъе� эт��� те��та ��ычн� невели� (�а� �равил�, эт� ��р�т��е ����щение �� �ши��е�. Е�ли нужн� �р�� читать эт�т те��т, �ледует в����ль��вать�� ци�л��, у�равл�е�ы� ��ерат�р�� while not program.StdErr.AtEndOfStream после ци�ла StdOut. Е�ли �начала �ред� �рин�ть ���ыт�у �р�читать те��т StdErr �ри т��, чт� �рил�жение �удет �а�и�ы� вать ��льш�й ��ъе� те��та в StdOut, W��dows ��жет ��тан�вить�� в �жидании �ахвата те��та ваши� �ценарие�, че�� �н ��нечн� же ни���да не ���жет �делать. Нужн� �начала �р�читать ве�ь те��т и� StdOut, а �ате� уже те��т и� StdErr. (П����ль�у и���ль��вание �в�й�тва AtEndOfStream ��жет �риве�ти � �л��и� р�в�е �ценари�, на�и�ать ци�л, в ��т�р�� ��уще�твл�ет�� ���чередн� чтение �а� и� StdOut, та� и и� StdErr, не �ред�тавл�ет�� в����жны�.�
214 Глава 4. Доступ к файлам и реестру y y Е�ли �рил�жение ��жет �енерир�вать ��льш�й ��ъе� те��та в ��а ��т��а StdOut и StdErr, е�� нель�� �а�у��ать на�р��ую. Ли�� �ервый, ли�� вт�р�й ��т�� �а��лнит �уфер, �ривед� � ��тан�в�е �рил�жени�, а ваш �ценарий ���ле эт��� ��тан�вит�� �ри ��ращении � �в�й�тву AtEndOfStream дру���� ��т��а. В�е�т� эт��� нужн� на�и�ать �а�етный файл, �редна�наченный дл� �а�у��а �рил�жени� и �ерена�равлени� в�е�� е�� выв�да в файл, в �тандарт� ный выв�д или ��ра��тать выв�д �а�и��ни�удь ины� ��������. На�ри�ер, �ледующий �а�етный файл �а�у��ает �р��ра��у �� и�ени «som�p�og��m» и �т�равл�ет ее ��т��и �тандартн��� выв�да и �тандартн�й �ши��и на �тан� дартный выв�д: @echo off someprogram 2>&1 Нужн� чт��ы ваш �ценарий �а�у�тил эт�т �а�етный файл, �а� ���а�ан� в �ледующе� �ри�ере: set program = Shell.Exec("cmd.exe /c ""c:\full\path\to\batchfile.bat""") При чтении StdOut и� эт��� �а�етн��� �р�це��а �р��ра��а не �удет ��та� н�влена. Е�ли ваш �ценарий �ави� �ри вы��лнении ��н��льн��� �рил�жени� и ни���да не �авершит �в�ю ра��ту, �ричин�й эт��� не�ре�енн� �удет или �ави�ание на вы� ��ве �в�й�тва AtEndOfStream, или �ави�ание на ци�ле, �жидающе�, ���да �в�й�тв� ��ъе�та �р��ра��ы Status ��лучит �начение 1, �ри �ави�ше� �рил�жении, �жи� дающи� дей�твий �т ваше�� �ценари�. Е�ли эт� �р�и��йдет, наж�ите Ctrl+C, чт��ы �ре�ратить вы��лнение �ценари�, и ���тавьте ��ерат�р WScript.Echo �еред �ажды� вы��в�� AtEndofScript, ReadLine и т. д. или же �а�у�тите �тладчи� S���p� D�bugg��, чт��ы увидеть, в �а��� �е�те �ави�ает ваш �ценарий. Создание и изменение ярлыков О�ъе�т WScript.Shell ��жн� та�же �ри�енить дл� ���дани� и ��дифи�ации �рлы��в на Ра��че� �т�ле и в �еню Пуск (S�����. Эт�й в����жн��тью ��жн� в����ль��вать�� дл� �арантир�ванн�й у�тан�в�и нужн��� �рлы�а на �ажд�� и� ��ль��ватель��их Ра��чих �т�л�в или �а� ча�тью �р�цедуры у�тан�в�и н�в�й �р��ра��ы. М�жн� ���давать и �тандартные �рлы�и �р��ра��, и та� на�ывае�ые «URL��рлы�и», �вл�ющие�� ��ыл��й на ве���айт. Ярлы�и — эт� не��льшие файлы, ��держащие данные, и���ль�уе�ые W��dows �xp�o��� дл� �а�у��а �ред�тавл�е�ых эти�и �рлы�а�и �р��ра��. Дл� ��ычных файл�в �рлы��в и���ль�ует�� ра�ширение .lnk, а дл� файл�в URL��рлы��в и�� ��ль�ует�� ра�ширение .url. Данные, нах�д�щие�� внутри файл�в �рлы��в, не �в� л�ют�� ��ычны�, читае�ы� те��т��, ��эт��у WScript.Shell �ред��тавл�ет ��ъе�т, �ред�тавл�ющий эти данные и ��ле�чающий ра��ту � ни�и. Ве�ь �ехани�� ра��тает �ледующи� ��ра���: �начала дл� «�т�рыти�» н�в��� или реда�тир�вани� �уще�твующе�� �рлы�а и���ль�ует�� и�еющий�� в WScript. Shell �ет�д CreateShortcut или �ет�д ModifyShortcut. При эт�� ���дает�� э��е��
Работа с программами и ярлыками 215 �л�р ��ъе�та WshShortcut, �ред�тавл�ющий �рлы�, � ��т�ры� вы �удете ра��тать. Зате� ��жн� �удет и��ен�ть �в�й�тва эт��� ��ъе�та, и W��dows �удет ��н�вл�ть ���твет�твующий �рлы�. ▼) В действительности в системе Windows имеются два варианта объекта WshShortcut: для стан- дартных ярлыков — WshShortcut и для ссылок на веб-страницы — WshURLShortcut. Обычные ярлыки создаются с расширением .lnk, а URL-ярлыки — с расширением .url. При изменении ярлыка для обоих типов используются одинаковые свойства и метод. Св�й�тва и �дин �ет�д WshShortcut и WshUrlShortcut �еречи�лены в ��рав� �е 4.11 . СПРАВКА 4.11. СВОЙСТВА И МЕТОД ОБЪЕКТОВ WSHSHORTCUT И WSHURLSHORTCUT СВОЙСТВА Arguments О�редел�ет лю�ые ар�у�енты, �ередавае�ые �р��ра��е. С�держит �тр���� в�е �начение. (Чтение��а�и�ь.� Description Те��т ��и�ани� �рлы�а, ��т�рый ���вл�ет�� в �аче�тве ��д��а��и �ри �р�� х�ждении у�а�ател� �ыши над �нач��� �рлы�а. (Чтение��а�и�ь.� FullName П�лный �уть � целев�й �р��ра��е ��ъе�та �рлы�а, у�танавливае�ый �в�й� �тв�� TargetPath. (Т�ль�� чтение.� Hotkey Идентифицирует �лавишную ����инацию дл� а�тивации �рлы�а. (Чтение� �а�и�ь.� IconLocation Знач��, �в��анный � �рлы���. (Чтение��а�и�ь.� Дл� �в�й�тва IconLocation и���ль�ует�� ф�р�ат "имя_файла, номер_знач­ ка", �де имя_файла — эт� и�� и���лн�е���� файла �X� или DLL, ��держаще�� �дин или не���ль�� �нач��в, а номер_значка — эт� инде��, начинающий�� � нулев��� �начени� и и���ль�уе�ый в ��и��е �нач��в файла. Дл� ��льшин�тва �рил�жений �ервы� �вл�ет�� �нач��, и���ль�уе�ый дл� �рлы��в, ��эт��у ��ычны� �начение� дл� IconLocation �вл�ет�� "filename.exe,0". RelativePath У�танавливает или в��вращает �уть � целев�й �р��ра��е �тн��ительн� �е�та нах�ждени� �рлы�а. Я не ре���ендую ��ль��вать�� эти� �в�й�тв��. При ���дании н�в��� �рлы�а у�ажите ��лный �уть и �ри�в�йте е�� �в�й�тву TargetPath. (Чтение��а�и�ь.� TargetPath Путь � целев�й �р��ра��е �рлы�а или URL�адре�, в т�� �лучае е�ли эт� ��ыл�а на ве���траницу. (Чтение��а�и�ь.�
216 Глава 4. Доступ к файлам и реестру WindowStyle При�ваивает �рлы�у �тиль ��на или идентифицирует �тиль ��на, и���ль�у� е�ый �рлы���. (Чтение��а�и�ь.� Св�й�тв� WindowStyle ��редел�ет ������ �а�у��а �рил�жени�. В����ж� ные �начени�: 1 — �т�рытие ��на в н�р�альн�� режи�е; 3 — �т�рытие ��на в �а��и�альн�� режи�е; и 7— �т�рытие ��на в �ини�альн�� режи�е (в виде �нач�а�. WorkingDirectory Ра��чий �атал��, и���ль�уе�ый �рлы���. (Чтение��а�и�ь.� МЕТОД Save С�хран�ет н�вый или �треда�тир�ванный ��ъе�т �рлы�а на ди��е. Эт�т �ет�д д�лжен и���ль��вать�� ���ле и��енени� �в�й�тв ��ъе�та �рлы�а, чт��ы вне�ти и��енени� в файл � ра�ширение� .lnk. Ра����три� �ценарий, ���дающий на Ра��че� �т�ле �рлы�, �в��анный � те��т�� вы� файл�� те�ущих �адач, ��т�рый реда�тирует�� � ����щью Бл��н�та: ' Файл примера script0419.vbs set shl = CreateObject("WScript.Shell") ' со здание объектов set fso = CreateObject("Scripting.FileSystemObject") desktop = shl.SpecialFolders("Desktop") ' по лучение мест, где находятся папки mydocs = shl.SpecialFolders("MyDocuments") ' со здание объекта ярлыка set sc = shl.CreateShortcut(fso.BuildPath(desktop, "\To Do.lnk")) sc.TargetPath = "n otepad.exe" ' установка запускаемой программы sc.WorkingDirectory = mydocs ' установка рабочей папки sc.Arguments = fso.BuildPath(mydocs, "todo.txt") ' указание файла sc.WindowStyle =1 ' от крытие в виде обычного окна sc.Hotkey = "C trl+Alt+T" ' задание горячих клавиш sc.IconLocation = "n otepad.exe, 0" ' ис пол ьзо ван ие обычного значка ' Блокнота sc.Description = "Просмотр и редактирование списка текущих задач" sc.Save ' со здание ярлыка Сценарий �начала ���дает нужные е�у ��ъе�ты, �ате� ��редел�ет, �де на� х�д�т�� �а��и Desktop и [My] Documents. (Значение выражени� SpecialFolders- ("MyDocuments") �вл�ет�� �равильны� у�а�ание� �е�та, �де нах�дит�� ваша �а��а Documents не�ави�и�� �т и���ль�уе��й вер�ии W��dows.� Он ���дает в �а��е Desktop (на Ра��че� �т�ле� н�вый �рлы� �� и�ени do.lnk. Ярлы� �а�у��ает Бл��н�т � файл�� �� и�ени todo.txt и� �а��и [My] Documents. Е�ли �р��ра��а или файл, у�а�анные в TargetPath, не ���ут �ыть найдены в �ере�енн�й �реды ��ружени� PATH, нужн� у�а�ать ��лный �уть � �р��ра��е или � д��у�енту, на�ванн��у в TargetPath. W��dows нах�дит файл notepad.exe �а��� �т��тельн�, н� ��жн� у�а�ать и е�� ��лный �уть, в����ль��вавши�ь ��ерат�р�� sc.TargetPath = shl.ExpandEnvironmentStrings("%WINDIR%\notepad.exe ")
Работа со средой окружения 217 или э�вивалентны� е�у ��ерат�р�� sc.TargetPath = fso.BuildPath(_ fso.GetSpecialFolder(WindowsFolder), "notepad.exe ") Д��авл�� �рлы�и � ��ециальны� �а��а�, и���ль�уе�ы� дл� на��лнени� �еню Пуск (S�����, ��жн� д��авл�ть эле�енты эт��у �еню. Д��авить �нач�и � ��льш�й �анели �еню Пуск � ����щью �ценари� нев����жн�, н� их ��жн� д��авить � ��и��у Все программы ([A��] P�og��ms�. Дл� ���дани� эле�ент�в �еню Пуск (S����� ���дайте �рлы�и в ��д�а��е �дн�й и� этих двух �лавных �а���: y y Чт��ы �рлы� �ыл виден в�е� ��ль��вател�� ����ьютера, е�� нужн� ���дать в �а��е, �ведени� � ��т�р�й ��жн� ��лучить и� выражени� SpecialFolders ("AllUsersStartMenu"). y y Чт��ы �рлы� �ыл виден т�ль�� те�уще�у ��ль��вателю, е�� нужн� ���дать в �а��е, �ведени� � ��т�р�й ��жн� ��лучить и� выражени� SpecialFolders- ("StartMenu"). На�ри�ер, чт��ы ���дать �а��у "Special Tools" и �рлы� дл� в�ех ��ль��вате� лей ����ьютера, ��жн� на�и�ать �ценарий, ��н�ванный на �ледующе� фра��енте ��да: set shl = CreateObject("WScript.Shell") ' создание объектов set fso = CreateObject("Scripting.FileSystemObject") startmenu = shl.SpecialFolders("AllUsersStartMenu") toolfolder = fso.BuildPath(startmenu, "Special Tools") CreateFullPath(toolfolder) ' с оздание папки, если это необходимо set sc = shl.CreateShortcut(fso.BuildPath(toolfolder, "first tool.lnk")) ... установка свойств ярлыка sc.Save sub CreateFullPath (path) ... (подпрограмма CreateFullPath уже была показана в данной главе) Эт�т �ценарий ���тавл�ет и�� �а��и в �еню Пуск (S����� в �ере�енн�й toolfolder. Дл� ��е��ечени� �уще�тв�вани� данн�й �а��и и ���ледующе�� ���� дани� в н�в�й �а��е �дн��� или не���ль�их �рлы��в в �ценарии и���ль�ует�� ��д�р��ра��а CreateFullPath. Работа со средой окружения Пере�енные �реды ��ружени�, та�ие �а� у�а�ывающа� �уть � �р��ра��а� �ере� �енна� PATH и ��держаща� и�� �а��и дл� вре�енных файл�в �ере�енна� TEMP, ���ут �ыть и�учены �уте� �р����тра �в�й�тва Environment ��ъе�та WScript. Shell.Environment("process"). Эт� �в�й�тв� в��вращает ��лле�цию ��ъе�т�в WshEnvironment, ��редел�ющих те�ущий на��р �ере�енных �реды ��ружени�.
218 Глава 4. Доступ к файлам и реестру К�лле�цию ��жн� и�учить дл� и�влечени� ��ределений �ере�енных �реды ��ру� жени�. Дл� ��д��ных дей�твий ��жет �ыть не���ль�� ��тив�в: y y М�жет ��над��ить�� и�� �а��и, и���ль�уе��й дл� ра��чих файл�в, ��т�р�е у�а�ан� в �ере�енн�й �реды ��ружени� TEMP. y y М�жет ��над��ить�� �р����треть �уть ��и��а �р��ра�� (��держи��е �ере� �енн�й PATH�, чт��ы увидеть, �уда у�тан�влена �р��ра��а. y y М�жет ��над��ить�� найти ��ециальные �ара�етры на�тр�й�и, ����щае�ые в �реде ��ружени�, на�ри�ер �е�т�нах�ждение �и�ли�течных файл�в (�ере� �енна� LIB�, и�� ��ль��вател�, в�шедше�� в �и�те�у (�ере�енна� USERNAME�, или ти� те�уще�� �р�це���ра (PROCESSOR_ARCHITECTURE�. Х�т� �начени� этих �ере�енных ���ут �ыть ��дделаны ��ль��вател��и ����ьютера, е�ли �е���а�� н��ти ничт� не у�р�жает, и�и в�е же уд��н� ��ль��вать��. Св�й�тв� Environment ��жн� та�же и���ль��вать дл� и��енени� на�тр�е� W��dows, ��нфи�урирующих �реду ��ружени� �ри �ажд�� вх�де в �и�те�у. Эта �адача не и� ле��их, ��эт��у тре�ует ��ъ��нений. При �ажд�� ваше� вх�де в �и�те�у W��dows на�траивает ��и��� �ере�енных �реды ��ружени�. Она ��лучает их �начени� и� не���ль�их и�т�чни��в. W��dows хранит ��и��� и���ль�уе�ых �� у��лчанию «��ще�и�те�ных» ��ределений �ере�енных �реды ��ружени�, ��т�рый �аждый ��ль��ватель ��лучает �ри вх�де в �и�те�у. Кр��е эт���, у �ажд��� ��ль��вател� ��жет и�еть�� д���лнительный на��р �ер��нифицир�ванных �ере�енных, ��т�рые ���ут д���лн�ть или �а�ен�ть �начени�, и���ль�уе�ые в �и�те�е �� у��лчанию. Вд��ав�� �� в�е�у эт��у, �ри вх�де в �и�те�у вычи�л�ет�� на��р дина�иче��их или «в�латильных» �начений, та�их �а� и�� �ервера ваше�� вх�да в �и�те�у и и�� те�уще�� ����ьютера. При вх�де в �и�те�у W��dows �начала инициали�ирует вашу �реду ��ружени� � и���ль��вание� дина�иче��их или «в�латильных» �ере�енных, �ате� д��авл�ет «�и�те�ные» ��ределени�, а �ате� д��авл�ет «��ль��ватель��ие» ��ределени�, чт��ы ���дать вашу начальную �реду ��ружени�. Эти начальные ��ределени� ��жн� и��енить в диал���в�� ��не Свойства системы (Compu��� P�op�����s� или в �ценарии. Св�й�тва Environment("system") и Environment("user") в��вращают ��лле�ции ��ъе�т�в WshEnvironment, �ред�тав� л�ющие начальные у�тан�в�и. Е�ли и��енить �начени� в этих ��лле�ци�х, W��dows введет эти и��енени� в дей�твие дл� �удущих вх�д�в в �и�те�у. (Еще �дин на��р �начений, и�вле�ае�ый и� �в�й�тва Environment("volatile"), �вл�ет�� ��и� ���� �ере�енных, вычи�л�е�ых «дина�иче��и» �ри и���ль��вании инф�р�ации те�уще�� вх�да в �и�те�у, н� ��тре�н��тей и��ен�ть в не� чт��ли�� не в��ни�ает.� П��ле вх�да в �и�те�у ��жн� и��енить �начени� �ере�енных �реды ��ружени� � ����щью ��на ���андн�й �тр��и, и���ль�у� ���анду set, �а� ��и�ан� в �лаве 10. И��енени�, вне�енные � ����щью ���анды set, в��дей�твуют т�ль�� на ���ию ��на ���андн�й �тр��и, в ��т�р�� выдана ���анда, и �ни �уще�твуют д� тех ��р, ���а вы нах�дите�ь в �и�те�е. При �ажд�� �а�у��е �р��ра��ы �на на�ледует ��� �ию те�ущих у�тан�в��, ��т�ра� на�ывает�� средой процесса. У�тан�в�и �р�це��а �вл�ют�� ит���в�й �у���й в�ех ��ределений и и��енений.
Работа со средой окружения 219 Н� лю�ые и��енени�, вне�енные в �реду �р�це��а �р��ра���й, не видны дру�и� �р��ра��а�, и �ни не ��хран�ют�� ���ле �авершени� ра��ты �р��ра��ы. ▼) В этом и состоит причина важных различий между коллекциями, возвращаемыми свойством Environment. Коллекция "process" предоставляет вам текущие значения переменных среды. Эту коллекцию следует использовать для извлечения переменных среды, унаследованных WSH при запуске. Коллекции "system" и "user" используются при управлении системой для установки начальных значений для будущих сеансов входа в систему и открываемых окон командной строки. Св�й�тва и �ет�ды ��лле�ций Environment ���а�аны в ��рав�е 4.12. СПРАВКА 4.12. СВОЙСТВА И МЕТОДЫ КОЛЛЕКЦИИ ENVIRONMENT СВОЙСТВА Item(имя) В��вращает ��держи��е �ере�ен�й �реды, имя ��т�р�й у�а�ан�. В��вращае� ��е �начение �вл�ет�� ��ределение� у�а�анн�й �ере�енн�й. Е�ли �ере�енна� не ��ределена, �в�й�тв� в��вращает �у�тую �тр��у (""�. Эт� �в�й�тв� д��ту�н� дл� чтени� и �а�и�и: е�у ��жн� �ри�в�ить н�в�е �начение, чт��ы и��енить ��ределение �ере�енн�й �реды или чт��ы ���дать н�в�е ��ределение �ере�енн�й �реды. Е�ли �начение и��ен�ет�� в ��лле�ции "process", эти и��енени� видны т�ль�� в т�� э��е��л�ре �ценари�, ��т�рый их вне�. Е�ли и��енить �начение в ��лле�ции "system" или "user", ��ределени� ��вли�ют т�ль�� на ��н� ���андн�й �тр��и, �т�рыт�е ���ле их и��енени�. Length В��вращает ��личе�тв� �ере�енных �реды ��ружени� W��dows в ��лле�ции. (Т�ль�� чтение.� МЕТОДЫ Count В��вращает ��личе�тв� �ере�енных �реды ��ружени� в ��лле�ции — �че� видн�, т� же �а��е чт� и Length. Remove strName Удал�ет �уще�твующую �ере�енную �реды, и�� ��т�р�й у�а�ан� в ар�у�енте strName. Е�ли удал�ет�� �ере�енна� и� ��лле�ции �р�це��а, и��енение ��жн� увидеть т�ль�� в т�� э��е��л�ре �ценари�, ��т�рый е�� вне�. Е�ли удал�ет�� �ере�енна� в ��лле�ции "system" или "user", и��енени� вли�ют т�ль�� на ��на ���андн�й �тр��и или на �рил�жени�, �а�ущенные ���ле их вне�ени�. Извлечение информации из среды окружения К�лле�ци� Environment("process") ��держит ��лный те�ущий на��р �ере�енных �реды (�а� � и�ена�и, та� и �е� и�ен�. Дл� и�влечени� �тдельных �ере�енных
220 Глава 4. Доступ к файлам и реестру �реды (и их �начений� и� эт�й ��лле�ции в �аче�тве инде��а �ледует в����ль��� вать�� и�ене� �ере�енн�й �реды. На�ри�ер, �ере�енна� �реды TEMP ��жет �ыть и�влечена � ����щью �ледующе�� ��ерат�ра: username = shl.Environment("process").Item("TEMP ") ▼o Если нужно просмотреть текущие установки среды, в качестве аргумента места Environment следует указать "process". Если опустить этот аргумент, Windows 7, Vista, XP, 2000 и NT вернут используемую по умолчанию системную среду, а не полноценную текущую среду окру- жения. С�и��� те�ущих �ере�енных �реды ��жн� выве�ти � ����щью �ледующе�� �ценари�: ' Файл примера script0420.vbs set shl = CreateObject("WScript.Shell") for each env in shl.Environment("process") wscript.echo env next При выв�де �а���� ��ъе�та �реды (в уче�н�� �ценарии эт� env� �т��ражает�� �тр��а "имя=значение", в �тличие �т �ет�да Item(имя), �ри вы��лнении ��т�р��� и�вле�ает�� т�ль�� �начение. Е�ли нужн� т�ль�� �ревратить �ере�енную �реды в ее �начение, ��лее ��ле�� ны� ��жет ��а�ать�� �ет�д Shell.ExpandEnvironmentStrings. Эт�т �ет�д ��анирует �тр��у в ��и��ах эле�ент�в вида %XXX%, �де XXX — эт� и�� �ере�енн�й �реды. %XXX% �а�ен�ет�� ��ределение� �ере�енн�й �реды ��ружени�. Эт�т �ет�д ��� �в�л�ет �ы�тр� �а��лн�ть �утевые и�ена, ��н�ванные на �атал��е W��dows, � че� уже у���инал��ь �ри ра����трении �рлы��в. Следующее выражение shl.ExpandEnvironmentStrings("%WINDIR%\notepad.exe") �а�ен�ет %WINDIR% �тр���й C:\WINDOWS или т�й �тр���й, ��т�ра� у�а�ывает �уть � �атал��у W��dows на те�уще� ����ьютере и в��вращает �равильный �уть C:\ WINDOWS\notepad.exe. ▼▼ Использование ExpandEnvironmentStrings является очень удобным способом получения значе- ний переменных среды окружения. Если нужно получить значение переменной varname, можно просто воспользоваться выражением shl.ExpandEnvironmentStrings("%varname%") Это особенно пригодится при использовании переменных среды, определяемых рекурсивно; некоторые переменные содержат в своих определениях элементы %XXX%. ExpandEnvironment- Strings занимается расширением всех элементов, пока не останется ни одного экземпляра имен, заключенных в символы %. Управление установками среды окружения Ка� уже ранее у���инал��ь, �ри �а�у��е н�в��� �рил�жени� W��dows или �ри �т�рытии н�в��� ��на ���андн�й �тр��и ваши на�тр�й�и �реды �ерут�� и� на��ра
Работа со средой окружения 221 вычи�л�е�ых �начений �лю� и� ��и��а ��ще�и�те�ных на�тр�е� �� у��лчанию, ��ъединенных � на�тр�й�а�и, ��ецифичны�и дл� �ажд��� ��ль��вател�. И�х�дные �начени� хран�т�� в рее�тре и ���ут реда�тир�вать�� �уте� и�� �енени� эле�ент�в ��лле�ции Environment("system") или Environment("user"). Дл� и��енени� ��ще�и�те�ных ��ределений �реды нужны �рава Ад�ини�т� рат�ра. В �ледующе� уче�н�� �ценарии ���а�ывает��, �а� д��авить н�вую �а��у � ��и� ��у PATH, чт��ы в�е ��ль��ватели и�ели д��ту� � �а��е дл� �ценариев: set shl = CreateObject("WScript.Shell") ' получение общесистемной коллекции среды, используемой по умолчанию set env = shl.Environment("system") ' добавление к пути точки с запятой плюс "c:\scripts" env.Item("PATH") = env.Item("PATH ") & ";c:\scripts" (Е�ли �а�у�тить эт�т �ценарий еще ра�, �н д��авит �а��у � �ути ��лее �дн��� ра�а. В���ре � ���ажу ��лее ��дх�д�щий ������ на�и�ани� эт��� �ценари�.� И��енени�, вн��и�ые в эту ��лле�цию, не вли�ют на уже �т�рытые ��на ��� �андн�й �тр��и или на уже �а�ущенные �рил�жени�. Ка� уже ��в�рил��ь, ��ределени� �ере�енных �реды ��жн� �делать дей�тву� ющи�и дл� в�ех ��ль��вателей или т�ль�� дл� ����твенн�й учетн�й �а�и�и ��ль� ��вател�. Предыдущий �ценарий д��авл�ет �а��у c:\scripts � �ере�енн�й PATH дл� в�ех ��ль��вателей, а �ледующий �ценарий set shl = CreateObject("WScript.Shell") set env = shl.Environment("user") env.Item("PATH") = env.Item("PATH ") & ";c:\scripts" и��ен�ет ��ределение �ере�енн�й PATH т�ль�� дл� вашей ����твенн�й учетн�й �а�и�и. Специальная обработка переменной PATH Ка� у���инал��ь ранее, �ри �т�рытии н�в��� ��на ���андн�й �тр��и или �а�у��е �рил�жени� W��dows ��ераци�нна� �и�те�а �ред��тавл�ет и� ��и��� �ере�енных �реды ��ружени�. Дл� ���тавлени� эт��� ��и��а W��dows �ред��редел�ет не� ��т�рые �начени� («в�латильные» �ере�енные�, д��авл�ет ��лле�цию "system" и д��авл�ет �ер��нифицир�ванную ��лле�цию "user". Е�ли �ере�енна� ��ределена �а� в "system", та� и в "user" ��лле�ции, и���ль� �ует�� �начение, ��ецифичн�е дл� данн��� ��ль��вател�. Н� �ере�енна� PATH ��ра�атывает�� ���дру���у. Е�ли �уще�твует ��ределение PATH, ��ецифичн�е дл� ��ль��вател�, �н� д��авл�ет�� � ��ще�и�те�н��у ��ределению, а не �а�ен�ет е��. Эт� ���в�л�ет ��редел�ть ����твенный индивидуальный ��и��� �ере�енн�й PATH, ���т��щий т�ль�� и� ваших ����твенных �р��ра��ных и �ценарных �а���, и ва� не нужн� в�лн�вать�� � ���ещении в не�� �тандартных �а��� �и�те�ы W��dows. О�н�вн�й �ричин�й та��й ��ра��т�и эт�й �ере�енн�й �вл�ет�� ваша �ащита. Е�ли �ы в�е ра��тал� ���дру���у и вы �ы �лучайн� не в�лючили в эту �ере�ен� ную �тандартный ��и��� �а��� W��dows, ваш ��и��� PATH �ыл �ы не��лн�ценны� и ��льшин�тв� �р��ра�� не ра��тал�.
222 Глава 4. Доступ к файлам и реестру В лю��� �лучае, е�ли �ценарий и���ль�ует�� дл� д��авлени� �а��и ли�� � "user"�, ли�� � "system"���ределению PATH, вы в�е же д�лжны д��авить е�� � и�� х�дн��у �начению на �лучай �еречи�лени� та� не��т�рых дру�их �а���: if len(env.Item("PATH ")) = 0 then ' если значение PATH было пустым, ' установить в нем путь к новой папке env.Item("PATH ") = newfolder else ' добавить путь к тому, что было раньше env.Item("PATH ") = env.Item("PATH") & ";" & newfolder end if При не��х�ди���ти �ри�енени� �ценари� д��авлени� � �ути ��н�ретн�й �а��и (на�ри�ер, �а� ча�ти у�тан�в�и �рил�жени�, �а� ча�ти на�тр�й�и н�вых ����ью� тер�в или �а� ча�ти �ценари� вх�да в �и�те�у�, �еред те� �а� д��авить эту �а��у, лучше в�е же �р�верить, не �ыла ли �на уже у�тан�влена в �уть. Дл� вы��лнени� эт�й �адачи ��жн� в����ль��вать�� �ледующи� �ценарие�: ' addtopath.vbs – добавление указанной папки к пути "для всех пользователей" dim shl, env set shl = CreateObject("WScript.Shell") set env = shl.Environment("system") add_folder_to_path "c:\scripts" ' добавление к PATH папки c:\scripts ' ------------------------------------------------------------------------ ' add_folder_to_path – добавляет указанную папку к PATH, если она туда еще ' н е добавлена sub add_folder_to_path (newfolder) dim curpath, i, testfolder curpath = ucase(trim(env.Item("PATH "))) ' п олучения копии текущей PATH do while len(curpath) > 0 ' проверка каждой папки в списке i = instr(curpath, ";") ' . .. пои ск сим вол а ";" (разделителя) ifi=0then ' ... если не найден, значит, в curpath testfolder = curpath ' только одна папка. Взять ее, curpath ="" ' и больше ничего не делать else ' . .. в противном случае взять все, за исключением символа ";" testfolder = trim(left(curpath, i-1)) ' в качестве имени папки, curpath = trim(mid(curpath, i+1)) ' и оставить до следующего end if ' прохода if ucase(newfolder) = testfolder then exit sub ' папка уже была 'вPATH loop ' . .. продолжить разбор curpath на части ' есл и п апк а н е н айдена, добавить newfolder к PATH env.Item("PATH ") = env.Item("PATH") & ";" & newfolder end sub ▼) Чтобы изменить список среды "system" в Windows 7 и Vista, нужно запустить сценарий с рас- ширенными привилегиями. На XP нужно запустить его из учетной записи Администратора ком- пьютера. Для изменения настроек среды "user" не нужны ни расширенные привилегии, ни права администратора. Для запуска сценария с расширенными привилегиями запустите его из окна командной строки, открытого с расширенными привилегиями, или щелкните правой кнопкой мыши в Windows Explorer и выберите Запуск от имени администратора (Run As Administrator).
Работа с реестром 223 Работа с реестром Рее�тр W��dows �вл�ет�� хранилище� �и�те�н�й и ��ль��ватель���й инф�р�ации, д��ту�ны� лю��й �р��ра��е W��dows. Рее�тр �ред��тавл�ет централи��ванн�е, х�р�ш� у�равл�е��е �е�т� хранени� инф�р�ации � на�тр�й�ах, �ред��чтени�х и �е���а�н��ти. ▼) Возможно, вы помните страшные истории времен Windows 95, 98 и Me о чьих-то базах данных реестра, поврежденных из-за отказов электропитания или о так называемых синих экранах смерти. Повреждение реестра — настоящий кошмар, поскольку если реестр будет испорчен, Windows не сможет работать. К счастью, сейчас реестр надежно защищен от случайных аварий и повреждений. Но это вам вряд ли поможет, если ваш сценарий преднамеренно удалит или изменит важную информацию реестра. При изменении хранящейся в реестре информации следует проявлять осторожность, особенно когда дело касается разделов Control, System и Classes и любого из подразделов, озаглавленных словом Windows. Перед запуском любого проекта, преду- сматривающего серьезные изменения реестра, следует сделать полную резервную копию си- стемы. Не���тр� на эт� �тр���е �реду�реждение, нужн� ��а�ать, чт� ра��та � рее�тр�� не д�лжна ва� �т�у�ивать, и �ценарии, и�еющие в����жн��ть читать и �а�и�ывать данные рее�тра, ���ут �рине�ти ��льшую ��ль�у. Ор�ани�аци� рее�тра в� �н���� ��х�жа на файл�вую �и�те�у. Т�чн� та� же �а� ди�� ��держит �а��и, а �а��и ���ут ��держать файлы и вл�женные �а��и, рее�тр ��держит инф�р�ацию в разделах, а ра�делы ���ут ��держать параметры и вл�женные ра�делы. Синта��и� дл� у�а�ани� ра��ещени� инф�р�ации в ре� е�тре даже �р�ще файл�в��� �ути. На�ри�ер, ти�ичны� и�ене� ра�дела �вл�ет�� HKE�_CURRENT_USER\Software\Microsoft. Та� же �а� ����ьютер ��жет и�еть не���ль�� ди���в, рее�тр и�еет не���ль�� �тдельных ра�дел�в, чьи и�ена начинают�� � HKE�_. При у�а�ании и�ен ра�дел�в или �ара�етр�в � ��ъе�та�и тех �ценариев, ��т�рые �ы ���ирае��� ра����треть, вы д�лжны у�а�ать ��лный �уть � лю���у ра�делу или �ара�етру, ��т�рый ва� интере� �ует, и �аждый �уть д�лжен начинать�� � �дн��� и� ��ти �тандартных ра�дел�в. Нуж� н� и���ль��вать ��лные и�ена или �дну и� а��ревиатур, �еречи�ленных в та�л. 4.5 . Таблица 4.5. Имена и аббревиатуры корневых разделов реестра Корневое имя Аббревиатура H��Y_CLASS�S_ROOT H�CR H��Y_CURR�NT_CONFIG — H��Y_CURR�NT_US�R H�CU H��Y_LOCAL_MACHIN� H�LM H��Y_US�RS — Пара�етры �вл�ют�� ��и�ен�ванны�и эле�ента�и ра�дел�в и у�а�ывают�� �у� те� д��авлени� и�ени �ара�етра � �утев��у и�ени ра�дела. На�ри�ер, в W��dows
224 Глава 4. Доступ к файлам и реестру V�s�� и XP ра�дел рее�тра HKE�_CURRENT_USER\SessionInformation и�еет �ара�етр �� и�ени ProgramCount, в ��т�р�� �т�леживает�� ��личе�тв� �р��ра��, �а�ущен� ных ��ль��вателе�. Путевы� и�ене� эт��� �ара�етра �удет HKE�_CURRENT_USER\ SessionInformation\ProgramCount. Изучение разделов и параметров реестра Мет�д RegRead ��ъе�та WScript.Shell ���в�л�ет читать �начени� и� эле�ент�в рее�тра. Пара�етры ��жн� ��лучать �уте� �р��т��� у�а�ани� их �утевых и�ен. (Ра�дел та�же ��жет и�еть �начение �� у��лчанию, у�а�ывае��е и�ене� �а���� ра�дела � �а�ы�ающи� ��ратны� �лэше�, н� �е� и�ени �ара�етра.� Мет�д RegRead, �а� ���а�ан� в �ледующе� �ри�ере, в��вращает �начение дл� у�а�анн��� �ара�етра: set shell = CreateObject("WScript.Shell") wscript.echo shell.RegRead("HKCU\SessionInformation\ProgramCount") Мет�д RegRead ��жет вернуть �дин и� не���ль�их ти��в �ара�етр�в, в �ави� �и���ти �т ти�а данных, хран�щих�� в �ара�етре рее�тра. Ти�ы данных рее�тра и ���твет�твующие ти�ы данных, в��вращае�ые �ет�д�� RegRead, �еречи�лены в та�л. 4.6 . Сначала у�а�аны �а�ые ра��р��траненные ти�ы. Таблица 4.6. Типы параметров реестра и результаты, возвращаемые методом RegRead Тип в реестре Тип, возвращаемый RegRead Назначение R�G_DWORD Цел�е чи�л� �динарн�й т�чн��ти Чи�л� R�G_SZ Стр��а Те��т�вые данные R�G_�XPAND_SZ Стр��а Те��т �� в�тр�енны�и �ере�енны�и �реды R�G_MULTI_SZ Ма��ив �тр�� Не���ль�� �тр�� те��та R�G_�INARY Ма��ив �тр�� Универ�альные дв�ичные данные При и���ль��вании RegRead �а�р�шенный эле�ент д�лжен �ри�ут�тв�вать в рее�тре, иначе �ценарий ��енерирует �ши��у. Сохранение информации в реестре И��ен�ть на�тр�й�и рее�тра � и���ль��вание� �ценари� ��жн� �ри у�равлении �етью (на�ри�ер, дл� �ред�и�ывани� ��ределенных на�тр�е� на вх�д в �и�те�у�. Кр��е т���, рее�тр ��жет �ыть уд��ны� �е�т�� дл� хранени� инф�р�ации, и���ль� �уе��й �ценари��и, �� �ричине �в�е�� ���т��н�тва — инф�р�аци�, ���ещенна� в рее�тр, ��тает�� та� �ежду �а�у��а�и ваше�� �ценари� и �ежду �еан�а�и ра��ты. Эти� ��жн� в����ль��вать�� дл� хранени� �четчи��в � ��личе�тв�� �а�у���в �ценари�, �начений ар�у�ент�в �� у��лчанию и т. д .
Работа с реестром 225 ▼o Сохранение информации в реестре требует особой осторожности: можете мне поверить на сло- во, это действительно чревато порчей компьютера. Перед тем как пускаться в приключение по отладке сценария, модифицирующего реестр, лучше создать резервную копию реестра и своих наиболее важных файлов. Также обратите, пожалуйста, внимание на примечание в конце этого раздела, относящееся к внесению изменений в раздел реестра HKE�_LOCAL_MACHINE для Windows 7 и Vista. Мет�д RegWrite ���дает �ара�етры рее�тра. Е�� ��жн� и���ль��вать дл� ���да� ни� �ара�етра �уте� �ри�ваивани� е�у �начени� �� у��лчанию. Мет�д RegWrite и���ль�ует три ар�у�ента: y y strName — �уть ���давае���� ра�дела или �ара�етра. Чт��ы у�а�ать ра�дел, �уть нужн� �авершить �и�в�л�� ��ратн��� �лэша (\�. y y Value — данные, �ри�ваивае�ые �ара�етру. Д��у��ают�� т�ль�� �тр���вые или цел�чи�ленные �начени�; �а��ивы не д��у��ают��. y y strType — на�вание и���ль�уе���� ти�а данных рее�тра, у�а�анн�е в виде �тр��и. Д��у��ают�� �начени� "REG_SZ", "REG_DWORD", "REG_BINARY" и "REG_EXPAND_SZ". Е�ли ар�у�ент strType ��ущен, ��ъе�т авт��атиче��и вы�ирает ти� данных REG_DWORD или REG_SZ, в �ави�и���ти �т т���, �а��е �начение и�еет ар�у�ент Value, чи�л�в�е или �тр���в�е. Х�т� и��енение �и�те�ных на�тр�е� �вл�ет�� �чень ��а�ны� дел��, рее�тр ��жн� в��лне �е���а�н� и���ль��вать дл� хранени� ��нфи�ураци�нн�й инф�р� �ации, ��т�рую нужн� �делать д��ту�н�й дл� �ценариев, на�ри�ер дл� хранени� и�ен �ервер�в, и���ль�уе�ых �� у��лчанию, важных IP�адре��в и и�ен ��ль��ва� телей или дл� �а�у��а ��ычных �четчи��в или �четчи��в �ши���. Рее�тр �вл�ет�� х�р�ши� �е�т�� дл� хранени� инф�р�ации, ��т�ра� д�лжна �уще�тв�вать �т �дн��� �а�у��а �ценари� д� дру����. В не� та�же ��жн� хранить на�тр�ечную инф�р�ацию, на�ри�ер и�� ��ль��вател�, ��т�рый д�лжен �ыть �р�� инф�р�ир�ван � в��ни�ших �р��ле�ах и т. д . Та�и� ��ра���, на�тр�й�и ���ут �ыть и��енены �е� ��дифи�ации �а���� �ценари�, а �дна и та же инф�р�аци� ��жет �ыть и���ль��вана �ра�у не���ль�и�и �ценари��и. Е�ли дл� хранени� инф�р�ации в рее�тре в����ль��вать�� �дни� и� �тандарт� ных �е�т, эт� �удет ��вершенн� �е���а�н�. Я ��ль�ую�ь �ледующи� �ет�д��: y y Дл� инф�р�ации, уни�альн�й дл� �ажд��� ��ль��вател�, �ара�етры хран�т�� в ра�деле HKCU\Software\Имя_вашей_компании\Имя_сценария, в на�вание ��� т�р��� ��д�тавлен� реальн�е на�вание ����ании и реальн�е и�� �ценари�. Эт� ���в�л�ет и��е�ать ��нфли�т�в � те�и ра�дела�и, ��т�рые и���ль�уют� �� �р�и�в�дител��и �р��ра��н��� ��е��ечени� или дру�и�и ваши�и �цена� ри��и. y y Дл� инф�р�ации, ��щей дл� в�ех ��ль��вателей, и���ль�ует�� ра�дел HKLM\ Software\Имя_вашей_компании\Имя_сценария. В �ледующе� �ри�ере ���а�ан�, �а� �ценарий ��жет ��хранить в рее�тре чи�л�, �вл�ющее�� �четчи��� ��личе�тва �а�у���в �ценари�:
226 Глава 4. Доступ к файлам и реестру ' Файл примера script0422.vbs set shell = CreateObject("WScript.Shell") nruns = shell.RegRead("HKCU\Software\Mycompany\RunCount\number of runs") nruns = nruns+1 wscript.echo "Количество запусков:", nruns Shell.RegWrite "HKCU\Software\Mycompany\RunCount\number of runs",_ nruns, "REG _DWORD " Та� �а� �ценарий начинает�� � чтени� и� �ара�етра ��личе�тва �а�у���в — "number of runs", эт�т �ара�етр д�лжен �уще�тв�вать еще д� �ерв��� �а�у��а �ценари�. В ��ще�, нужн� �аранее ���дать вручную не��х�ди�ые �ара�етры ваше�� �рил�жени� или ���дать «у�тан�в�чный» �ценарий, ���дающий �ара�етры дл� �ерв��� �ри�енени�. И т�чн� та� же �а� �еред ���дание� ��д�а��и нужн� ���дать на ди��е �а��и верхне�� ур�вн�, �еред ���дание� ра�дел�в нижне�� ур�вн� нужн� �начала ���дать ра�делы верхне�� ур�вн�. «У�тан�в�чный» �ценарий дл� �ри�ера �� �четчи��� ��жет и�еть �ледующий вид: ' Файл примера script0423.vbs set shell = CreateObject("WScript.Shell") Shell.RegWrite "HKCU\Software\Mycompany\", "" Shell.RegWrite "HKCU\Software\Mycompany\RunCount\", "" Shell.RegWrite "HKCU\Software\Mycompany\RunCount\number of runs",_ 0, "REG_DWORD" Эт�т ��д ��е��ечивает наличие ра�дел�в Mycompany и RunCount, а �ате� иници� али�ирует ��личе�тв� �а�у���в �начение� 0. Ра�дел Software �уще�твует в�е�да; �н ���дает�� �ри у�тан�в�е W��dows. Еще �дин �ри�ер ���а�ывает, �а� ���луживающий �ценарий ��жет и���ль� ��вать рее�тр дл� хранени� и�ени у�равл�е���� �ервера. Эт�т �ценарий дает ва� в����жн��ть у�а�ывать и�� �ервера в ���андн�й �тр��е. Е�ли �ервер у�а�ан, �це� нарий ��хран�ет е�� и�� в рее�тре дл� �удуще�� и���ль��вани�. Е�ли �ервер не у�а�ан, �ценарий и���ль�ует и��, ранее ��храненн�е в рее�тре. К�д эт��� �ри�ера и�еет �ледующий вид: ' Файл примера script0424.vbs set shell = CreateObject("WScript.Shell") if WScript.Arguments.Count = 0 then ' сервер не указан в командной строке. Получение значения по умолчанию ' из реестра. ' не ост ана вли ват ься при ошибке, если параметр не определен. on error resume next servername =shell.RegRead("HKCU\Software\Mycompany\ServerClean\ servername") if isempty(servername) or err.Number <> 0 then ' им я п о умолчанию не найдено ... вывод сообщения и выход MsgBox("При первом запуске сценария нужно указать имя сервера в " "&_ командной строке. ") WScript.Quit 1 end if on error goto 0 ' во сст ано вле ние нормального поведения остановки ' при ошибке
Работа с реестром 227 else ' сервер был назван в командной строке. Сохранение имени в реестре. ' обеспечение создания разделов MyCompany и ServerClean, если ' они еще не существуют. servername = WScript.Arguments(0) Shell.RegWrite "HKCU\Software\Mycompany\", " " Shell.RegWrite "HKCU\Software\Mycompany\ServerClean\", " " Shell.RegWrite "HKCU\Software\Mycompany\ServerClean\servername",_ servername, "REG _SZ " end if WScript.echo "Очистка сервера \\" & servername & ". .." ' т еперь обслуживание сервера: очистка его от временных файлов и т. д . ... ▼) Чтобы модифицировать часть реестра HKE�_LOCAL_MACHINE на Windows 7 и Vista, нужно за- пустить ваш сценарий с расширенными привилегиями. Для запуска сценария с этими приви- легиями запустите его из окна командной строки, созданного с расширенными привилегиями, или щелкните правой кнопкой мыши в Windows Explorer и выберите пункт контекстного меню Запуск от имени администратора (Run As Administrator). Если не запустить сценарий с расширенными привилегиями, имеющийся в Vista механизм «пе- ренаправления реестра» откажет, и получится, что сценарий вроде бы работает, хотя реально он ничего не делает. Получится так, что любые изменения, которые сценарий попытается внести в разделы, подчиненные разделу HKE�_LOCAL_MACHINE, будут вместо этого записа- ны в раздел HKE�_CURRENT_USER\Software\Classes\VirtualStore\MACHINE. Любые запущенные вами программы или сценарии «видят» эти изменения реестра, если они действительно были сохранены в разделе HKE�_LOCAL_MACHINE, но программы и сценарии, запущенные другими пользователями, их не увидят.
Сетевые и принтерные объекты В эт�й �лаве ���а�ан ��р�д�� и���ль��вани� ��ъе�та WScript.Network дл� у�рав� лени� �етевы�и ди��а�и и ��д�лючени��и �етевых �ринтер�в. y y Перед чтение� эт�й �лавы �ледует и�учить �атериал �лавы 3 «С��дание �цена� риев и ра��та � ��ъе�та�и». y y В эт�й �лаве ра����трен� и���ль��вание WScript.Network дл� у�равлени� �е� чатью и� DOS� и W��dows��рил�жений. y y В ���ледне� ра�деле ���а�ан�, �а� ��жн� �т�равить выв�д и� �ценари� не� ���ред�твенн� на �ринтер — эт� ����енн� важн� дл� �ценариев, �а�у��ае�ых авт��атиче��и и� Планир�вщи�а �аданий (T�sk S�h�du����. Управление сетевыми и принтерными подключениями Пр��ра��ы W��dows S���p� Hos� (WSH� ���ут делать �а�р��ы � �етевы� и �рин� терны� ��д�лючени��и ваше�� ����ьютера и у�равл�ть эти�и ��д�лючени��и. Эти дей�тви� ���ут ��над��ить�� �� цел��у р�ду �ричин: y y Сценарию, �енерирующе�у д��у�ентацию, ��жет ��над��ить�� ���рать �ете� вую инф�р�ацию и ���тавить �тчет. y y М�жет ��тре��вать�� �ценарий вх�да в �и�те�у, �арантирующий �ри �ажд�й ре�и�трации ваших ��ль��вателей д��ту�н��ть нужных �етевых ди���в и �рин� терных ��д�лючений, не�ави�и�� �т т���, удачн� или нет дей�тв�вали ��ль��� ватели в� вре�� �в�их �редыдущих �еан��в ра��ты. (Х�т� е�ли и���ль�ует�� W��dows 7 или V�s�� и W��dows S��v�� 200�, A���v� D�����o�y ��жет ���а��� тить�� �� эт�� �а ва�. Эт�т в��р�� �удет ра����трен в данн�й �лаве чуть ���же.� y y Ваше �етев�е ��ружение ��двержен� ча�ты� и��енени��, ��эт��у тре�ует�� в����ль��вать�� �ценарие� дл� �а�и�и и в���тан�влени� �равильных на�тр�е�. y y Тре�ует�� �риве�ти � един��у �тандарту и у�р��тить на�тр�й�у т�ль�� чт� у�тан�вленных в вашей �р�ани�ации ����ьютер�в. 5
Управление сетевыми и принтерными подключениями 229 y y Ра��ча� �танци� или �ервер и���ль�уют�� в �аче�тве и��ытательн��� �тенда, и тре�ует��, не �атрачива� ����ых у�илий, вы�рать �дну и� �тандартных ��н� фи�ураций. WSH в ���т��нии ����чь в вы��лнении в�ех этих �адач. Х�т� в режи�е ��� �андн�й �тр��и ��жн� в����ль��вать�� ���анд�й net, ��т�ра� ��жет вы��лнить р�д �х�дных �адач, �ценарии WSH �редла�ают ��лее т�н��е у�равление и ���ут ра��тать не т�ль�� � �етью, н� и � рее�тр��, файла�и и дру�и�и �и�те�ны�и ���� ��нента�и. И���ль�уе�ые в �ценари�х ��ъе�ты ���в�л�ют та�же в����ль��вать�� �луж� �а�и �ринтер�в и (или� фа���в дл� авт��атиче����� �енерир�вани� выв�да и� ваших �ценариев. Печать и ра��ыл�а фа���в и� �ценариев ра���атривают�� ���ле ра����трени� в��р���в у�равлени� �ет��и и �ринтера�и в �лаве 6 «О�ъе�ты ��� ��щений и фа���в». ▼) Следует также запомнить, что объекты, рассматриваемые в этих главах, можно использовать в макросах Microsoft Word и других сценарных приложениях, а не только в WSH. Первы� �ред�тавл�е�ы� в данн�й �лаве ��ъе�т�� �удет WSHNetwork, ��т�рый ���дает�� � и���ль��вание� и�ени "WScript.Network", �а� ���а�ан� в �ледующе� ��ерат�ре: set wshNetwork = CreateObject("WScript.Network") Эт� ве�ь�а �ра�тичный ��ъе�т. Ка� и в �лучае и���ль��вани� ранее ра����� тренн��� ��ъе�та Scripting.FileSystemObject, дл� вы��лнени� �етевых �адач в �ценарии нужен �удет т�ль�� �дин э��е��л�р ��ъе�та WScript.Network. Е�� �в�й�тва и �ет�ды ���а�аны в ��рав�е 5.1 . СПРАВКА 5.1. СВОЙСТВА И МЕТОДЫ ОБЪЕКТА WSHNETWORK СВОЙСТВА ComputerName В��вращает �етев�е и�� ����ьютера, у�тан�вленн�е в� в�лад�е Имя ком- пьютера (Compu��� N�m�� диал���в��� ��на Свойства системы (Sys��m P�op��� ���s�. Эт� и�� ����ьютера и���ль�ует�� �ри ра��те в �ети W��dows. (Т�ль�� чтение.� UserDomain В��вращает и�� �етев��� д��ена W��dows дл� учетн�й �а�и�и т��� ��ль��� вател�, ��т�рый нах�дит�� в �и�те�е в на�т��щий ���ент. Дл� вх�д�в в �и�те�у ��д учетны�и �а�и���и, не и���ль�ующи�и д��ены или �вл�ющи�и�� л��аль� ны�и, эт� и�� ��в�адает � и�ене� ����ьютера. (Т�ль�� чтение.� UserName В��вращает и��, ��д ��т�ры� в�шел в �и�те�у те�ущий ��ль��ватель. (Т�ль�� чтение.�
230 Глава 5. Сетевые и принтерные объекты МЕТОДЫ AddPrinterConnection LocalName, RemoteName[, UpdateProfile[, UserName, Password]] Перена�равл�ет �дин и� э�улируе�ых ��рт�в LPT��ринтера, д��ту�ных MS� DOS��рил�жени�� на л��альн�� ����ьютере на удаленный �етев�й �ринтер. При эт�� и���ль�уют�� �ледующие ар�у�енты: y y LocalName — и�� ��рта �ринтера DOS ("LPT1", "LPT2" или "LPT3"�, и���ль� �уе��е дл� �ерена�равлени� на �етев�й �ринтер. Перена�равить LPT���рт, ��т�рый уже и���ль�ует�� фи�иче��и� л��альны� �ринтер��, нев����жн�. y y RemoteName — ��щее и�� �етев��� �ринтера, ���твет�твующее универ�альн��у ���лашению �� �ри�ваиванию и�ен —U��v��s�� N�m��g Co�v����o� (UNC� (\\ машина\общее_имя�. М�жн� у�а�ать у��р�ченн�е ��щее и�� �ринтера или е�� «друже���е» и�� (на�ри�ер, "\\sumatra\okidata" или "\\sumatra\Okidata OL 810"�. y y UpdateProfile — не����ательн�е �улев� �начение. Е�ли ар�у�ент и�еет �начение True, �т��ражение �ринтера ��хран�ет�� в �р�филе те�уще�� ��ль��вател�, чт��ы и�ела�ь в����жн��ть е�� в���тан�влени� в �р�це��е �ледующе�� вх�да в �и�те�у. y y UserName — не����ательный ар�у�ент. Эт� и�� учетн�й �а�и�и ��ль��вател�, д��у�ти��е на удаленн�� ����ьютере дл� и���ль��вани� в данн�� �етев�� ��д�лючении. Е�ли уже е�ть ��д�лючение �етев��� ди��а или �ринтера на т�� же удаленн�� ����ьютере, и���ль�ующее и�� ��ль��вател� �� у��лчанию или �а��е�ни�удь дру��е и�� ��ль��вател�, эт�т ар�у�ент не ра��тает. (Дл� ��д�лючени� � ��н�ретн��у удаленн��у ����ьютеру �дн�вре�енн� ��жет и���ль��вать�� т�ль�� �дин на��р авт�ри�аци�нных данных.� Ар�у�ент ��жет �ыть у�а�ан в виде "имя_пользователя" дл� и���ль��вани� �дн�й и� л��альных учетных �а�и�ей на удаленн�й �ашине или в виде "\\домен\имя_пользователя" дл� и���ль��вани� учетн�й �а�и�и д��ена. y y Password — не����ательный ар�у�ент. Пар�ль вх�да в �и�те�у, �в��анный � у�а� �анны� и�ене� ��ль��вател�, — UserName. Е�ли ��рт уже �ерена�равлен или и���ль�ует�� ��д�люченны� � не�у л�� �альны� �ринтер��, �енерирует�� �ши��а. AddWindowsPrinterConnection PrinterPath [, DriveName [, Port]] Д��авл�ет ��д�лючение � удаленн��у �етев��у �ринтеру, ��т�рый ���ле эт��� д��ту�ен W��dows��рил�жени��. При эт�� в ��ль��ватель��ую �а��у Принтеры (P������s� д��авл�ет�� �нач��. О�щее и�� �етев��� �ринтера в UNC�н�тации (на�ри�ер, "\\машина\ общее_имя"� у�а�ывает�� в ар�у�енте PrinterPath. М�жн� у�а�ать ���ращен� н�е ��щее и�� �ринтера или е�� друже���е и�� в т�� виде, �а� �н� �т��ражен� удаленны� ����ьютер��. Ар�у�енты DriverName и Port тре�уют�� т�ль�� ���да �ценарий �а�у��ает�� на ����ьютерах, ра��тающих ��д у�равление� W��dows 9� или M�, ��эт��у �де�ь �ни не ра���атривают��. В �ценари�х их �ледует ��у��ать.
Управление сетевыми и принтерными подключениями 231 Е�ли �нач�� ��д�лючени� дл� у�а�анн��� �ринтера уже �уще�твует, �ши��а не �енерирует��. EnumNetworkDrives() В��вращает ��лле�цию ��ъе�т�в, �еречи�л�ющих �у�вы ди���в, �т��ража� е�ых дл� удаленных �етевых ди���в. О�ъе�ты ��держат �тр���вые �начени� и и���ль�уют�� ���арн�. Первый эле�ент, .Item(0), �вл�ет�� и�ене� �т�� �раженн��� ди��а, на�ри�ер "F:". Вт�р�й эле�ент, .Item(1), �вл�ет�� ��щи� UNC�и�ене�, на ��т�р�е ��уще�твлен� �ерена�равление ди��а. Т�чн� та� же .I tem(2) �вл�ет�� и�ене� ди��а, а .Item(3) — ���твет�твующи� ��щи� и�е� не� и т. д. Мы ра����три� чуть ���же в данн�� ра�деле, �а� ра��тать � эти� �транны� ра���л�жение�. EnumPrinterConnections() В��вращает ��лле�цию ��ъе�т�в, в ��т�рых �еречи�л�ют�� LPT���рты, �е� рена�равленные на удаленные �етевые �ринтеры. Ка� и в �лучае � EnumNetwork- Drives, эти ��ъе�ты ��держат �р��тые те��т�вые �тр��и и и���ль�уют�� ���арн�. Первый эле�ент �ажд�й �ары �вл�ет�� л��альны� и�ене� ��рта (на�ри�ер, "LPT1"�. Вт�р�й эле�ент �ажд�й �ары �вл�ет�� и�ене� удаленн��� �ринтера. В��вращенные и�ена ���ут �ыть не ��р�т�и�и ��щи�и и�ена�и в ф�р�ате UNC, а «друже�твенны�и» и�ена�и �ринтер�в удаленн�й �ашины. На�ри�ер, в�е�т� \\sumatra\okidata и�� ��жет �ыть у�а�ан� в ��и��е �а� "\\sumatra\Okidata OL 810". MapNetworkDrive LocalName, RemoteName [, UpdateProfile [, UserName, Password]] Перена�равл�ет ��ращени� � у�а�ани��и �у�вы л��альн��� ди��а � удален� н�й ��щей �а��е. При эт�� и���ль�уют�� �ледующие ар�у�енты: y y LocalName — �у�ва ди��а, и���ль�уе�а� дл� �ерена�равлени�. Эт�т ар�у�ент ��жет �ыть та�же �у�т�й �тр���й дл� ���дани� ��д�лючени� � удаленн��у ��ще�у ре�ур�у �е� �т��ражени� на �у�ву; эт� ��жет увеличить ���р��ть ��� �лед�вательн��� ��ращени� � удаленн��у ди��у. y y RemoteName — ��щее и�� удаленн�й �а��и в ф�р�ате UNC (на�ри�ер, "\\сер­ вер\общее_имя"�. y y UpdateProfile — не����ательный �улев ар�у�ент. Е�ли эт�т ар�у�ент �ередан �е� т�ду и и�еет �начение True, �т��ражение ди��а д��авл�ет�� � �р�филю учетн�й �а�и�и те�уще�� ��ль��вател�, чт��ы �н� в���танавливал��ь �ри �ледующе� вх�де в �и�те�у. y y UserName — не����ательный ар�у�ент. Эт� и�� учетн�й �а�и�и ��ль��вател�, д��у�ти��е на удаленн�� ����ьютере дл� и���ль��вани� в данн�� �етев�� ��д�лючении. Е�ли уже е�ть ��д�лючение �етев��� ди��а или �ринтера на т�� же удаленн�� ����ьютере, и���ль�ующее и�� ��ль��вател� �� у��лчанию или �а��е�ни�удь дру��е и�� ��ль��вател�, эт�т ар�у�ент не ра��тает. (Дл� ��д�лючени� � ��н�ретн��у удаленн��у ����ьютеру �дн�вре�енн� ��жет и���ль��вать�� т�ль�� �дин на��р авт�ри�аци�нных данных.� Ар�у�ент ��жет �ыть у�а�ан в виде "имя_пользователя" дл� и���ль��вани� �дн�й и� л��альных
232 Глава 5. Сетевые и принтерные объекты учетных �а�и�ей на удаленн�й �ашине или в виде "\\домен\имя_пользователя" дл� и���ль��вани� учетн�й �а�и�и д��ена. y y Password — не����ательный ар�у�ент. Эт� �ар�ль дл� и���ль��вани� �ри аутен� тифи�ации у�а�анн��� и�ени ��ль��вател� — UserName. Е�ли �у�ва ди��а уже �адей�тв�вана в �т��ражении, �у�ва ���твет�твует л��альн��у фи�иче����у ди��у или е�ли �етев�й �уть не �уще�твует, эт�т �ет�д дает ���й. RemoveNetworkDrive Name [, Force [, UpdateProfile]] От�лючает �т��ражение на �у�ву ди��а удаленн�й ��щей �а��и. При эт�� и���ль�уют�� �ледующие ар�у�енты: y y Name — �у�ва �т�лючае���� ди��а (на�ри�ер, "F:"�. Учтите, чт� дв�ет�чие �вл�ет�� ����ательны� эле�ент��. Е�ли �етев�й �уть �ыл ��д�лючен �е� у�а� �ани� �у�вы ди��а, в�е�т� �у�вы �ледует у�а�ать и�енн� эт�т �уть. y y Force — не����ательный �улев ар�у�ент. Е�ли �н у�а�ан и и�еет �начение True, �т��ражение на �у�ву ди��а �т�лючает��, даже е�ли �н� еще и���ль�ует��. В �р�тивн�� �лучае, е�ли �т��ражение и���ль�ует��, �ценарий �енерирует �ши��у. И���ль��вание ��начает, чт� л��альна� �р��ра��а и���ль�ует файл на удаленн�� ди��е или чт� ��н� ���андн�й �тр��и и�еет данн�е �т��ражение в �аче�тве �в�е�� те�уще�� ди��а. y y UpdateProfile — не����ательный �улев ар�у�ент. Е�ли эт�т ар�у�ент у�а�ан и и�еет �начение True, �т��ражение ди��а удал�ет�� и� �р�фил� учетн�й �а�и�и те�уще�� ��ль��вател�, чт��ы �н� не в���танавливал��ь авт��атиче��и �ри �ледующе� вх�де в �и�те�у. Е�ли �т��ражение �а�и�ан� в �р�филь и ар�у�ент UpdateProfile не у�а�ан или и�еет �начение False, �т��ражение в���танавлива� ет�� �ри �ледующе� вх�де в �и�те�у. Е�ли ��д�лючение �т�ут�твует, �енерирует�� �ши��а. RemovePrinterConnection Name [, bForce [, bUpdateProfile]] Удал�ет �ерена�равление � л��альн��� э�улируе���� LPT���рта на удален� ный �етев�й �ринтер. При эт�� и���ль�уют�� �ледующие ар�у�енты: y y Name — и�� �ерена�равленн��� ��рта (на�ри�ер, "LPT1"� или ��щее и�� в ф�р�ате UNC, на ��т�р�е �ыл �ерена�равлен ��рт; ���леднее у�а�ание ��жет удалить �т��ражение не���ль�их LPT���рт�в на �дин и т�т же �ринтер. Дл� �т�ены DOS��ерена�равлени� у�ажите в Name и�� л��альн��� �ерена�равлен� н��� DOS���рта (на�ри�ер, "LPT2"�. y y Force — не����ательный �улев ар�у�ент. Е�ли �н у�а�ан и и�еет �начение True, �ерена�равление удал�ет��, даже е�ли �р��ра��а на л��альн�� ����ьютере �уфери�ует выв�д на �ринтер. y y UpdateProfile — ��. ��и�ание та���� же ар�у�ента дл� �ет�да RemoveNetworkDrive. Е�ли у�а�анн�е ��д�лючение или �ринтер �т�ут�твует, �енерирует�� �ши��а.
Извлечение сетевой пользовательской информации 233 SetDefaultPrinter PrinterName У�танавливает ��щий �етев�й �ринтер в �аче�тве �ринтера �� у��лчанию на л��альн�� ����ьютере. Ар�у�ент PrinterName �вл�ет�� ��ще� и�ене� удаленн��� �ринтера в ф�р�ате UNC. Эт�т �ет�д нужн� �ри�ен�ть ���ле и�� ��ль��вани� �ет�да AddWindowsPrinterConnection, ���дающе�� ��д�лючение � т��у же ��ще�у �ринтеру. Эт�т �ет�д не ��жет вы�рать в �аче�тве и���ль�уе���� �� у��лчанию л�� �альный �ринтер, а та�же не ��жет �ред��тавить �а��й�ни�удь ������ ��реде� лить те�ущий, и���ль�уе�ый �� у��лчанию �ринтер. Следует уче�ть, чт� ��ъе�т WScript.Network ��раничен в �в�их в����жн��т�х. Он ��жет вы��лн�ть �ледующие �адачи: y y Д��у��ать �р����тр, н� не и��енение ��ль��ватель����� и�ени, ��д ��т�ры� �ыл ��уще�твлен вх�д в �и�те�у, и�ени ����ьютера и д��ена те�уще�� вх�да в �и�те�у. y y Д��у��ать ���тавление ��и��а, д��авление и удаление �т��ражени� ди���в, н� не ��жет ��е��ечивать ��в�е�тный д��ту� � �а��а� или �ринтера� в �ети. y y Д��у��ать ���тавление ��и��а, д��авление и удаление ��д�лючени� � ��щи� �етевы� �ринтера�, н� не ��жет ��е��ечивать у�тан�в�у л��альных (не���ред� �твенн� ��д�люченных� �ринтер�в. y y Д��у��ать у�тан�в�у в �аче�тве �дн��� и� �етевых �ринтер�в �а� �ринтера �� у��лчанию, н� т�ль�� е�ли эт� не л��альный �ринтер. Дл� вы��лнени� ��лее �л�жных �адач у�равлени� �етью нужн� ��ратить�� � �атериала� �лавы 7 «Ин�тру�ентарий у�равлени� W��dows» и �лавы �, «A���v� D�����o�y S���p���g I��������». И в�е же, �а� �удет ���а�ан� в �ледующих не���ль� �их ра�делах, WScript.Network ��ле�ен дл� вы��лнени� �н��их �а��вых �адач �ри ра��те � �етью. Извлечение сетевой пользовательской информации Три �в�й�тва ��ъе�та WScript.Network, �а� ���а�ан� в �ледующе� уче�н�� �це� нарии, и�вле�ают инф�р�ацию � те�уще� ��ль��вателе, ����ьютере и д��ене, � ��т�р��� ��ль��ватель в�шел в �и�те�у: set sn = CreateObject("WScript.network") WScript.echo sn.userName WScript.echo sn.computerName WScript.echo sn.userDomain На ��е� ����ьютере, � �ри�еру, выв�дит�� �ледующа� инф�р�аци�: bknittel JAVA JAVA
234 Глава 5. Сетевые и принтерные объекты Нетрудн� д��адать��, чт� ��е ��ль��ватель���е и��, ��д ��т�ры� � в�шел в �и�те�у, �ыл� bknittel, а и���ль�уе�ый �н�й ����ьютер на�ывал�� Java. Св�й� �тв� UserDomain та�же и�ел� �начение Java, даже �ри т��, чт� �н� не �ыл� и�ене� ��ей ра��чей �ру��ы. П�че�у? Св�й�тв� UserDomain ����щает � т��, �т� и�енн� ра�решил и���ль��вание эт�й учетн�й �а�и�и. Эт� ли�� д��енн�е и��, ли�� и�� л��альн��� ����ьютера, �����ль�у учетные �а�и�и ��ль��вателей �ерут�� и� �д� н��� и� двух �е�т: y y локальных учетных записей, у�танавливае�ых т�ль�� на �тдельн�� ����ью� тере. К��да те�ущий ��ль��ватель вх�дит в �и�те�у, и���ль�у� л��альную учетную �а�и�ь, �в�й�тв� UserDomain ���а�ывает и�� ����ьютера; y y учетных записей домена, у�танавливае�ых ад�ини�трат�р�� �етев��� д��ена. Е�ли эт� ра�решен� на�тр�й�а�и �етев�й �е���а�н��ти, ��ль��ватели �дн��� д��ена ���ут ре�и�трир�вать�� на ����ьютерах, �вл�ющих�� ча�тью дру���� д��ена. П�эт��у инф�р�аци�, ����щае�а� �в�й�тв�� UserDomain, ��жет не ����ательн� �ыть и�ене� д��ена, ��т�р��у �ринадлежит ����ьютер, и, в лю��� �лучае, не ��в�адает � и�ене� ����ьютера. На ����ьютерах, вх�д�щих в ра��чую �ру��у, а не в �етев�й д��ен, в�люча� в�е ����ьютеры, ра��тающие ��д у�равление� W��dows Hom� �d���o� (��т�рые не ���ут вх�дить в д��ен�, в�е учетные �а�и�и �вл�ют�� л��альны�и, ��эт��у �начение �в�й�тва UserDomain в�е�да ���твет�твует и�ени ����ьютера. Са� �� �е�е выв�д инф�р�ации � ��ль��вателе и д��ене ��жет ���а�ать�� не �лиш��� ��ле�ны�. И те� не �енее ��лучение д��ту�а � эт�й инф�р�ации ��жет �ри��дить�� в �ценари�х, и���ль�уе�ых ��лее че� �дни� ��ль��вателе� или ��лее че� на �дн�� ����ьютере. С��дание �ценари�, ��т�рый ��жет �ыть �а�ущен в�е�и ��ль��вател��и, ��жет ��ле�чить жи�нь �етев��� ад�ини�трат�ра, н� �ри эт�� ��жет ��над��ить�� ��е��ечить ра�личные на�тр�й�и на ��н�ве и�ени ����ью� тера или ��ль��вател�. Дл� эт��� ��жн� в����ль��вать�� �ледующи�и ������а�и: y y М�жн� на�и�ать �ценарий, на�траивающий �т��ражение ди���в, �начени� �ере�енных �реды ��ружени� или ��держи���� �ере�енн�й PATH, чт��ы туда �ыли в�лючены �а��и, в на�вани�х ��т�рых е�ть и�� ��ль��вател�. На�ри� �ер, �еть ��жет и�еть на��ры ��щих �а��� вида \\СЕРВЕР\домашние_папки\ имя_пользователя, �� �дн��у дл� �ажд��� ��ль��вател�, �де ��ль��ватель ��� жет хранить в �тандартн�� �е�те файлы, тре�ующие ежедневн��� ре�ервн��� ���ир�вани�. От��ражение �у�вы ди��а на та�ую «д��ашнюю» �а��у ��жет �ыть авт��ати�ир�ван� в д��енн�й �ети, н� вы�т� �а�и нах�дите�ь в �в�ей ����твенн�й �ети ра��чей �ру��ы. И те� не �енее � эти� ��жн� ��равить��: в �ценарии вх�да в �и�те�у ��жн� в����ль��вать�� �в�й�тв�� UserName, чт��ы ���тавить нужн�е и�� ��щей �а��и и и���ль��вать е�� дл� �т��ражени� эт�й �а��и на �у�ву ди��а. y y М�жн� на�и�ать �ценарий, ��вершающий ��н�ретные дей�тви� т�ль�� дл� ��ределенных ��ль��вателей или ����ьютер�в. На�ри�ер, ���ле на�тр�й�и �тандартных �р��ра�� и �т��ражений ��жн� в����ль��вать�� �ценарие� вх�да в �и�те�у, �а�у��ающи� ��н�ретные �р��ра��ы т�ль�� дл� т��� ����ьютера,
Извлечение сетевой пользовательской информации 235 � ��т�р�� и�ве�тн�, чт� у не�� и�еет�� д���лнительн�е ���руд�вание или ��жн� вы��лнить ��ециальные на�тр�й�и дл� ��ределенных ��ль��вателей. Ра����три� �ри�ер, ���а�ывающий, �а� универ�альный �ценарий вх�да в �и� �те�у ��жет вы��лн�ть ��ециальные ��ерации дл� �ажд��� ��ль��вател�: ' Файл примера script0501.vbs set wshNetwork = CreateObject("WScript.Network") set wshShell = CreateObject("WScript.Shell") user = ucase(wshNetwork.userName) MapDrive "H:", "\\bali\home\" & user ' о тображение на букву диска папки home select case user case "BKNITTEL " ' отображения на буквы F и G MapDrive "F:", "\\sumatra\photos" MapDrive "G:", "\\ambon\software" wshShell.run "notepad c:\todo.txt" ' вывод списка заданий на день UsePrinter "\\bali\okidata" case "NALEKS" ' отображение на букву диска папки симулятора MapDrive "F:", "\\bali\ibm360" case "ACCOUNTING" MapDrive "X:", "\\sumatra\quicken" case else ' для любых других пользователей просто установка сетевого ' принтера UsePrinter "\\bali\hp laserjet" end select function MapDrive (byval drive, path) ... Фун�ции MapDrive и UsePrinter �удут ра����трены в данн�й �лаве чуть ���же. Сценарии вх�да в �и�те�у еще �удут ра���атривать�� в �лаве 9 «И���ль��вание �ценариев дл� у�равлени� ����ьютера�и и �ет��и». Е�ли в �и�те�у вх�дит ��ль��ватель bknittel, эт�т �ценарий ���дает �т��раже� ни� на две �у�вы ди��а, �а�у��ает �р��ра��у Бл��н�т и �арантирует д��ту�н��ть у�а�анн��� �ринтера; е�ли же в �и�те�у вх�дит ��ль��ватель naleks, ���дает�� дру� ��е �т��ражение и т. д . Ка� видите, ��д��ный �ценарий ��жет ���в�лить в�тавить в�ю инф�р�ацию �� вх�ду в �и�те�у в �дн� �е�т�. Е�ли ���е�тить �рлы� эт��� �ценари� в �а��у авт��а�ру��и дл� в�ех ��ль��вателей, �н �удет �а�у��ать��, ���да в �и�те�у �удет вх�дить лю��й и� ��ль��вателей. Я и�ею в виду �а��у \Program Data\Microsoft\Windows\Start Menu\Programs\Startup на W��dows 7 и V�s�� и �а��у \Documents and Settings\All Users\Start Menu\Programs\Startup на W��dows XP. ▼▼ Такая разновидность настройки под конкретного пользователя полезна как на небольших сетях рабочих групп, так и на больших корпоративных доменах. При большом количестве пользова- телей может быть полезнее выполнять настроечные операции на основе групповой принад- лежности, а не на основе индивидуальных пользовательских имен. Как проверить принадлеж- ность к группе, будет показано в главе 8.
236 Глава 5. Сетевые и принтерные объекты При в�ей �в�ей ��ль�е дл� и�влечени� этих ��ль��ватель��их и ����ьютерных и�ен WScript.Network не ���в�л�ет и��ен�ть эти данные или д��ывать инф�р�а� цию � ��ль��ватель��их �ривиле�и�х или на�тр�й�ах учетных �а�и�ей. Дл� этих целей нужн� в����ль��вать�� �ред�тва�и W��dows M���g�m��� I�s��um������o� (WMI�, ��т�рые ра���атривают�� в �лаве 7. Управления отображениями на буквы дисков Одн�й и� наи��лее в��тре��ванных �етевых фун�ций, и���ль�уе�ых в �ценари� �х, �вл�ет�� �т��ражение ��щих �етевых �а��� на �у�вы ди���в. О�ычн� та��е �т��ражение ���дает�� ��ль��вателе� � ����щью �р��ра��ы �xp�o��� или �уте� и���ль��вани� в ���андн�й �тр��е ���анды net. От��ражение, ���данн�е в �т� дельн�� �еан�е вх�да в �и�те�у, ��ычн� �а�и�ывает�� в ��ль��ватель���� �р�филе и �тан�вит�� д��ту�ны� �н�ва �ри �ледующе� вх�де в �и�те�у. Н� ин��да тре�у� ет�� ��лее ��н�ретн�е у�равление �т��ражение�, на�ри�ер �ледующее: y y В �ценарии вх�да в �и�те�у ��жет ��тре��вать�� у�тан�вить �тандартн�е �т��ражение на �у�вы ди���в, в ��т�р�� ��ль��ватели ���т��нн� нуждают��. Сценарий д�лжен �ере�и�ать и��енени�, вне�енные ��ль��вател��и в �ре� дыдуще� �еан�е вх�да в �и�те�у, чт��ы �арантир�вать д��ту�н��ть �равиль� н��� �т��ражени�. (Лучше �удет ��а�ать: «Даже е�ли ��ль��ватель в�е �ере� �утает».� y y В �ценари�х, вы��лн�ющих ��ле�ные �адачи, ���дающих ре�ервные ���ии и ��� �луживающих �и�те�у, ��жет ��над��ить�� ���давать вре�енные �т��ражени� на �у�вы ди���в, чт��ы файлы �ыли �ере�ещены в дру�ие �етевые �е�та. y y От��ражени� на �у�вы ди���в ���ут ��над��ить�� в �ценари�х, �а�у��ающих� �� авт��атиче��и Планировщиком заданий (T�sk S�h�du����. Н� �� у��лчанию Планировщик заданий �а�у��ает �ценарии в ��нте��те ��ециальн�й �и�те�н�й учетн�й �а�и�и ��ль��вател�, а не в ��нте��те вашей ����твенн�й учетн�й �а� �и�и. П�эт��у ваше �ер��нальн�е �тандартн�е �т��ражение на �у�вы ди���в нед��ту�н�. Сценарию ��над��ит�� ���дать в�е не��х�ди�ые е�у �т��ражени�. Мет�ды, ���в�л�ющие в ��д��ных �итуаци�х у�равл�ть ди���вы� �т��раже� ние�, �ред��тавл�ют�� ��ъе�т�� WScript.Network. Создание перечня дисковых отображений с помощью EnumNetworkDrives Св�й�тв� EnumNetworkDrives в��вращает ��лле�цию ��ъе�т�в, ��и�ывающих в�е и�еющие�� �т��ражени� на �у�вы ди���в. Н� эта ��лле�ци� не ��х�жа на те, ��т�рые на� ���адали�ь д� �их ��р, ���да ��лле�ци� ��держала ��лн�ценные ��ъе�ты, �аждый и� ��т�рых и�ел �в�и ����твенные �в�й�тва и �ет�ды. Эта ��л� ле�ци� �тн��ит�� � ра�р�ду тех, ��т�рые д�лжны �ыть и�учены �уте� �р����тра ее �в�й�тв Item в ��р�д�е их ну�ерации. К�лле�ци� �ред�тавл�ет ����й �р��т�й
Управления отображениями на буквы дисков 237 �еречень те��т�вых �тр��, ��т�рые, е�ли в��ть их ���арн�, ��и�ывают те�ущее �т��ражение. ➔ Д���лнительные �ведени� � ��лле�ци�х и �в�й�тве Item даны в �лаве 3, в ра�� деле «К�нтейнеры и ��лле�ции». Значени� и� данн�й ��лле�ции ���ут �ыть и�влечены �уте� ��ращени� � �в�й� �тву Item. Перва� �тр��а (Item 0� дает �у�ву ди��а, на ��т�рую ���дан� �т��ра� жение (на�ри�ер, "F:"�. Вт�ра� �тр��а (Item 1� дает ��щее и��, �т��ражае��е на �у�ву ди��а в виде �ути в ф�р�ате UNC. К�лле�ци� та�и� ��ра��� �р�д�лжает�� �ара�и �тр�� — треть� �тр��а (Item 2� дает еще �дну �у�ву ди��а, на ��т�рую ���� дан� �т��ражение и т. д. На�ри�ер, �ценарий set wshNetwork = CreateObject("WScript.Network") set maps = wshNetwork.EnumNetworkDrives ��жет выдать ��лле�цию, ��д��ную т�й, чт� ���а�ана в ли�тин�е 5.1 . Листинг 5.1 . Пример коллекции EnumNetworkDrives maps.item(0) "F:" 'имяипуть maps.item(1) \\sumatra\chapters ' первого диска maps.item(2) "H:" 'имяипуть maps.item(3) \\bali\home\bknittel ' второго диска . . . maps.item(maps.Length-2) "X:" 'имяипуть maps.item(maps.Length-1) \\bali\incoming faxes ' пос леднего диска Дл� и��лед�вани� данн�й ��лле�ции ��жн� в����ль��вать�� �ред��читае��й ва�и в ��ы�е �ценариев вер�ией ци�ла for. Следующий �ценарий, на�и�анный на V�S���p�, выв�дит �ла��дар� и���ль��ванию ша�а ци�ла �дв�енный �еречень эле�ент�в �т��ражени�: ' Файл примера script0502.vbs set wshNetwork = CreateObject("WScript.Network") set maps = wshNetwork.EnumNetworkDrives for i = 0 to maps.Length-2 step 2 WScript.echo "Диск", maps.item(i), "отображается на ", maps.item(i+1) next При �ажд�� �р�х�де ци�ла выражение maps.item(i) вычи�л�ет�� в �начение �у�вы ди��а, а выражение maps.item(i+1) вычи�л�ет�� в �начение �ути � ��щей �а��е. На ��е� ����ьютере эт�т �ценарий выдал �ледующую инф�р�ацию: Диск F: отображается на \\sumatra\chapters Диск H: отображается на \\bali\home\bknittel Диск J: отображается на \\bali\shared documents Диск X: отображается на \\bali\incoming faxes Выв�д �еречн� �т��раженных ди���в — дале�� не �а��е ��ле�н�е �ан�тие, ��� ���ль�у на��р в ��не ���андн�й �тр��и W��dows ���анды net use �риведет � т�чн� та���у же ре�ультату. Н� эт�т �рие� ��жет �ри��дить�� �ри �тлад�е �ценариев, �а�у��ае�ых и� Планировщика заданий. И���ль�у� ин�тру�ентарий, ���в�л�ющий �а�и�ывать данные в файлы, ��т�рый �ыл ра����трен в �лаве 4 «Д��ту� � файла�
238 Глава 5. Сетевые и принтерные объекты и рее�тру», ��жн� ���дать файл журнала и �а�и�ать в не�� и�еющее�� ди���в�е �т��ражение: set fso = CreateObject("Scripting.FileSystemObject") set wshNetwork = CreateObject("WScript.Network") ' с оздание файла журнала и запись в него даты и времени set log = fso.CreateTextFile("c:\temp\myscript.log", True) log.writeline "Время запуска сценария : " & now() ' н еобходимое сценарию отображение на буквы дисков ... ' в ывод перечня элементов дискового отображения, чтобы убедиться ' в их правильности set maps = wshNetwork.EnumNetworkDrives for i = 0 to maps.Length-2 step 2 log.writeline "Диск " & maps.item(i) & "отображается на " & maps.item(i+1) next ' работа с отображаемыми дисками ... ' з акрытие файла журнала log.close set log = Nothing П��ле �ред��л�жительн�й ��т�вн��ти �ценари� � и���ль��ванию ��жн� �р�верить ��держи��е файла c:\temp\myscript.log, чт��ы у�едить��, чт� дата и вре� �� ���твет�твуют �жидани�� и чт� �т��ражение �ыл� ���дан� дл� нужных �у�в ди���в. Реальна� ��ль�а �т EnumNetworkDrives �а�лючает�� в �р�вер�е, ���в�л�ющей у�едить��, чт� у�а�анн�е �т��ражение �уще�твует. Та�а� �р�вер�а �р�в�дит�� �еред ���ыт��й ���дать н�в�е �т��ражение или �еред удаление� �т��ражени�. Е�ли ���ытать�� ���дать �т��ражение на �у�ву, �ринадлежащую л��альн��у ди�� �у, или ���ытать�� ���дать �т��ражение на уже и���ль�уе�ую дл� эт��� �у�ву, или ���ытать�� удалить не�уще�твующее �т��ражение, �ценарий �ре�ратит ра��ту � выдачей �ши��и. Ра����три� две ��д�р��ра��ы, ��т�рые ���ут ����чь �ценари��, ра��тающи� � ди���вы�и �т��ражени��и. В �ерв�� �ценарии �р�вер�ет��, не �ан�та ли �адан� на� �у�ва ди��а в �т��ражении �етев��� ди��а. ШАБЛОН Чтобы определить, не занята ли буква диска в отображении сетевого диска, в ваших сценариях следует использовать следующую функцию IsDriveMapped: ' Файл примера IsDriveMapped.vbs function IsDriveMapped (byval drive) ' исп оль зов ани е т оль ко буквы в верхнем регистре, без двоеточия drive = ucase(left(drive,1)) ' предположение о том, что буква не используется в отображении IsDriveMapped = False
Управления отображениями на буквы дисков 239 ' ес ли так ого диска нет, немедленное возвращение значения False if not fso.DriveExists(drive) then exit function ' по лучение объекта Drive и проверка его типа: 3 = отображаемый isDriveMapped = (fso.GetDrive(drive).driveType = 3) end function Для использования данной функции нужно в начале сценария всего один раз создать объект FileSystemObject (fso), используя следующий оператор: set fso = CreateObject("Scripting.FileSystemObject") Затем функцию можно использовать следующим образом: if IsDriveMapped("G") then действия, предпринимаемые в случае использования буквы G в отображении end if Вт�ра� ��ле�на� фун�ци� в��вращает �етев�й �уть, �т��ражае�ый на �аданную �у�ву ди��а. Е�ли �у�ва ди��а не и���ль�ует�� дл� �т��ражени�, �на в��вращает �у�тую �тр��у. ШАБЛОН Для определения сетевого пути отображенного сетевого диска в сценариях нужно использо- вать функцию GetDriveMapping: ' Файл примера GetDriveMapping.vbs function GetDriveMapping (byval drive) dim i, maps ' ис пол ьзо ван ие тол ько буквы в верхнем регистре, без двоеточия drive = ucase(left(drive,1)) ' по лучения перечня дискового отображения set maps = wshNetwork.EnumNetworkDrives ' предположение о том, что буква не используется в отображении GetDriveMapping = "" ' ск анирование перечня дискового отображения for i = 0 to maps.Length-2 step 2 if ucase(left(maps.item(i),1)) = drive then ' буква входит в перечень, нужный ответ получен GetDriveMapping = ucase(maps.item(i+1)) exit for end if next end function Для использования данной функции нужно в начале сценария всего один раз создать объект wshNetwork, используя следующий оператор: set wshNetwork = CreateObject("WScript.Network") Затем функцию можно использовать следующим образом: if GetDriveMapping("G") = "\\BALI\TEXT" действия, предпринимаемые в случае, если буква G является отображением \\bali\text end if
240 Глава 5. Сетевые и принтерные объекты Добавление дисковых отображений О�ъе�т WScript.Network �ред��тавл�ет �ет�д MapNetworkDrive, �редна�наченный дл� ���дани� �т��ражений на �у�вы ди���в. Эт�т �ет�д и���ль�ует �т двух д� ��ти ар�у�ент�в. MapNetworkDrive LocalName, RemoteName, [UpdateProfile], [UserName], [Password] y y LocalName — �у�ва ди��а, и���ль�уе�а� дл� �т��ражени� (на�ри�ер, "F:"� . Дв�ет�чие ����ательн�, х�т� � не ��ни�аю, ��че�у ����ани� M���oso�� не ����� ла �ере�и�ать эт�т �ет�д, чт��ы �н ра��тал и � дв�ет�чие�, и �е� не��. М�жн� �ередать �ет�ду �у�тую �тр��у, чт��ы ���дать ��д�лючение � удаленн��у ���� �ьютеру �е� �т��ражени� на �у�ву ди��а. От�рыт�е ��д�лючение ��уще�твл�ет ���лед�вательные ��ращени� � ��щей �а��е �ы�трее, че� �ри и���ль��вании UNC�и�ен, �ри �т�рытии файла, е�� ���ир�вании, �ере�ещении и удалении. y y RemoteName — и���ль�уе�а� ��ща� �етева� �а��а, у�а�анна� в ф�р�ате UNC ("\\сервер\общее_имя" или "\\ сервер\общее_имя\подпапка"�; сервер — эт� и�� или IP�адре� �дн��� и� ����ьютер�в вашей �ети, а общее_имя — эт� и�� ��щей �а��и. Е�ли у�а�ывают�� и�ена подпапок, �т��ражае�ый ди�� ��д�лю� чает�� � у�а�анн�й �а��е, и ��ль��ватель не и�еет в����жн��ти «видеть» �а��и, нах�д�щие�� выше нее. (П�ль��ватели �ети Nov��� ���ут у�нать �де�ь �в�й�тв� �т��ражени� ��рн� — «m�p �oo�».� y y UpdateProfile — не����ательн�е �улев� �начение, ��т�р�е ��жет �ыть True или False. П� у��лчанию и���ль�ует�� �начение False. Е�ли ар�у�ент у�а�ан и и�еет �начение True, �т��ражение ��хран�ет�� в �р�филе те�уще�� ��ль��ва� тел�, и �ри е�� �ледующе� вх�де в �и�те�у �н� �удет в���тан�влен�. Явл�ет�� э�вивалент�� у�тан�в�и флаж�а Восстанавливать при входе в систему (R��o������ в диал���в�� ��не �р��ра��ы �xp�o��� Подключить сетевой диск (Logo�� или э�вивалент�� у�а�ани� �люча /persistent:yes �ри и���ль��вании �р��ра��ы ���андн�й �тр��и net use. Дл� вре�енн��� �т��ражени�, ���давае����, а �ате� удал�е���� �ценарие�, эт� �начение ��жн� ��у�тить или у�а�ать False. Дл� �т��ражений, в���танав� ливае�ых �ри �ажд�� вх�де в �и�те�у, нужн� у�а�ать True. y y UserName и Password — не����ательные ар�у�енты, ���в�л�ющие ��д�лючить�� � удаленн��у ����ьютеру, и���ль�у� и�� ��ль��вател�, UserName, и �ар�ль, Password, �тличающие�� �т тех, ��т�рые и���ль��вали�ь �ри вх�де в �и�те�у. При и���ль��вании этих ар�у�ент�в в��ни�ает р�д �л�жн��тей, на ��т�рых � в���ре ��тан�влю�ь. Ра����три� �ри�ер и���ль��вани� �ет�да MapNetworkDrive: set wshNetwork = CreateObject("WScript.Network") wshNetwork.MapNetworkDrive "F:", "\\bali\Shared Documents" Ка� видите, �ет�д MapNetworkDrive �чень �р��т в и���ль��вании. Н� у не�� е�ть и нед��тат�и, � ��т�рых �ледует �нать.
Управления отображениями на буквы дисков 241 y y Е�ли �у�ва ди��а уже и���ль�ует�� в �т��ражении или �ринадлежит �уще�тву� юще�у фи�иче����у ди��у, �ет�д вы�ывает ���й �ценари� � выдачей ����щени� �� �ши��е. y y Е�ли дл� ��д�лючени� � ��щей �а��е нужн� в����ль��вать�� альтернативны� и�ене� ��ль��вател� и �ар�ле�, нужн� у�едить�� в т��, чт� нет дру�их ��д� �лючений (�т��ражае�ых ди���в или �р����тр�в в ��не �р��ра��ы �xp�o���� � т��у же ����ьютеру, ��т�рый ва�и и���ль�ует��, или ��д�лючений � �а�и�� ни�удь дру�и� и�ене� ��ль��вател�. W��dows д��у��ает т�ль�� �дн� ��д�лю� чение � удаленн��у ����ьютеру, ��эт��у в�е ди��и, �т��раженные на данный ����ьютер, д�лжны и���ль��вать �дн� и т� же и�� ��ль��вател� и �ар�ль. y y Е�ли нужн� ��д�лючить�� � и���ль��вание� альтернативн��� и�ени ��ль��� вател�, ��т�р�е тре�ует и���ль��вание �ар�л�, �ценарий д�лжен ли�� �а�ра� шивать у ��ль��вател� �ар�ль, ли�� хранить �ар�ль в �е�е �а���. П��ледний вариант ��жет нане�ти �уще�твенный ур�н �и�те�е �е���а�н��ти: лю��й, �т� ��жет �р�че�ть ваш �ценарий, ��жет ��лучить и�� ��ль��вател� и �ар�ль, д��у�ти�ые на удаленн�� ����ьютере. П�эт��у � ��ветую �� в����жн��ти не ��ль��вать�� альтернативны�и ��лн���чи��и. Е�ли же эт� вынужденна� �ера, лучше �атре��вать у ��ль��вател� �ар�ль или, е�ли эт� нев����жн�, ��е��е� чить удаленн�й учетн�й �а�и�и ��ль��вател� �а� ��жн� �еньше �ривиле�ий. М�жн� на�тр�ить ��ециальную учетную �а�и�ь, не д��у��ающую л��альн��� ��д�лючени� и и�еющую д��ту� т�ль�� � ��раниченн��у ��личе�тву не��х�� ди�ых файл�в. Даже е�ли �ред��тавить д��у�ти��е и�� ��щей �а��и и д��у�ти�ую �у�ву ди��а, �т��ражение в�е равн� ��жет дать ���й, е�ли в��ни�нут �р��ле�ы � �етью или е�ли удаленный ����ьютер выйдет и� �тр��. М�жн� ���в�лить �ценарию аварийн� �авершить�� � выдачей ����щени� �� �ши��е или же ��жн� �тл�вить �ши��у и ����щить � ней ��лее и��щны� ��ра���. Ка� эт� �делать, �удет ���а�ан� в �ледующей �хе�е. Удаление дисковых отображений К��да над��н��ть в ди���в�� �т��ражении �ин�вала, ваш �ценарий ��жет удалить е�� � ����щью �ет�да RemoveNetworkDrive. Сценарий ��жет удалить ��и�ен�ван� н�е ди���в�е �т��ражение или «�е�ы��нн�е» ��д�лючение, �р�и�веденн�е �уте� вы��ва �ет�да MapNetworkDrive � �у�т�й �тр���й в�е�т� �у�вы ди��а. Мет�д и�� ��ль�ует �т �дн��� д� трех ар�у�ент�в. RemoveNetworkDrive(Name, [Force], [UpdateProfile]) y y Name — �у�ва ди��а, и���ль�уе�а� в удал�е��� �т��ражении (на�ри�ер, "F:"� или �т�лючае�ый �уть в ф�р�ате UNC, е�ли � �т��ражение� не �ыла �в��ана �у�ва ди��а (на�ри�ер, "\\bali\sharedfolder"�. y y Force — не����ательный �улев ар�у�ент. Е�ли е�� �начение равн� True, �т�� �ражение удал�ет�� даже в т�� �лучае, е�ли �а�а��ни�удь �р��ра��а в�е еще
242 Глава 5. Сетевые и принтерные объекты и���ль�ует �а��у или файл на ��ще� ди��е. Та��е ��жет �р�и��йти, е�ли �ри� л�жение и�еет �т�рытый в ��щей �а��е д��у�ент; е�ли и�еет�� а�тивн�е ��н� �р��ра��ы �xp�o��� дл� �р����тра ��щей �а��и или лю��й ��д�а��и или е�ли и�еет�� �т�рыт�е ��н� ���андн�й �тр��и, дл� ��т�р��� ��щий ди�� �вл�ет�� те�ущи�. Значение �� у��лчанию — False. К��да ар�у�ент Force ��ущен или е�� �начение равн� False, в�е�т� ра�ъединени� а�тивн��� ��д�лючени� �ет�д RemoveNetworkDrive выдает ���й. y y UpdateProfile — еще �дин не����ательный �улев ар�у�ент. Е�ли е�� �начение равн� True, �т��ражение �удет удален� и� �р�фил� ��ль��вател� и не �удет в���тан�влен� �ри �ледующе� вх�де ��ль��вател� в �и�те�у. Е�ли ар�у�ент UpdateProfile ��ущен или и�еет �начение False и �т��ражение ��хранен� в �р�� филе ��ль��вател�, т� �н� та� и ��тает��. Мет�д RemoveNetworkDrive вы�ывает ���й �ценари�, е�ли нужный �т��ра� жае�ый ди�� или ��д�лючение не �уще�твует, ��эт��у нужн� ли�� �р�верить �уще�тв�вание, ли�� �ерехватить �ши��у. Ка� эт� ��жет �ыть �делан�, ���а�ан� в �ледующей �хе�е. ШАБЛОН Для удаления в сценарии отображения на сетевой диск используется следующая функция: ' Файл примера UnMap.vbs function UnMap(byval drive) UnMap = True ' предположение успеха if len(drive) = 1 then drive = drive & ": " ' обеспечение наличия двоеточия on error resume next ' по пыт ка отк люч ени я, но без остановки err.Clear ' оч ист ка от любых предыдущих ошибок wshNetwork.RemoveNetworkDrive drive, False, True ' если происходит ошибка if err.Number <> 0 then ' ош ибка произошла UnMap = False ' со общение о сбое end if on error goto 0 end function Эта фун�ци� в��вращает True, е�ли удаление �т��ражени� �р�шл� у��ешн�, или False, е�ли �н� не удал��ь. Е�ли важен в��вращае�ый ре�ультат, эт�т ��д ��жн� вы�вать �а� фун�цию. Ра����три� �ри�ер: if not UnMap("G:") then WScript.echo "Удалить отображение не удалось, продолжение невозможно." WScript.quit 1 end if Е�ли у��ех �авершени� ��ерации ва� не интере�ует, в V�S���p� эт�т ��д ��жн� вы�вать �а� ��д�р��ра��у: Unmap "G:"
Управления отображениями на буквы дисков 243 О�ъе�т wshNetwork нужн� ���дать в�е�� �дин ра� в начале �ценари�, в����ль��� вавши�ь �ледующи� ��ерат�р��: set wshNetwork = CreateObject("WScript.Network") Установка отображений в сценарии П����ль�у �уще�твует р�д �ричин, �� ��т�ры� ди���в�е �т��ражение ��жет не ���т��ть��, и �����ль�у на ���ент �а�у��а �ценари� нужн�е ди���в�е �т��раже� ние уже ��жет �уще�тв�вать, �ледует в����ль��вать�� фун�цией, ��т�ра� ��жет ��равить�� � лю�ы�и в����жны�и �итуаци��и. Д�лжен �ыть ���тавлен ��д на в�е �лучаи жи�ни, а ваш �ценарий ���жет в����ль��вать�� и� �т�ль�� ра�, ���ль�� ��� тре�ует��. Ра����три� �ри�ер та��й ��д�р��ра��ы, ��т�рую ��жн� и���ль��вать в ваших �ценари�х. ШАБЛОН Для отображения в сценарии сетевого диска можно воспользоваться следующей функцией: ' Файл примера MapDrive.vbs function MapDrive(byval drive, byval path) MapDrive = True ' предположение успеха if len(drive) = 1 then drive = drive & ": " ' обеспечение наличия двоеточия if IsDriveMapped(drive) then ' от ображение уже существует? if GetDriveMapping(drive) = ucase(path) then exit function ' ... есл и оно с оот вет ствует запросам, то выход end if UnMap drive ' . ..удаление дискового отображения end if err.Clear on error resume next ' п опы тка со здания отображения, ' н о без остановки wshNetwork.MapNetworkDrive drive, path ' ес ли происхордит ошибка if err.Number <> 0 then ' ош ибка произошла MapDrive = False ' со общение о сбое end if on error goto 0 end function К вы��ву �ет�да MapNetworkDrive ��жн� д��авить ар�у�ент UpdateProfile, е�ли эт� ���твет�твует �а�ы�лу �ценари�. (Фун�ци� IsDriveMapped ранее уже �ыла �ред�тавлена в данн�й �лаве.� Фун�ци� в��вращает True, е�ли �т��ражение удал��ь, или False, е�ли �н� не удал��ь. Е�ли интере�ует в��вращае��е �начение, т� эт�т ��д ��жн� вы�вать �а� фун�цию. Ра����три� �ри�ер: if not MapDrive("G:", "\\myserver\someshare") then WScript.echo "Отобразить диск не удалось, продолжение невозможно. " WScript.quit 1 end if
244 Глава 5. Сетевые и принтерные объекты Е�ли у��ех �авершени� ��ерации ва� не интере�ует, т� в V�S���p� эт�т ��д ��жн� вы�вать �а� ��д�р��ра��у: MapDrive "G:", \\myserver\someshare Дл� эт�й фун�ции нужн� �ри�ут�твие фун�ций IsDriveMapped, GetDriveMap- pings и UnMap, ��т�рые уже �ыли ���а�аны в данн�й �лаве. Нужн� та�же �дн�� �ратн� в начале �ценари� ���дать ��ъе�ты fso и wshNetwork, в����ль��вавши�ь дл� эт��� �ледующи�и ��ерат�ра�и: set fso = CreateObject("Scripting.FileSystemObject") set wshNetwork = CreateObject("WScript.Network") Управление подключениями сетевых принтеров Ка� ���а�ан� в ��рав�е 5.1, у ��ъе�та WScript.Network и�еют�� �ет�ды, �редна�на� ченные дл� у�равлени� ��д�лючени��и �етевых �ринтер�в, �х�дные � �ет�да�и дл� у�равлени� ди���вы�и �т��ражени��и. Д��авление и удаление ��д�люче� ний � �етевы� �ринтера� �рив�дит � д��авлению и удалению �нач��в в �а��е Устройства и принтеры (P������s�, ��эт��у вы ��жете и���ль��вать �ценарии, чт��ы ��е��ечить наличие у ��ль��вателей ваше�� ����ьютера наи��лее ��вре�енн��� и ��дх�д�ще�� на��ра �етевых �ринтер�в. Эт� в��лне ��дх�д�ща� �адача дл� �ценариев вх�да в �и�те�у. В �ледующих не���ль�их ра�делах �удут ра����трены выв�д �еречн� ��д� �люченных �ринтер�в, д��авление и удаление �ринтерных ��д�лючений. Суще� �твует та�же ������ у�равлени� �ерена�равление� выв�да и� DOS��р��ра�� на �етевые �ринтеры ���ред�тв�� �т��ражени� виртуальных LPT�у�тр�й�тв DOS� ��ружени�. Вывод информации о принтерах Мет�д EnumPrinterConnections в��вращает ��лле�цию, дающую ��и�ание на�тр�е� �ринтер�в на те�уще� ����ьютере, ��т�ра� �тн��ит�� �а� � л��альн� ��д�лючен� ны�, та� и � �етевы� �ринтера�. Та� же �а� и в �лучае � EnumNetworkDrives, ��л� ле�ци�, в��вращае�а� эти� �ет�д��, не �вл�ет�� �тандартны� �еречне� ��ъе�т�в, а �тн��ит�� � на��ру, ���т��ще�у и� �ар �тр��, �ажда� и� ��т�рых дает ��и�ание �дн��� �ринтера. Та��й ти� ��лле�ции уже ра���атривал�� ранее в данн�й �лаве �ри и�учении �ет�да EnumNetworkDrives, ��эт��у ��вт�р�ть�� не �уде�. Пары �тр��, в��вращае�ые EnumPrinterConnections, �ред�тавл�ют ��и��� ��рт�в и и�ен �ринтер�в. Перва� �тр��а в �ажд�й �аре �ред��тавл�ет �ведени� � ��рте, � ��т�р��у ��д�лючен �ринтер; эт� �а�ает�� �а� л��альных, та� и �етевых �ринтер�в. (Дл� �етевых �ринтер�в эта инф�р�аци� не и�еет �����й ценн��ти.� Вт�ра� �тр��а в �ажд�й �аре �ред��тавл�ет �ведени� �� и�ени �ринтера. Дл� л�� �альных �ринтер�в в ней ��держит�� их ��лн�е и��. Дл� �етевых �ринтер�в эта �тр��а �ред��тавл�ет ��щее и�� �ринтера.
Управление подключениями сетевых принтеров 245 Следующий уче�ный �ценарий выв�дит ��и��� те�ущих �ринтерных ��д�лю� чений: ' Файл примера script0503.vbs set wshNetwork = CreateObject("WScript.Network") set maps = wshNetwork.EnumPrinterConnections for i = 0 to maps.Length-2 step 2 WScript.echo "Порт:", maps.item(i), " Имя:", maps.item(i+1) next На ��е� ����ьютере эт�т �ценарий выдает �ледующий д�в�льн� �транный ��и���: Порт: LPT1: Имя: HP LaserJet 4V Порт: LPT2 Имя: \\sumatra\okidata Порт: LPT1: Имя: \\sumatra\Okidata OL810 Порт: SHRFAX: Имя: Fax Порт: XPSPort: Имя: Microsoft XPS Document Writer Порт: Microsoft Document Imaging Writer Порт: Имя: Microsoft Office Document Image Writer Первый �ринтер в ��и��е �вл�ет�� л��альны� �ринтер��, не���ред�твенн� ��д�люченны� � ��е�у ����ьютеру. Он ��д�лючен � ��рту LPT1. Вт�р�й �ринтер �вл�ет�� ре�ультат�� �ерена�равлени� DOS�у�тр�й�тва LPT2: на �ринтер �� и�ени \\sumatra\okidata, �р�и�веденн��� � ����щью ���андн�й �тр��и net use: net use lpt2: \\sumatra\okidata О�ратите вни�ание на т�, чт� в данн�� �лучае �начение ��рта, в��вращенн�е EnumPrinterConnections, не ��держит дв�ет�чи� — эт� �р��т� �тр��а "LPT2". Третьи� ���а�ан �етев�й �ринтер, дл� ��т�р��� � у�тан�вил �нач�� �ринте� ра. В ��и��е та�же у�а�ан�, чт� �н и���ль�ует ��рт LPT1:. Эт� ��рт, � ��т�р��у �ринтер ��д�лючен на удаленн�� ����ьютере, Sumatra, и �н не и�еет ни�а���� �тн�шени� � ��рту LPT1 на ��е� ����твенн�� ����ьютере. В�е ��тальные �ринтеры �ред�тавл�ют ����й �тандартные �луж�ы �ринте� р�в �и�те�ы W��dows. Принтерн�е у�тр�й�тв� fax �ред�тавл�ет �луж�у фа���в W��dows, ��т�рую � и���ль�ую дл� �т�рав�и фа���в чере� �в�й ��де�. П�рт ����начен �а� SHRFAX:, н� � �тандартны� у�тр�й�тва� W��dows �н не �тн��ит� ��, �а� �ы �ривле�ательн� эт� ни �вучал� — �н не ��жет �ыть и���ль��ван и� DOS��рил�жений и не ��жет �ыть ��в�е�тн� и���ль��ван � дру�и�и ����ью� тера�и. За�и�и XPS и Office Document Writer �вл�ют�� �р��ра��ны�и �луж�а�и, ���дающи�и �тф�р�атир�ванные файлы. Они ра��тают ��д��н� л��альны� �ринтера�. Эту инф�р�ацию ��жн� и���ль��вать т�чн� та� же, �а� �ы раньше в данн�й �лаве и���ль��вали инф�р�ацию EnumNetworkDrives (т� е�ть в �р�цедурах дл� ���� дани� или удалени� �етевых �ринтерных ��д�лючений�, х�т� в ������е интер�ре� тации �начений нужн� �р��вл�ть ��т�р�жн��ть, учитыва� �ледующие ����енн��ти: y y Е�ли Имя начинает�� � двух ��ратных �лэшей (\\�, а Порт в�лючает дв�ет�чие (:�, �а�и�ь дает ��и�ание ��д�лючени� и �нач�а �етев��� �ринтера W��dows.
246 Глава 5. Сетевые и принтерные объекты Имя — эт� ��щее �етев�е и��. В �начении Порт ��жн� �р�и�н�рир�вать в�е, �р��е наличи� дв�ет�чи�. y y Е�ли Имя начинает�� � \\, но Порт не в�лючает дв�ет�чие, �а�и�ь дает ��и�ание �ерена�равлени� DOS��рил�жений на �етев�й �ринтер. Имя — эт� ��щее �етев�е и��, а Порт на�ывает �ерена�равленн�е л��альн�е DOS�у�тр�й�тв�. y y Е�ли Имя не начинает�� � \\, �начит, �а�и�ь дает ��и�ание л��альн��� �ринтера. Имя — эт� и�� �ринтерн��� у�тр�й�тва, а Порт �вл�ет�� у�тр�й�тв�� или �луж� ��й, � ��т�р�й ��д�лючен �ринтер. Подключение к сетевым принтерам Мет�д AddWindowsPrinterConnection ���в�л�ет у�танавливать н�в�е ��д�лючение �етев��� �ринтера (и �нач���. Ка� и �ри ���дании �т��ражений �етевых ди���в, эт� делает�� индивидуальн� дл� �ажд��� ��ль��вател�. Н� в �тличие �т �т��ражае�ых �етевых ди���в, ��д�лючени� �ринтер�в в�е�да и�еют д�л��вре�енный хара�тер и �уще�твуют �т �дн��� �еан�а вх�да в �и�те�у д� дру����. Эт� ��начает, чт� у�та� навливать их нужн� т�ль�� �дин ра�, и �ни ��тают�� ��д�люченны�и. В �ет�де и���ль�уют�� �ледующие ар�у�енты: AddWindowsPrinterConnection PrinterPath [, DriveName [, Port]] Ар�у�ент PrinterPath �вл�ет�� и�ене� �ервера и ��щи� и�ене� �етев��� �ринтера в ф�р�ате UNC (на�ри�ер, "\\sumatra\okidata"�. М�жн� и���ль��� вать ли�� �фициальн�е ��р�т��е ��щее и�� (на�ри�ер, "okidata"� или ��лее длинн�е друже�твенн�е и��, ��т�р�е W��dows ���а�ывает на �транице Устрой- ства и принтеры (P������s� (на�ри�ер, "Okidata OL810"�. О�тальные два ар�у�ента и���ль��вали�ь т�ль�� W��dows 9� и M� и �ри ра��те ��д у�равление� W��dows 7, V�s��, 2000 и XP и�н�рируют��. Их ��жн� �р��т� ��у�тить. Мет�д AddWindowsPrinterConnection не �авершает�� � ����щение� �� �ши�� �е, е�ли �ред�рини�ает�� ���ыт�а �р�ду�лир�вать уже и�еющее�� �ринтер� н�е ��д�лючение, ��эт��у е�ли ваше�у �ценарию нужн� ��е��ечить наличие ��ределенн��� �нач�а �ринтера, в��лне д��у�ти�� �р��т� ���ытать�� е�� д�� �авить. Е�ли эт� ��тре�ует��, �ринтер д��авл�ет��, в �р�тивн�� �лучае ниче�� не �р�и�х�дит. Надежный ������ д��авлени� ��д�лючений �етевых �ринтер�в ���а�ан в �ле� дующей �хе�е. ШАБЛОН Для добавления подключения сетевого принтера в вашем сценарии можно воспользоваться следующей функцией: ' Файл примера UsePrinter.vbs function UsePrinter (path) UsePrinter = True ' предположение успеха err.Clear on error resume next ' установка подключения, не останавливаясь при ошибке
Управление подключениями сетевых принтеров 247 wshNetwork.AddWindowsPrinterConnection path ' е сл и произойдет ошибка, возвращение False if err.number <> 0 then UsePrinter = False on error goto 0 end function Функция возвращает True, если принтер был добавлен (или если подключение уже существу- ет), и False, если она не может добавить принтер. Если возвращаемое значение не интересует, то в VBScript эту функцию можно вызвать как подпрограмму, например можно воспользоваться следующим оператором: UsePrinter "\\sumatra\okidata" Чтобы воспользоваться этой функцией, в начале сценария нужно с помощью следующего опе- ратора создать объект wshNetwork: set wshNetwork = CreateObject("WScript.Network") В �аче�тве ���тавн�й ча�ти �ценари� вх�да в �и�те�у дл� �р�вер�и у�тан�в�и ��д�лючений в�ех не��х�ди�ых �етевых �ринтер�в �удет, ���рее в�е��, и���ль��� ван �ет�д AddWindowsPrinterConnection или фун�ци� UsePrinter. С �ра�тиче���й т�ч�и �рени� �ыл� �ы целе����ра�н� �аранее ���дать �ценарии вх�да в �и�те�у. Зате�, е�ли ваше �етев�е ��ружение и��енит��, ва� не �ридет�� ин�тру�тир�вать �н�же�тв� ��ль��вателей в �тн�шении у�тан�в�и �нач��в н�вых �ринтер�в. ▼▼ Возможно, вы знаете, что при управлении доменной сетью на компьютерах Windows Server система Active Directory (AD) может сделать сетевые компьютеры видимыми для компьютеров клиентов Windows, позволив пользователям легко отслеживать расположенные поблизости от них принтеры. До последнего времени не было способа заставить AD автоматически уста- навливать сетевые принтеры на клиентских системах. Сетевые администраторы должны были прибегать к их установке посредством сценариев входа в систему, рассматриваемых в данном разделе. В Windows Server 2008 была представлена новая дополнительная система Deploy With Group Policy, позволяющая AD автоматически вводить в действие сетевые принтеры. Эта система из- бавила от необходимости дальнейшего использования сценариев входа в систему, по крайней мере, для выполнения этой практической задачи. Но эта система работает только с клиентски- ми компьютерами под управлением Windows Vista и Windows 7. Обходной путь, позволяющий вводить в действие сетевые принтеры из Windows Server 2008 Active Directory на клиентах Windows XP и Windows Server 2003, предусматривает привлечение запущенной на клиентских компьютерах программы PushPrinterConnections.exe из сценария входа в систему или вме- сто него. О способах осуществления данного приема можно прочитать на веб-сайте technet. microsoft.com после поиска по ключевой фразе «deploy pushprinterconnections.exe». Перенаправление принтеров из сеанса работы с DOS Е�ли вы (или ваша �р�ани�аци�� ��ль�уете�ь у�таревши�и DOS��рил�жени��и, ва� и�ве�тн�, на���ль�� ��жет �ыть трудн� у�равл�ть �ринтерны� выв�д�� и� этих �рил�жений. В т� вре�� �а� W��dows��рил�жени� ���ут вы�ирать и� ��и��а у�тан�вленных �ринтер�в, ��д�люченных л��альн� или �� �ети, ��ль� шин�тв� DOS��рил�жений та��й в����жн��ти не и�еют; �ни �нают т�ль�� �а� и���ль��вать �араллельные ��рты LPT1, LPT2 и LPT3. Чт��ы ���в�лить DOS� �рил�жени�� ве�ти �ечать на �етевых �ринтерах, W��dows �ред��тавл�ет ������
248 Глава 5. Сетевые и принтерные объекты перенаправления �ринтерных у�тр�й�тв DOS на эти �ринтеры. На W��dows 9x и M� эт�т ������ �ыл на�ван захватом. Н� �а� �ы �н ни на�ывал��, эффе�т ���т�ит в т��, чт� DOS��рил�жени� вид�т э�улируе�ый �ринтерный ��рт, � ��т�р��у и�итирует�� ��д�лючение �ринтера; �ни � рад��тью �рини�ают эт�т выв�д на �ечать, ��т�рый W��dows �ате� �р�в�дит чере� �еть на реальный �ринтер. Е�ли DOS��рил�жение �ри �т�ут�твии �ерена�равлени� �ытает�� на�равить выв�д на LPT���рт, W��dows �ытает�� и���ль��вать ���руд�вание, ��д�люченн�е � ���� �наченн��у ��рту. Дл� на�тр�й�и �ерена�равлени�, ���в�л�юще�� DOS��рил�жени�� �т� �равл�ть выв�д на вы�ранный �етев�й �ринтер, ��жет и���ль��вать�� �ет�д AddPrinterConnection ��ъе�та WScript.Network. В �тличие �т AddWindowsPrinter- Connection эт�т �ет�д не ���дает �нач�� �ринтера и не делает �ринтер д��ту�ны� W��dows��рил�жени��. Он �р��т� делает �етев�й �ринтер д��ту�ны� DOS� �рил�жени��. Ка� ���а�ан� в ��рав�е 5.1, в эт�� �ет�де и���ль�уют�� �ледующие ар�у�енты: AddPrinterConnection LocalName, RemoteName [, UpdateProfile] _ [, UserName, Password] Следует �т�етить, чт� эт�т �ет�д �ред��тавл�ет�� дл� ���дани� ��д�люче� ни� � и���ль��вание� альтернативн�й учетн�й �а�и�и ��ль��вател�, че�� не делает �ет�д AddWindowsPrinterConnection. У�а�ание альтернативн��� и�ени ��ль��вател� у�л�жн�ет е�� и���ль��вание; д���лнительна� инф�р�аци� и�� л�жена ранее в данн�й �лаве, в ра�деле «Д��авление ди���вых �т��ражений». Кр��е т���, е�ли ��д�лючение уже �уще�твует, эт�т �ет�д �риведет � �т�а�у � выдачей ����щени� �� �ши��е, ��эт��у �еред ���ыт��й у�тан�вить ��д�лю� чение или �ерехватить �ши��и в �р�це��е ���ыт�и нужн� и�учить ��лле�цию, выв�ди�ую �ет�д�� EnumPrinterConnections. Ка� эт� делает��, �удет ���а�ан� ���ле ра����трени� ������а удалени� �ринтер�в W��dows и �ре�ращени� �ере� на�равлени� �ринтера. ▼▼ Программы MS-DOS не знают, как проводить распечатку на принтерах, подключенных к порту USB, но это ограничение можно обойти, используя общие принтеры и перенаправление, даже не имея сети. Для этого нужно: сделать принтер общим, дать ему короткое и практичное общее имя, например «laserjet». Затем создать перенаправление, задействовав имя неиспользуемого LPT-порта и имя общего принтера. После этого MS-DOS-программа сможет делать распечатку через этот перенаправленный порт LPT. Перенаправление можно создать с помощью следую- щей командной строки: net use lpt3 \\имя_компьютера\laserjet или можно вызвать из сценария функцию RedirectPrinter, краткое описание которой будет вско- ре дано: RedirectPrinter "lpt3", "\\имя_компьютера\laserjet", True используя при этом реальное имя вашего компьютера вместо «имя_компьютера», и реальное общее имя принтера вместо «laserjet».
Управление подключениями сетевых принтеров 249 Удаление принтерных подключений П�д�лючени� �етевых �ринтер�в (и �в��анных � ни�и �нач��в в �а��е Устройства и принтеры� ��жн� удалить � ����щью �ет�да RemovePrinterConnection, ��т�� рый та�же ���в�л�ет �ре�ратить �ерена�равление �ринтера в DOS. Эт�т �ет�д и���ль�ует �т �дн��� д� трех ар�у�ент�в, ��др��н�е ��и�ание ��т�рых дан� в ��рав�е 5.1: RemovePrinterConnection Name, [bForce], [bUpdateProfile] Не����ательный ар�у�ент Force ��редел�ет ра�витие ���ытий в �лучае, е�ли не��т�рые �рил�жени� в�е еще и���ль�уют �ринтер. П� у��лчанию эт�т ар�у�ент и�еет �начение False. К��да ар�у�ент Force ��ущен или и�е� ет �начение False, т� в�е�т� ра�ъединени� а�тивн��� ��д�лючени� �ет�д RemovePrinterConnection дает ���й. Е�ли у�а�анный �ринтер �т�ут�твует, �ет�д RemovePrinterConnection �е� нерирует �ши��у, ��эт��у �еред ���ыт��й удалить ��д�лючение �ледует �р�� верить е�� �уще�тв�вание. Ка� эт� �делать, ���а�ан� в �ледующей фун�ции. ШАБЛОН Для удаления сетевого принтера Windows используется следующая функция: ' Файл примера DeletePrinter.vbs function DeletePrinter (byval path) dim maps, i, ismapped ' л ока льн ые переменные path = ucase(path) ' гарантия указания пути в верхнем регистре DeletePrinter = True ' предположение успеха ismapped = False ' определение факта существования принтера set maps = wshNetwork.EnumPrinterConnections for i = 0 to maps.Length-2 step 2 if ucase(maps.item(i+1)) = path then ismapped = True ' э тот принтер используется exit for end if next if not ismapped then exit function ' принтер не используется, ' нужно вернуться из функции err.Clear on error resume next ' удаление подключения wshNetwork.RemovePrinterConnection path, True, True if err.number <> 0 then DeletePrinter = False ' произошел сбой end if on error goto 0 end function
250 Глава 5. Сетевые и принтерные объекты Е�ли ваша �етева� ��нфи�ураци� и��енила�ь, дл� удалени� вышедших и� у��тре�лени� �ринтер�в и д��авлени� н�вых �ринтер�в в �ценарии вх�да в �и�� те�у ��жн� и���ль��вать фун�ции UsePrinter и DeletePrinter, чт��ы ��ль��� ватели авт��атиче��и ��лучили в����жн��ть видеть реальн� ��д�люченные �ринтеры. П��ле т��� �а� вы увидели ������ удалени� �ринтерн��� �ерена�равлени�, �ы д�лжны ���дать фун�цию, ��т�ра� ���жет е�� у�тан�вить. ШАБЛОН Следующая функция использует три аргумента: device, path и updateProfile. Аргумент device является именем перенаправляемого принтерного порта DOS, path — это имя сете- вого принтера в формате UNC, а аргумент updateProfile определяет, нужно ли это назначе- ние делать постоянным. Эта функция справляется с ситуацией, в которой перенаправление может быть уже осуществлено, и корректно изменяет отображение на указанный путь. Она возвращает True, если перенаправление состоялось, или False, если оно не может быть осу- ществлено: ' Файл примера RedirectPrinter.vbs function RedirectPrinter (byval device, byval path, byval updateProfile) dim maps, i, ismapped ' л ока льн ые переменные dim devcolon, devnocolon device = ucase(device) ' п еревод имени порта в верхний регистр i = instr(device, ": ") ' п олучение версии имени с двоеточием ifi>0then 'ибезнего devcolon = device devnocolon = left(device, i-1) else devcolon = device & ":" devnocolon = device end if RedirectPrinter = True ' предположение успеха ismapped = False ' проверка на уже существующее отображение порта set maps = wshNetwork.EnumPrinterConnections for i = 0 to maps.Length-2 step 2 if maps.item(i) = devnocolon and _ left(maps.item(i+1),2) = "\\" then ' порт уже перенаправлен ismapped = True exit for elseif maps.item(i) = devnocolon then ' порт используется для ' ло кал ьно го принтера RedirectPrinter = False ' и его не льз я п еренаправить exit function end if next if ismapped then err.Clear
Печать из сценариев 251 on error resume next ' удаление существующего подключения wshNetwork.RemovePrinterConnection device, True, updateProfile if err.number <> 0 then RedirectPrinter = False ' воз вращение False при ошибке exit function end if on error goto 0 end if err.Clear on error resume next ' по пыт ка установки подключения wshNetwork.AddPrinterConnection device, path, updateProfile if err.number <> 0 then RedirectPrinter = False ' в озвращение False ' при ошибке on error goto 0 end function Чт��ы в����ль��вать�� эт�й фун�цией, в начале �ценари� нужн� � ����щью �ледующе�� ��ерат�ра ���дать ��ъе�т wshNetwork: set wshNetwork = CreateObject("WScript.Network") Установка принтера по умолчанию П��ледни� в��р���� у�равлени� �етевы�и �ринтера�и � ����щью WScript. Network �вл�ет�� ��е��ечение вы��ра дл� ��ль��вателей ���твет�твующе�� �рин� тера �� у��лчанию. Ра�у�еет��, ��ль��ватели ���ут в лю��й ���ент и��енить �ринтер �� у��лчанию, в����ль��вавши�ь �анелью у�равлени� Принтеры и факсы (P������s ��d F�x�s� или � ����щью р�да д���лнительных утилит, ���в�л�ющих ��ль��вател�� �ен�ть �ринтер �� у��лчанию в ���вл�юще��� �еню. И в�е� та�и, ���да вы д��авл�ете или удал�ете �ринтеры в �ценарии вх�да в �и�те�у, нужн� вы�рать ��дх�д�щий �ринтер �� у��лчанию, и���ль�у� дл� эт��� �ет�д SetDefaultPrinter, �р��т� �ередав е�у ��щее �етев�е и�� нужн��� �ринтера, �а� ���а�ан� в данн�� �ри�ере: wshNetwork.SetDefaultPrinter("\\sumatra\okidata") Мет�д SetDefaultPrinter ��жет вы�рать т�ль�� �етев�й, а не л��альный �ринтер; е�ли ваш �ценарий удал�ет в�е �етевые �ринтеры, вы или ��ль��ватель д�лжны вруч� ную вы�рать в �аче�тве �ринтера �� у��лчанию �ред��читае�ый л��альный �ринтер. Печать из сценариев Д� �их ��р на�и ра���атривали�ь лишь в��р��ы у�равлени� �ринтера�и и� �це� нариев. Те�ерь давайте ��р�т�� ра����три� использование �ринтер�в в �ценари�х. От �ценари� ��жет ��над��ить�� ��енерир�вать �ечатный выв�д, е�ли �н ���дает
252 Глава 5. Сетевые и принтерные объекты �тчеты, ��т�рые нужн� �р���атривать в ра��ечатанн�� виде, или е�ли �н �а�у��а� ет�� авт��атиче��и ��д у�равление� Планировщика заданий. ▼▼ В бизнес-среде для плановых сценариев, занятых такими важными задачами, как создание резервных копий, я рекомендую выводить на печать отчеты об их работе в ежедневном ре- жиме. Тогда, если запланированная задача прекратит свое выполнение, вы поймете по тем подробностям, которые отображаются в отчете или по отсутствию самого отчета, что что-то не в порядке. Если вас волнует вопрос нерационального расхода бумаги, вы можете написать сценарий, обобщающий результаты всех плановых заданий и печатающий единый документ, или же вы можете воспользоваться средствами отправки сообщений по электронной почте, которые рассматриваются в следующей главе. В любом случае, автоматически создаваемые отчеты о состоянии системы помогут контролировать те проблемы, которые приводят к отказу системы в середине ночи. Более подробно этот вопрос рассматривается в главе 9. От�равить выв�д на �етев�й �ринтер ��жн� �дни� и� �ледующих �������в: y y В����ль��вать�� �р��ра���й Wo�d или дру�и�и �рил�жени��и, ��т�рые �ре� ��дн���т �а�их �е�� в �аче�тве ��ъе�т�в авт��ати�ации. На�ри�ер, ��жн� ���дать ��ъе�т Word.Document, и���ль��вать дл� в�тав�и те��та та��й �ет�д, �а� Selection.Type, а �ате� и���ль��вать �ет�д .Print дл� выв�да д��у�ента на �ечать. y y Е�ли е�ть ��ычный те��т�вый файл и вы �р��т� х�тите �т�равить е�� на �рин� тер �� у��лчанию, ��жн� вы��лнить �ледующую ���андную �тр��у, и���ль� �ующую �ет�д Shell.Run, ра����тренный в �лаве 4: notepad.exe /p "filename.txt" В ���андн�й �тр��е лучше у�а�ать ��лный �уть � те��т�в��у файлу. y y Е�ли ваш �ринтер ��жет не���ред�твенн� в���рини�ать ��ычный ASCII�те��т, е�ть еще и третий вариант: вы ��жете в����ль��вать�� �ет�д�� AddPrinter- Connection дл� �ерена�равлени� выв�да в неи���ль�уе��е LPT�у�тр�й�тв� на �етев�й �ринтер. Дл� �а�и�и на LPT�у�тр�й�тв� и���ль�уйте �ет�д Create- TextFile ��ъе�та FileSystemObject (на�ри�ер, е�ли ваш ����ьютер не и�еет фи�иче����� �ринтерн��� ��рта LPT2, вы ��жете �ерена�равить LPT2 и � �е� т�д�� CreateTextFile и���ль��вать и�� "LPT2:"�. Выв�д �тчета �ледует �а� �и�ать в ��ъе�т TextStream. Завершить выв�д нужн� у�равл�ющи� �и�в�л�� ��дачи �траницы — Form Feed, чт��ы �ыла ра��ечатана и выведена и� �ринтера ���ледн�� �траница. Отчет ра��ечатает�� ���ле т���, �а� ��ъе�т TextStream �удет �а�рыт. В т� вре�� �а� �ервый �ет�д ��жет ���давать �ра�ив� �тф�р�атир�ванные �тчеты, ���ледний �ет�д ��жет �ыть и���ль��ван на лю��� ����ьютере, ра��� тающе� ��д у�равление� W��dows, и не нуждает�� ни в �а��� д���лнительн� у�тан�вленн�� �рил�жении, н� �н тре�ует, чт��ы у ваше�� �ринтера хватил� «����ра�ительн��ти», чт��ы ���дать �рафиче��ий ��ра� те��та, в����ль��вав� ши�ь �в�ей ����твенн�й вычи�лительн�й ��щн��тью. (Не��т�рые �юджетные ла�ерные и �труйные �ринтеры на эт� не ������ны.� Ниже �рив�дит�� �ри�ер, ���а�ывающий, �а� ��жн� и� �ценари� ��уще�твл�ть выв�д не���ред�твенн� на �етев�й �ринтер:
Печать из сценариев 253 ' Файл примера script0504.vbs ' с оздание необходимых объектов set wshNetwork = CreateObject("Wscript.Network") set fso = CreateObject("Scripting.FileSystemObject") ' и спо льз ова ние функции RedirectPrinter, показанной ранее в данной главе ' для настройки LPT2 на удаленный принтер if not RedirectPrinter("LPT2", "\\sumatra\laserjet", False) then wscript.echo "* Unable to print report:", err.description wscript.quit end if ' о ткрытие объекта TextStream с выводом в LPT2 set pfile = fso.CreateTextFile("LPT2:") ' запись отчета pfile.WriteLine "- --- --- --- " & now() & " --- --- --- -" pfile.WriteLine "Это отчет" pfile.WriteLine "Это продолжение отчета" pfile.WriteLine "Это завершение отчета" pfile.Write chr(12) ' завершение отчета управляющим символом подачи страницы pfile.Close ' закрытие текстового потока, чтобы началась печать wshNetwork.RemovePrinterConnection "LPT2" ' удаление принтерного ' перенаправления ' (функция, показанная ранее в данной главе:) function RedirectPrinter (byval device, byval path, byval updateProfile) ... end function
Объекты сообщений и факсов В эт�й �лаве вы у�наете � т��, чт� �ценарии ���ут �т�равл�ть ����щени� эле�� тр�нн�й ��чты или фа��ы, чт��ы ����щать �� �ши��ах и авт��ати�ир�вать дел�� �р�и�в�д�тв�. y y Мы ра����три� �р�т���л Co���bo����o� D��� Obj���s (CDO�, ��т�рый ��жет и���ль��вать�� дл� �т�рав�и ��ычн��� те��та и HTML�ф�р�атир�ванных те��т�вых ����щений � лю�ы� ��личе�тв�� вл�жений. Фа��и�ильные ��ъе�ты �т�равл�ют д��у�енты �� фа����аналу, и���ль�у� ваш фа�����де�. y y Зде�ь ���а�ан�, чт� CDO���ъе�ты и фа��и�ильные ��ъе�ты, �ри в�ей �в�ей �л�жн��ти, на�н��� �р�ще в и���ль��вании, че� ��жет ���а�ать�� на �ервый в��л�д. В �аче�тве �т�равн�й т�ч�и их �ри�енени� ��жн� в����ль��вать�� �рив�ди�ы�и �де�ь �ри�ера�и. Отправка из сценариев сообщений электронной почты с помощью CDO Х�т� эле�тр�нна� ��чта в ��н�вн�� �читает�� �ред�тв�� ��щени� �ежду людь�и, ����щени� ��жн� та�же �т�равл�ть не���ред�твенн� и� �ценариев W��dows. Ра�� ���три� р�д �ри�ер�в, �де эти� ��жн� в����ль��вать��. y y При вы��лнении авт��ати�ир�ванных, �лан�вых �ценарных ��ераций, на�ри� �ер �� ���данию ре�ервных ���ий, ���тавлению �тчет�в или �чи�т�е ди��а, важ� н� �нать � т��, чт� эти ��ерации �авершили�ь у��ешн�. М��ут ��тре��вать�� та�ие �ценарии, ��т�рые �ри и���ль��вании ��в�е�тн� � Планировщиком заданий �т�равл�ют ����щени� эле�тр�нн�й ��чты �и�те�н��у ад�ини�трат�ру, ин� ф�р�иру� е�� �� у��ехе или неудаче ��ерации. Е�ли ежедневн�е ����щение не �ришл� или ��держит �тчет �� �ши��е, �н �удет �нать, чт� чт��т� не в ��р�д�е. y y М�жн� ���давать �ценарии дл� авт��атиче���й �т�рав�и инф�р�ации ��ль� ��вател�� �ети, ����ща�, на�ри�ер, � �ревышении ли�ита и���ль��вани� ди���в��� �р��тран�тва или �т�равл�� и� вх�д�щие файлы или фа��ы и т. д . y y М�жн� ���дать �ценарий, �т�равл�ющий �� эле�тр�нн�й ��чте лю�ые файлы, у�а�анные в ���андн�й �тр��е, на ��н�ретный адре�. Е�ли дл� эт��� �ценари� 6
Объектная модель CDO 255 ���дать �рлы�, �xp�o��� ���в�лит �ерета��ивать на не�� �нач�и файл�в. Лю��й файл или файлы, �еретащенные на �нач��, �удут авт��атиче��и �ереданы �� эле�тр�нн�й ��чте вы�ранн��у адре�ату. В ��ределенн�й ра��чей �реде эт� ��жет в��лне �ри��дить��, на�ри�ер, дл� �ере�ыл�и �а�а��в или �треда�ти� р�ванных файл�в дру�и� ��трудни�а� �р�ани�ации. Ита�, �а� же �т�равить ����щени� эле�тр�нн�й ��чты и� �ценари�? С ����щью �а�ета Co���bo����o� D��� Obj���s (CDO�. К���ани� M���oso�� ра�ра��тала �а�ет CDO в �аче�тве д���лнительн��� �ред� �тва дл� M���oso�� O����� и Ou��ook, н� �н �ревратил�� в� в��лне �а���т��тельный ин�тру�ентарий, ��т�рый ��жет �ыть и���ль��ван �ценари��и W��dows S���p� Hos� (WSH�, ве���траница�и .asp и �тандартны�и �рил�жени��и W��dows. CDO �ред��тавл�ет �л�жный на��р ��ъе�т�в, ��т�рые ���ут �ыть и���ль��ваны дл� �т�рав�и, ��лучени� и �т��ражени� ����щений эле�тр�нн�й ��чты и н�в��тных �ру��, ��ра��т�и �ри�ре�лений и даже дл� вы��лнени� не��т�рых �адач ��� чт�в��� �ервера. Б�льшин�тв� этих в��р���в вых�д�т �а ра��и те�ати�и данн�й �ни�и. В данн�й �лаве �удет ���а�ан�, �а� CDO ��жет �ыть и���ль��ван дл� �т� �рав�и те��т�вых или HTML�����щений эле�тр�нн�й ��чты. Эт�т �а�ет ���в�� л�ет �т�равл�ть в�е, начина� � �р��т��� те��та и �а�анчива� ��лн�ценны�и ве�� �траница�и и ����щени��и, и�еющи�и �л�жный ф�р�ат и не���ль�� вл�жений. ▼) Дополнительную информацию по CDO можно найти на веб-сайте Microsoft Developers по адресу msdn.microsoft.com. Проведите поиск по ключевой фразе «CDO for Windows 2000» (используя кавычки) или откройте индексные указатели для «MSDN Library», «Messaging and Collaboration», «Collaboration Data Objects» или «CDO for Windows 2000». Но должен вас предупредить: если вы считаете изложенный мной материал слишком непонятным, значит, вы еще не читали ма- териал компании Microsoft. Ка� ни �транн�, вер�и� CDO, ра��р��тран�е�а� � W��dows 7, V�s��, XP и 2000, на�ывает�� «CDO �o� W��dows 2000». Х�т� в д��у�ентации M���oso�� у���инают�� не���ль�� дру�их ра�н�видн��тей CDO, в� в�е� дальнейше� �атериале данн�й �лавы CDO �тн��ит�� т�ль�� � CDO дл� W��dows 2000. Эт�т �а�ет у�тан�влен на ваше� ����ьютере в �а��е \windows\system32 ��д и�ене� cdosys.dll. Е�ли файл cdosys.dll �� �а��й�т� �ричине �т�ут�твует в вашей �и�те�е, лучше в�е�� �удет е�� ����ир�вать и� дру��й W��dows��и�те�ы. П��е�тите е�� в �а��у system32, �т�р�йте ��н� ���андн�й �тр��и (на W��dows 7 или V�s�� ��н� ���андн�й �тр��и � ра�ширенны�и �ривиле�и��и� и введите ���анду regsvr32 %windir%\ system32\cdosys.dll. Объектная модель CDO Дл� �ред�тавлени� ����щений эле�тр�нн�й ��чты в CDO и���ль�уют�� не���ль�� ти��в ��ъе�т�в. Са�ы�и в��тре��ванны�и и� них �вл�ют�� �ледующие ��ъе�ты: y y CDO.Message — ��ъе�т, �ред�тавл�ющий �тдельн�е ����щение эле�тр�нн�й ��чты. С�держит внутри �е�� не���ль�� дру�их ��ъе�т�в: BodyPart, ��т�рый �вл�ет�� ��держи�ы� ����щени�; Attachments, ��т�рый �вл�ет�� ��лле�цией
256 Глава 6. Объекты сообщений и факсов ��ъе�т�в, �ред�тавл�ющих лю�ые вл�женные д��у�енты или и���ражени�; и Fields, ��т�рый дает ��и�ани� �т�равител�, те�ы и дру�их атри�ут�в ��� ��щени�; y y BodyPart — ��ъе�т, �ред�тавл�ющий �����нент ����щени�. BodyPart ��жет ��держать дру�ие BodyPart���ъе�ты, вл�женные в не��, ��т�рые, в �в�ю �чередь, �ред�тавл�ют ��дчиненные эле�енты ����щени�; y y CDO.Configuration — ��лле�ци� ��ъе�т�в Field, ����щающих CDO ��р�д�� д��тав�и ����щени�; y y Field — ��ъе�т, ��редел�ющий �дин �ара�етр, на�ри�ер �тр��у те�ы или �т� �равител� ����щени�. О�ъе�ты и их в�аи���тн�шени� ���а�аны на ри�. 6.1 . Е�ли �ра�у ул�вить ��ы�л в�е�� эт��� не ��лучит��, верните�ь � �хе�е чуть ���же. Те��т, �ледующий �а ри� �ун���, ����жет ва� в ней ра���рать��. Body Part CDO.Configuration Fields Fields Item(...) Body Parts Body Parts Fields Item(...) Stream Stream Stream Fields Item(...) Fields Item(...) Te xt Body HTML Body Fields Envelope Attachments Configuration Body Part CDO.Message Fields Body Parts Stream Encoded Content Stream Decoded Content Stream Body Part Рис. 6.1 . Объект CDO.Message состоит из нескольких других объектов, которые в совокупности дают описание содержимого сообщения, адресата и метода доставки На ри�. 6.2 ���а�ан�, чт� в �р��т�� ����щении, и�еюще� т�ль�� те��т�в�е ��держи��е, эт� ��держи��е хранит�� в� внутренне� ��ъе�те BodyPart, �ринад�
Объектная модель CDO 257 лежаще� ��ъе�ту CDO.Message. Чт��ы �ред��тавить �ы�трый д��ту� � те��т�в�й вер�ии ����щени�, ��ылающей�� на эт�т внутренний ��ъе�т BodyPart, и���ль�у� ет�� �в�й�тв� TextBodyPart ��ъе�та Message. Te xt Body HTML Body Fields Envelope Attachments Configuration Body Part “ plain text... ” CDO.Message Рис. 6 .2 . CDO-объекты для простого текстового сообщения CDO ���в�л�ет �т�равл�ть ����щение и в виде HTML, и в виде �р��т��� те��та, и���ль�у� MIM��ф�р�ат «mu���p�������������v�». В эт�� �лучае ��д ��н�вны� ��� ��щение� нах�д�т�� два ��дчиненных ��ъе�та BodyPart. Один ��держит те��т�вую вер�ию ����щени�, а вт�р�й ��держит HTML�вер�ию. Эта HTML�вер�и� ��жет ��держать �в�и ��дчиненные ча�ти, на�ри�ер и���ражени�, на ��т�рые ��ылают�� �тф�р�атир�ванные ����щени�. О�ъе�ты и ��лучивша��� �тру�тура ����щени� ���а�ана на ри�. 6 .3 . ▼) MIME означает Multipart Internet Mail Extensions, то есть многокомпонентные расширения ин- тернет-почты. Этот набор форматов является стандартизированным способом упаковки текста, изображений, документов и других данных в обычные текстовые файлы, которые могут пере- мещаться через системы электронной почты Интернета. Подробную информацию о форматах MIME можно получить из документов RFC 2045, RFC 2046 и RFC 2047, доступных на веб-сайте www.ietf.org/rfc. Рис. 6 .3 . CDO-объекты и MIME-структура для сообщения multipart/alternative, содержащего как HTML, так и обычную текстовую версии
258 Глава 6. Объекты сообщений и факсов П�началу в�е эт� ��жет ���а�ать�� не���ль�� �а�утанны�, н� �ри и�учении ���лед�вательн��ти дей�твий, не��х�ди�ых дл� �т�рав�и ����щени�, эта �хе�а �танет ��н�тнее. 1. С��дайте ��ъе�т CDO.Message. 2. С��дайте ��ъе�т CDO.Configuration и �в�жите е�� � ��ъе�т�� CDO.Message. 3. У�тан�вите �начени� Field в ��ъе�те CDO.Configuration дл� ��и�ани� ��р�д�а д��тав�и ����щени� (на�ри�ер, и�� ваше�� �етев��� ��чт�в��� �ервера, ра��� тающе�� �� �р�т���лу S�mp�� M��� T���spo�� P�o�o�o� — SMTP�. 4. При�в�йте �начени� �в�й�тва� ��ъе�та CDO.Message, ��хран�ющи� �тр��и те�ы, ��лучателей, адре�а �т�равител� и т. д. Эта инф�р�аци� ��хран�ет�� в ��лле�� ции Fields ��ъе�та Message. 5. Д��авьте � ��ъе�ту BodyPart ����щени� �р��т�е те��т�в�е или �тф�р�атир�� ванн�е HTML���держи��е. 6. Е�ли нужн�, �ри�ре�ите � ����щению д���лнительные д��у�енты, д��авл�� � ��лле�ции Attachments ��ъе�ты BodyPart. Эт� дей�твие ��жет �р�и�в�дить�� � и���ль��вание� в�е�� �дн�й �тр��и ��да на �ажд�е �ри�ре�ление. 7. И на��нец, и���ль�уйте �ет�д Send ��ъе�та CDO.Message дл� д��тав�и ����� щени�. При в�ей �ажущей�� �л�жн��ти эт�й �р�цедуры, ра���ла�а� ра��тающи� �це� нарие�, ею �удет ле��� ��ль��вать�� и ра�шир�ть ��ъе� эт�й �адачи. Д��ить�� ра��т�������н��ти �т �в�е�� �ерв��� �ценари� �т�рав�и ����щений �не �ыл� неле���, н� в�е ���ледующие �ри�еры дали�ь на�н��� �р�ще. В�е эти уче�ные �ценарии ��жн� �а�ру�ить � адре�а www.helpwin7.com/scripting. В не���ль�их �ледующих ра�делах �ред��тавл�ют�� ��рав�чные ��и��и, �а�а� ющие�� ра���атривае�ых ��ъе�т�в. (П�лный �еречень �в�й�тв и �ет�д�в ��жн� найти на ранее у����нут�� ве���айте MSDN.� Я ре���ендую �начала �р��у�тить эт�т �атериал и �����треть на �ри�еры, начинающие�� в ра�деле «От�рав�а ��� ��щений � ����щью CDO», �р��т� дл� т���, чт��ы �еред �р����тр�� ��рав�чн��� �атериала �����треть, �а� в�е эт� вы�л�дит на �ра�ти�е. Объект CDO.Message CDO.Message �вл�ет�� ��н�вны� ��ъе�т��, и���ль�уе�ы� дл� ра��ты � ����ще� ни��и эле�тр�нн�й ��чты и ����щени��и н�в��тных �ру��. Св�й�тва и �ет�ды, и���ль�уе�ые дл� �т�рав�и эле�тр�нных ����щений, ���а�аны в ��рав�е 6.1 . Св�й�тва и �ет�ды, и���ль�уе�ые дл� ��ра��т�и вх�д�щих ����щений или дл� �т� �рав�и ����щений в н�в��тные �ру��ы Us����, в данн�й �лаве не ра���атривают��. Св�й�тва, �а�ающие�� адре��в эле�тр�нн�й ��чты, и���ль�уют ее �тандартный ф�р�ат. М�жн� вве�ти �ра�у не���ль�� адре��в, ра�дел�� их �а��ты�и. Каждый адре� ��жет �рини�ать �дну и� �ледующих ф�р�: y y "Полное имя" <электронный_адрес@домен> y y "Полное имя" электронный_адрес@домен
Объектная модель CDO 259 y y Полное имя <электронный_адрес@домен> y y электронный_адрес@домен Е�ли адре�а эле�тр�нн�й ��чты ���ещают�� в ваши �ценарии и и���ль�ует�� ф�р�ат � �авыч�а�и, �ледует ���нить, чт� дл� вв�да их в и���ль�уе�ый ва�и ��ы� �ценариев ��жет ��над��ить�� де�а�тивир�вать �авыч�и. На�ри�ер, в V�S���p�, чт��ы в����ль��вать�� �ервы� ф�р�ат��, нужн� �удет на�рать �ледующий ��д: msg.from = """Brian Knittel"" <brian@somedomain.com>" СПРАВКА 6.1. СВОЙСТВА И МЕТОДЫ ОБЪЕКТА CDO.MESSAGE (НЕПОЛНЫЙ ПЕРЕЧЕНЬ) СВОЙСТВА Attachments В��вращает ��лле�цию BodyParts, ��держащую вл�жени� в ����щение. Эти вл�жени� ���ут �ыть д��авлены � ����щью �ет�да AddAttachment. (Т�ль�� чтение�. AutoGenerateTextBody Булев� �начение. Е�ли эт� �в�й�тв� и�еет �начение True, дл� данн��� ��� ��щени� и� HTMLBodyPart авт��атиче��и �енерирует�� TextBodyPart. В та��� �лучае нужн� т�ль�� у�тан�вить �начение дл� HTMLBodyPart. В �ри�ерах ��� �а�ан�, �а� эт� делает��. BCC Те�т�ва� �тр��а � �еречне� ��лучателей �ле��й ���ии — ����d C��bo� Copy (�CC� эт��� ����щени�. �CC�адре�а не ���а�ывают�� в ���и�х ����щени�, �т� �равленных дру�и� ��лучател��. BCC и р�д дру�их �в�й�тв в дей�твительн��ти хран�т�� в ��лле�ции Fields, н� �деланы д��ту�ны�и и �а� �а���т��тельные �в�й�тва дл� уд���тва их �р����тра и у�тан�в�и. BodyPart В��вращает ��ыл�у на ��ъе�т BodyPart ��н�вн��� ����щени�, ��держащий� �� в ��ъе�те CDO.Message. Эта ��н�вна� ча�ть ����щени�, ��рень иерархии е�� эле�ент�в. Ра��та � эти� эле�ент�� ведет�� дл� ра��ещени� ��держи���� ��� ��щени�. (Т�ль�� чтение.� CC Те��т�ва� �тр��а � �еречне� ��лучателей ��ычн�й ���ии — C��bo� Copy (CC� эт��� ����щени�. Configuration В��вращает или у�танавливает �начение ��ъе�та CDO.Configuration, �в��ан� н��� � данны� ����щение�. DSNOptions Цел�чи�ленн�е �начение, �вл�ющее�� �а�р���� � ни�х�д�щи� ��чт�� вы� �ервера� на �т�рав�у ва� ����щений эле�тр�нн�й ��чты (delivery status notifications — DSN, и�вещений � ���т��нии д��тав�и�, �видетель�твующих ��
260 Глава 6. Объекты сообщений и факсов у��ехе или ���е в �ередаче или д��тав�е ваше�� ����щени�. Д��у�ти�ые �на� чени� дл� DSNOptions �еречи�лены в та�л. 6 .1 . Путе� �л�жени� �начений 2, 4 и (или� � ���ут �ыть вы�раны �ра�у не���ль�� вариант�в. Д�в�льн� не�р��т�е ��ъ��нение DSN ��жн� найти �� адре�у www.faqs.org/rfcs/rfc1894.html. Нужда в эт�� �в�й�тве в��ни�ает т�ль�� в �лучае не��х�ди���ти в ��дтверждени�х д��тав�и. Fields К�лле�ци� ��ъе�т�в Field, �тн���щих�� � данн��у ����щению. Св�й�тв� fields (��л�� дает ��и�ание �т�равител�, ��лучател� и �ред��тавл�ет дру�ую инф�р�ацию � ����щении. И��енени� в ��лле�цию вн���т�� �уте� и��ене� ни� �тдельных эле�ент�в Field � ���ледующи� и���ль��вание� и�еюще���� в ��лле�ции �ет�да Update. Дл� уд���тва и���ль��вани� �начени� не��т�рых ��лей ���ут �ыть у�тан�влены � и���ль��вание� та�их �в�й�тв, �а� From (�т ����� и Subject (те�а�. О�ъе�т авт��атиче��и ���ещает �начени�, �ри�в�енные эти� �в�й�тва� в ��лле�цию Fields. From Адре� эле�тр�нн�й ��чты авт�ра ����щени�. HTMLBody О�н�вн�е тел� ����щени� в ф�р�ате HTML, �ред�тавленн�е в виде те��т�� в�й �тр��и. Задать HTML���нте��т ����щени� ��жн� не���ль�и�и ������а�и; �дин и� них — �ри�ваивание эт��у �в�й�тву �тр���в��� �начени�. И���ль��вать ф�р�ат HTML дл� ����щени� эле�тр�нн�й ��чты не����ательн�. В� �н��их �луча�х в��лне д��тат�чн� ���дать ��ычн�е те��т�в�е ����щение и ��хранить е�� в �в�й�тве TextBody. HTMLBodyPart В��вращает ��ыл�у на ��ъе�т BodyPart, ��держащий ��н�вн�е тел� ����ще� ни� в ф�р�ате HTML. Эт� �в�й�тв� ��ылает�� на ��лле�цию ��ъе�та BodyPart, е�ли ����щение �ыл� �т�равлен� в ф�р�ате mu���p�������������v�, или на �а� ��н�вн�й ��ъе�т BodyPart, е�ли ����щение �ыл� �т�равлен� т�ль�� �а� HTML. Е�ли HTML���нтент ��ределен не �ыл, ���ыт�а �р�читать эт� �в�й�тв� �ри� ведет � �ши��е. Св�й�тв� HTMLBody �т��ражает ��держи��е эт��� ��ъе�та. Е�ли нужн� �т�ра� вить ����щение, и�еющее HTML�ф�р�атир�вание, в ��льшин�тве �лучаев дл� эт��� д��тат�чн� �ри�в�ить �тр���в�е �начение �в�й�тву HTMLBody. О�ычн� ра� ��тать � �а�и� ��ъе�т�� HTMLBodyPart дл� эт��� не тре�ует��. (Т�ль�� чтение.� MDNRequested Булев� �начение. Е�ли эт� �в�й�тв� и�еет �начение True, ����щение �т� �равл�ет�� � �а��л�в���, ��т�рый тре�ует увед��лени� � д��тав�е. Б�лее ��н� �ретн�е у�равление увед��ление� � д��тав�е д��ту�н� �ри у�тан�в�е ��лей To Disposition-Notification-To и Disposition-Notification-Options. Значени� этих ��лей в�тавл�ют�� в �аче�тве �а�лавных �тр��, и�еющих та��е же и��. Эти в����жн��ти ра���атривают�� в �ри�лашении � ���уждению RFC 229�, д��ту�н��у �� адре�у www.ietf.org/rfc.
Объектная модель CDO 261 MIMEFormatted Булев� �начение. Е�ли нужн� �т�равить ����щение, ��т�р�е ��жет �ыть �т��ражен� �� вы��ру ��лучател� ли�� �а� �р��т�й те��т, ли�� �а� ф�р�ати� р�ванный HTML, �начение эт��� �в�й�тва нужн� у�тан�вить в True и ли�� у�та� н�вить в �начени�х ���их �в�й�тв, TextBodyPart и HTMLBodyPart, э�вивалентные вер�ии ����щени�, ли�� у�тан�вить дл� HTMLBodyPart �начение HTML�вер�ии и у�тан�вить �в�й�тв� AutoGenerateTextBody в True. С���щение �т�равл�ет�� � MIM��ти��� «mu���p�������������v�». Е�ли нужн� �т�равить ����щение т�ль�� в виде �р��т��� те��та или т�ль�� в виде HTML, �начение эт��� �в�й�тва нужн� ��тавить равны� False и у�та� н�вить �начение ли�� TextBodyPart, ли�� HTMLBodyPart, н� не ���их �в�й�твах �ра�у. Organization И�� �р�ани�ации (����ании�, �т�равл�ющей ����щение. М�жет ��тавать�� �у�ты�. ReplyTo Пред��читае�ый адре� дл� �твет�в на данн�е ����щение. О�ычн� ��в�а� дает � адре��� From. Е�ли �в�й�тв� ��тавлен� �у�ты�, ��льшин�тв� �лиент�в эле�тр�нн�й ��чты и���ль�уют дл� �твет�в адре� Sender или From. Sender Эле�тр�нный адре� �т�равител� ����щени�, е�ли �н �тличает�� �т адре�а авт�ра (From�. Эт� ��ле ��в�адает � ред�� и���ль�уе��й в ����щении �тр���й «S��d��:». Subject Стр��а те�ы ����щени�. Х�т� �ред��тавление �тр��и те�ы �читает�� �ра� вил�� х�р�ше�� т�на, делать эт� в ����щении эле�тр�нн�й ��чты не����а� тельн�. TextBody О�н�вн�е тел� ����щени� в ф�р�ате ��ычн��� те��та в виде �тр��и. Явл�ет� �� ��держи�ы� ��ъе�та TextBodyPart. Не���ль�� �тр��, ра�деленных �и�в�ла� �и в��врата �арет�и и �ерев�да �тр��и. Задать �начение те��т�в��� тела ��жн� не���ль�и�и ������а�и, ��т�рые �удут ра����трены далее. TextBodyPart О�ъе�т BodyPart, ��т�рый �ред�тавл�ет те��т�вую вер�ию ����щени�. П� анал��ии �� �в�й�тв�� HTMLBodyPart, эт� �в�й�тв� ��ылает�� на ��дчиненный эле�ент ��н�вн��� ��ъе�та BodyPart, е�ли ����щение �т�равл�ет�� в ф�р�ате mu���p�������������v�, или на �а� ��н�вн�й ��ъе�т BodyPart, е�ли ����щение �т�равл�ет�� т�ль�� в виде те��та. Св�й�тв� TextBody �т��ражает ��держи��е эт��� ��ъе�та. Ка� и в �лучае � ��ъе�т�� HTMLBodyPart, ва� не нужн� на�р��ую ��ылать�� на TextBodyPart. М�жн� �р��т� �тф�р�атир�вать �в�е ����щение в виде �тр�� ��в��� �начени� и �ри�в�ить е�� �в�й�тву TextBody. (Т�ль�� чтение.�
262 Глава 6. Объекты сообщений и факсов To О�н�вн�й ��лучатель (или ��лучатели� ����щени�, �ф�р�л�е�ый в виде те��т�в�й �тр��и. Эт� ����щение та�же �т�равл�ет�� �� адре�а� CC и �CC. Е�ли нужн� �т�равить ����щение ��лее че� �дн��у ��лучателю, �тделите �аж� дый адре� эле�тр�нн�й ��чты �т дру�их адре��в �а��т�й и �р��ел��. МЕТОДЫ AddAttachment(path [, username, password]) С��дает вл�жение в ����щение и в��вращает ��ыл�у на н�вый ��ъе�т BodyPart. О�ъе�т д��авл�ет�� � ��лле�ции Attachments ����щени�. Ар�у�ент path ��жет ��ылать�� на и�� файла, или же �н ��жет �ыть URL� адре���, у�а�ывающи� на ве���траницу. Е�ли нужн� вл�жить файл, вы д�лжны у�а�ать �у�ву ди��а и ��лный �уть � файлу. Е�ли нужн� вл�жить ��держи��е, в��т�е � ве���траницы или FTP��айта, �ледует у�а�ать ��лный URL�адре�, в�люча� �р�т���л (на�ри�ер, "http://"�. Е�ли ��держи��е �тн��ит�� � �атал��у, �ащищенн��у �ар�ле�, ��жн� у�а�ать не����ательные ар�у�енты username и password, и���ль�уе�ые в �аче�тве �ви� детель�тв � ��лн���чи�х на ���р ��нтента. Вл�жени� �ередают�� в виде MIM���а��дир�ванных ча�тей, и нужн� �аран� тир�вать, чт� вл�жению �ри�в�ен �равильный тип контента MIM�, ��и�ыва� ющий интер�ретацию вл�женных данных. При�еры ти��в ��нтента в�лючают в �е�� "text/plain", "text/html", "application/MS-Word" и "application/octet- stream". Е�ли у�а�ывает�� и�� файла, в�лючающее та��е ра�ширение, �а� ".doc" или ".gif", W��dows �ытает�� ��ределить �равильный ти� ��нтен� та дл� и���ль�уе��й инф�р�ации � ����щью рее�тра. Е�ли ��наружит��, чт� вл�жени�� дает�� не�равильный ти� ��нтента, ��жн� ���рре�тир�вать �начение �в�й�тва ContentMediaType т��� ��ъе�та, ��ыл�у на ��т�рый в��вра� щает AddAttachment. Св�й�тва и �ет�ды ��ъе�та BodyPart �удут ра����трены далее. ▼) Поскольку AddAttachment ожидает указания имени, отформатированного как URL-адрес, от- правляя файл, хранящийся на вашем компьютере, нужно либо использовать префикс �le://, либо начинать имя файла с буквы диска и двоеточия. Также нужно указать полный путь к файлу. В качестве правильных указаний можно привести примеры "�le://c:/Users/bknittel/ documents/report.doc" и "c:\Users\bknittel\documents\report.doc". Если опустить �le:// или указание буквы диска, будет получено следующее, не вполне понятное сообщение об ошибке: The speci�ed protocol is unknown. (Указанный протокол неизвестен.) Если отправляется веб-страница, нужно использовать префикс http://. Можно также исполь- зовать префиксы ftp:// и https:// для получения файла с использованием FTP или Secure HTTP соответственно. AddRelatedBodyPart(path, reference, referencetype [, username, password]) И���ль�ует�� в�е�те � ����щени��и HTML�ф�р�ата дл� в�тав�и д���л� нительных эле�ент�в (ре�ур��в�, та�их �а� �рафиче��ий или фрей��вый
Объектная модель CDO 263 ��нтент, на ��т�рый ��ылает�� ��н�вн�е тел� ����щени�. В��вращает ��ыл�у на д��авленный ��ъе�т BodyPart. И���ль��вание эт��� �ет�да �рив�дит � ав� т��атиче���й у�тан�в�е �начени� �в�й�тва MIMEFormatted и ф�р�ир�ванию ����щени�, ���т��ще�� и� не���ль�их MIM��ча�тей. Ар�у�енты path, username и password ра��тают та� же, �а� и � AddAttachment, и у�а�ывают и�� файла или URL�адре� д��авл�е���� ��нтента. Ар�у�ент reference у�а�ывает и��, ��т�р�е дает�� в�тавл�е���у �����ненту. О�н�вн�е тел� д��у�ента и���ль�ует эт� и�� дл� ��ыл�и на эле�енты. При� �еры и���ль��вани� данн��� ар�у�ента �удут �риведены далее в эт�й �лаве. Ар�у�ент referencetype �вл�ет�� �начение�, ���а�ывающи�, �а� ��н�вн�й д��у�ент ��ылает�� на вл�женные ре�ур�ы. Д��у�ти�ые �начени� ар�у�ента referencetype �еречи�лены в та�л. 6.2. Мет�д AddRelatedBodyPart в��вращает ��ыл�у на д��авленную ча�ть тела ����щени�. Е�ли дл� ���тавлени� ����щени�, и�еюще�� HTML�ф�р�ат, и���ль�ует�� �ет�д CreateMHTMLBody, т� в и���ль��вании данн��� �ет�да нет не��х�ди��� �ти — CreateMHTMLBody авт��атиче��и д��авл�ет лю�ые эле�енты, на ��т�рые ��ылает�� ����щение. О�ычн� в �аче�тве ар�у�ента referencetype и���ль�ует�� ��н�танта cdoRefTypeLocation, а в �аче�тве ар�у�ента reference у�а�ывает�� �р��т�е и��. На�ри�ер, е�ли ��н�вн�й д��у�ент и�еет в�тр�енн�е и���ражение, ����начен� н�е те��� <IMG SRC="aname">, и���ражение ��жет �ыть �ри�ре�лен� � ����щью выражени�: msg.AddRelatedBodyPart "c:\images\some.gif", "aname", cdoRefTypeLocation Ка� и AddAttachment, �ет�д AddRelatedBodyPart тре�ует �рефи��, у�а�ыва� ющий, �а� и�енн� нужн� ��лучить файл. Ар�у�ент path д�лжен начинать�� � и�ени ди��а и �а��и или � �ет�и �р�т���ла, на�ри�ер file:// или http://. CreateMHTMLBody(path [, flags [, username, password]]) Эт�т �ет�д ��уще�твл�ет �ре��ра��вание HTML�д��у�ента, на ��т�рый у�а�ывает и�� файла или URL�адре� ар�у�ента path, в ����щение, ���т��щее и� не���ль�их HTML�ча�тей, и ��хран�ет е�� в �аче�тве �ринадлежаще�� ����ще� нию ��ъе�та HTMLBodyPart. Эт�т �ет�д не д�лжен и���ль��вать�� � ��ъе�т�� ����щени�, ��т�рый уже ��держит HTML���нтент. Ка� и в AddAttachment, ар�у�ент path д�лжен начинать�� � �у�вы ди��а и и�ени �а��и или � file://, http://, и т. д . Д���лнительные �����ненты ве���траницы, на�ри�ер �рафиче��ие и фрей� ��вые ���тавл�ющие, �ри�ре�л�ют�� авт��атиче��и, е�ли т�ль�� в �начении flags не �удет у�а�ан� ��ратн�е. Е�ли ар�у�ент path �вл�ет�� URL�адре���, ��т�рый ��ылает�� на �ащищенную �ар�ле� ве���а��у, ��лн���чи� у�а�ыва� ют�� � ����щью ар�у�ент�в username и password. Не����ательный ар�у�ент flags у�а�ывает, �а�ие ��дчиненные ча�ти д��у�ента, е�ли та��вые и�еют��, д�лжны �ыть ��ущены; �� у��лчанию и���ль�ует�� ��н�танта cdoSuppressNone. Д��у�ти�ые �начени� дл� ар�у�ента flags �еречи�лены в та�л. 6 .3 . Зде�ь ���ут �ыть у�а�аны �ра�у не���ль�� фла��в �уте� �л�жени� их чи�� л�вых �начений.
264 Глава 6. Объекты сообщений и факсов Send От�равл�ет ����щение эле�тр�нн�й ��чты у�а�анн��у ��лучателю (��лу� чател���, и���ль�у� �ет�д, у�тан�вленный в ��ъе�те CDO.Configuration. Эт�т �ет�д и���ль�ует�� т�ль�� дл� �т�рав�и ����щений эле�тр�нн�й ��чты. П��ле вы��ва �ет�да Send ��ъе�т ����щени� ��жн� удалить и� �а��ти, �а� ���а�ан� в �ледующе� �ри�ере: msg.send set msg = Nothing В та�л. 6 .1 �еречи�лены �начени� ��н�тант, и���ль�уе�ых �в�й�тв�� DSNOptions. Лю�ые �начени� ��н�тант cdoDSNFailure, cdoDSNSuccess и cdoDSNDelay ��жн� ��ла� дывать в�е�те, чт��ы ���а�ать, чт� нужны увед��лени� �ри в��ни�н�вении �ра�у не���ль�их ���т��тель�тв. Таблица 6.1. Константы cdoDSNOptions Имя Зна- чение Описание cdoDSNDefault 0 Не выдавать увед��лени� � ���т��нии cdoDSNNever 1 Не выдавать увед��лени� � ���т��нии cdoDSNFailure 2 Выдать увед��ление �ри ���е д��тав�и cdoDSNSuccess 4 Выдать увед��ление �ри у��ешн�й д��тав�е cdoDSNDelay 8 Выдать увед��ление �ри �адерж�е д��тав�и cdoDSNSuccessFailOrDelay 14 Выдать увед��ление �ри у��ехе, ���е или �адерж�е д��тав�и. (О�ратите вни�ание, чт� 14 �вл�ет�� �у�� ��йчи�ел2,4и�.� ▼) Если, как показано в главе 10 «Командная строка CMD», поместить сценарий в файл формата WSH, для автоматического определения этих констант можно использовать тег <reference>. Но если использовать файл с расширением .vbs или .js, придется либо помещать определения для нужных констант в сценарий, либо использовать непосредственно числовые значения. Чтобы упростить добавление определений констант, можно загрузить с веб-сайта www.helpwin7.com/ scripting файл, содержащий определения констант VBScript для всех CDO-констант, перечис- ленных в данной главе. В та�л. 6 .2 �еречи�лены �начени� ��н�тант, и���ль�уе�ые в ар�у�енте referencetype �ет�да AddRelatedBodyPart. Таблица 6.2. Константы cdoReferenceType Имя Зна- чение Описание cdoRefTypeId 0 Ар�у�ент reference ��держит �начение дл� MIM�� �а��л�в�а "Content-ID" . HT ML �����щение ��ылает�� на эт�т ре�ур�, и���ль�у� эт�т �а��л�в��
Объектная модель CDO 265 Имя Зна- чение Описание cdoRefTypeLocation 1 Ар�у�ент reference ��держит �начение дл� MIM���а � ��л�в�а "Content-Location" . HT M L�����щение ��ылает�� на эт�т ре�ур�, и���ль�у� �тн���щий�� � ����щению унифицир�ванный у�а�атель ре�ур�а — U���o�m R�sou��� Lo���o� (URL�. О�ычн� и���ль�у� ет�� эт�т ������ В та�л. 6 .3 �еречи�лены �начени� ��н�тант, и���ль�уе�ых в �аче�тве ар�у�ен� т�в flags �ет�да CreateMHTMLBody. М�жн� у�а�ать �ра�у не���ль�� фла��в �уте� ��ладывани� в�е�те их �начений. Таблица 6.3. Константы cdoMHTMLFlags Имя Зна- чение Описание CdoSuppressNone 0 Ниче�� не ��у��ает��; �а�ру�ить в�е эле�енты, на ��т�рые ��ылает�� HTML�д��у�ент (и���ль�ует�� �� у��лчанию� CdoSuppressImages 1 Не в�лючать и���ражени�, ��ыл�и на ��т�рые у�а�а� ны в эле�ентах <IMG> CdoSuppressBGSounds 2 Не в�лючать �ву��вые ре�ур�ы, у�а�анные в эле�ен� тах <BGSOUND> CdoSuppressFrames 4 Не в�лючать ��держи��е фрей��в, у�а�анн�е в эле� �ентах <FRAME> CdoSuppressObjects 8 Не в�лючать ��ъе�тные ре�ур�ы, у�а�анные в эле� �ентах <OBJECT> CdoSuppressStyleSheets 16 Не в�лючать та�лицы �тилей, � ��т�ры� ��ращают�� эле�енты <LINK> CdoSuppressAll 31 О�у�тить в�е ��ъе�ты, на ��т�рые и�еют�� ��ыл�и Работа с полями Не��т�рые ��ъе�ты ����щений CDO и���ль�уют ��лле�цию ��и�ен�ванных �начений, на�ывае�ую ��л��и — Fields. К�лле�ци� Fields ра��тает ��чти та� же, �а� и �а��ив, �а и��лючение� т���, чт� �на инде��ирует�� те��т�вы�и и�ена�и, а не чи�ла�и. Не��т�рые �начени� Field ���ут �р���атривать�� или у�танавливать�� чере� �в�й�тва ��ъе�та, ��держаще�� ��лле�цию Fields; эти �в�й�тва уд��ны в и���ль� ��вании, �����ль�у ���в�л�ют ��х�дить�� �е� ��лле�ции Fields. Е�ли нужн� и�� учить или и��енить �начение ��л� Field, дл� ��т�р��� не �ред��тавлен� уд��н��� �в�й�тва, �ридет�� ра��тать � ��лле�цией Fields на�р��ую.
266 Глава 6. Объекты сообщений и факсов ▼) Коллекция Fields позаимствована из другого объектного средства Microsoft под названием ActiveX Data Objects (ADO). Но нам столько полей для работы с CDO не понадобится, поэтому здесь представлены лишь наиболее важные из этих полей. Дополнительную информацию об объекте Field и коллекции Fields можно найти на веб-сайте msdn.microsoft.com, проведя поиск по ключевой фразе "ADO API Reference" (используя кавычки). Каждый ��ъе�т Field ��держит �ледующие три важных дл� на�еченных на�и целей �в�й�тва. Свойство Описание Name И�� ��л� Value Св��анн�е � эти� ��ле� �начение Type Ти� �начени� Св�й�тв� Type у�а�ывает ти� �начени� (цел�е чи�л�, �тр��а и т. д .�, н� ��� ���ль�у ��льшин�тв� ��ы��в �ценариев �ерев�д�т в�е �начени� в ти� Variant, �н� �����й р�ли не и�рает. Те� не �енее, е�ли �в�й�тв� Type ��ъе�та Field равн� 0, �начение не ��ределен�, и �ри ���ыт�е е�� �т��ражени� ��жет �р�и��йти �ши��а. К�лле�ци� Fields ��держит �дин или не���ль�� ��ъе�т�в Field. Св�й�тва и �дин �ет�д ��лле�ции Fields �еречи�лены в ��рав�е 6.2 . СПРАВКА 6.2. СВОЙСТВА И МЕТОД КОЛЛЕКЦИИ FIELDS СВОЙСТВА Count В��вращает ��личе�тв� эле�ент�в ��лле�ции. Item(index) В��вращает �тдельный эле�ент ��лле�ции. Ар�у�ент index ��жет �ыть �тр���й (и�еть �начение �в�й�тва Name нужн��� эле�ента Field� или чи�л�� (��ы�н�венный инде�� нужн��� эле�ента в диа�а��не �т 0 д� Count-1�. МЕТОД Update Мет�д Update �т�равл�ет лю�ые и��енени�, вне�енные в ��лле�цию Fields ��ратн�, р�дитель����у ��ъе�ту ����щени�. Е�ли вы�вать Update не ��лу� чил��ь, в�е вне�енные в эле�енты ��лле�ции Fields и��енени� не �удут и�еть ни�а���� эффе�та, и ��чт�в�е ����щение не �удет д�лжны� ��ра��� д��тавлен�. В �ледующе� �ри�ере �адает�� �начение Field дл� CDO.Message���ъе�та �� и�ени msg: set fields = msg.Fields ' получение копии Fields из объекта msg ' внесение изменений fields.Item("http://schemas.microsoft.com/cdo/configuration/name") = value fields.Update ' сохранение измененного значения
Объектная модель CDO 267 М�жн� в �аче�тве еще �дн��� варианта в����ль��вать�� V�S���p����ерат�р�� with: with msg.Fields .I tem("http://schemas.microsoft.com/cdo/configuration/name") = value .Update ' сохранение измененного значения end with При фа�тиче���� и���ль��вании имя �удет �а�енен� �дни� и� и�ен, �еречи�� ленных в ���а�анн�й ниже та�лице. И�ена ��лей и�еют �лиш��� ��льшую длину и ���т��т и� �рефи��а �лю� и�� �ара�етра. В �ажд�й ��лле�ции, ���рее в�е��, �удет �ра�у не���ль�� ��ъе�т�в Field � �дни� и те� же �рефи����; �т эле�ента � эле�енту �удет и��ен�ть�� т�ль�� та ча�ть, ��т�ра� �тн��ит�� � и�ени. П�л� в ра���атривае�ых далее та�лицах ��ру�� �ир�ваны �� �рефи��а�, чт��ы ��и��и �ыл� ле�че читать. И�учить ��лле�цию Fields ��жн� �уте� и���ль��вани� ��ычных �ет�д�в и�� учени� ��лле�ций, �ри�ущих ваше�у ��ы�у �ценариев. В V�S���p�, �а� ���а�ан� в �ледующе� �ри�ере, ��жн� в����ль��вать�� ци�л�� For Each или ци�л�� For: set msg = CreateObject("CDO .Message") for each fld in msg.Fields ' ис пол ьзо ван ие цикла "for each" if fld.type = 0 then wscript.echo fld.name, "не определено" else wscript.echo fld.name, "=", fld.value end if next '--ИЛИ -- set flds = msg.Fields ' ис пол ьзо ван ие цикла for и числовой индексации for i = 0 to flds.Count-1 if flds.item(i).type = 0 then wscript.echo flds.item(i).name, "не определено" else wscript.echo flds.item(i).name, "=", flds.item(i).value end if next Поля для объекта CDO.Message Значени� Field дл� ��ъе�та CDO.Message ��держат и�ена �т�равител� и ��лучател� ����щени�, те�у ����щени� и дру�ие «��щие» у�тан�в�и ����щени�. Перечень в����жных �начений ���а�ан в та�л. 6.4. О�ратите вни�ание: ��л� в �ате��рии httpmail ��держат наи��лее важную инф�р�ацию �а��л�в�а ����щени� и ���ут и���ль��вать ��лный л��альный на��р �и�в�л�в. ▼) Некоторые поля могут быть просмотрены или заданы через свойства CDO.Message, которые были перечислены в справке 6.1. Для краткости, эти поля в данном списке не приводятся.
268 Глава 6. Объекты сообщений и факсов Таблица 6.4. Неполный список значений в коллекции полей объекта CDO.Message Имя Описание Префи�� "URN:SCHEMAS:HTTPMAIL:" content-disposition С��твет�твует "Content-Disposition» MIM���а��л�в�у дл� BodyPart content-media-type С��твет�твует " Content-Type" в MIM���а��л�в�е ����щени�. О�ычн� и�еет �начение вида "image/gif", "text/html", и т. д Date Дата �т�рав�и ����щени�. Авт��атиче��и у�танавливает�� �е� т�д�� Send или Post Fromemail Адре�на� ча�ть �тр��и From Fromname И�енна� ча�ть �тр��и From Htmldescription HTML�вер�и� ����щени� (��держи��е HTMLBodyPart� в виде те��т�в�й �тр��и Importance Важн��ть ����щени�. Эт� ��ле д�лжн� и�еть �начение �дн�й и� ��н�тант cdoImportanceValue, у�а�анных в та�л. 6 .5 Normalizedsubject Стр��а Subject (те�а� � удаленны�и �рефи��а�и вида Re: или Fwd: Priority При�ритет ����щени�. Эт� ��ле д�лжн� и�еть �начение �дн�й и� ��н�тант cdoPriorityValue, у�а�анных в та�л. 6 .6 Senderemail Адре� эле�тр�нн�й ��чты (ча�ть �тр��и, у�а�ывающей �т�рави� тел�� Sendername И�� �т�равител� (ча�ть �тр��и, у�а�ывающей �т�равител�� Textdescription О�ычн�е те��т�в�е ��держи��е тела ����щени�. С�держи��е TextBodyPart в виде те��т�в�й �тр��и Префи�� "URN:SCHEMAS:MAILHEADER:" content-base Ба��вый универ�альный идентифи�ат�р ре�ур�а — U���o�m R�� — U���o�m R�� — U���o�m R�� U���o�m R�� R�� R�� sou��� Id�������� (URI�, ��т�рый ча�т� на�ывают URL, и���ль�уе� Id�������� (URI�, ��т�рый ча�т� на�ывают URL, и���ль�уе� Id�������� (URI�, ��т�рый ча�т� на�ывают URL, и���ль�уе� (URI�, ��т�рый ча�т� на�ывают URL, и���ль�уе� URI�, ��т�рый ча�т� на�ывают URL, и���ль�уе� �, ��т�рый ча�т� на�ывают URL, и���ль�уе� URL, и���ль�уе� , и���ль�уе� �ый дл� р�д�твенных URI в дру�их ��л�х �а��л�в�а и дл� лю�ых HTML�ча�тей ����щени�, не ��держащих те� <BASE> Кр��е эт���, �ате��ри� mailheader ��держит ASCII�те��т �а��дир�ванных в ф�р�ате RFC 1522 вер�ий ��лей �ате��рии httpmail. Пр���атривать или и�� �ен�ть �р�ду�лир�ванные ��л� нет ни�а��й не��х�ди���ти; ��ъе�т CDO.Message �адает их авт��атиче��и и� httpmail�вер�ий. В та�л. 6 .5 и 6.6 �еречи�лены ��н�танты, ��редел�ющие ���твет�твенн� д��у� �ти�ые �начени� дл� ��лей Importance и Priority. Таблица 6.5. Константы cdoImportanceValues Имя Зна- чение Описание cdoLow 0 Ни��а� важн��ть cdoNormal 1 О�ычна� важн��ть cdoHigh 2 Вы���а� важн��ть
Объектная модель CDO 269 Таблица 6.6. Константы cdoPriorityValues Имя Зна- чение Описание cdoPriorityNonUrgent -1 Не�р�чн�е cdoPriorityNormal 0 С ��ычны� �ри�ритет�� cdoPriorityUrgent 1 Ср�чн�е Коллекция CDO BodyParts С���щени� эле�тр�нн�й ��чты ���ут ��держать не���ль�� ча�тей: те��т�вую вер� �ию, HTML�вер�ию, вл�женные д��у�енты, �ри�ре�ленные ве���траницы � ре�ур� �а�и в виде и���ражений, фрей��в и т. д . Кр��е т���, �ереадре�уе�ые ����щени� ���ут ��держать иерархию ����щений. (Вы ведь ��лучали ���да�ни�удь �дну и� тех ��чт�вых шут��, ��т�рые �ереадре��вывали�ь �т чел�ве�а � чел�ве�у?� Та�ие ����щени� ���т��т и� не���ль�их MIM��ча�тей, а те��т�вый файл, не�ущий та�ие ����щени�, ��держит �ар�еры, ���а�ывающие ��нец �дн�й и начал� дру��й ча�ти. О�ъе�т CDO.Message �ред�тавл�ет эти ���тавные ����щени� �уте� и���ль��ва� ни� ��ъе�тн�й �тру�туры, на�ывае��й BodyPart, а �а�а их ��лле�ци� на�ывает�� BodyParts. О�ъе�т BodyPart ��держит �дну ча�ть ���тавн��� ����щени� (на�ри�ер, ����щение или и���ражение�. П�дчиненные эле�енты ����щени�, ��держащие�� в BodyPart, �ред�тавлены ��лле�цией BodyParts. В ��рав�чн�� ��и��е 6.3 �еречи�лены �в�й�тва и �ет�ды ��лле�ции CDO BodyParts. Е�ли ва� интере�ует т�ль�� лишь �т�рав�а �р��тых те��т�вых ����ще� ний, ��жалуй, не �т�ит тратить вре�� на и�учение BodyParts и ра�дел «О�ъе�т CDO.Co���gu����o�» ��жн� �р��у�тить. К�лле�ци� BodyParts ��жет �ыть и�учена � ����щью ци�ла for each или ци�ла for, �а� и в �лучае � ��лле�цией Fields, ра����тренн�й ранее в данн�й �лаве. СПРАВКА 6.3. СВОЙСТВА И МЕТОДЫ КОЛЛЕКЦИИ BODYPARTS СВОЙСТВА Count В��вращает ��личе�тв� эле�ент�в ��лле�ции. (Т�ль�� чтение.� Item(n) В��вращает и� ��лле�ции у�а�анный ��ъе�т BodyPart, �де n ��жет �рини� �ать �начени� в диа�а��не �т 0 д� .Count-1 . МЕТОДЫ Add([n]) Д��авл�ет � ��лле�ции н�вый, �у�т�й ��ъе�т BodyPart и в��вращает ��ыл� �у на н�вый ��ъе�т. Е�ли �адан чи�л�в�й ар�у�ент, н�вый ��ъе�т в�тавл�ет�� в �аче�тве n��� эле�ента ��и��а (на�ри�ер, �т 1 д� .Count+1�. Е�ли �начение n равн� -1 или ��ущен�, н�вый ��ъе�т BodyPart д��авл�ет�� � ��нцу ��лле�ции. Е�ли �начение n равн� 1, н�вый ��ъе�т BodyPart д��авл�ет�� � началу ��и��а. Учтите, чт� �начение n не ��жет �ыть равн� 0.
270 Глава 6. Объекты сообщений и факсов Delete x Удал�ет у�а�анный ��ъе�т и� ��лле�ции, �де x ��жет �ыть ли�� ��ычны� чи�л�� �т 1 д� .Count, ли�� ��ыл��й на ��ъе�т, удал�е�ый и� BodyPart. DeleteAll Удал�ет и� ��лле�ции в�е ��ъе�ты BodyPart. Следует ут�чнить, чт� дл� Item() и���ль�уют�� чи�ла инде���в �т 0 д� .Count-1, а дл� Add и Delete, чт��ы �ред�тавить �уще�твующие ��ъе�ты, и���ль�уют�� чи�ла �т 1 д� .Count. Объект CDO BodyPart Отдельные �����ненты ����щени� �ред�тавлены ��ъе�т�� BodyPart. Каждый ��ъе�т CDO.Message ��держит ��ъе�т BodyPart, �ред�тавл�ющий �т�равл�е��е ��� ��щение, ��т�рый, в �в�ю �чередь, ��жет ��держать вл�женные ��ъе�ты BodyPart. Св�й�тва и �ет�ды ��ъе�та BodyPart �риведены в ��рав�е 6.4. СПРАВКА 6.4. СВОЙСТВА И МЕТОДЫ ОБЪЕКТА CDO BODYPART (НЕПОЛНЫЙ ПЕРЕЧЕНЬ) СВОЙСТВА BodyParts В��вращает ��ыл�у на ��лле�цию BodyParts, ��т�ра� �ред�тавл�ет в�е ��д� чиненные ча�ти данн��� эле�ента ����щени�. Д��авить н�вый эле�ент � эт�й ��лле�ции �р�ще в�е�� � ����щью �ет�да AddBodyPart. Charset Стандартный ��и�атель на��ра �и�в�л�в, и���ль�уе���� в ����щении (на�ри�ер, us-ascii или shift-jis�. С��твет�твует �ара�етру charset ��л� Content-Type в �а��л�в�е ����щени�. ContentMediaType О�и�ывает MIM��ти� ��дчиненн��� д��у�ента (на�ри�ер, text/plain или image/gif�. И���ль�ует�� �� �начение� Charset дл� ���тавлени� �ринадлежа� щей ����щению �тр��и �а��л�в�а Content-Type. ContentTransferEncoding О�и�ывает �ет�д, ��т�рый �удет и���ль��вать�� дл� ��дир�вани� ��держи� ���� ����щени�. Ти��� �� у��лчанию �вл�ет�� 7bit. Те��т ��ычн� д�лжен �ыть �а��дир�ван �а� 7bit или �а� в��тые в �авыч�и �ечатные �и�в�лы — quoted- printable. И���ражени� и дв�ичные данные ��дируют�� ��ычн� �а� base64. Д��у�ти�ые ти�ы ��дир�вани� �еречи�лены в та�л. 6 .� . Fields В��вращает ��лле�цию Fields, �ри�ре�ленную � данн��у ��ъе�ту BodyPart. В Fields хран�т�� �н��ие �в�й�тва ��ъе�та; �а�и �� �е�е �в�й�тва �р��т� �ред��тавл�ют ��лее уд��ный ������ их ��лучени�. Д���лнительна� инф�р�
Объектная модель CDO 271 �аци� �� эт��у в��р��у дана в уже ра����тренн�� на�и в эт�й �лаве ра�де� ле «Ра��та � ��л��и. Эт� �в�й�тв� �редна�начен� т�ль�� дл� чтени�; вне�ти в не�� и��енени� ��жн� т�ль�� �уте� ��рре�тир�в�и �тдельных эле�ент�в Field � ���ледующи� и���ль��вание� �ринадлежаще�� ��лле�ции �ет�да Update. Filename С��твет�твует и�ени файла, у�а�анн��� �тр���й MIM���а��л�в�а Content- Disposition. (Т�ль�� чтение.� Parent В��вращает ��ыл�у на ��ъе�т, ��т�рый ��держит эт�т эле�ент ����щени� (т� е�ть р�дитель��ий ��ъе�т BodyPart данн��� ��ъе�та BodyPart, или �лавный ��ъе�т BodyPart ��ъе�та Message�. МЕТОДЫ AddBodyPart(n) Д��авл�ет н�вый, �у�т�й ��ъе�т BodyPart � ��и��у ��дчиненных эле�ент�в ����щени�, ��держащих�� внутри данн��� ��ъе�та BodyPart, а та�же в��вращает ��ыл�у на н�вый ��ъе�т. Эт�т �ет�д �вл�ет�� анал���� �ет�да Add, �ринадле� жаще�� ��ъе�ту���лле�ции BodyParts; т� е�ть ��ерат�ры set newpart = bp.AddBodyPart(n) и set newpart = bp.BodyParts.Add(n) а���лютн� э�вивалентны. О�и�ание �в�й�тва Add ��жн� найти в уже ра����� тренн�� на�и в эт�й �лаве ра�деле «К�лле�ци� CDO �odyP���s». GetEncodedContentStream() В��вращает ADO���ъе�т Stream, ��т�рый ��жет �ыть �р�читан дл� �р����� тра �а��дир�ванн��� ��держи���� ча�ти ����щени�. Эт�т �ет�д не �ри�ен�ет�� �ри �т�рав�е или ��лучении ����щений, н� ���ть же, � ��ла�аю, чт� �н �танет ��ле�ен, ���да ��над��ит�� ������ �р��т��� ��дир�вани� файла в base64 или в дру��й ф�р�ат. SaveToFile filename За�и�ывает ��держи��е ��ъе�та BodyPart в файл. Ар�у�ент filename ��жет �ыть у�а�ан в ��ычн�� ф�р�ате � и���ль��вание� ��лн��� �ути (на�ри�ер, "C:\message.doc"� или в URI�ф�р�ате (на�ри�ер, "file://c:\message.doc"�. Значени� ��лле�ции Fields ��ъе�та BodyPart �еречи�лены в та�л. 6 .7 . Те ��л�, ��т�рые д��ту�ны в виде �в�й�тв BodyPart, в ней не ���а�аны. (Кр��е т���, ��л� ле�ци� Fields �лавн��� ��ъе�та BodyPart, ��держаще���� в ��ъе�те CDO.Message, ��держит в�е ��л�, �еречи�ленные в ���а�анн�й ранее та�л. 6.4 . Эт� ��л� CDO. Message, а не ��л� BodyPart, ��эт��у �ни та�же не у�а�аны в та�л. 6 .7 .�
272 Глава 6. Объекты сообщений и факсов Таблица 6.7. Значения коллекции Fields объекта BodyPart Имя Описание Префи�� "URN:SCHEMAS:HTTPMAIL:" attachmentfilename С��твет�твует �ара�етру "filename:" ��чт�в��� �а��л�в�а Content-Disposition в �ри�ре�ленн�� ��ъе�те. (Т�ль�� чтение� content-disposition-type Ча�ть �а��л�в�а content-disposition, �тн���ща��� � ти�у. М�жет �рини�ать �дн� и� �начений unspecified, other, attachment или inline Префи�� "URN:SCHEMAS:MAILHEADER:" content-description К���ентарий, дающий ��и�ание ча�ти ���тавн��� ����ще� ни� content-disposition MIM���а��л�в�� Content-Disposition дл� данн�й ча�ти ���тавн��� ����щени� content-id Уни�альный идентифи�ат�р ре�ур�а content-language Двух�у�венный ��д, ��и�ывающий ��ы�, и���ль�уе�ый в ре�ур�е (на�ри�ер, en или de� content-location С��твет�твующий ре�ур�у URI (���а�ывающий, на�ри� �ер, �т�уда в��та в�тр�енна� ча�ть� content-type MIM���а��л�в�� Content-Type дл� данн��� ��ъе�та Body- Part, ��держащий ти� инф�р�аци�нн��� на��лнени� и д�� ��лнительн� идентифи�ат�р на��ра �и�в�л�в Префи�� "HTTP://SCHEMAS.MICROSOFT.COM/" sensitivity О�редел�ет ур�вень �е�ретн��ти ����щени� и ���твет�тву� ет ��чт�в��у �а��л�в�у "Sensitivity:" . Задает�� �дни� и� цел�чи�ленных �начений, �еречи�ленных в та�л. 6 .9 В та�л. 6 .� и 6.9 �еречи�лены ��н�танты, и���ль�уе�ые ���твет�твенн� �в�й� �тв�� ContentTransferEncoding и ��ле� sensitivity. Таблица 6.8. Константы cdoEncodingType Имя Значение Описание cdo7bit 7bit Пр��т�й 7��итный ASCII cdo8bit 8bit ���итна� ��дир�в�а � �и�в�ла�и ��н� ца �тр��и cdoBase64 base64 Три ��тета (�айта�, �а��дир�ванные в четыре �е��тета (ше�тира�р�дных �айта� �� ��ещение� cdoBinary binary Пр�и�в�льный дв�ичный ��т�� cdoMacBinHex40 mac-binhex40 Дв�ичн��ше�тнадцатеричн�е ��ди� р�вание, и���ль�уе��е в M�����osh. CDO ��жет де��дир�вать binhex, н� ��дир�вать в не�� не ��жет
Объектная модель CDO 273 Имя Значение Описание cdoQuotedPrintable quoted-printable Преи�уще�твенн� 7��итный ��д, � ���итны�и �и�в�ла�и, �а��дир�� ванны�и �а� =HH uuencode Unix К�дир�в�а Uu���od� Таблица 6.9. Константы cdoSensitivityValues Имя Значение Описание cdoSensitivityNone 0 Не у�а�ан� (и���ль�ует�� �� у��л� чанию� cdoPersonal 1 Пер��нальн�е cdoPrivate 2 Служе�н�е cdoCompanyConfidential 3 К�нфиденциальн�е Объект ADO Stream С�держи��е ��ъе�та CDO.Message или BodyPart ���а�ывает�� (делает�� д��ту�ны�� в виде ��ъе�та Stream, ��т�рый ��жет �ыть ��хранен в файле. Stream �вл�ет�� еще �дни� ��ъе�т��, ���аи��тв�ванны� и� �и�те�ы ADO, дл� ��лн��� ��и�ани� ��т�р��� в данн�й �ни�е �р��т� нет �е�та. О�ъе�ты Stream не и�рают важн�й р�ли в �т�рав�е ����щений, н� е�ли вы ра��таете � CDO дл� �а�их�т� дей�твий � ��� лученны�и ����щени��и, а та�же дл� ��дир�вани� или де��дир�вани� файл�в данных, не��т�рые �ет�ды и �в�й�тва ��ъе�та Stream ва� �е�у�л�вн� �ри��д�т��. Мет�ды и �в�й�тва ��ъе�та ADO Stream �еречи�лены на ве���айте M���oso��, у��� ��нут�� в начале эт�й �лавы. Объект CDO.Con�guration О�ъе�т CDO.Configuration ��держит �начени� ��лей Field, �ред�и�ывающие ��ъ� е�ту Message ��р�д�� д��тав�и ����щени� эле�тр�нн�й ��чты. С���щение ��жет �ыть д��тавлен� �ледующи�и дву�� �ет�да�и: y y Путе� �т�рав�и ����щени� ��чт�в��у или н�в��тн��у �ерверу, ра��тающе�у �� �р�т���лу SMTP или �� �р�т���лу N��wo�k N�ws T���s��� P�o�o�o� (NNTP�, ли�� � вашей ����твенн�й �ети, ли�� �т ваше�� �р�вайдера интернет�у�лу� — I������� s��v��� p�ov�d�� (ISP�. Эт� не���ред�твенный �ет�д д��тав�и ����� щени�. y y Путе� �ерета��ивани� ����щени� в �а��у, �ери�диче��и ��анируе�ую ваши� ��чт�вы� �ервер�� на наличие и�х�д�щих ����щений. Эта техн�л��и� ��жет �ыть �ри�енена в т�� �лучае, е�ли вы и���ль�уете M���oso�� SMTP или NNTP �ервер в �аче�тве ча�ти �и�те�ы инф�р�аци�нн��� интернет��ервера — I������� I��o�m���o� S��v���s (IIS�. Е�ли «�атал�� �ерета��ивани�» дл� SMTP��ервера нах�дит�� на ����ьютере, �а�у�тивше� �ценарий, или д��ту�ен �� �ети, вы в��лне ��жете в����ль��вать�� эти� �ет�д��.
274 Глава 6. Объекты сообщений и факсов О�ъе�т CDO.Configuration ��держит т�ль�� �дн� �в�й�тв�: Fields. К�лле�ци� Fields ��держит ��и��� �начений, ��и�ывающих �ет�д, и���ль�уе�ый дл� д��тав� �и ����щени�. Значени� ��лей �адают�� � и���ль��вание� �ет�д�в, ра����тренных ранее в ра�деле «Ра��та � ��л��и». Один�един�твенный �ет�д — Load — ���в�л�ет ва� �ривлечь дл� �ервера и�х�дную инф�р�ацию �� д��тав�е, в��тую и� дру�их �рил�жений. Св�й�тв� и �ет�д ��и�аны в ��рав�е 6.5 . Значени� ��лле�ции Fields ��ъе�та ��нфи�урации �еречи�лены в та�л. 6 .10. СПРАВКА 6.5. СВОЙСТВО И МЕТОД ОБЪЕКТА CDO.CONFIGURATION СВОЙСТВО Fields В��вращает ��ъе�т���лле�цию Fields, ��т�рый ��держит �начени� Field, ��редел�ющие ��р�д�� �т�рав�и ����щени�. Значени� Field �еречи�лены в та�л. 6 .10. МЕТОД Load loadFrom У�танавливает дл� ��лле�ции Fields �начени� �� у��лчанию, ���данные дл� �ерверных ��д�лючений Ou��ook �xp��ss и I������� I��o�m���o� S��v���s SMTP и NNTP. Е�ли ваш �ценарий �удет в�е�да ра��тать на ����ьютере, и�еюще� у�тан�вленный IIS, на�тр�енный на и�х�д�щие ��чт�вые ����щени�, или е�ли вы в�е�да �а�у��аете �ценарий и� учетн�й �а�и�и ��ль��вател�, дл� ��т�р�й и�еют�� индивидуальные на�тр�й�и Ou��ook �xp��ss, вы ��жете в����ль��� вать�� эти� �ет�д��, чт��ы и��ежать не��х�ди���ти «ручн��� ��нтажа» �ет�да д��тав�и и�х�д�щей ��рре���нденции и �ерверн�й инф�р�ации. Значение� ар�у�ента loadFrom д�лжна �ыть �дна и� ��н�тант, �еречи�ленных в та�л. 6 .11 . Дл� ��льшин�тва �ценарных �рил�жений лучше, наверн�е, �удет �р�и�н�ри� р�вать �ет�д Load, �ред��ла�ающий �редварительную у�тан�в�у в�ех �начений, и у�тан�вить эти �начени� в �а��� �ценарии. Значени� ��лей дл� ��лле�ции Fields ��ъе�та CDO.Configuration, и���ль�уе� �ые дл� ����щений эле�тр�нн�й ��чты, ���а�аны в та�л. 6 .10. Таблица 6.10. Неполный перечень значений коллекции Fields объекта CDO.Con�guration Имя Описание Префи�� : "HTTP://SCHEMAS.MICROSOFT.COM/CDO/CONFIGURATION/" Autopromotebodyparts Булев� �начение. Е�ли эт� �начение равн� True, лю�ые ��ъ� е�ты BodyPart, ��держащие т�ль�� �дин в�тр�енный ��ъе�т BodyPart, �т�равл�ют�� �а� един�е цел�е Httpcookies С�и��� �ook���файл�в (ра�деленных т�ч��й � �а��т�й�, �т� �равл�е�ых HTTP��ервера�, ���да и�вле�ае�ые �траницы и���ль�уют CreateMHTMLBody или AddAttachment
Объектная модель CDO 275 Имя Описание Languagecode К�д ��ы�а в ф�р�ате RFC 1766 (на�ри�ер, en или de�, и�� ��ль�уе�ый �ри �енерации те��та дл� �тветных или �ере� адре�уе�ых ����щений sendemailaddress Адре� эле�тр�нн�й ��чты, и���ль�уе�ый �т�равителе� �� у��лчанию. И���ль�ует�� � SMTP��ервер�� в �аче�тве адре�а From sendpassword Пар�ль, и���ль�уе�ый �ри ��д�лючении � SMTP��ерверу, е�ли дл� smtpauthenticate у�тан�влен� �начение cdoBasic sendusername И�� ��ль��вател�, и���ль�уе��е �ри ��д�лючении � SMTP� �ерверу, е�ли дл� smtpauthenticate у�тан�влен� �начение cdoBasic senduserreplymailaddress Адре� эле�тр�нн�й ��чты �т�равител� «дл� �твета» («��p�y� �o»�, �редна�наченный дл� и���ль��вани� в ����щени�х эле�тр�нн�й ��чты. Е�ли не у�а�ан, и���ль�ует�� и�еющий� �� в ����щении адре� «От» («F�om»� sendusing Мет�д, и���ль�уе�ый �ри �т�рав�е ����щений эле�тр�нн�й ��чты. Д�лжен �ыть �дн�й и� ��н�тант cdoSendUsing, ��� �а�анных в та�л. 6 .13 smtpaccountname И�� учетн�й �а�и�и SMTP в т�� виде, �а� �н� �т��ражает�� Ou��ook �xp��ss; ни�е� �ра�тиче��и не и���ль�ует�� smtpauthenticate Мет�д аутентифи�ации, и���ль�уе�ый �ри �т�рав�е ��� ��щени� на ��чт�вый �ервер. Значение д�лжн� �ыть �дн�й и� ��н�тант cdoProtocolsAuthentication, �еречи�ленных в та�л. 6 .12 smtpconnectiontimeout К�личе�тв� �е�унд �жидани� �еред и�течение� �р��а SMTP���единени�. П� у��лчанию ���тавл�ет 30 �е�унд или, е�ли �а�ружали�ь на�тр�й�и, ��в�адает �� �начение�, �а�руженны� и� на�тр�е� в Ou��ook �xp��ss smtpserver И�� �ервера, и���ль�уе���� �ри �т�рав�е ����щений эле�� тр�нн�й ��чты чере� SMTP. Эт� ��жет �ыть DNS�и�� или IP�адре� в ф�р�ате де��тичных чи�ел � т�ч�а�и, а та�же ��жет �ыть �начение�, �а�руженны� и� на�тр�е� Ou��ook �xp��ss smtpserverpickupdirectory Путь � �атал��у и�х�д�щих ����щений дл� и���ль��вани� �ри �т�рав�е ����щений эле�тр�нн�й ��чты чере� та��й �атал�� smtpserverport TCP���рт, и���ль�уе�ый �ри �т�рав�е ��чт�вых ����щений чере� SMTP. П� у��лчанию и�еет �начение 25 или, е�ли �а� �ружали�ь на�тр�й�и, ��в�адает �� �начение�, �а�руженны� и� на�тр�е� в Ou��ook продолжение 
276 Глава 6. Объекты сообщений и факсов Имя Описание smtpusessl Булев� �начение, ���а�ывающее, нужн� ли �ри �ередаче чере� SMTP и���ль��вать �р�т���л �е���а�ных ��едине� ний — S��u�� So�k��s L�y�� (SSL�. Е�ли у�тан�вить дл� ��л� smtpusessl �начение True, т�, �а� �равил�, нужн� та�же дл� ��л� smtpserverport у�тан�вить �начение 465 или �начение н��ера ��рта, у�а�анн��� ваши� ISP��р�вайдер�� urlgetlatestversion Булев� �начение. Е�ли эт� �начение равн� True, �ет�ды AddAttachment и CreateMHTMLBody в�е�т� и���ль��вани� �э� шир�ванн�й л��альн�й ���ии в�е�да и�вле�ают у�а�анную �траницу urlproxyserver Пр���и��ервер, и���ль�уе�ый �ри и�влечении HTTP� ре�ур��в. Он д�лжен �ыть у�а�ан �а� IP�адре� или �а� и�� �ервера �лю� ��рт (на�ри�ер, "1.2.3.4:80" или "proxy. mycompany.com:80"� urlproxybypass Стр���в�е �начение. Е�ли дл� не�� у�тан�влен� �начение " <local>", �ри л��альн�й адре�ации �р���и��ервер не и�� ��ль�ует�� Префи��: "URN:SCHEMAS:CALENDAR:" timezoneid Инди�ат�р ча��в��� ����а, и���ль�уе���� �ри д��авлении � и�х�д�ще�у ����щению �ет�и вре�ени и �ри чтении вх�д�щих ����щений. П� у��лчанию и���ль�уют�� на� �тр�й�и л��альн��� ����ьютера. Д�лжн� и���ль��вать�� �дн� и� �начений ��н�тант cdoTimeZoneId, �еречи�ленных в та�л. 6 .14 В та�л. 6 .11 �еречи�лены ��н�танты, и���ль�уе�ые в �ет�де LoadFrom. Таблица 6.11. Константы cdoCon�gSource Имя Зна- чение Описание cdoSourceDefaults -1 За�ру��а �начений �� у��лчанию �а� и� I������� I��o�m���o� S��v���s, та� и и� Ou��ook �xp��ss cdoSourceIIS 1 П�лучение на�тр�е� �ервера и� ��нфи�ураци�нных �начений SMTP дл� IIS��ервера, и�еюще���� на данн�� ����ьютере cdoSourceOutlookExpress 2 П�лучение на�тр�е� �ервера и� личных �начений �� у��лчанию в ��нфи�урации Ou��ook �xp��ss дл� те�уще�� ��ль��вател� В та�л. 6 .12 �еречи�лены ��н�танты, и���ль�уе�ые ��л��и nntpauthenticate и smtpauthenticate. Таблица 6.10 (продолжение)
Объектная модель CDO 277 Таблица 6.12. Константы cdoProtocolsAuthentication Имя Зна- чение Описание cdoAnonymous 0 Аутентифи�ацию не �р�в�дить cdoBasic 1 И���ль��вание ��н�вн�й (ведущей�� �т�рыты� те��т��� аутентифи�ации. От�равл�ют�� у�а� �анные и�� ��ль��вател� и �ар�ль. Эт�т вариант и���ль�ует�� дл� ��чт�вых �луж�, не и�еющих �тн�шение � W��dows, ��т�рые тре�уют аутентифи� �ации �еред �т�рав��й (Gm���, на�ри�ер� cdoNTLM 2 И���ль��вание W��dows NTLM�аутентифи�ации. И���ль�уют�� �ара�етры д��ту�а те�уще�� �р�� це��а (��лн���чи� ��ль��вател�, �а�у�тивше�� �ценарий� В та�л. 6 .13 �еречи�лены ��н�танты, и���ль�уе�ые ��ле� sendusing. Таблица 6.13. cdoSendUsing Constants Имя Зна- чение Описание cdoSendUsingPickup 1 От�рав�а ����щени� �уте� е�� �ерета��ивани� в �атал�� �т�рав�и �луж�ы IIS SMTP cdoSendUsingPort 2 От�рав�а ����щени� � не���ред�твенны� и���ль� ��вание� SMTP. Эт� наи��лее ра��р��траненный �ет�д В та�л. 6 .14 �еречи�лены ��н�танты, и���ль�уе�ые в ��ле timezoneid. Таблица 6.14. Константы cdoTimeZoneId Имя Зна- чение GMT- смещение Место применения cdoUTC 0 0:00 В�е��щее ����рдинир�ванн�е вре�� cdoGMT 1 0:00 Вре�� �� Гринвичу; Ду�лин, Эдин�ур� и Л�н� д�н cdoLisbon 2 +1:00 Ли��а��н и Варшава cdoParis 3 +1:00 Париж и Мадрид cdoBerlin 4 +1:00 Берлин, Ст����ль�, Ри�, Берн, Брю��ель и Вена cdoEasternEurope 5 +2:00 В��т�чна� Евр��а cdoPrague 6 +1:00 Пра�а cdoAthens 7 +2:00 Афины, Хель�ин�и и Ста��ул cdoBrasilia 8 –3:00 Бра�или� продолжение 
278 Глава 6. Объекты сообщений и факсов Имя Зна- чение GMT- смещение Место применения cdoAtlanticCanada 9 –4:00 Атлантиче���е вре�� (Канада� cdoEastern 10 –5:00 В��т�чн�е вре�� (��s���� T�m�� (США и Ка� нада� cdoCentral 11 –6:00 Центральн�е вре�� (C������ T�m�� (США и Канада� cdoMountain 12 –7:00 Г�рн�е вре�� (Mou����� T�m�� (США и Ка� нада� cdoPacific 13 –�:00 Тих���еан���е вре�� (P������ T�m�� (США и Канада�, Тихуана cdoAlaska 14 –9:00 Ал���а cdoHawaii 15 –10:00 Гавайи cdoMidwayIsland 16 –1 1:00 О�тр�ва Мидуэй и Са��а cdoWellington 17 +12:00 Веллин�т�н и О�ленд cdoBrisbane 18 +10:00 Бри��ен, Мель�урн и Сидней cdoAdelaide 19 +9:30 Аделаида cdoTokyo 20 +9:00 Т��и�, О�а�а, Са���р�, Сеул и Я�ут�� cdoHongKong 21 +�:00 САР Г�н��н�, Перт, Син�а�ур и Тай�эй cdoBangkok 22 +7:00 Бан����, Джа�арта и Хан�й cdoBombay 23 +5:30 Му��аи, Каль�утта, Мадра�, Нью�Дели и К�� л���� cdoAbuDhabi 24 +4:00 А�у�Да�и, Ма��ат, Т�или�и, Ка�ань и В�л� ���рад cdoTehran 25 +3:30 Те�еран cdoBaghdad 26 +3:00 Ба�дад, Кувейт, Найр��и, Эр�Ри�д cdoIsrael 27 +2:00 И�раиль cdoNewfoundland 28 –3:30 Ньюфаундленд cdoAzores 29 –1:00 А��р��ие ��тр�ва и Ка�� Верде cdoMidAtlantic 30 –2:00 Средне�атлантиче���е вре�� (M�d�A�������� cdoMonrovia 31 0:00 М�нр�ви� и Ка�а�лан�а cdoBuenosAires 32 –3:00 Буэн���Айре� и Дж�рджтаун cdoCaracas 33 –4:00 Кара�а� и Ла�Па� cdoIndiana 34 –5:00 Индиана (в��т�чна�� cdoBogota 35 –5:00 Б���та и Ли�а cdoSaskatchewan 36 –6:00 Са��ачеван Таблица 6.14 (продолжение)
Отправка сообщений с помощью CDO 279 Имя Зна- чение GMT- смещение Место применения cdoMexicoCity 37 –6:00 Мехи���Сити и Те�у�и�аль�а cdoArizona 38 –7:00 Ари��на cdoEniwetok 39 –1 2:00 Энивет�� и Кваджалейн cdoFiji 40 +12:00 О�тр�ва Фиджи, Ка�чат�а и Маршалл�вы ��тр�ва cdoMagadan 41 +11:00 Ма�адан, С�л���н�вы ��тр�ва и Н�ва� Ка� лед�ни� cdoHobart 42 +10:00 Х��арт cdoGuam 43 +10:00 Гуа�, П�рт�М�р��и и Владив��т�� cdoDarwin 44 +9:30 Дарвин cdoBeijing 45 +�:00 Пе�ин, Чунцин и Уру�чи cdoAlmaty 46 +6:00 Ал�а�Ата и Да��а cdoIslamabad 47 +5:00 И�ла�а�ад, Карачи, Е�атерин�ур� и Таш�ент cdoKabul 48 +4:30 Ка�ул cdoCairo 49 +2:00 Каир cdoHarare 50 +2:00 Хараре и Прет�ри� cdoMoscow 51 +3:00 М���ва и Сан�т�Петер�ур� cdoInvalidTimeZone 52 Не�равильный идентифи�ат�р ча��в��� ����а П�жалуй, ��рав�чн�й инф�р�ации уже д��тат�чн�. Давайте те�ерь �����три�, �а� ею ��жн� в����ль��вать��. Отправка сообщений с помощью CDO В �редыдуще� ра�деле вы ��лучили ��и�ание �л�жн��� на��ра ��ъе�т�в дл� �т� �рав�и ����щений. В�� эта �л�жн��ть нужна дл� �ред��тавлени� в����жн��ти ���дани� ���тавных, �ультиф�р�атных ����щений и ра��ты � ни�и. П�лучает�� та�, чт� в реальных �рил�жени�х �удут и���ль��вать�� т�ль�� не���ль�� и� в�ех �ред�тавленных �ет�д�в и �в�й�тв. Дл� �т�рав�и ����щени� нужн� вы��лнить �ледующие ��н�вные дей�тви�: 1. С��дать �дин ��ъе�т CDO.Message и �дин ��ъе�т CDO.Configuration и дать ��ъ� е�ту CDO.Message ��ыл�у, ведущую � ��ъе�ту CDO.Configuration. 2. Д��авить � ��ъе�ту CDO.Message ��держи��е ����щени�. 3. Д��авить � ��ъе�ту CDO.Configuration инф�р�ацию � �ет�де д��тав�и. 4. От�равить ����щение.
280 Глава 6. Объекты сообщений и факсов Сначала ���дают�� ��ъе�ты, дл� че�� и���ль�уют�� �тандартные вы��вы ��ъ� е�т�в. На�ри�ер, в V�S���p� �ледующие ��ерат�ры ���дают и �в��ывают ��ъе�ты Message и Configuration � и�ена�и ���твет�твенн� msg и config: set msg = CreateObject("CDO .Message") ' создание объектов set config = CreateObject("CDO .Configuration") set msg.Configuration = config ' свя зь msg с config Третий ��ерат�р ����щает ��ъе�ту msg, чт� �в��анны� � ни� ��ъе�т�� Configuration �удет ��ъе�т config. В ��тальных �ри�ерах е�ли вы��вы �ет�да CreateObject не ���а�аны, ��жн� �ред��л�жить, чт� �ни �вл�ют�� ча�тью �це� нари�. В �ледующих ра�делах �удет �р�де��н�трир�ван� не���ль�� вариант�в вы� ��лнени� в�ех ��тальных дей�твий. Создание сообщения В ��льшин�тве �лучаев нужн� �р��т� �т�равить ��ычный те��т или ����щение, �тф�р�атир�ванн�е � ����щью HTML. С�держи��е ����щени� ��жет �рать�� и� те��т�в�й �тр��и, файла или, е�ли нужн� в �аче�тве ����щени� �т�равить ве�� �траницу, � ве��ре�ур�а, на ��т�рый у�а�ывает URL�адре�. О�ъе�т CDO.Message ��держит �дин ��ъе�т BodyPart, ��т�рый ��жет �ыть и�� ��ль��ван �дни� и� двух �������в: е�ли �т�равл�ет�� �р��т�й те��т или HTML� ����щение, в не� хранит�� ��держи��е ����щени�; е�ли �т�равл�ет�� ���тавн�е ����щение, � альтернативны�и и (или� д���лнительны�и ча�т��и, в эт�� ��ъе�те BodyPart хран�т�� ���тавные ча�ти ����щени�, нах�д�щие�� в е�� ��лле�ции BodyParts, �а� ���а�ан� ранее на ри�. 6 .2 и 6.3 . П�эт��у дл� ���дани� �р��т��� ����щени� ��держи��е �ри�ваивает�� ��н�вн�� �у ��ъе�ту BodyPart. А дл� ���дани� ���тавн��� ����щени� � BodyPart д��авл�ют�� �����ненты. Отправка текстовой строки Е�ли �т�равл�ет�� �р��т�е те��т�в�е ����щение, нужн� лишь ���е�тить те��т ����щени� в ��ъе�т BodyPart CDO�����щени�. Дл� эт��� �р�ще в�е�� в����ль��� вать�� �в�й�тв�� TextBody. Е�ли � ��ъе�ту не д��авл�ет�� ни�а��е дру��е ��дер� жи��е ����щени�, �в�й�тв� TextBodyPart ��ылает�� на ��н�вн�й ��ъе�т BodyPart (�а� �ыл� ���а�ан� на ри�. 6 .2�, а �в�й�тв� TextBody ��ылает�� на е�� ��держи��е. Е�ли �ри�в�ить те��т�вую �тр��у �в�й�тву TextBody, �на �тан�вит�� ��держи�ы� ����щени�. Те��т�в�е ����щение д�лжн� ���т��ть и� те��т�вых �тр�� (� �а��и�альн�й длин�й ���л� 75 �и�в�л�в�, ра�деленных �ар�й �и�в�л�в в��врата �арет�и и �ере� в�да �тр��и. Эт� ���в�л�ет ����щению �равильн� �т��ражать�� в ��чт�вых �р�� �ра��ах, ра��тающих � те��т��. На�ри�ер, ����щение ��жн� ���дать, и���ль�у� �ледующие ��ерат�ры: reminder = "Это напоминающее сообщение:" & vbCRLF & _ " Нужно прибыть на еженедельное совещание в 13:15" & vbCRLF & _ " и взя ть с с обой карандаш."
Отправка сообщений с помощью CDO 281 М�жн� ���дать ����щение, в ��т�р�� �еречи�л�ют�� в�е .do��файлы в ��н� �ретн�� �атал��е: ' Файл примера Script0601.vbs set fso = CreateObject("Scripting.FileSystemObject") dir = "C:\Documents and Settings\All Users\Documents\Orders" txt="" for each file in fso.GetFolder(dir).Files ' ска нирование .DOC-файлов if instr(ucase(file.Name), ". DOC ") > 0 then iftxt=""then ' формирование начала сообщения txt = "Новые документы в папке Orders:" & _ vbCRLF & vbCRLF end if txt=txt&file.Name&", "& _ file.DateCreated & vbCRLF ' добавление имени к списку end if next if txt = "" then WScript.Quit(0) ' н ет нужных файлов, выход set msg.TextBody = txt ' присваивание сообщению содержимого Будет ���дан� �ледующее ����щение: Новые документы в папке Orders: fromPTP.doc, 11.03 .2011 13:13:10 fromZandar.doc, 11.03 .2011 14:13:15 Отправка сообщения из текстового файла CDO ��жн� �а�тавить в����ль��вать�� в �аче�тве тела ����щени� ��держи�ы� те��т�в��� файла. Дл� эт��� над� и���ль��вать чтение те��та в �тр���вую �ере� �енную и �ри�ваивание �начени� эт�й �ере�енн�й �в�й�тву TextBody, ��т�р�е и���ль��вал��ь в �редыдуще� ра�деле. Ра����три� �ри�ер: sendfile = "C:\temp\message.txt" ' о тправляемый файл set fso = CreateObject("Scripting.FileSystemObject") set infile = fso.OpenTextFile(sendfile) ' ч тен ие файла в строку txt = infile.ReadAll infile.Close set infile = Nothing msg.TextBody = txt ' присваивание сообщению содержимого Отправка вывода программы М�жн� �т�равить �� эле�тр�нн�й ��чте выв�д �р��ра��ы ���андн�й �тр��и, в����ль��вавши�ь ��ъе�т�� WScript.Shell, ��т�рый ра���атривал�� в �лаве 4 «Д��ту� � файла� и рее�тру». На�ри�ер, �ледующие ��ерат�ры �ерехватывают выв�д ���анды в те��т�в�е ����щение эле�тр�нн�й ��чты: set shell = CreateObject("WScript.Shell") set ping = shell.Run("ping www.someplace.com ") txt = "Результаты ping-теста: " & vbCRLF & ping.Stdout.ReadAll set ping = Nothing msg.TextBody = txt ' присваивание сообщению содержимого
282 Глава 6. Объекты сообщений и факсов Отправка HTML-сообщения HTML�����щени� ���ут �ыть ���даны �уте� �а��лнени� ��ъе�та HTMLBodyPart или �ри�ваивани� �тр��и �в�й�тву HTMLBody. П�лученный �����нент ����щени� ��жет �ыть един�твенны� или ча�тью ���тавн��� альтернативн��� ����щени� mu���p���� ���������, ���т��ще�� �а� и� те��т�в�й, та� и и� HTML�вер�ии. С���щени� � HTML�ф�р�атир�вание� ��жн� ���давать �уте� в�тав�и ��� �твет�твующих HTML�те��в в те��т�вую �тр��у. Ранее ���а�анн�е ����щение �� ��и���� файл�в ��жет �ыть �т�равлен� в HTML�ф�р�ате � и���ль��вание� не�р�ну�ер�ванн��� ��и��а � <UL>�те�а�и: ' Файл примера script0602.vbs txt="" for each file in fso.GetFolder(dir).Files ' ска нирование .DOC-файлов if instr(ucase(file.Name),".D OC") > 0 then iftxt=""then ' формирование начала сообщения txt = "Новые документы в папке Orders:" & _ "<P><UL>" end if txt=txt&"<LI>"&file.Name&", "& _ file.DateCreated ' добавление имени к списку end if next if txt = "" then WScript.Quit(0) ' н ет нужных файлов, выход txt = txt + "</UL>" ' з авершение списка set msg.HTMLBody = txt ' присваивание сообщению содержимого В эт�� �ценарии н�вый эле�ент ��и��а д��авл�ет�� дл� �ажд��� файла � и�� ��ль��вание� HTML�те�а <LI>. Ве�ь ��и��� выв�дит�� �а� <UL> (u�o�d���d ��s� — неу��р�д�ченный ��и��� � �ар�ера�и�. Отправка веб-страницы или HTML-файла Е�ли нужн� �т�равить HTML�����щение, ��т�р�е уже ��держит�� в файле или д�� �ту�н� в виде ве���траницы, дл� и�влечени� файла или ве���траницы и и���ль��ва� ни� их в �аче�тве тела ����щени� ��жн� в����ль��вать�� �ет�д�� CreateMHTMLBody ��ъе�та CDO.Message. Мет�д CreateMHTMLBody и���ль�ует ар�у�ент фла��в, ��т�рый ���а�ывает, д�лжен ли CDO и�вле�ать и в�траивать в ����щение �а�ие�ли�� и���ражени� или дру�ие ре�ур�ы, на ��т�рые ��ылает�� ��н�вн�й HTML�д��у�ент. И���ль�уе�ые дл� эт��� ар�у�ента ��н�танты �еречи�лены в та�л. 6.3 . В ��ще�, чт��ы �ыли в�лючены в�е и���ражени�, �ву�и и дру�ие ре�ур�ы, на ��т�рые и�еют�� ��ыл�и, нужн� и���ль��вать ��н�танту cdoSuppressNone (�начение 0�. ▼▼ VBScript-файл с определениями констант для всех этих значений можно загрузить с веб-сайта www.helpwin7.com/scripting. Затем эти определения можно скопировать в свои сценарии. Следующий �ри�ер ���а�ывает, �а� файл �� и�ени servers.html ��жет �ыть �т� �равлен в виде �тф�р�атир�ванн��� ����щени�: const cdoSuppressNone = 0 msg.CreateMHTMLBody("file://C:\data\servers.html", cdoSuppressNone)
Отправка сообщений с помощью CDO 283 Берет�� д��у�ент "c:\data\servers.html" и и���ль�ует�� в �аче�тве тела ��� ��щени� эле�тр�нн�й ��чты. И�вле�ают�� и в�лючают�� та�же и в�е ре�ур�ы, ��т�рые �тан�в�т�� д���лнительны�и ��ъе�та�и BodyPart. Мет�д CreateMHTMLBody ��жет та�же ��лучить д��у�ент ����щени� � ве�� �ервера, е�ли в�е�т� и�ени файла у�а�ать �тандартный URL�адре�. На�ри�ер, вы��лнение ��ерат�ра msg.CreateMHTMLBody("http://www.somewhere.com/somepage.html", _ cdoSuppressNone) �риведет � ���ещению ве���айта www.somewhere.com, �а�ру��е �траницы и в�ех в�люченных в нее и���ражений или дру�их ре�ур��в и и���ль��ванию в�е�� эт��� в �аче�тве ��держи���� ����щени�. Эт�й техн�л��ией ��жн� в����ль��вать�� в �ценарии, �а�у��ае��� �� ра��и�анию дл� авт��атиче���й �т�рав�и на ваш ��чт�вый �щи�, ��аже�, �траницы ���т��ни� �ети или �цен�и ��ртфел� а�ций. Е�ли ве���траница тре�ует и�ени ��ль��вател� и �ар�л�, их ��жн� у�а�ать ���ле ар�у�ента фла��в. Н� хранить �ар�ли в �ценари�х нежелательн�, �����ль�у лю��й чел�ве�, и�еющий д��ту� � файлу ваше�� �ценари�, ���жет у�нать �ар�ль вх�да на удаленный ве���айт. ▼) Если сценарий запускается с одним и тем же URL-адресом более одного раза, CDO может опре- делить, что запрашиваемая вами веб-страница находится в кэше недавно просмотренных стра- ниц временных файлов интернета — Temporary Internet Files, и может отправить сохраненную там копию. Хотя это и ускоряет работу при отправке статичной страницы, но если страница подвергается изменениям или генерируется веб-сервером только в режиме реального времени, CDO может отправить устаревшую копию. Можно заставить CDO никогда не заглядывать в кэш в поисках страниц, установив для поля urlgetlatestversion объекта Con�guration значение True. Объект Con�guration будет рассмотрен в данной главе чуть позже. Отправка мультиформатного сообщения Е�ли нужн� �т�равить ����щени�, и�еющие HTML�ф�р�атир�вание, �удет в��лне �ла��ра�у�н� в�лючить э�вивалентную и�, �р��тую те��т�вую вер�ию дл� тех людей, ��т�ры� не нравит�� HTML или чь� ��чт�ва� �р��ра��а не в ���т��нии �р�читать эт�т ��д. О�е вер�ии, те��т�вую и HTML, ��жн� ���дать вручную и �ри�в�ить их ��� ��щению, в����ль��вавши�ь ��ерат�ра�и, ��т�рые и���ль��вали�ь в �редыдущих ра�делах, или же ��жн� ���дать т�ль�� HTML�вер�ию и дать в����жн��ть CDO авт��атиче��и и�влечь и� нее те��т�вую вер�ию. Эта техн�л��и� �вл�ет�� �а�ы� �р��ты� �������� ���дани� те��т�в�й вер�ии, ���да �ет�д CreateMTHMLBody и�� ��ль�ует�� дл� в�лючени� файла или ве���траницы. Дл� эт��� нужн� �р��т� у�тан�вить дл� �в�й�тва AutoGenerateTextBody �начение True. Ра����три� �ри�ер: msg.CreateMHTMLBody("http://www.somewhere.com/somepage.html", _ cdoSuppressNone) msg.AutoGenerateTextBody = True
284 Глава 6. Объекты сообщений и факсов Добавление вложений П�чт�вые вл�жени� �т�равл�ют�� �уте� д��авлени� ��ъе�т�в BodyPart � ��л� ле�ции Attachments ��н�вн��� ��ъе�та ����щени�. О�н�вна� ча�ть ра��ты ��жет �ыть �р�делана � и���ль��вание� �ринадлежаще�� ��ъе�ту ����щени� �ет�да AddAttachment. Он д��авл�ет н�вый ��ъе�т BodyPart, �а�ружает ��держи��е у�а�ан� н��� файла в BodyPart и в��вращает ��ыл�у на н�вый ��ъе�т. Ра����три� �ри�ер: set attach = msg.AddAttachment("C:\text\proposal.doc") Эт� 99% ра��ты. О�тает�� т�ль�� ���а��тить�� � �ар�ир�в�е вл�жени� �ра� вильн�й �тр���й, у�а�ывающей ти� ��держи���� — content-type (в �в�й�тве ContentMediaType�, ��т�ра� ��и�ывает ти� данных, нах�д�щих�� внутри вл�жени�. Эта инф�р�аци� ��д��а�ывает ��чт�в�й �р��ра��е ��лучател�, �а��е �рил�жение �ледует и���ль��вать, чт��ы �т�рыть вл�женный файл. В �ледующе� ��и��е �ере� чи�лены не���ль�� наи��лее ра��р��траненных ти��в ��держи����. Тип содержимого Описание Text/plain О�ычный ASCII�те��т Text/html Те�т, и�еющий ф�р�ат HTML Image/jpg JPG�и���ражение Application/postscript Файл д��у�ента Pos�S���p� Application/octet-stream Не��ределенные дв�ичные данные W��dows �ача�тую ��жет ��ределить �равильный ти� ��держи���� �� ра�ши� рению вл�женн��� файла. Н� е�ли нужн�, ��жн� в����ль��вать�� �ледующи�и ��ерат�ра�и и у�а�ать ти� ��держи���� �вны� ��ра���, �а�енив те� �а�ы� ��ре� деление, �деланн�е W��dows авт��атиче��и: set attach = msg.AddAttachment("C:\text\proposal.doc") attach.ContentMediaType = "application/msword" Е�ли не �адавать�� целью у�тан�в�и ти�а ��держи����, т� не нужн� ��хра� н�ть ��ыл�у на ��ъе�т, в��вращае�ую �ет�д�� AddAttachment, и ��жн� �р��т� в����ль��вать�� �ет�д��, ��т�рый �лужит дл� �ри�ре�лени� файл�в � ваше�у ����щению: msg.AddAttachment "C:\text\proposal.doc" msg.AddAttachment "C:\text\response.doc" И на��нец, �а� и в �лучае � CreateMHTMLBody, вы ��жете в�е�т� и�ени файла �ред��тавить �ет�ду AddAttachment URL�адре�, и �н и�влечет у�а�анный д��у�ент и� ве���ервера и д��авит е�� в �аче�тве вл�жени�. В та��� �лучае ти�у ��держи� ���� �удет �ри�в�ен� �начение, �ред��тавленн�е ве���ервер��. Е�ли URL�адре� �ащищен �ар�ле�, в �аче�тве д���лнительных ар�у�ент�в �ет�ду AddAttachment ���ут �ыть �ереданы и�� ��ль��вател� и �ар�ль.
Отправка сообщений с помощью CDO 285 Включение изображений в HTML-сообщение С���щени�, и�еющие HTML�ф�р�ат, ���ут выв�дить и���ражени� (на�ри�ер, л���ти�ы, ф�т��рафии или ф�н�вую ��н�ву�, хран�щие�� в �ети, �уте� у�а�ани� URL�адре��в и���ражений в те�ах <img>. Т�чн� та� же �ни ���ут в�лючать ��ыл�и на �ву��вые и виде�ре�ур�ы, та�лицы �тилей и т. д. Н� и� ����ражений ��нфиден� циальн��ти �н��ие ��чт�вые �р��ра��ы не ��уще�твл�ют авт��атиче��ую �а�ру�� �у и �т��ражение этих д���лнительных и���ражений и ре�ур��в. Дл� �т�рав�и н�р�альн� �т��ражае���� ����щени� нужн� д��авить ре�ур�ы в виде вл�жений. Эт� ��жн� �делать �ледующи� ��ра���: y y Дл� �ажд��� и���ражени�, ��т�р�е нужн� и���ль��вать в ����щении, нуж� н� у�тан�вить идентифи�аци�нн�е и��. Дл� эт��� в��лне ��д�йдут и�ена "image1", "image2" и т. д . y y В те�ах <img> в теле HTML�����щени� нужн� и���ль��вать �а�и�ь src="xxx", �де xxx — эт� идентифи�аци�нн�е и��, вы�ранн�е дл� и���ражени�. y y Дл� �ри�ре�лени� файла и���ражени� � ����щению нужн� в����ль��вать�� �ет�д�� AddRelatedBodyPart � тре�� ар�у�ента�и: ��лны� �уте� � файлу и��� �ражени�, идентифи�аци�нны� и�ене�, вы�ранны� дл� и���ражени�, и ��н� �тант�й cdoRefTypeName (или чи�л�� 1�. y y Нужн� та�же �адать �в�й�тву ContentMediaType ��ъе�та вл�жени� �начение "Application/Octet-stream". В�т �а� эт� вы�л�дит: ' Файл примера mailimage.vbs const cdoRefTypeName = 1 imagefile1 = "C:\scripts\06\logo.gif" ' указание полного пути name1 = "image1" html_msg = " Это сообщение с изображением:" & _ "<P><img src='" & name1 & "'><P>Классно, правда?" set msg = CreateObject("CDO.Message") ' создание объектов set conf = CreateObject("CDO.Configuration") set msg.configuration = conf with msg ' создание сообщения .to = "you@there.com " . from = "me@here.com" ... . HTM Lbody = html_msg . AutoGenerateTextBody = True ' прикрепление изображения с идентификатором set img = .AddRelatedBodyPart(imagefile1, name1, cdoRefTypeName) img.ContentMediaType="Application/Octet-stream" end with ...
286 Глава 6. Объекты сообщений и факсов Вер�и� эт��� �ценари�, в�люченна� в на��р �а�ружае�ых � ве���айта файл�в, �риведена в ��лн�� виде и в�лючает техн�л��иче��ие �рие�ы, ра���атривае�ые в �ледующих ра�делах. Указание получателей и темы О�ъе�т CDO.Message ��ладает р�д�� �в�й�тв, ��т�рые ду�лируют ча�т� �а��лн�е� �ые �ри �т�рав�е эле�тр�нных ����щений ��л�. Свойство Описание To О�н�вн�й ��лучатель (��лучатели� CC Вт�р��те�енный ��лучатель (��лучатели� BCC К�нфиденциальный ��лучатель (��лучатели�, невиди�ый дру�и� ��лучател�� From Адре� эле�тр�нн�й ��чты авт�ра ����щени� ReplyTo Адре�, на ��т�рый �ледует �т�равить �твет, е�ли не у�а�ан адре� From Subject Крат��е ��и�ание ����щени� В�е �еречи�ленные �в�й�тва, �р��е �а�и�и Subject, и�еют �начени� адре��в эле�тр�нн�й ��чты, ��т�рые ���ут �ыть �тф�р�атир�ваны в ���твет�твии � ��и�а� ние�, данны� ранее в эт�й �лаве в ра�деле «О�ъе�т CDO.M�ss�g�». Е�ли вв�дит�� не���ль�� адре��в, их нужн� �р��т� �тделить дру� �т дру�а �а��ты�и. К �ри�еру, чт��ы �т�равить ����щение �т "sales@mycompany.com" � "orders@ mycompany.com" � д���лнительн�й ���ией, в��вращающей�� на адре� "sales@ mycompany.com", ��жн� в����ль��вать�� �ледующи�и ��ерат�ра�и: msg.To = " orders@mycompany.com" msg.From = " sales@mycompany.com" msg.CC = " sales@mycompany.com" msg.Subject = "Заказы, полученные " & date() Указание сервера доставки В �редыдущих ра�делах ра���атривали�ь в��р��ы ���дани� ����щени� в ��ъ� е�те CDO.Message. Следующее дей�твие �а�лючает�� в на�тр�й�е ��ъе�та CDO.Configuration — эта инф�р�аци� не��х�ди�а дл� реальн�й д��тав�и ����� щени�. CDO не �ред�рини�ает ���ыт�� д��тав�и ����щени� не���ред�твенн� е�� ��лучател��. В�е�т� эт��� �н ��ла�ает�� на ��чт�вый �ервер, ��руча� е�у вы� ��лнение ра��ты, не��х�ди��й дл� ��и��а личных ��чт�вых �ервер�в ��лучателей и �ередачи и� ����щени�. Э�тафетны� �ервер�� д�лжен �ыть �дин и� �ервер�в, ра� ��тающих в вашей �р�ани�ации или у ISP��р�вайдера; дл� �т�рав�и эле�тр�нн�й ��чты и� �ценари� ���ут �ыть и���ль��ваны лю�ые на�тр�й�и, и���ль�уе�ые ва�и дл� �т�рав�и эле�тр�нн�й ��чты � ����щью Ou��ook �xp��ss или �а��й�ни�удь дру��й ��чт�в�й �р��ра��ы.
Отправка сообщений с помощью CDO 287 В�� инф�р�аци� в ��ъе�те Configuration хранит�� в е�� ��лле�ции Fields � и���ль��вание� �рефи��а "http://schemas.microsoft.com/cdo/configuration/". К ��жалению, �� в�ей е�� �транн��тью и �р����д���тью �рих�дит�� �ирить��. Я ��� н�л, чт� �ри и���ль��вании V�S���p� �а�ы� �р��ты� �������� �адани� �начений ��лей Field �вл�ет�� ��хранение �рефи��а в �ере�енн�й и и���ль��вание ��ерат�� ра with. Эт� �в�дит � �ини�у�у на��р те��та и делает ��д ����а�тнее. На�ри�ер, ��жн� �адать ��нфи�ураци�нные �в�й�тва � ����щью �ледующих ��ерат�р�в: const cdoSendUsingPort = 2 ' ста ндартные CDO-константы const cdoAnonymous =0 set msg = CreateObject("CDO.Message") ' создание объектов set conf = CreateObject("CDO.Configuration") set msg.configuration = conf ' з адание вариантов доставки prefix = "http://schemas.microsoft.com/cdo/configuration/" With conf.fields .item(prefix & "sendusing") = cdoSendUsingPort .item(prefix & "smtpserver") = "m ail.mycompany.com" .item(prefix & "smtpauthenticate") = cdoAnonymous .item(prefix & "urlgetlatestversion") = True .update ' передача изменений End With Дл� на�равлени� ��чты чере� SMTP��ервер вашей �р�ани�ации или ваше�� ISP��р�вайдера нужн� у�а�ать в �аче�тве �начени� ��л� sendusing ��н�танту doSendUsingPort. Эт� �а�тавит CDO �т�равить ����щение � и���ль��вание� �тан� дартных интернет��ет�д�в на у�а�анный ��чт�вый �ервер. М�жн� та�же у�а�ать CDO, нужн� ли �аре�и�трир�вать�� на ��чт�в�� �ервере и �а� эт� �делать. В ��ль� шин�тве �лучаев ре�и�траци� не нужна и ��жн� в����ль��вать�� «ан�ни�ны�» ��д�лючение�. Н� е�ли ваш ��чт�вый �ервер тре�ует дл� �т�рав�и ����щени� и�� ��ль��вател� и �ар�ль, ��жн� в����ль��вать�� «�а��в�й» аутентифи�ацией и �ред��тавить и�� и �ар�ль чере� CDO.Configuration. В ��льшин�тве �лучаев �ридет�� на�тр�ить �ледующие ��л�. Поле Значение sendusing cdoSendUsingPort (2) smtpserver На�вание или IP�адре� вашей �р�ани�ации или ��чт�в��� �ервера SMTP ISP��р�вайдера smtpauthenticate Варианты ���а�аны в та�л. 6 .12 sendusername И�� ��ль��вател�, е�ли ��тре�ует�� sendpassword Пар�ль, е�ли ��тре�ует�� При�ер эт�й ��нфи�урации уже �ыл ���а�ан в данн�� ра�деле. Е�ли ваш ��чт�вый �ервер и���ль�ует ��д�лючение �� �р�т���лу �е���а�ных ��единений — S��u�� So�k��s �o������o�, — ��жет ��тре��вать�� у�а�ать не��т�рые дру�ие ��л�, ранее �еречи�ленные в та�л. 6 .10. В�т �а� вы�л�дит �ри�ер �т�рав�и ����щени� эле�тр�нн�й ��чты чере� �ерверы ����ании Goog�� gmail.com:
288 Глава 6. Объекты сообщений и факсов const cdoBasic = 1 .item(prefix & "sendusing") = cdoSendUsingPort .item(prefix & "smtpserver") = "s mtp.gmail.com" .item(prefix & "smtpauthenticate") = cdoBasic .item(prefix & "sendusername") = "MyUsername@gmail.com" .item(prefix & "sendpassword") = "MyPassword" .item(prefix & "smtpusessl") = True .item(prefix & "smtpserverport") = 465 .update Отправка сообщения За�лючительны� дей�твие� в �т�рав�е ����щени� эле�тр�нн�й ��чты � ����щью CDO �вл�ет�� и���ль��вание �ет�да Send дл� д��тав�и ����щени�. П����ль�у в течение эт��� �р�це��а �н���е ��жет ��йти не та�, �а� �жидал��ь — ��жет выйти и� �тр�� удаленный SMTP��ервер, ��жет �р�и��йти �ши��а �ети или в ��ъе�те Configuration ��жет �т�ут�тв�вать ча�ть инф�р�ации, — нужн� чт��ы ваш �це� нарий �тлавливал �ши��и и ���вещал �� их в��ни�н�вении, а не �р��т� аварийн� �авершал ра��ту. Эт� ����енн� важн� дл� �ценариев, �а�у��ае�ых �� ра��и�анию, �е� ваше�� уча�ти�. Дл� �т�рав�и ����щени� в у�л�ви�х ��наружени� �ши��� нужн� в����ль��� вать�� и�еющи��� в ваше� ��ы�е �ценариев �ехани���� ��ра��т�и и��лючений. В V�S���p� эт� делает�� � ����щью ��ерат�ра on error. С����� надежн�й �т�рав�и ���данн��� ����щени� вы�л�дит �ледующи� ��ра���: on error resume next ' продолжение выполнения при возникновении ошибки msg.Send ' доставка сообщения send_errno = err.Number ' запоминание номера ошибки on error goto 0 ' в осс тан овл ени е обычной обработки ошибок if send_errno <> 0 then ' е сли произошел какой-нибудь сбой... ' сообщение о возникновении проблемы тем или иным способом end if Е�ли ����щение не д��тавлен� ���ле вы��ва �ет�да .Send, �ере�енна� send_ errno ��лучает ненулев�е �начение, вы��лн�ет�� у�л�вие ��ерат�ра if, и эт� ��� �в�л�ет �ред�рин�ть ���твет�твующие дей�тви�. Объединение всего предыдущего в единое целое А те�ерь ра����три� р�д �ри�ер�в �т�рав�и ����щени�, ��ъединив в�е �редыду� щие дей�тви�. Ба��вый �ри�ер �т�равл�ет �ри �ажд�� �а�у��е �ценари� �а��е ��ы�н�венн�е те��т�в�е ����щение: ' Файл примера script0603.vbs const cdoSendUsingPort = 2 ' с тандартные CDO-константы const cdoAnonymous =0 set msg = CreateObject("CDO.Message") ' с оздание объектов set conf = CreateObject("CDO.Configuration") set msg.configuration = conf
Отправка сообщений с помощью CDO 289 With msg ' с оздание сообщения .to = "" "Sue Smith"" <ssmith@somewhere.com>" .from = "" "Mad Max"" <madmax@mycompany.com>" .s ubject = "Message from a script" .textBody = "This is the message!" End With prefix = "http://schemas.microsoft.com/cdo/configuration/" With conf.fields ' з адание параметров доставки .item(prefix & "sendusing") = cdoSendUsingPort .item(prefix & "smtpserver") = " smtp.mycompany.com " .item(prefix & "smtpauthenticate") = cdoAnonymous .update ' п ередача изменений End With on error resume next ' продолжение выполнения при возникновении ошибки msg.Send ' доставка сообщения send_errno = err.Number ' запоминание номера ошибки on error goto 0 ' в осс тан овл ени е обычной обработки ошибок if send_errno <> 0 then ' е сли произошел какой-нибудь сбой... wscript.echo "Ошибка отправки сообщения " wscript.quit 0 else wscript.echo "Сообщение отправлено" end if Эт�т �ценарий �енерирует и д��тавл�ет на эле�тр�нный адре� ssmith@somewhere. com �ледующее ����щение: Return-Path: <madmax@mycompany.com> Received: from dualcore (dualcore.mycompany.com [6.5.4 .3]) by smtp.mycompany.com with ESMTPS id e31xy8423775rvb.5.2009.01.22.18.11.28; Thu, 22 Jan 2009 18:11:29 -0800 (PST) Sender: madmax@mycompany.com thread-index: Acl8/+Y3D76b4rd+RrC7cDd4/qcINw== Thread-Topic: Message from a script From: "Mad Max" <madmax@mycompany.com> To: "Sue Smith" <ssmith@somewhere.com> Subject: Message from a script Date: Thu, 22 Jan 2009 18:11:27 -0800 Message-ID: <5DDDD355AF9746E8AD31B20D95758855@dualcore> MIME-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 7bit X-Mailer: Microsoft CDO for Windows 2000 Content-Class: urn:content-classes:message Importance: normal Priority: normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900 .5579 В �ледующе� �ри�ере �ы на�ише� �ценарий, ��т�рый �ерет лю�ые файлы, у�а�анные в е�� ар�у�ентах ���андн�й �тр��и, и �т�равл�ет их �� ��чте в у�а� �анн�е �е�т�. Ка� уже ранее у���инал��ь в данн�й �лаве, е�ли дл� эт��� �ценари� ���дать �нач�� �рлы�а, ��жн� �удет �ерета��ивать на не�� файлы, и �ценарий �у� дет �т�равл�ть их �� ��чте ��лучателю, и���ль�у� в�тр�енный в �ценарий адре�.
290 Глава 6. Объекты сообщений и факсов Эти� �нач��� ��жн� в����ль��вать��, е�ли �рих�дит�� ча�т� адре��вать файлы ��н�ретн��у ��лучателю. В�ю ра��ту �р�делывает �ет�д AddAttachment, ��т�рый нах�дит�� в �ередине �ценари�: ' Файл примера mailfiles.vbs if WScript.arguments.count <= 0 then ' файлы не указаны MsgBox "Порядок использования mailfiles имя_файла..., " & _ "ил и п еретащить файлы на значок " WScript.quit 0 end if const cdoSendUsingPort = 2 ' с тандартные CDO-константы const cdoAnonymous =0 sender = " myname@mycompany.com" ' о тправитель сообщения recipient = " som ebody@mycompany.com" ' п олучатель сообщения relayserver = "mail.mycompany.com " ' S MTP -сервер set msg = CreateObject("CDO.Message") ' с оздание объектов set conf = CreateObject("CDO.Configuration") set msg.configuration = conf With msg ' с оздание сообщения .to = re cipient .from = se nder .s ubject = "Файлы для тебя" .textBody = "В прикреплении – файлы для тебя." nfiles = 0 ' с чет чик прикрепленных файлов for each arg in WScript.arguments ' к аждый аргумент считается . AddAttachment arg ' и мен ем прикрепляемого файла nfiles = nfiles+1 next End With prefix = "http://schemas.microsoft.com/cdo/configuration/" With conf.fields ' з адание параметров доставки .item(prefix & "sendusing") = cdoSendUsingPort .item(prefix & "smtpserver") = r elayserver .item(prefix & "smtpauthenticate") = cdoAnonymous .update ' п ередача изменений End With on error resume next ' продолжение выполнения при возникновении ошибки msg.Send ' доставка сообщения send_errno = err.Number ' запоминание номера ошибки on error goto 0 ' в осс тан овл ени е обычной обработки ошибок if send_errno <> 0 then ' е сли произошел какой-нибудь сбой... wscript.echo "Ошибка отправки сообщения " wscript.quit 0 else if nfiles = 1 then plural = "" else plural = "(а,ов)" MsgBox "Отправлен(о) " & nfiles & " файл" & plural & " на адрес " & recipient end if
Отправка сообщений с помощью CDO 291 ▼▼ Если такие сценарии покажутся вам полезными, обратите внимание на приложение Appendix G, «Creating �our Own Scriptable Objects» (которое можно скачать с веб-сайта www.helpwin7.com/ scripting), где показано, как создать свой собственный упрощенный объект «отправка электрон- ной почты», в котором будет инкапсулирован весь этот код. И в �аче�тве �а�лючительн��� �ри�ера ра����три� �ценарий, ��т�рый ��жет �ыть �а�ущен Планировщиком заданий дл� �ери�диче����� ��анир�вани� у�а�анн�й �а��и на наличие файл�в. Лю��й файл, найденный в эт�й �а��е, �т�равл�ет�� �� эле�тр�нн�й ��чте �� фи��ир�ванн��у адре�у, а �ате� �ере�ещает�� в архивную �а��у. Те� �а�ы� ���дает�� �а��а на �т�рав�у, ��т�ра� ��жет и���ль��вать�� не� ���ль�и�и ������а�и: y y Е�ли и�еют�� не тре�ующие ваше�� вни�ани� �ценарии, ���дающие в эт�й �а��е файлы журнал�в, эти файлы ���ут �ыть �т�равлены �� ��чте ад�ини� �трат�ру дл� их �р����тра. y y Па��а ��жет и�еть �тату� ��щей �етев�й, и ��ль��ватели ����ут ��ра�ывать в нее файлы дл� �����т� еще, �т� �удет их �р���атривать или ��ра�атывать. y y Е�ли �ценарий �р���атривает вашу �а��у вх�д�щих фа���в, �н авт��атиче��и �т�равл�ет фа��ы �� эле�тр�нн�й ��чте у�а�анн��у ��ль��вателю. Сценарий �а� �а��тит�� � т��, чт��ы не �ере�ещать файлы �а �ределы �а��и на �т�рав�у, ���а ����щение не �удет у��ешн� �т�равлен�. Кр��е т���, �ценарий ��хран�ет ��и��� найденных файл�в в �а��иве и ра��тает � эти� �а��ив�� �ри �т�рав�е и ���ледующе� �ере�ещении файл�в. Е�ли �р��ра��а �удет и���ль��� вать �дин ��ерат�р «дл� �ажд��� файла в �а��е» дл� д��авлени� вл�жений и еще �дин ��ерат�р дл� �ере�ещени� файл�в, ���вит�� вер��тн��ть та���� ра�вити� ���ытий, �ри ��т�р�� �ежду �т�рав��й �� ��чте и �ере�ещение� ��жет �ыть д��авлен еще �дин файл, ��т�рый ни���да не �удет �т�равлен �� ��чте. К�д эт��� �ценари� и�еет �ледующий вид: ' Файл примера scanmail.vbs ' п апк а, сканируемая на наличие файлов scanfolder =_ "c :\Documents and Settings\All Users\Documents\MailThese" ' п апк а для отправленных по почте файлов archivefolder = "c:\Documents and Settings\All Userss\Documents\Mailed\" sender = "s ales@here.com" ' о тправитель сообщения recipient = "fulfillment@here.com" ' п олучатель этого сообщения relayserver = "m ail.here.com " ' S MTP -сервер ' ---------------------------------------------------------------- ' П ОЛУ ЧЕН ИЕ СПИ СКА ФАЙЛОВ ' ---------------------------------------------------------------- WScript.echo "Сканирование " & scanfolder & " ... " set fso = CreateObject("Scripting.FileSystemObject") set folder = fso.GetFolder(scanfolder)
292 Глава 6. Объекты сообщений и факсов maxfiles = 50 ' наибольшее ожидаемое количество файлов dim filelist() ' создание массива настраиваемого размера redim filelist(maxfiles) ' для хранения имен файлов nfiles = 0 ' сче тчи к хранящихся файлов for each file in folder.Files ' ска нирование папки if nfiles >= maxfiles then ' если массив уже полон, maxfiles = nfiles+50 ' увеличение его размера redim preserve filelist(maxfiles) end if WScript.echo " Найден", file.name ' выв од списка найденных файлов filelist(nfiles) = file.path ' сохранение filelist(0, 1, ...) nfiles = nfiles+1 ' увеличение счетчика файлов на единицу next if nfiles = 0 then WScript.echo "Файлов на отправку нет." WScript.quit(0) ' работы нет, выход end if ' ---------------------------------------------------------------- ' С ОЗДАНИЕ СООБЩЕНИЯ ' ---------------------------------------------------------------- set msg = CreateObject("CDO.Message") ' создание объектов set conf = CreateObject("CDO.Configuration") set msg.configuration = conf if nfiles = 1 then plural = "" else plural = "а(ов)" With msg ' со здание сообщения .to = re cipient .from = se nder .s ubject = "Файлы для вас" .textBody = "В прикреплении к сообщению — " & nfiles & "файл" & plural for i = 0 to nfiles-1 ' прикрепление всех файлов . AddAttachment filelist(i) next End With ' ---------------------------------------------------------------- ' З АДАНИЕ ИНФОРМАЦИИ НА ДОСТАВКУ ' ---------------------------------------------------------------- const cdoSendUsingPort = 2 ' ст андартные CDO-константы const cdoAnonymous =0 prefix = "http://schemas.microsoft.com/cdo/configuration/" With conf.fields ' з адание параметров доставки .item(prefix & "sendusing") = cdoSendUsingPort .item(prefix & "smtpserver") = s mtpserver .item(prefix & "smtpauthenticate") = cdoAnonymous .update ' п ередача изменений End With
Отправка факсов из сценариев 293 WScript.echo "Отправка сообщения ... " on error resume next ' продолжение выполнения при возникновении ошибки msg.Send ' доставка сообщения send_errno = err.Number ' запоминание номера ошибки on error goto 0 ' в осс тан овл ени е обычной обработки ошибок if send_errno <> 0 then ' е сли произошел какой-нибудь сбой... wscript.echo "Ошибка отправки сообщения " wscript.quit 0 else wscript.quit 1 ' в ыход, поскольку сценарий работает ' в ав том ати чес ком режиме end if wscript.echo nfiles & " файл" & plural & " отправлен(ы) по адресу " & recipient ' ---------------------------------------------------------------- ' П ЕРЕ МЕЩЕНИЕ ФАЙЛОВ В АРХИВ ' ---------------------------------------------------------------- WScript.echo "Перемещение файлов..." for i = 0 to nfiles-1 fso.MoveFile filelist(i), archivefolder next WScript.echo "Готово" Ка� �равил�, ��д��ный �ценарий и���ль�ует�� � Планировщиком заданий, ��� эт��у �н ��жет �а�у��ать�� чере� ��ределенные интервалы вре�ени. При и���ль� ��вании эт�й техн�л��ии нужн� ����ательн� у�а�ать cscript в �аче�тве ���анды, и���ль�уе��й дл� �а�у��а �ценари�. О�ерат�ры WScript.Echo, ��т�рые та� ��ле�ны �ри �тлад�е, �ри �а�у��е �ценари� и� Планировщика заданий � ����щью cscript не и�рают ��вершенн� ни�а��й р�ли. Н� �р��ра��а ��танавливает��, �удучи �а� �ущенн�й � ����щью wscript: ни�т� ни���да не увидит ���вл�ющие�� ��на и не щел�нет на �н���ах OK. Отправка факсов из сценариев M���oso�� �ред��тавл�ет �р��ра��ную ��ддерж�у фа��и�ильных �т�равлений в W��dows XP Hom� �d���o�, XP P�o��ss�o���, 7 и V�s�� реда�ций �us���ss, �����p��s� и U���m��� (н� не в вер�ии V�s�� Hom��. Эта �луж�а фа���в и�еет интерфей�, ��� в�е�ти�ый �� �ценари��и, ��эт��у фа��ы ��жн� ���ылать и� �ценариев ��чти та� же, �а� и �т�равл�ть эле�тр�нную ��чту. ▼) Перед отправкой документа в виде факса Windows должна «интерпретировать» документ как черно-белое TIF-изображение. Это означает, что для отправки по факсу конкретного типа до- кумента нужно, чтобы было установлено соответствующее приложение, которое должно под- держивать печать из оболочки Windows. Для проверки его установки щелкните правой кнопкой на значке документа на Рабочем столе или в Windows Explorer и выберите пункт Печать (Print). Документ должен распечататься на вашем текущем принтере. Если этого не произойдет, зна- чит, конкретно этот тип документа передать по факсу не получится.
294 Глава 6. Объекты сообщений и факсов ▼) Объекты отправки факсов, поставляемые с Windows XP, могут отправлять при каждом вызове факса только один документ. А объекты отправки факсов, поставляемые вместе с Windows 7 и Vista, могут отправлять в одном факсе сразу несколько документов. При ра��те �� �луж��й фа���в и���ль�уют�� �ра�у не���ль�� ��ъе�т�в. И� ����ательны�и дл� и���ль��вани� �вл�ют�� т�ль�� три: FAXCOMEx.FaxDocument, FAXCOMEx.FaxRecipient и FAXCOMEx.FaxSender. С�рав�чные ��и��и 6.6, 6.7 и 6.� �ред��тавл�ют �еречень �а�ых важных �в�й�тв и �ет�д�в этих ��ъе�т�в. СПРАВКА 6.6. СВОЙСТВА И МЕТОДЫ ОБЪЕКТА FAXCOMEX.FAXDOCUMENT (НЕПОЛНЫЙ ПЕРЕЧЕНЬ) СВОЙСТВА Body П�лный �уть и и�� файла дл� �т�рав�и в виде фа��а. Фа�� ��жет �ыть ли�� уже фа����а��дир�ванны� TIF�и���ражение�, ли�� д��у�ент�� та���� ти�а, ��т�рый W��dows ��жет авт��атиче��и ра��ечатать, и���ль�у� �тандартн�е или у�тан�вленн�е �рил�жение, �в��анн�е � файл�вы� ра�ширение� (на�ри� �ер, M���oso�� Wo�d дл� .doc�файла�. Служ�а фа���в и���ль�ует �рил�жение� ��ра��тчи� дл� «�ечати» д��у�ента в ф�р�ате TIF�и���ражени�. Bodies В W��dows 7, V�s�� и W��dows S��v�� 200� (н� не в XP или ��лее ранних S��v���вер�и�х�, в �дн�й фа��и�ильн�й �т�рав�е ��жн� �ередать �ра�у не� ���ль�� д��у�ент�в, �ри�в�ив �а��ив и�ен файл�в �в�й�тву Bodies, в�е�т� т��� чт��ы �ри�ваивать �дн� и�� файла �в�й�тву Body. Каждый эле�ент �а��ива д�лжен �ыть �тр���й, ��держащей ��лный �уть и и�� файла. CoverPageType О�редел�ет, нужн� ли �т�равл�ть � фа���� титульную �траницу (�ov�� p�g�� и �де найти файл ша�л�на эт�й �траницы. В����жные �начени� �еречи�лены в та�л. 6 .15. Таблица 6.15. Значения для CoverPageType Значение Описание fcptNONE (0) Титульна� �траница не �т�равл�ет�� fcptLOCAL (1) Ша�л�н титульн�й �траницы �ерет�� и� �а��и титульн�й �траницы те�уще�� ��ль��вател� fcptServer (2) Ша�л�н титульн�й �траницы �ерет�� и� ��ще�� дл� в�ей ����ьютер� н�й �и�те�ы �а��и титульн�й �траницы Е�ли �в�й�тв� CoverPageType ��лучает �начение 1 или 2, �в�й�тву Coverpage д�лжн� �ыть �ри�в�ен� и�� файла ша�л�на титульн�й �траницы.
Отправка факсов из сценариев 295 CoverPage И�� файла ша�л�на титульн�й �траницы (.cov�файла�, и���ль�уе��й дл� данн��� фа��а. Е�ли �в�й�тв� CoverPageType и�еет �начение fcptLOCAL (1�, в и�ени д�лжен у�а�ывать�� ��лный �уть. Е�ли �уть не у�а�ан, и���ль�ует�� �ер��нальна� �а�� �а титульн�й �траницы ��ль��вател� �ценари� (%userpro�le%\[My ]Documents\ Fax\Personal Coverpages�. Е�ли �в�й�тв� CoverPageType и�еет �начение fcptServer (2�, и�� CoverPage не д�лжн� в�лючать �уть. Файл �ерет�� и� �а��и титульн�й �траницы �луж� �ы фа���в дл� в�ей ����ьютерн�й �и�те�ы, ��т�ра� в XP и�еет �утев�е и�� \Documents and Settings\All Users\ApplicationData\Microsoft\Windows NT\MSFax\Common Coverpages, а в W��dows 7 и V�s�� — \ProgramData\Microsoft\WIndowsNT\MSFax\ Common Coverpages\xx, �де xx ��начает ваш л��альный ��д ��ы�а, на�ри�ер en-US. Ша�л�ны титульных �траниц ��жн� ���давать � ����щью Редактора титуль- ных страниц, �ред��тавл�е���� W��dows. Реда�т�р ���в�л�ет ���ещать те��т, �рафи�у и «��л� �а��лнени�» в лю��е �е�т� титульн�й �траницы. В ��л� �а� ��лнени� вв�д�т�� �начени�, �ри�ваивае�ые �в�й�тва� ��ъе�та FaxDocument. DocumentName О�и�ательн�е и�� дл� данн��� фа��а. И�� �т��ражает�� в ра��ечат�е �че� реди и архива ди��етчера фа���в, н� не �ередает�� ��лучателю. Note Subject Те��т дл� и���ль��вани� в ��л�х «No��» (����ентарий� и «Subj���» (те�а� титульн�й �траницы. Эти �начени� не����ательны. Recipients К�лле�ци� ��ъе�т�в FaxRecipient, ��т�ра� и�начальн� �вл�ет�� �у�т�й. К ней ��жн� д��авить �р�и�в�льн�е ��личе�тв� ��лучателей, и���ль�у� �ет�д Add эт�й ��лле�ции. Е�ли д��авл�ет�� ��лее �дн��� ��лучател�, вы�траивает�� �чередь и� не���ль�их фа���в. Sender О�ъе�т FAXCOMEX.FaxSender, ��и�ывающий �т�равител�. Нужн� �тдельн� ���дать ��ъе�т FaxSender, а �ате� �ри�в�ить ��ыл�у на не�� эт��у �в�й�тву. МЕТОДЫ Submit(servername) От�равл�ет фа��и�ильный д��у�ент у�а�анн��у ����ьютеру, ���ылаю� ще�у фа��ы, дл� ���тан�в�и в �чередь и �ередачи. Дл� у�а�ани� л��альн��� ����ьютера нужн� и���ль��вать �у�тую �тр��у "" или дл� у�а�ани� �ерверн��� ����ьютера W��dows, на ��т�р�� �а�ущена ��ща� �луж�а фа���в, нужн� и�� ��ль��вать и�� эт��� ����ьютера.
296 Глава 6. Объекты сообщений и факсов В��вращае��е �начение �вл�ет�� �а��ив��, ��держащи� ��и��и иден� тифи�аци�нных н��ер�в фа���в, ���тавленных в �чередь, �� �дн��у н��еру дл� �ажд��� ��лучател�. Даже е�ли у�а�ан т�ль�� �дин ��лучатель, в��враща� е��е �начение в�е равн� �вл�ет�� �а��ив�� � �дни� эле�ент�� (� инде���� 0�. Е�ли нужн�, эти идентифи�аци�нные н��ера ��жн� и���ль��вать дл� ��ределени� �е�т�нах�ждени� фа��а и у�равлени� и� � ����щью ��ъе�т�в �луж�ы фа���в. ▼) Время от времени Windows отказывается создавать канал факса и выстраивать его очередь, но не генерирует при этом ошибку. Единственный способ, позволяющий узнать о том, что пере- дача не состоялась, это вернуть значения идентификационных номеров очереди в виде строки, состоящей из всех нулей. ▼) Если нужно использовать сценарии для отслеживания факсов и работы с ними, следует знать, что идентификатор очереди факсов является 64-разрядным числом. В Windows 7, Vista и Windows Server 2008 метод Submit возвращает массив, содержащий значения идентифика- торов в виде 16-символьных строк шестнадцатеричных цифр, которые можно передать другим объектам службы факсов для обращения к факсу. Но в XP и Windows Server 2003 значения в массиве являются строками десятичных цифр, которые в таком виде бесполезны. Хуже того, встроенные функции преобразования VBScript не могут работать с такими большими числа- ми, чтобы преобразовать их в шестнадцатеричные. Подпрограмма, которая может справиться с этой задачей, будет показана в данном разделе чуть позже. ConnectedSubmit(serverobj) Е�ли ваш �ценарий ���дает ��ъе�т FAXCOMEX.FaxServer, ��д�люченный � вашей �луж�е фа���в, в�е�т� �ет�да Submit ��жн� в����ль��вать�� �ет�д�� ConnectedSubmit, �ередав е�у ��ыл�у на ��ъе�т FaxServer. СПРАВКА 6.7. СВОЙСТВА И МЕТОДЫ ОБЪЕКТА FAXCOMEX.FAXSENDER (НЕПОЛНЫЙ ПЕРЕЧЕНЬ) СВОЙСТВА City, Company, Country, Department, Email, FaxNumber, HomePhone, Name, OfficeLocation, OfficePhone, State, StreetAddress, Title, ZipCode К�нта�тна� инф�р�аци� и инф�р�аци� � �е�те ваше�� нах�ждени�, ��т�ра� и���ль�ует�� дл� �а��лнени� ��лей титульн�й �траницы. В�е �ни �вл�ют�� �тр���вы�и �начени��и и ���ут �ыть ��тавлены �у�ты�и или не�а��лненны�и, е�ли не нужны или е�ли титульна� �траница не и���ль�ует��. TSID Идентифи�ат�р �ередающе�� а��нента — ����sm�����g subs���b�� �d�������� (TSID�, �тр��а, ��т�ра� �т�равл�ет�� фа��и�ильн��у а��арату ��лучател�. С�� держит не ��лее 20 ASCII��и�в�л�в и ��ычн� �ред�тавл�ет ����й н��ер ваше�� фа��а. (Служ�а фа���в и�н�рирует эт� �начение и �т�равл�ет �в�е ����твенн�е, �редварительн� на�тр�енн�е TSID��начение, е�ли �начение �в�й�тва �ервера Configuration.UseDeviceTSID равн� True.�
Отправка факсов из сценариев 297 МЕТОДЫ LoadDefaultSender За��лн�ет �в�й�тва �начени��и (City и т. д .� ���ла�н� на�тр�й�а� �луж�ы фа���в ваше�� ����ьютера или �начени��, ��храненны� ранее � ����щью �ет�да SaveDefaultSender. SaveDefaultSender С�хран�ет �начени� те�ущих �в�й�тв в �аче�тве �начений �� у��лчанию дл� вашей учетн�й �а�и�и ��ль��вател�. В ��рав�чн�� ��и��е 6.� �еречи�лены два �в�й�тва ��ъе�та FaxRecipient. О�ыч� н� эти ��ъе�ты на�р��ую не ���дают��. Ка� �ыл� ���а�ан� в уче�н�� �ценарии, дл� д��авлени� ��лучателей � ��лле�ции FaxRecipients ��ъе�та FaxDocument, �а� �равил�, �ри�ен�ет�� �ет�д Add. СПРАВКА 6.8. СВОЙСТВА И МЕТОДЫ ОБЪЕКТА FAXCOMEX.FAXRECIPIENT (НЕПОЛНЫЙ ПЕРЕЧЕНЬ) СВОЙСТВА FaxNumber Стр���в�е �начение, у�а�ывающее н��ер фа��а ��лучател�. Эт� �в�й�тв� ��редел�ет ��лучател� фа��а. Сюда д�лжны �ыть в�лючены в�е ��ды д�� �в�на, ��нальные ��ды и т. д . М��ут и���ль��вать�� тире, �р��елы и �ру�лые �����и, н� �ни �удут �р�и�н�рир�ваны. За��та� вы�ывает �дн��е�ундную �адерж�у и ��жет и���ль��вать�� дл� �жидани� вт�р��� �уд�а. На�ри�ер, "9,18005551212" �риведет � на��ру цифры 9, �ау�е в �дну �е�унду, а �ате� � на� ��ру 1��00 �555 �1212. Name И�� ��лучател�. Эт� �начение и���ль�ует�� дл� �а��лнени� ���твет�твую� ще�� ��л� в титульн�й �транице. Отправка факса с помощью сценария Дл� �т�рав�и фа��а нужн� вы��лнить �ледующие дей�тви�: 1. С��дать ��ъе�т FAXComEx.FaxDocument. При�в�ить �в�й�тву Body или Bodies ��лный �уть � д��у�енту (или д��у�ента��, ��длежаще�у �т�рав�е �� фа��у, а �ате� �адать ти� и на�вание титульн�й �траницы. 2. Вы�вать �� �дн��у ра�у дл� �ажд��� ��лучател� фа��а �ет�д Recipients.Add ��ъе�та Faxdocument. 3. При и���ль��вании титульн�й �траницы �адать лю�ые нужные дл� титульн�й �траницы �в�й�тва ��ъе�та Sender, �ринадлежаще�� ��ъе�ту FaxDocument. 4. И на��нец, вы�вать �ет�д Submit ��ъе�та FaxDocument. Чт��ы у�едить��, чт� фа�� у��ешн� ���тавлен в �чередь, �ледует �р�верить �начение (или �начени�� в��вращенн��� �а��ива.
298 Глава 6. Объекты сообщений и факсов Ка� в�е эт� ��жн� �делать, ���а�ан� в �ледующе� уче�н�� �ценарии: ' Файл примера script0604.vbs set faxdoc = CreateObject("FAXCOMEx.FaxDocument") with faxdoc .Body = "c:\scripts\06\memo.doc" ' пол ный путь к документу .Recipients.Add "1-510-500 -5599", "John Doe" ' добавление получателя .DocumentName = "Fax to John Doe" ' назначение имени в очереди .CoverPage = "generic.cov " ' исп оль зов ани е общей титульной ' страницы "generic" .CoverPageType = 2 ' (fcptSERVER) .Subject = "Тестовый факс" ' задание свойств титульной ' страницы .Note = "Комментарий титульной страницы" with .Sender . Name = "Мое имя" . Company = "Моя компания" . FaxNumber = "1 -510-555-1212" . OfficePhone = "1 -510-555-2323" .TSID = .FaxNumber end with end with faxdoc.Submit("") ' по ста нов ка факса в очередь П��ле т��� �а� фа�� �удет �ередан, ��жн�, е�ли ��тре�ует��, в����ль��вать�� еще �дни� ��ъе�т�� �луж�ы фа���в дл� �т�леживани� �итуации � ваши� фа���� и ��лучени� �ведений � е�� у��ешн�й д��тав�е или ���е и���а неверн��� или �а� н�т��� н��ера. Дл� ��и�ани� в�ех �в��анных � эти� ��др��н��тей у на� �р��т� нет �е�та, н� � в�е же да� ва� не���ль�� �т�равных т�че�. Прежде в�е��, �а� уже у���инал��ь, дл� �т�леживани� фа���в нужн� и�еть �начение идентифи�ат�ра фа��а в �череди, ��т�р�е в��вращает�� �ет�д�� Submit. Эт�т �ет�д в��вращает �а��ив и� �дн�й или не���ль�их �тр��, ��держащих ID� н��ер (или н��ера� фа��а (или фа���в�, ���тавленн��� в �чередь, — �� �дн��у фа��у на �ажд��� ��лучател�. В V�s�� и W��dows 7 в��вращае�ый н��ер �ред�тав� лен в виде �и�в�л�в ше�тнадцатеричн��� чи�ла. В XP в��вращает�� �тр��а �и�� в�л�в де��тичн��� чи�ла, ��т�рую нель�� и���ль��вать: ее нужн� ��нвертир�вать в ше�тнадцатеричн�е �ред�тавление и т�ль�� т��да ею ��жн� �удет в����ль��вать� �� дл� ��и��а ���т��ни� фа��а �реди дру�их ��ъе�т�в �луж�ы фа���в. Учитыва� эт� ���т��тель�тв�, � �редла�аю ва� фра��ент ��да, и�вле�ающе�� идентифи�ат�р и� �череди дл� фа��а, на�равл�е���� �дн��у ��лучателю: ... id = faxdoc.Submit("") ' от правка факса и сохранение возвращенного массива faxid = id(0) ' по лучение строки ID из массива Е�ли и�ве�тн�, чт� �ценарий �а�у��ает�� на �ашине ��д у�равление� XP, д�� �авьте еще �дну �тр��у ��да дл� �ревращени� ID��тр��и и� де��тичн��� в ше�т� надцатеричн�е �ред�тавление:
Отправка факсов из сценариев 299 faxid = ConvertDecToHex64(faxid) ' превращение десятичного представления ' в ш ест надцатеричное ▼) Функция ConvertDecToHex64 предоставлена в файле sendfax.vbs, который входит в набор учеб- ных сценариев, свободно загружаемых с веб-сайта www.helpwin7.com/scripting. Е�ли �аранее неи�ве�тн�, ��д у�равление� �а��й ��ераци�нн�й �и�те�ы �удет �а�ущен �ценарий: XP, V�s�� или W��dows 7, в����ль�уйте�ь в�е�т� �редыдуще�� ��да �ледующи�и ��ерат�ра�и: vistaOrBetter = False for each os in GetObject( _ " winmgmts:\\.\root\cimv2:Win32_OperatingSystem").Instances_ if os.version >= "6" then vistaOrBetter = True next if not vistaOrBetter then faxid = ConvertDecToHex64(faxid) ' превращение ' в ше стн адцатеричное представление Зде�ь дл� ��ределени� вер�ии ��ераци�нн�й �и�те�ы и���ль�ует�� ин�тру� �ентарий W��dows M���g�m��� I�s��um������o� (WMI�, ��т�рый ра���атривает�� в �лаве 7 «Ин�тру�ентарий у�равлени� W��dows». П��ле ��лучени� идентифи�ат�ра фа��а в �череди е�� ��жн� ��и��ать �а� в �череди и�х�д�щих фа���в, та� и �реди архивных фа���в: set server = CreateObject("FAXCOMEx.FaxServer") ' создание объекта сервера server.connect "" ' п одключение к службе факсов локального компьютера set ogQueue = se rve r.Folders.OutgoingQueue ' получение ссылок на очередь set ogArchive = server.Folders.OutgoingArchive ' и н а архив отправленных ' факсов Set ogFax = Nothing ' по пыт ка найти факс в очереди исходящих факсов on error resume next Set ogFax = ogQueue.GetJob(faxid) On Error GoTo 0 If Not ogFax Is Nothing Then ' найден в очереди, но все еще отложен или многократно отвергнут wscript.echo "Факс находится в очереди исходящих факсов" wscript.echo "Статус:", ogFax.status, _ " Дополнителный статус:", ogFax.ExtendedStatusCode else ' не найден в очереди, попытка поиска в архиве отправленных факсов set sentFax = Nothing on error resume next set sentFax = ogArchive.GetMessage(faxid) on error goto 0 if sentFax is Nothing then ' не т в архиве, наверное, был удален wscript.echo "Факс ", faxid, "не может быть найден" else ' найден в архиве. Вывод времени доставки и CSID получателя wscript.echo "Факс доставлен в ", sentFax.TransmissionEnd, _ "по лучателю", sentFax.CSID end if end if
300 Глава 6. Объекты сообщений и факсов Дл� фа���в, нах�д�щих�� в �череди и�х�д�щих фа���в, �начени� status и ExtendedStatusCode ����щают, нах�дит�� ли фа�� в�е еще в �череди на �т�рав�у или �читает�� не�ри��дны� � д��тав�е. Ка� де��дир�вать эти �начени�, ���а�ан� в ��лн�й вер�ии �ценари� sendfax.vbs, в�люченн�й в на��р �а�ружае�ых уче�ных �ценариев. Получение дополнительной информации об отправке факсов За д���лнительн�й инф�р�ацией �� ��ъе�тах �луж�ы фа���в �ледует ��ратить�� на ве���айт msdn.microsoft.com и �р�ве�ти на не� ��и�� �� �лючев�й фра�е «F�x S��v��� �x���d�d COM R��������». Н� учтите, чт� у�в�ить эту д��у�ентацию ве�ь�а не�р��т� и в ней ��держат�� нет�чн��ти. В�т р�д ��вет�в �� ее �р����тру: y y У�едите�ь в т��, чт� ��и���ва� �ашина или ��ыл�и не увели ва� в �а��й�ни�удь �атериал ��д �а��л�в��� «F�x S��v��� C����� API �o� W��dows2000». Эта д��у� �ентаци� не ��дх�дит дл� W��dows XP или ��лее ���дних вер�ий. y y Начните и�учение � ра�дела � �а��л�в��� «F�x S��v��� Obj���s» в ��рав�чни�е Fax Service Extended COM Reference и и�учите ��ъе�ты FaxServer и FaxDocument. y y Ва� �удут ���адать�� интерфей�ы ��ъе�т�в, чьи и�ена �а�анчивают�� на 2, на� �ри�ер IFaxDocument2. Цифра 2 ��ылает�� на д���лнительные фун�ци�нальные в����жн��ти, �ет�ды и �в�й�тва �ри и���ль��вании ��ъе�т�в в W��dows 7, V�s�� и W��dows S��v�� 200�. Не на�ирайте цифру 2 �ри ���дании �в�их �цена� риев. И���ль�уйте и�х�дные и�ена ��ъе�т�в, ���а�анные в �ри�ерах данн��� ра�дела. y y Д��у�ентаци� ра��читана на �р��ра��и�т�в, ра��тающих на V�su�� C++ или на ��лн�й вер�ии V�su�� ��s��, а не на V�S���p�. В не��т�рых �луча�х дают�� ��ыл� �и на ар�у�енты и в��вращае�ые �начени�, ��т�рые не ��дх�д�т � ���данию �ценариев. Чт��ы �равильн� ра���рать�� в �инта��и�е, и���ль�уйте Goog�� дл� ��и��а уче�ных �ценариев, и���ль�ующих интере�ующие ва� ��ъе�ты, �ет�ды или �в�й�тва, или в����ль�уйте�ь �ред�тв�� �р����тра ��ъе�т�в Obj��� ��ows�� (��т�р�е ра���атривал��ь в �лаве 3 «С��дание �ценариев и ра��та � ��ъе�та� �и»�, чт��ы �����треть на �инта��и�, и���ль�уе�ый в �ценари�х. Чт��ы в��� ��ль��вать�� Obj��� ��ows��, нужн� �т�рыть ��ыл�у на �и�ли�те�у «M���oso�� F�x S��v��� �x���d�d COM Typ� L�b���y», ��т�ра� нах�дит�� в файле fxscomex.dll.
Инструментарий управления Windows В эт�й �лаве �ы ра����три�, �а� и���ль��вать WMI дл� у�равлени� ����ьюте� ра�и �� �ети. y y Вы у�наете, чт� WMI ��жет ��вершать та�ие �р��тые дей�тви�, �а� вы�лю� чение ����ьютера, или та�ие �л�жные, �а� д��у�ентир�вание �ажд�й е�� на� �тр�й�и. y y Зде�ь �р�де��н�трир�ван�, чт� ��уще�твить ди�танци�нн�е у�равление � ����� щью WMI��ценариев ��д у�равление� W��dows XP Hom� �d���o� нев����жн�. y y Предварительн� �еречитайте �лаву 3 «С��дание �ценариев и ра��та � ��ъе�� та�и». y y Мы ра����три� а�р�ни�ы W��M и CIM, ��т�рые ва� уже, в����жн�, �де� ни�удь в�тречали�ь. Введение в инструментарий управления Windows Е�ли у ва� е�ть х�т� �ы �дин личный ����ьютер, ра��тающий ��д у�равление� W��dows, вы �наете, чт� е�� ���луживание ��жет �тать д�в�льн� труд�е���й �а� дачей. П��н�жьте в�е эт� на �т� или ты��чу и �ред�тавьте, � че� ежедневн� �тал� �ивают�� IT��енеджеры �а��й�ни�удь ��р��рации. Даже учет ����ьютерн�й тех� ни�и �вл�ет�� д��тат�чн� ��ъе�н�й �адачей, а ведь �рих�дит�� еще �тал�ивать�� � ча�ты�и и��енени��и �етев�й ��нфи�урации, д��авление� и удаление� �етевых �ринтер�в, ��н�вление� �рил�жений и ���т��нн� �ере�ещае�ы�и ��щи�и �а�� �а�и, не ��в�р� уже � ра�личных авари�х, �т�а�ах ���руд�вани� и не�ри�тн��т�х, ���давае�ых ��ль��вател��и. П�ддержание в ��р�д�е ����ьютер�в ��льш�й �р�а� ни�ации �равни�� � ���ыт��й ��лы�и ру�а�и �дн�вре�енн� удержать ��д в�д�й �ра�у 50 шари��в дл� на�т�льн��� тенни�а. Ра��та в IT��фере ��жет �тать �илет�� в �дин ��нец в �алату � �����й ��ив��й на �тенах и на�равление� на �а��е�ни�удь ве�ь�а �ерье�н�е лечение. Е�ть т�ль�� �дин ������ и��авить�� �т в�ей эт�й нера��ерихи — �ве�ти д� �ини�у�а в��че��ие �ерех�ды �т ����ьютера � ����ьютеру дл� вне�ени� �а�их� ни�удь и��енений. При ра��те � ��льши�и �ет��и авт��ати�ир�вать у�тан�в�у 7
302 Глава 7. Инструментарий управления Windows �ри�ладн��� �р��ра��н��� ��е��ечени�, вв�дить ���ла��ванную ��нфи�урацию и ��раничивать д��ту� � �����нента� и на�тр�й�а� W��dows ����жет A���v� D�����o�y. В� в�ех ��тальных в��р��ах ���луживани� ����жет ин�тру�ентарий у�равлени� W��dows — WMI (W��dows M���g�m��� I�s��um������o��. WMI �ред��тавл�ет ������ и�учени� внутренней ра��ты W��dows, �т�лежива� ни� на�тр�е� и вне�ени� и��енений. Ка� и ��нит�рин� �р�и�в�дительн��ти, WMI и�еет �ред�тва �ани�улир�вани� �ра�тиче��и �ажды� а��е�т�� ��ераци�нн�й �и�те�ы W��dows, в�люча� драйверы у�тр�й�тв, �и�те�ные �луж�ы и �рил�же� ни�. WMI ра��тает �� �ети, ��эт��у ����ьютер, на ��т�р�� ра��тает �р��ра��а ��нит�рин�а WMI (или, на�е�аю и ��д��а�ываю, �ценарий�, ��жет �р�ни�нуть в лю��й ����ьютер, ��д�люченный � �ети вашей �р�ани�ации. WMI �ри�ен�ет�� не т�ль�� дл� у�равлени� и ���луживани�. Эт�т ин�тру�ен� тарий ��жн� и���ль��вать дл� ���дани� д��у�ентации, ��и�ывающей ����ьюте� ры вашей �р�ани�ации, ��нфи�урацию ���руд�вани�, ��д�лючени�, на�тр�й�и, ��ераци�нные �и�те�ы, у�тан�вленные �рил�жени�, �ри�ененные �ритиче��ие ��н�влени� и т. д . И�лишне у���инать � т��, чт� WMI �вл�ет�� ве�ь�а ��ъе�н�й те��й — ей �а� �р��т� ��жн� ���в�тить не �дну �ни�у ��д��н��� ра��ера, ��эт��у в данн�й �лаве � ���у в�е�� лишь �ред��тавить ва� �рат�ий ����р эт��� �ред�тва. Н� �ри в�ей �л�жн��ти WMI и трудн��т�х в ��ни�ании в�ех е�� т�н���тей е�� �ра�тиче���е �ри�енение не тре�ует ��льших у�илий. П�эт��у и�ла�ае�ые далее ��н�вы дан� н��� ин�тру�ентари� ва� �т�у�нуть не д�лжны. Ра����три� не��льш�й уче�ный �ценарий: set ns = GetObject("winmgmts:\\.\root\CIMV2") set disks = ns.InstancesOf("Win32_LogicalDisk") for each dsk in disks wscript.echo dsk.name, "содержит", dsk.FreeSpace, "свободных байт" next Сра�у видн�, чт� �н ��анирует ��и��� ди���в и выв�дит их и�ена и ��личе�тв� �в���дн��� �р��тран�тва на �ажд�� и� них. Ча�ть "root\CIMV2" вы�л�дит ве�ь�а не��ычн�, н� ��в�ивши�ь, вы ��й�ете, чт� ниче�� �л�жн��� �де�ь нет. При �ерв�� чтении �лавы ��жн� �ра�у �ерейти � ра�делу «При�еры WMI», �де эт�т ин�тру�ентарий ���а�ан в дей�твии �ри вы��лнении дру�их �ра�тиче��их �адач, а �ате� вернуть�� и �р�читать �р��ежут�чные ра�делы, �ред��тавл�ющие ��лее ��др��ную те�ретиче��ую �а�у. В ��нце �лавы �еречи�л�ют�� не��т�рые ве���айты и �ни�и, ��т�рые ���ут �ред��тавить д���лнительную инф�р�ацию. ▼) Кроме WMI, у Microsoft есть еще одна система удаленного управления, которая называется Windows Remote Management (WinRM). К ней мы еще вернемся в этой главе. Функции WMI П����ль�у ра���атривае�а� �и�те�а �ри�вана у�равл�ть �н��и�и ти�а�и ���ру� д�вани� и �р��ра��н��� ��е��ечени� ��д �н��и�и вер�и��и W��dows, �дн�й и� ��н�вных целей WMI �вл�ет�� �тандарти�аци� ������а �р�ани�ации т�й инф�р�а�
Введение в инструментарий управления Windows 303 ции, ��т�ра� и���ль�ует�� �ри у�равлении ����ьютер��. Кажд�й ча�ти ���руд�ва� ни�, а та�же �ажд��у �ара�етру и на�тр�й�е �ажд��� �����нента W��dows д�лжн� �ыть дан� в��лне ��ределенн�е и��, чт��ы ра��ирающие�� в WMI �р��ра��ы ���ли на не�� ��ылать��. В WMI и���ль�ует�� �р�ани��ванна� �и�те�а и�ен, ��т�ра� в� �н���� ��х�жа на �утевые и�ена файл�в и �а��� и на ра�делы рее�тра. Схе�а на�ваний ��н�вана на ��щей ��дели инф�р�ации — Commo� I��o�m���o� Mod�� (CIM�. CIM �вл�ет�� �еж�тра�левы� �тандарт��, выра��танны� Ра��чей �ру���й �� у�равлению на�т�льны�и �и�те�а�и — D�s���bu��d M���g�m��� T�sk Fo��� (DMTF�, в ��т�рую вх�дит M���oso��, а та�же C�s�o, H�w�����P��k��d, I�M, I����, O�����... ины�и �л�ва�и, в�е ведущие ����ании. (И ниче�� удивительн��� в т��, чт� в ре�ультате ра��ты в�ех ��д��ных ���и��ий �ред�рини�ают�� ���ыт� �и ��лн�й унифи�ации, н� дл� д��тижени� ��лн��� у��еха та�а� �адача �лиш��� �л�жна.� Пространства имен В CIM��хе�е ра�личные �ру��ы и�ен на�тр�е� и �ара�етр�в �р�ани��ваны в та� на�ывае�ые �р��тран�тва и�ен, ��т�рые ��нце�туальн� ��д��ны �а��а�. В �аж� д�� �р��тран�тве и�ен и�еет�� на��р ��ъе�т�в, ��и�ывающих не��т�рые а��е�ты ����ьютерн��� ���руд�вани� или �р��ра��н��� ��е��ечени�. Первичные �р�� �тран�тва и�ен �еречи�лены в та�л. 7 .1 . Таблица 7.1. Пространства имен WMI Пространство имен Описание Root\aspnet О�ъе�ты, �ред�тавл�ющие �рил�жени� и ���ыти� ASP.N�T (ве���луж�у� Root\CIMV2 О�ъе�ты, �ред�тавл�ющие W��dows, ���руд�вание и �р�� �ра��н�е ��е��ечение. Эт� �р��тран�тв� и�ен �вл�ет�� ��� н�вны�, и���ль�уе�ы� �ри у�равлении W��dows Root\Cli С�держит ��евд�ни�ы ���анд, и���ль�уе�ых �ред�тв�� ��� �андн�й �тр��и wm��; эт� �р��тран�тв� и�ен ��жн� �р�и�� н�рир�вать Root\DEFAULT О�ъе�ты, �ред�тавл�ющие рее�тр и в���тан�вление �и�те�ы Root\directory О�ъе�ты, �тн���щие�� � A���v� D�����o�y Root\Interop С�держит CIM�инф�р�ацию � �в���х, �а�ающую�� �р�филей ��нфи�урации, на�ри�ер �лан�в у�равлени� �итание� Root\Microsoft\Homenet К�нфи�ураци� �луж�ы ��ще�� ��д�лючени� � Интернету — I������� Co������o� Sh����g и �ер��нальн�й �етев�й �ащиты (P��so��� F���w���� Root\nap К�нфи�ураци� �и�те�ы �ащиты �етев��� д��ту�а — N��wo�k A���ss P�o�����o� sys��m Root\Policy Д��ту� � ��нфи�урации �ру���в�й ��лити�и (G�oup Po���y�
304 Глава 7. Инструментарий управления Windows Пространство имен Описание Root\RSOP Д��ту� � данны� �ру���в�й ��лити�и «R�su����� S�� o� Po���y» (ре�ультирующе�� на��ра ��лити�и� дл� �рил�жений у�рав� лени� �ред�ри�тие� Root\SECURITY О�ъе�ты, �тн���щие�� � �е���а�н��ти WMI Root\SecurityCenter Инф�р�аци� �� у�тан�вленных антивиру�ах, �ранд�ауэрах и дру�их �р�ду�тах �е���а�н��ти Root\SecurityCenter2 (Т�т же на��р, н� в дру��й ��ъе�тн�й ��дели.� Root\ServiceModel К�нфи�ураци� дл� ве���луж� Root\subscription Инф�р�аци� � �в���х дл� ��ра��т�и ���ытий WMI Root\WMI О�ъе�ты, �тн���щие�� � ни���ур�внев�й ра��те �етей и � ин� терфей�у �тати�ти�и �р�и�в�дительн��ти ���руд�вани� Е�ли у ва� у�тан�влены инте�рир�ванные � WMI �луж�ы и �рил�жени�, на�ри� �ер �луж�а �р��т��� �р�т���ла ��нит�рин�а �ети — S�mp�� N��wo�k Mo���o���g P�o�o�o� (SNMP�, или M���oso�� O�����, ���ут ���вить�� и дру�ие �р��тран�тва и�ен. В �ажд�� �р��тран�тве и�ен и�еет�� �н�же�тв� ��ъе�т�в, ��и�ывающих не� ��т�рые а��е�ты W��dows, �р��ра��н��� ��е��ечени� или ���руд�вани�. Эти ��ъ� е�ты ���ут �ыть �р����трены и и��енены, чт��ы �ад��у�ентир�вать или и��енить на�тр�й�и W��dows. Х�т� в данн�й �ни�е нев����жн� найти �е�т� дл� ��др��н��� ��и�ани� в�ех ��ъе�т�в, в та�л. 7 .2 дает�� ��щее �ред�тавление � т��, чт� и�енн� ва� д��ту�н�. В та�лице �еречи�лены т�ль�� не��т�рые ��ъе�ты наи��лее важн��� �р��тран�тва и�ен Root\CIMV2. Каждый и� этих ��ъе�т�в �ред�тавл�ет �дин и� а��е�т�в ����ьютерн��� ���руд�вани� или �дин и� �����нент�в �р��ра��н��� ��е��ечени� W��dows. И���ль��вание не��т�рых и� этих ��ъе�т�в �удет ���а�ан� в �ледующих ра�делах. ▼) В литературе по Microsoft WMI вам неизменно будет встречаться акроним WBEM. Система управ- ления предприятием, основанная на использовании веб-технологии — Web-Based Enterprise Management, — это еще одна инициатива стандартизации управления, и акроним WBEM при- меняется к WMI совершенно свободно. Фактически те объекты, которые будут использованы для работы с WMI, являются частью пакета объектов WbemScripting. Таблица 7.2. Объекты Root\CIMV2 (неполный перечень) Win32_1394Controller Win32_FloppyDrive Win32_Account Win32_IDEController Win32_ApplicationCommandLine Win32_IDEControllerDevice Win32_ApplicationService Win32_NetworkAdapter Win32_Battery Win32_NetworkAdapterConfiguration Win32_BIOS Win32_NetworkAdapterSetting
Введение в инструментарий управления Windows 305 Win32_BootConfiguration Win32_NTLogEvent Win32_CDROMDrive Win32_ODBCDriverAttribute Win32_ComputerSystemProcessor Win32_OperatingSystem Win32_CreateFolderAction Win32_OperatingSystemQFE Win32_Desktop Win32_PnPDevice Win32_DesktopMonitor Win32_Printer Win32_DeviceBus Win32_PrinterShare Win32_DeviceSettings Win32_Registry Win32_Directory Win32_Service Win32_DiskDrive Win32_Share Win32_DiskPartition Win32_ShortcutFile Win32_DMAChannel Win32_StartupCommand Win32_DuplicateFileAction Win32_SubDirectory Win32_Environment Win32_SystemAccount Win32_Fan Win32_Thread Win32_FloppyController Win32_UserAccount У �ажд��� и� этих ти��в ��ъе�т�в и�еет�� �в�й ����твенный �еречень �в�й�тв и (или� �ет�д�в, ��т�рые ��и�ывают �����нент ���руд�вани� или �р��ра��н��� ��е��ечени�, �ред�тавленный ��ъе�т��, и у�равл�ют и�. В та�л. 7 .2 �еречи�лен лишь не��льш�й �р�цент д��ту�ных ��ъе�т�в WMI�у�равлени�. В дей�твительн�� �ти �уще�твуют ��тни WMI���ъе�т�в и ты��чи ра�личных на�тр�е�. Не в�е и�ена ��ъе�т�в начинают�� � WIN32_ . И�ена �н��их ��ъе�т�в, ��редел�е�ых �тандарта�и CIM, начинают�� � CIM или и�еют дру�ие �рефи��ы, н� у ��льшин�тва этих ��ъе�� т�в е�ть ��ецифиче��ие дл� W��dows варианты, и�ена ��т�рых начинают�� � Win32. Те и� них, ��т�рые �де�ь �еречи�лены, �тн���т�� � наи��лее в��тре��ванны�. ▼) Исследовать WMI и пространства имен WMI можно с помощью программы командной строки WMIC, поставляемой с Windows XP и последующими версиями. Получить информацию о WMIC можно открыв окно справки Windows и организовав поиск по аббревиатуре WMIC. Есть также просто превосходное загружаемое средство под названием Scriptomatic, которое будет рассмо- трено в данной главе чуть позже. Удаленное управление Windows WMI ���в�л�ет не т�ль�� ���давать �ценарии дл� у�равлени� на�тр�й�а�и W��dows на ваше� ����твенн�� ����ьютере, н� та�же еще дает в����жн��ть ���давать �ценарии дл� у�равлени� дру�и�и ����ьютера�и �� �ети, и���ль�у� ра��ределенную ��дель ���тавных �����нент�в — D�s���bu��d COM (DCOM�. DCOM�техн�л��и� ���в�л�ет ����ьютеру ���давать ��ъе�ты, «живущие» на дру� �их ����ьютерах, и у�равл�ть и�и чере� �етев�е ��д�лючение. С��дание �ценари� дл� у�равлени� дру�и�и ����ьютера�и ничуть не �л�жнее ���дани� �ценари�
306 Глава 7. Инструментарий управления Windows дл� у�равлени� �в�и� ����твенны� ����ьютер��, х�т�, �а� вы в���ре увидите, д��ить�� ра��т�������н��ти �т та���� �ценари� не та��т� �р��т�. Ин�тру�ентарий WMI �ыл и�начальн� ра�ра��тан дл� удаленн��� у�равле� ни� ����ьютера�и д��енн�й �ети ад�ини�трат�р�� д��ена. П�эт��у нет ниче�� удивительн��� в т��, чт� �н ра��тает �� эт��у «��р��ративн��у» �ценарию �е� �а�их�ли�� в��ражений. Он может ра��тать в нед��енных �ет�х ра��чих �ру�� (т� е�ть в д��ашних и �алых �фи�ных �ет�х�, н�, �а� �танет ��н�тн� и� �атериал�в �ледующих ра�дел�в, �уще�твуют у�л�ви� и ��раничени�, � ��т�ры�и �рих�дит�� ��р�ть��. Не х�тел��ь �ы, чт��ы эт� �ерер��л� в д�в�льн� �л�жную ди��у��ию, �����ль�у у�тан�вленные M���oso�� �равила �етев�й �е���а�н��ти �тличают�� в �ави�и���ти �т �ри�ен�е��й вер�ии W��dows, и эти �равила �ави��т �т т���, �а� ���нфи�урир�ван удаленный ����ьютер. П�эт��у �ажда� и� вер�ий W��dows ра���атривает�� �тдельн�. Вни�ание та�же удел�ет�� и в��р��а�, �в��анны� � �ранд�ауэр�� W��dows. ▼) В следующих разделах, где даются ссылки на удаленный компьютер, имеется в виду тот ком- пьютер, которым управляет ваш WMI-сценарий. При ссылке на ваш компьютер я называю его компьютером, на котором запущен сценарий. В доменной сети Е�ли и удаленный, и ваш ����твенный ����ьютер �тн���т�� � �дн��у и т��у же д��енн��у �ерверу W��dows, DCOM и���ль�ует вашу д��енную учетную �а�и�ь дл� ���дани� WMI���ъе�т�в на удаленн�� ����ьютере, ��эт��у ваше�у �цена� рию нужны �ривиле�ии, �ред��тавленные вашей д��енн�й учетн�й �а�и�и. Ваша учетна� �а�и�ь д�лжна �ыть в ���таве л��альн�й �ру��ы ад�ини�трат�р�в на удаленн�� ����ьютере. Дл� лю���� ад�ини�трат�ра д��ена эт� �вл�ет�� учетн�й �а�и�ью �� у��лчанию (Dom��� Adm���, ��эт��у удаленный WMI ра��тает дл� д��енных ад�ини�трат�р�в �е� �а�их�ли�� �р��ле�. Е�ли на удаленн�� ����ьютере у�тан�влена W��dows V�s�� или W��dows 7 и в�лючен ��нтр�ль учетных �а�и�ей ��ль��вателей — Us�� A��ou�� Co���o� (UAC�, нужн� в����ль��вать�� д��енн�й учетн�й �а�и�ью, вх�д�щей в л��альную �ру��у ад�ини�трат�р�в ����ьютера. Эт� един�твенна� �итуаци�, �ри ��т�р�й W��dows �ред��тавл�ет ��лные ра�ширенные �ривиле�ии ��ъе�та�, ���данны� и� дру�их ����ьютер�в. П� у��лчанию удаленн�е и���ль��вание WMI тре�ует ра�ширенных �ривиле�ий. ▼) На удаленных компьютерах брандмауэр Windows должен быть настроен на разрешение WMI- подключений. В доменной сети это может быть сделано через Групповую политику. Эту на- стройку должен сделать сетевой администратор. Можно также открыть брандмауэр вручную, следуя инструкциям для каждой из версий Windows, которые будут рассмотрены в следующих разделах. Е�ли удаленный ����ьютер вх�дит в д��ен, а ваш ����ьютер туда не вх�дит, или е�ли ваш ����ьютер вх�дит в дру��й, не�р�веренный д��ен, т� в ��льшин�тве �лучаев удаленн�е и���ль��вание WMI не ра��тает. В та��� �лучае �ри�ен�ют��
Введение в инструментарий управления Windows 307 �равила д��ту�а ра��чей �ру��ы (нед��енн�й �тру�туры�, ра���атривае�ые в �ледующе� ра�деле. В сети рабочей группы Е�ли ли�� удаленный, ли�� ваш ����ьютер не вх�д�т в д��ен W��dows, удаленный ����ьютер ищет в �в�е� ��и��е л��альных ��ль��вателей учетную �а�и�ь � та�и� же и�ене�, �а� та учетна� �а�и�ь, ��т�рую вы и���ль�уете на �в�е� ����ьюте� ре (или ту учетную �а�и�ь и �ар�ль, ��т�рые �ыли у�а�аны �ри вы��ве �ет�да ConnectServer�. Е�ли е�ть ���твет�твующа� учетна� �а�и�ь � та�и� же �ар�ле�, WMI и���ль�у� ет эту учетную �а�и�ь. Е�ли учетн�й �а�и�и � та�и� же и�ене�, �а� у вашей учетн�й �а�и�и нет, или е�ли �ар�ли не ��в�адают, удаленн�е ��д�лючение не ���дает��. П� у��лчанию ���твет�твующей учетн�й �а�и�ью д�лжна �ыть учетна� �а�и�ь ад�ини�трат�ра. Е�ли учетна� �а�и�ь не вх�дит в �ру��у ад�ини�трат�р�в, ��д� �лючение не ���дает�� и выдает�� �ши��а �т�ут�тви� �рав д��ту�а — P��m�ss�o� D����d ���o�. Е�ли �ред��тавленна� ва�и учетна� �а�и�ь у��ешн� ��в�ала � учетн�й �а�и� �ью ад�ини�трат�ра, удаленн�е и���ль��вание WMI ��жет ра��тать �ри у�л�вии ��раничений, на�ладывае�ых т�й или ин�й вер�ией W��dows, ��т�рые ра���атри� вают�� в �ледующих не���ль�их ра�делах. Windows 95, 98 или Me Эти у�таревшие вер�ии W��dows не и�еют �ехани��а �е���а�н��ти, ��н�ванн��� на учетных �а�и��х ��ль��вателей, ��эт��у лю��й, �т� ��жет и���ль��вать ���� �ьютер или ��д�лючить�� � не�у, в ���т��нии и��енить лю�ую на�тр�й�у или файл. (И�енн� эт� ��редел�ет �лиш��� ��льшую у��ви���ть этих ��ераци�нных �и�те� �ри и���ль��вании их в ��вре�енн�� �ире �етевых и интернет���д�люче� ний.� Эт� ���л� �ы �тать �лиш��� вы���и� ри���� �е���а�н��ти, н�, � �ча�тью, WMI и (или� DCOM �� у��лчанию на этих �тарых вер�и�х нед��ту�ны. Е�ли у�тан�вить WMI и DCOM и ра�решить их и���ль��вание, лю��й ��ль��ватель вашей �ети ��жет и���ль��вать удаленный �ценарий дл� вне�ени� и��енений лю���� вида �е� �а�их�ли�� ��раничений. Я эт��� делать не ре���ендую. Windows NT и Windows 2000 Professional Е�ли удаленный ����ьютер ра��тает ��д у�равление� W��dows NT или W��dows 2000 и вх�дит в д��ен, �ри�ен�ют�� �равила, ра����тренные ранее в ра�� деле «В д��енн�й �ети». В �р�тивн�� �лучае �ри�ен�ют�� �равила, ра����тренные ранее в ра�деле «В �ети ра��чей �ру��ы». ▼) По умолчанию WMI устанавливается и встраивается только в версии Windows от XP и выше. Если ваш компьютер работает под управлением Windows 9x, 2000 или NT, нужно разрешить работу WMI. Это можно сделать вручную или, если компьютер входит в домен, это можно сде- лать через групповую политику. Если требуется удаленное управление под управлением этих устаревших операционных систем, на этих компьютерах нужно также обеспечить включение DCOM-службы.
308 Глава 7. Инструментарий управления Windows Windows XP Home Edition Дл� удаленн��� у�равлени� ����ьютер�� ��д у�равление� XP Hom� �d���o� и�� ��ль��вать WMI нель��. На эт�й ��ераци�нн�й �и�те�е в�е�да д��ту�н� �р��т�е ��щее и���ль��вание файл�в, ��эт��у в�е �етевые д��ту�ы � ����ьютеру ��а�ы� вают�� в ��нте��те ���тев�й учетн�й �а�и�и. А у эт�й учетн�й �а�и�и нед��тат�чн� �ривиле�ий дл� ���дани� WMI���ъе�т�в чере� �етев�е ��д�лючение. Windows XP Professional Е�ли удаленный ����ьютер ра��тает ��д у�равление� W��dows XP P�o��ss�o��� и �ринадлежит д��ену, �ри�ен�ют�� �равила, ра����тренные ранее в ра�деле «В д��енн�й �ети». Е�ли на не� в�лючен �р��т�й ��щий д��ту� � файла� (S�mp�� F��� Sh����g�, ��т�рый у�танавливает�� �� у��лчанию, удаленна� ра��та WMI нев����жна, �����ль�у в�е �етевые ��ращени� � ����ьютеру �р�и�х�д�т в ��н� те��те ���тев�й учетн�й �а�и�и. Е�ли �р��т�й ��щий д��ту� � файла� �т�лючен, �ри�ен�ют�� �равила ���твет�тви� учетн�й �а�и�и, ра����тренные ранее в ра�деле «В �ети ра��чей �ру��ы». ▼) На удаленном компьютере Брандмауэр Windows должен быть настроен на разрешение WMI- подключений. Для этого на XP Pro в окне командной строки нужно набрать команду gpedit. msc. Затем следует открыть раздел Политика «Локальный компьютер» (Local Computer Policy)Конфигурация компьютера (Computer Con�guration)Административные шаблоны (Administrative Templates)Сеть (Network)Сетевые подключения (Network Connections) Брандмауэр Windows (Windows Firewall)Стандартный профиль (Standard Pro�le). Затем нуж- но дважды щелкнуть на строке Брандмауэр Windows: Разрешать исключения для удаленного управления (Windows Firewall allow Remote Administrative Exception), установить переключатель в положение Включен (Enabled) и ввести соответствующий сетевой адрес (или адреса). Для небольших сетей будет работать запись localsubnet. Windows Vista Е�ли удаленный ����ьютер ра��тает ��д у�равление� W��dows V�s�� и вх�дит в д��ен, �ри�ен�ют�� �равила, ра����тренные ранее в ра�деле «В д��енн�й �ети». В �р�тивн�� �лучае удаленн�е у�равление ����ьютер�� ���ред�тв�� WMI �р�ани��вать не�р��т�. Е�ли ��щий д��ту� � �ар�льн�й �ащит�й (P�sswo�d P�o�����d Sh����g� вы�лю� чен, удаленн�е и���ль��вание WMI не ра��тает, �����ль�у ве�ь удаленный д��ту� ��уще�твл�ет�� чере� ���тевую учетную �а�и�ь. Е�ли в�лючен ��нтр�ль учетных �а�и�ей ��ль��вателей, удаленн�е и���ль� ��вание WMI не ра��тает, �����ль�у дл� эт��� тре�уют�� ��лные ра�ширенные �ривиле�ии ад�ини�трат�ра, а удаленн�е ��д�лючение ��лучает ра�ширенны�и �ривиле�ии т�ль�� в ра����тренн�� ранее д��енн�� �ценарии. (Эт� ��раничение ��жн� ���йти, ���раща� �ривиле�ии, тре�уе�ые дл� удаленн��� и���ль��вани� WMI. Дл� эт��� нужн� �лед�вать ин�тру�ци�� «H��d���g R�mo�� Co������o�s U�d�� UAC» («Ра��та � удаленны�и ��д�лючени��и �ри в�люченн�� UAC»� в ��у�ли��ванн�й в Интернете �татье ��д �а��л�в��� «Us�� A��ou�� ��d WMI» («Учетна� �а�и�ь ��ль��вател� и WMI»�, ��т�ра� в���ре еще �удет у����нута. Н�, �реду�реждаю, эт� ве�ь�а трудна� �адача, и вы не ���жете и���ль��вать WMI удаленн� дл� и��енени� на�тр�е�, тре�ующих �рава ад�ини�трат�ра.�
Введение в инструментарий управления Windows 309 Е�ли ��нтр�ль учетных �а�и�ей ��ль��вателей вы�лючен (чт� � на�т��тельн� не ��ветую делать�, а ��щий д��ту� � �ар�льн�й �ащит�й в�лючен, удаленн�е и�� ��ль��вание WMI ра��тает �ри у�л�вии �ри�енени� �равил ���твет�тви� учетн�й �а�и�и, ра����тренных ранее в ра�деле «В �ети ра��чей �ру��ы». ▼) На удаленном компьютере Брандмауэр Windows должен быть настроен на разрешение WMI- подключений. Для этого при работе в Windows Vista нужно открыть Панель управления (Control Panel), щелкнуть на ссылке Разрешение запуска программы через брандмауэр Windows (Allow A Program Through Windows Firewall) и установить флажок, который следует за записью Инстру- ментарий управления Windows (Windows Management Instrumentation) (WMI). Windows 7 Е�ли удаленный ����ьютер ра��тает ��д у�равление� W��dows 7 и вх�дит в д��ен, �ри�ен�ют�� �равила, ра����тренные ранее в ра�деле «В д��енн�й �ети». В �р�тивн�� �лучае удаленн�е у�равление ����ьютер�� ���ред�тв�� WMI �р�ани��вать не�р��т�. Е�ли в�лючен ��нтр�ль учетных �а�и�ей ��ль��вателей, удаленн�е и���ль� ��вание WMI не ра��тает, �����ль�у дл� эт��� тре�уют�� ��лные ра�ширенные �ривиле�ии ад�ини�трат�ра, чт� уже ра���атривал��ь в �редыдуще� ра�деле «W��dows V�s��». Е�ли ��нтр�ль учетных �а�и�ей ��ль��вателей вы�лючен (чт� � на�т��тель� н� не ��ветую делать�, удаленн�е �ри�енение WMI ра��тает �ри у�л�вии �ри� �енени� �равил ���твет�тви� учетн�й �а�и�и, ра����тренных ранее в ра�деле «В �ети ра��чей �ру��ы». Н� е�ть еще �дн�, ве�ь�а �транн�е у�л�вие: е�ли и ваш, и удаленный ����ьютер ��а вх�д�т в д��ашнюю �ру��у (Hom�g�oup� W��dows 7, т� даже � вы�люченны� ��нтр�ле� учетных �а�и�ей удаленн�е и���ль��вание WMI не �ара��тает, ���а не �удет и���ль��ван �ет�д ConnectToServer и не �удет у�а�ана учетна� �а�и�ь ад�ини�трат�ра. В �р�тивн�� �лучае дл� ��д�лючени� �удет и���ль��вать�� ��ециальна� учетна� �а�и�ь HomeGroupUser$, ��т�ра� не �ред��тавл�ет �рав ад�ини�трат�ра. ▼) На удаленном компьютере Брандмауэр Windows должен быть настроен на разрешение WMI- подключений. Для этого при работе в Windows 7 откройте Панель управления (Control Panel) и щелкните на значке Система и безопасность (System and Security), Разрешение запуска про- граммы через брандмауэр Windows (Allow A Program Through Windows Firewall). Найдите запись Инструментарий управления Windows (Windows Management Instrumentation) (WMI) и устано- вите флажок в столбце Домашняя или рабочая (Work/Home). Подводя черту Я ��ни�аю, чт� в�е эт� �лиш��� �л�жн�, н� та��в ре�ультат вн��и�ых M���oso�� и�� �енений (или улучшений?� �хе�ы �етев�й �е���а�н��ти W��dows � �ажд�й н�в�й вер�ией. C ��ти�и�тиче���й т�ч�и �рени�, удаленн�е у�равление, вер��тнее в�е��, ��тре�ует�� т�ль�� в ��льших �ет�х, а �����ль�у ��льшин�тв� ��льших �етей �в� л�ют�� д��енны�и, т� в�е эти в��р��ы �тн��ительн� вер�ий �р��ле� не ���дадут. Дл� ��лее �ел�их �р�ани�аций ��жн� в�е�да найти ��х�дн�й вариант и �а�у�тить �ценарии у�равлени� не���ред�твенн� на �ажд�� ����ьютере, �е� �ривлечени� �ети и ���ут�твующих ей �л�жн��тей �и�те� �е���а�н��ти.
310 Глава 7. Инструментарий управления Windows ▼) Для получения дополнительной информации об удаленном применении WMI зайдите на веб- сайт msdn.microsoft.com и организуйте поиск следующих статей: y Connecting to WMI Remotely Starting with Windows Vista (Удаленное подключение к WMI, на- чиная с Windows Vista). y Connecting Between Different Operating Systems (Подключения между различными операци- онными системами). y Connecting Through Windows Firewall (Подключение через брандмауэр Windows). y Securing a Remote WMI Connection (Обеспечение безопасности удаленного WMI-подключения). y User Account Control and WMI (Контроль учетных записей пользователей и WMI). Создание WMI-подключений WMI �вл�ет�� �дни� и� �луже�ных �р�це���в, ��т�рые в W��dows ра��тают «��рытн�». Он в�е�да в ��т�вн��ти, �жида� �лиент��ую �р��ра��у, т� е�ть �цена� рий или дру�ую �р��ра��у у�равлени�, ��т�ра� � не�у ��д�лючит��. WMI �ред�� �тавл�ет COM���ъе�ты, ���в�л�ющие �ценарию в�аи��дей�тв�вать � �а��вы�и на�тр�й�а�и и �начени��и W��dows. Ка� эт� в�е ра��тает, ���а�ан� на ри�. 7 .1. Ваш �ценарий и���ль�ует WbemScripting���ъе�ты, ��т�рые в�аи��дей�твуют � WMI� �луж��й на вы�ранн�� ����ьютере. WMI в��вращает инф�р�ацию � ����ьютере чере� �ет�ды и �в�й�тва ��ъе�та WbemScripting, а �ате� ��хран�ет и��енени� на удаленн�� ����ьютере. «Удаленны�» ��жет �ыть лю��й ����ьютер �ети, даже т�т �а�ый ����ьютер, на ��т�р�� �а�ущен �ценарий, х�т� ���ут �ыть ��раничени�, �в��анные � �етев�й �е���а�н��тью, ра����тренные в �редыдуще� ра�деле. Рис. 7 .1. Клиентская программа WMI взаимодействует с WMI-службой на указанном компьютере, которая углубляется в настройки Windows посредством служб WMI-провайдеров
Создание WMI-подключений 311 Иерархия объектов WMI Дл� �ред�тавлени� ��д�лючени� � дру���у ����ьютеру е�� �р��тран�тв и�ен, ��ъ� е�т�в внутри �р��тран�тв и�ен, и та� далее, WMI и���ль�ует не���ль�� ��ъе�т�в. О�н�вные ��ъе�ты �еречи�лены в та�л. 7 .3 . При �ерв�� чтении �р��т� �е�л� �р�� ���трите та�лицу и верните�ь � ней ���же ���ле �р�чтени� в�ей ��тальн�й �лавы и �р����тра ��р�д�а и���ль��вани� этих ��ъе�т�в. Таблица 7.3. Основные объекты WbemScripting Объект Назначение SwbemLocator У�танавливает ��д�лючение � удаленн��у ����ьютеру и в��вращает �дин и� �еречи�ленных в данн�й та�лице ��ъе�т�в SwbemSecurity К�нфи�урирует �ара�етры на�тр�е� �е���а�н��ти, ��т�рые WMI д�лжен и���ль��вать дл� ��д�лючени� � дру���у ����ьютеру SWbemServices Пред�тавл�ет ��д�лючение � �р��тран�тву и�ен на у�равл�е��� ����ьютере. Эт� ве�ь�а не��ычный ��ъе�т, ��т�рый еще �удет ра�� ���трен в данн�й �лаве SWbemObjectSet К�лле�ци� ��ъе�т�в SWbemObject, наи��лее ча�т� и���ль�уе�ых дл� �ред�тавлени� �дн�й и� ��н�вных �ате��рий в �р��тран�тве и�ен (на�ри�ер, �дн��� и� эле�ент�в, ���а�анных ранее в та�л. 7 .2�. К�л� ле�ци� �ред�тавл�ет �����ненты W��dows в данн�й �ате��рии SWbemObject Один э��е��л�р у�равл�е���� эле�ента, на�ри�ер �етев��� ��д�лю� чени�, файла, же�т���� ди��а или ��ль��ватель���й учетн�й �а�и�и. Мет�ды и �в�й�тва SWbemObject и��енчивы и �ави��т �т ти�а эле�ента, �ред�тавленн��� ��ъе�т��. Эт�т ��ъе�т еще �удет ра����трен в дан� н�й �лаве. П����ль�у �ет�ды и �в�й�тва и��ен�ют��, ��тавшие�� четыре ти�а ��ъе�т�в ���ут и���ль��вать�� дл� �ред��тавлени� не��т�р��� р�да �а��д��у�ентации. Далее �удет ���а�ан�, чт� их ��жн� и���ль��вать дл� �р����тра, �а�ие �в�й�тва и �ет�ды �ред��тавл�ют�� в �аче�тве ча�ти лю����, в�треченн��� ва�и WMI���ъе�та SWbemMethodSet К�лле�ци� ��ъе�т�в SWbemMethod, в ��т�р�й �еречи�л�ют�� �ет�ды, д��ту�ные �аданн��у ��ъе�ту SWbemObject SWbemMethod О�и�ывает �редна�начение и ар�у�енты, и���ль�уе�ые �аданны� �ет�д�� SWbemPropertySet К�лле�ци� ��ъе�т�в SWbemProperty, в ��т�р�й �еречи�л�ют�� �в�й� �тва, д��ту�ные �аданн��у ��ъе�ту SWbemObject SWbemProperty О�и�ывает �редна�начение и ти� данных �аданн��� �в�й�тва ▼) Для получения доступа к полной документации по всем WMI-объектам обратитесь к интернет- документации Microsoft по WMI, рассмотренной в конце данной главы. Ка� уже ранее у���инал��ь, WMI���ъе�ты и�еют вл�женную �тру�туру, ��� х�жую на �тру�туру �а��� и файл�в. На�ри�ер, �уть � файлу ��жн� у�а�ать �а� c:\documents\myproject\plan.doc. WMI���ъе�ты ���ут �ыть у�а�аны � и���ль��вание� ��х�жей �и�те�ы �утевых и�ен. В та�л. 7 .4 �еречи�л�ют�� �ути, начинающие��
312 Глава 7. Инструментарий управления Windows � �р��тран�тва и�ен CIMV2 � ��н�ретн��у э��е��л�ру ��ъе�та Win32_LogicalDisk, ���ред�тв�� ��т�р��� ведет�� у�равление ди���� «C:». На ри�. 7 .2 �р�иллю�три� р�ваны в�аи���тн�шени� ра�личных ур�вней ��ъе�т�в в эт�� �ри�ере и ���а�аны не��т�рые �ет�ды и �в�й�тва, ��т�ры�и ��жн� в����ль��вать�� дл� и�влечени� �дних ��ъе�т�в и� дру�их. Фун�ци� GetObject ��жет ���дать ��ъе�т на лю��� ур�вне и�х�д� и� �ути � не�у. ▼) При использовании языков сценариев, отличных от VBScript или JScript, функция GetObject может быть недоступна. Вместо нее можно воспользоваться методом wscript.GetObject. В �редыдуще� �ри�ере дл� вы��ра ��н�ретн��� ��ъе�та и� ObjectSet ��над��и� л��ь т�ль�� �дн� �в�й�тв� (DeviceID�. Не��т�рые ��ъе�ты тре�уют дл� ��лучени� �тдельн��� ��ъе�та и���ль��вание ��лее �дн��� �в�й�тва. Таблица 7.4. Примеры указаний WMI-путей и объекты, к которым они приводят Путь Приводит \\Java\root\cimv2 SWbemServices \\Java\root\cimv2:Win32_LogicalDisk SWbemObject \\Java\root\cimv2:Win32_LogicalDisk.Instances_ SWbemObjectSet \\JAVA\root\cimv2:Win32_LogicalDisk.DeviceID=”C:” SWbemObject Рис. 7 .2 . Взаимоотношения различных уровней иерархии WMI-объектов
Создание WMI-подключений 313 При ���дании WMI���д�лючени� � удаленн��у ����ьютеру ��жн� у�а�ать, � �а��й «�лу�ины» нужн� и�влечь ��ъе�т. Е�ли нужн� и��лед�вать �н�же�тв� ��ъе�т�в, ��жет ��тре��вать�� �ри�ту�ить � эт��у, начина� � �дн��� и� ��ъе�т�в �а���� верхне�� ур�вн�, а �ате� �а�тавить �ценарий �р���анир�вать ��ъе�ты, и�еющие�� у не�� внутри. Е�ли нужн� ��лучить т�ль�� �дин ��н�ретный эле�ент, ��жн� у�а�ать ��лный �уть � ��ъе�ту и и��авить �е�� �т у�лу�лени� в �р�и��ах нужн��� эле�ента. ▼) Поскольку CIM-модель задумывалась независимой от операционной системы и используемой платформы, WMI трактует символы / и \ в путевых именах совершенно одинаково. Можно использовать любой из них. Кроме того, регистр букв в именах объектов и параметров не учитывается. П�д�лючить�� � удаленн��у ����ьютеру ��жн� дву�� ������а�и: ли�� � ��� ��щью ��ъе�та SWbemLocator, ли�� � ����щью ��ни�ер�в (mo��k��� ��ъе�т�в, в��� вращающих ��ыл�и на ��ъе�ты и�х�д� и� �утевых и�ен этих ��ъе�т�в. О�а этих �ет�да ра���атривают�� в �ледующих ра�делах. Подключение с помощью объекта WbemScripting.SWbemLocator П�д�лючить�� � WMI на л��альн�� или удаленн�� ����ьютере ��жн� �уте� ���дани� ��ъе�та SWbemLocator и и���ль��вани� е�� �ет�да ConnectServer дл� ��д�лючени� � нужн��у ����ьютеру. Пред��л�жи�, чт� нужн� ��ра��тать � ���� �ьютер�� �� и�ени Java и и�учить е�� �р��тран�тв� и�ен CIMV2. Ка� ��д�лючить��, и���ль�у� ��ъе�т Locator, ���а�ан� в �ледующих ��ерат�рах: set locator = CreateObject("WbemScripting.SWbemLocator") set svcs = locator.ConnectServer("Java", "root\CIMV2") В ре�ультате их вы��лнени� ���дает�� ��ъе�т svcs, ��т�рый �вл�ет�� SWbem- Services���ъе�т��, �ред�тавл�ющи� �р��тран�тв� и�ен root\CIMV2 на ����ью� тере Java. П��же в данн�й �лаве �удет ���а�ан�, �а� и���ль��вать ��ъе�т svcs дл� у�равлени� удаленны� ����ьютер��. Мет�д ConnectServer ��жет и���ль��вать не���ль�� не����ательных ар�у�ен� т�в. Е�� �инта��и� и�еет �ледующий вид: ConnectServer(servername, namespace [, username, password], [locale], [authority], [security], [namedvalueset]) О�и�ание е�� ар�у�ент�в дан� в та�л. 7 .5 . Таблица 7.5. Аргументы метода ConnectServer Аргумент Описание Servername И�� ����ьютера, � ��т�р��у ���дает�� ��д�лючение. Е�ли эт�т ар�у�ент ��ущен или �вл�ет�� �у�т�й �тр���й, ���дает�� ��д�лючение � л��аль� н��у ����ьютеру (т��у, на ��т�р�� �а�ущен �ценарий� Namespace Пр��тран�тв� и�ен, � ��т�р��у ���дает�� ��д�лючение (на�ри�ер, "Root\CIMV2"� . Е�ли эт�т ар�у�ент ��ущен или �вл�ет�� �у�т�й �тр���й, и���ль�ует�� �р��тран�тв� и�ен �� у��лчанию (��ычн� эт� CIMV2, н� и���ль�уе��е �� у��лчанию �р��тран�тв� и�ен ��жет �ыть и��енен� ранее ра����тренны� ин�тру�ентарие� у�равлени� WMI� продолжение 
314 Глава 7. Инструментарий управления Windows Аргумент Описание Username Не����ательный. И�� ��ль��вател�, и���ль�уе��е �ри ��д�лючении � удаленн��у ����ьютеру. При ��д�лючении � л��альн��у ����ьютеру у�а�ать дру��е и�� нев����жн�. П� у��лчанию и���ль�ует�� и�� учет� н�й �а�и�и, и���ль�уе��й ����ьютер��, на ��т�р�� �а�ущен �ценарий Password Не����ательный. Пар�ль, и���ль�уе�ый дл� ��д�лючени� � удаленн��у ����ьютеру Locale К�д л��али�ации (��ы�а�. На�ри�ер, "MS_409 " �адает а�ери�ан��ий ан�лий��ий. Е�ли эт�т ар�у�ент �вл�ет�� �у�т�й �тр���й, и���ль�ует�� л��али�аци� W��dows �� у��лчанию Authority Мет�д аутентифи�ации, и���ль�уе�ый �ри ��д�лючении: «k��b��os», «NTLM» или «��go�����d». Е�ли эт�т ар�у�ент ��ущен, �� у��лчанию и���ль�ует�� �ет�д «��go�����d», и в ��льшин�тве �лучаев эт�т вы��р �вл�ет�� наилучши� Security Эт�т ар�у�ент не и���ль�ует�� и д�лжен �ыть ��ущен или равен нулю Namedvalueset Эт�т ар�у�ент в �ценари�х �е���ле�ен и д�лжен �ыть ��ущен Ар�у�енты username и password ���ут ��тре��вать�� �ри не��х�ди���ти ��д� �лючени� � ����ьютеру, на ��т�р�� нет вашей учетн�й �а�и�и или на ��т�р�� у ва� нет �рав ад�ини�трат�ра. Бе� этих �рав ��жн� ин��да ��д�лючить�� � WMI и �����треть �начени� �в�й�тв, н� и��енени� вн��ить нель��. Н� хранить �ар�ли в �ценарии не �т�ит, ��эт��у е�ли у�равл�ющий �ценарий не �а�ущен � и���ль� ��вание� �ривиле�ир�ванн�й учетн�й �а�и�и, ��т�ра� �� у��лчанию �ред��тав� л�ет не��х�ди�ые ра�решени�, нужн� в�тавить в �ценарий �ри�лашение на вв�д тре�уе���� �ар�л�. ▼) Дополнительная информация о том, как в Windows применяются правила безопасности для WMI-подключений, дана выше в разделе «Удаленное управление Windows». О�ъе�т��, в��вращенны� �ет�д�� ConnectServer, �вл�ет�� ��лле�ци� SWbem- Services, ��т�рую ��жн� и�учить или и� ��т�р�й ��жн� и�влечь лю�ые нужные ва� SWbemService���ъе�ты. Эт�т в��р�� �удет ра����трен в ра�деле «SWb�m� S��v���s». Подключение с помощью моникера В� вт�р�� �ет�де ���дани� ��д�лючени� и���ль�ует�� моникер — вер�и� ��ъ� е�та, и���ль�ующа� �утев�е и��, и фун�ци� GetObject, ��т�ра� ра���атривала�ь в �лаве 3. М�ни�ер дл� WMI���ъе�та в�е�да начинает�� �� �тр��и "winmgmts:". С��дание ��д�лючени� � ����щью ��ни�ера ���а�ывает�� в �ледующе� ��ерат�ре: set svcs = GetObject("winmgmts:\\java\CIMV2") Эт�т ��ерат�р ���дает та�ую же ��лле�цию SWbemServices, ��т�ра� ���давала�ь в �ри�ере � и���ль��вание� �ет�да ConnectServer в �редыдуще� ра�деле. Н� � ��� Таблица 7.5 (продолжение)
Создание WMI-подключений 315 ��щью эт��� �ет�да ��жн� у�а�ать ��лее �лу����е �утев�е и�� и ��лучить в��лне ��ределенный ��ъе�т у�равлени�, е�ли эт� в�е, в че� вы нуждали�ь. В та�л. 7.4 ���а�ан�, �а� ��жн� ��лучить WMI���ъе�ты нижне�� ур�вн�, у�а�ав GetObject ��лее длинный �уть. Ка�и� �ет�д�� �ледует в����ль��вать��? Мет�д и���ль��вани� ��ни�ера �р�� ще в на�и�ании, а �ет�д и���ль��вани� ��ъе�та Locator ра��тает �ы�трее, ���да �ценарию нужн� ��ратить�� � �н�же�тву ��ъе�т�в и (или� ����ьютер�в. Е�ли нужн� ��ра��тать длинный ��и��� ����ьютер�в, лучше, наверн�е, �ыл� �ы в��� ��ль��вать�� �ценарие�, ��х�жи� на �ледующий: ' Файл примера script0701.vbs set locator = CreateObject("WbemScripting.SWbemLocator") manage "java" ' обслуживание по очереди каждого компьютера manage "bali" manage "ambon" manage "sumatra" manage "kalimantan" manage "buru" ' -------------------------------------------------------- ' п одпрограмма 'manage' работает с указанным компьютером sub manage (computername) on error resume next ' подключение с перехватом ошибок set svcs = locator.ConnectServer(computername, "root\CIMV2") errnum = err.number errmsg = err.description on error resume next if errnum <> 0 then ' сбой подключения; сообщение причины и возврат wscript.echo computername, errmsg exit sub end if ' ... (работа с объектом svcs для обслуживания компьютера) set svcs = Nothing ' удаление объекта и разрыв подключения end sub ' к онец подпрограммы ▼) Если в имени компьютера, указанном после \\ в строке моникера, используется доменный фор- мат c точками (например, computer.mycompany.com), Windows использует для разрешения име- ни систему доменных имен — Domain Name System. Если было указано простое имя, Windows пытается найти это имя с помощью DNS, сначала используя доменное имя (имена) по умолча- нию, связанное с вашим компьютером и сетевым подключением (подключениями). Если имя там не будет найдено, Windows попытается разрешить его с помощью NetBIOS. В результате, если ваша сетевая DNS-система имеет неверные IP-адреса для ваших компьютеров, WMI не работает. Х�т� �ри и���ль��вании техн�л��ии ��ни�ер�в �р��ра��ир�вание ��жет у�р��тить��, �ет�д и���ль��вани� ��ъе�та Locator ���в�л�ет у�а�ать и�� учетн�й �а�и�и ад�ини�трат�ра и �ар�ль. П�эт��у е�� нужн� и���ль��вать, е�ли тре�ует�� ��д�лючить�� � удаленн��у ����ьютеру и �а�у�тить �ценарий, в�йд� в �и�те�у не ��д учетн�й �а�и�ью ад�ини�трат�ра.
316 Глава 7. Инструментарий управления Windows Подключение к локальному компьютеру WMI ���в�л�ет у�равл�ть лю�ы� �етевы� ����ьютер��, в т�� чи�ле и те�, на ��т�р�� �а�ущен �ценарий. К «л��альн��у» ����ьютеру ��жн� ��д�лючить�� � и���ль��вание� лю���� и� двух �ет�д�в ��д�лючени�, ра����тренных в �реды� дущих ра�делах. Зате� ��жн� ли�� на�р��ую у�а�ать и�� ����ьютера в виде ".", ли�� в���ще ��у�тить эт� и��. На�ри�ер, е�ли л��альный ����ьютер на�ывает�� JAVA, лю��й и� этих ��ерат�р�в вернет SWbemServices���лле�цию �ринадлежаще�� ����ьютеру JAVA �р��тран�тва и�ен CIMV2: set svcs = locator.ConnectServer("JAVA", "root\CIMV2") set svcs = locator.ConnectServer("." , "root\CIMV2") set svcs = locator.ConnectServer("", "root\CIMV2") set svcs = GetObject("winmgmts:\\java\root\CIMV2") set svcs = GetObject("winmgmts:\\.\root\CIMV2") set svcs = GetObject("winmgmts:\root\CIMV2") П����ль�у CIMV2 �вл�ет�� �р��тран�тв�� и�ен �� у��лчанию (���а на�тр�й�и �� у��лчанию не �удут и��енены�, �ледующие ��ерат�ры та�же �рив�д�т � ана� л��ичн��у ре�ультату: set svcs = locator.ConnectServer("JAVA", " ") set svcs = locator.ConnectServer("." ,"") set svcs = locator.ConnectServer("", "") set svcs = GetObject("winmgmts:\\java") set svcs = GetObject("winmgmts:\\.") set svcs = GetObject("winmgmts:") ▼) Если нужно, пространство имен, используемое по умолчанию, можно изменить; щелкните правой кнопкой на [Мой] Компьютер ([My] Computer), выберите пункт Управление (Manage), откройте Службы и приложения (Services and Applications), щелкните правой кнопкой на пункте Управляющий элемент WMI (WMI Control), выберите Свойства (Properties), выберите вкладку До- полнительно (Advanced) и щелкните на кнопке Изменить (Change). Или же вы можете изменить значение Default Namespace в разделе реестра HKLM\SOFTWARE\Microsoft\WBEM\Scripting. При ��д�лючени�х � л��альн�й �ашине в�е�да и���ль�ует�� ваша учетна� �а� �и�ь ��ль��вател�, и у�а�ать �ет�ду ConnectServer дру�ую учетную �а�и�ь нев��� ��жн�. Н� е�ли нужн� �р����треть �в�й�тва и на�тр�й�и W��dows, дл� л��альных ��д�лючений ва� не нужн� и���ль��вать учетную �а�и�ь ад�ини�трат�ра. Безопасность и аутентификация Е�ли WMI дей�твительн� ��жет делать в�е, � че� ��в�рил��ь выше, �т и��енени� �етевых на�тр�е� д� вы�лючени� ����ьютера и ���дани� или и��енени� учетных �а�и�ей, �лед�вательн�, эт�т ин�тру�ентарий д�лжен ра��тать в �тр��их ра��ах �ер �е���а�н��ти. На �а��� деле та� �н� и е�ть, и эти ��раничени� ра��тают �ледующи� ��ра���: �е�� ��а�н��ть WMI ��н�вывает�� на �ред�твах удаленн��� ��д�лючени�, �вл�ющих�� ча�тью DCOM. Бе���а�н��ть DCOM ��ладывает�� и� четырех а��е�т�в: y y аутентификации, �ри ��т�р�й вы идентифицируете�ь на удаленн�� ����ью� тере;
Создание WMI-подключений 317 y y шифрования, �ащищающе�� инф�р�ацию, �ередавае�ую �ежду ����ьютера�и, �т �ерехвата; y y заимствования прав, �а�тавл�юще�� удаленную DCOM��луж�у (а �тал� �ыть, и WMI� ра��тать в ��нте��те вашей учетн�й �а�и�и, а не в ��нте��те ��ладаю� щей вы���и�и �ривиле�и��и учетн�й �а�и�и SYSTEM, и���ль�уе��й ��льшин� �тв�� �луж�; y y контроля полномочий, ���в�л�юще�� у�а�ать, �а�ие �и�те�ные �ривиле�ии тре�уют�� �адаче удаленн��� у�равлени�. К ��жалению, нужн� ��а�ать, чт� ра����трение эт��� �р�це��а �ай�ет не���ль�� �траниц, н� �е� эт��� ни�а� не ���йти�ь. Ка� �равил�, е�ли не уделить �����е вни�а� ние эти� нюан�а� �е���а�н��ти, д��ить�� н�р�альн�й ра��ты �т WMI не уда�т��. Аутентификация и шифрование П� у��лчанию ��д�лючение � удаленн��у ����ьютеру и���ль�ует у�тан�в�чные данные т�й учетн�й �а�и�и, ��т�ра� и���ль��вала�ь �ри �а�у��е �ценари�. Е�ли �ценарий �а�ущен и� ���андн�й �тр��и, т� эт� данные вашей личн�й учетн�й �а� �и�и, а е�ли �ыл и���ль��ван Планировщик заданий, т� эт� данные т�й учетн�й �а� �и�и, ��т�ра� в не� у�а�ана. Служ�а DCOM на удаленн�� ����ьютере �р�вер�ет ��лн���чи� ваше�� ��д�лючени� и д��ту�ные ва� �рава. В д��енн�й �ети � вашей учетн�й �а�и�ью �в��ан идентифи�ат�р �е���а�н��ти — s��u���y �d�������� (SID�, ��т�рый ра����нает�� в�е�и ����ьютера�и �ети, и вы ��лучаете ��лн���чи�, ���т� вет�твующие вашей д��енн�й учетн�й �а�и�и. В �ети ра��чей �ру��ы или в чуж�� д��ене W��dows ��жет �т�равить ваше и�� ��ль��вател� и �ар�ль в �ашифр�ван� н�� виде на удаленный ����ьютер. Е�ли учетна� �а�и�ь � та�и� и�ене� и �ар�ле� на удаленн�� ����ьютере �уще�твует, вы ��лучаете � не�у д��ту�. ▼▼ Чтобы использовать WMI в сети рабочей группы (пиринговой сети), следует обеспечить на- личие на каждом компьютере, который должен подвергаться управлению, учетной записи, настроенной на такое же имя пользователя, и пароль, которые использовались для запуска сценария. Кроме того, если включено простое совместное использование файлов — Simple File Sharing (на XP) или выключено совместное использование, защищенное паролем — Password Protected Sharing (на Windows 7 или Vista), WMI не работает, поскольку для всех сетевых до- ступов используется гостевая учетная запись, а гость не может пользоваться WMI или DCOM. О�ычн� ваш ����ьютер ��тает�� ��д�люченны�, ���а ваш �ценарий ��ль�ует�� ��ъе�т��, ��ылающи��� на удаленный ����ьютер, и дл� эт��� д��тат�чн� �дн�й �р�вер�и и�ени ��ль��вател� и �ар�л�. М�жн� ��вы�ить �е���а�н��ть, �а�тавив DCOM �р�вер�ть ��лн���чи� ваше�� ��д�лючени� �ри �ажд�� �а�р��е, чт� ��� жет у�еречь �т реали�ации вредных на�ерений �� �т�р�ны тех лиц, ��т�рые и�еют �р���е ��д�лючение � вашей �ети и ���ирают�� �ахватить DCOM���д�лючение и ��вершить у�равл�ющие дей�тви� �т ваше�� и�ени. Бе���а�н��ть ��жн� еще ��вы�ить, �а�тавив W��dows шифр�вать �аждый �а�ет данных, ��т�ры�и ���е� нивают�� два ����ьютера. Ра�личные на�тр�й�и аутентифи�ации и шифр�вани�, вы�тр�енные �� �ере в��ра�тани� ��а��ченн��ти в��р��а�и �е���а�н��ти, ���а� �аны в та�л. 7.6 .
318 Глава 7. Инструментарий управления Windows Таблица 7.6. Режимы аутентификации и шифрования Имя Значение Имя и описание константы Default 0 wbemAuthenticationLevelDefault — на�тр�й�и W��dows �� у��л� чанию. Эти на�тр�й�и �ен�ют�� �т вер�ии � вер�ии WMI и W��dows, ��эт��у лучше �удет у�а�ать �дин и� �ледующих ур�вней в �вн�� виде None 1 wbemAuthenticationLevelNone — аутентифи�аци� не и���ль�у� ет��; реали�ует�� ���тев�е ��д�лючение Connect 2 wbemAuthenticationLevelConnect — �дн��ратна� аутентифи� �аци�, ��уще�твл�е�а� в �р�це��е и�х�дн��� ��д�лючени�. О�ычн� и���ль�ует�� и�енн� эт� �начение Call 3 wbemAuthenticationLevelCall — �р�вер�а аутентифи�ации �ри �ажд�� WMI��а�р��е Pkt 4 wbemAuthenticationLevelPkt — аутентифи�аци� �ажд��� �а�ета данных, �т�равленн��� WMI PktIntegrity 5 wbemAuthenticationLevelPktIntegrity — режи� ��х�ж на Pkt, н� �ри не� �р�в�дит�� д���лнительна� �р�вер�а на цел��т� н��ть �а�ет�в данных PktPrivacy 6 wbemAuthenticationLevelPktPrivacy — режи� ��х�ж на Pkt, н� �ри не� д���лнительн� шифрует�� �аждый �а�ет данных. Эт� наи��лее �е���а�ный вариант В ��льшин�тве �лучаев дей�твует режи� Connect, ��т�рый и и���ль�ует�� �� у��лчанию. Н� в не��т�рых �ет�х ад�ини�трат�ры ���ут ��тре��вать и���ль��� вание ��лее вы������ ур�вн� �е���а�н��ти, ��эт��у ур�вень �� у��лчанию ��жет не ра��тать, и ���ыт�и в����ль��вать�� WMI �риведут � выв�ду ����щений �� �ши��ах. В та��� �лучае �ри ���дании WMI���д�лючени� ��жет ��тре��вать�� у�а�ать ��лее вы���ий ур�вень. И���ль��вание альтернативных режи��в иденти� фи�ации �удет ра����трен� в �ледующе� ра�деле. ▼) Для этих констант можно использовать числовые значения или же создать для этих значений поименованные константы и использовать их в своих сценариях. Кроме этого можно написать сценарии, используя файловый формат .wsf, который рассматривается в главе 10 «Командная строка CMD». В .wsf-файле для автоматического импортирования всех поименованных кон- стант WMI можно использовать тег <reference>. Заимствование прав О�ычн� WMI �а�у��ает�� �а� �и�те�на� �луж�а, ча�ть �а��й ��ераци�нн�й �и�те� �ы W��dows, и и�еет не��раниченный д��ту� �� в�е� ча�т�� W��dows. Х�т� WMI �ри������лен � �р�вер�е ��лн���чий вашей ре�и�трации и вы��лн�ет т�ль�� те �адачи, ��т�рые ра�решены дл� вашей учетн�й �а�и�и, ра�ра��тчи�и WMI д�� �у��ают вер��тн��ть наличи� в WMI �р��ра��ных дефе�т�в, ��т�ры�и ���ут в����ль��вать�� �р��ра��и�ты��л�у�ышленни�и. П�эт��у �уще�твует в����ж�
Создание WMI-подключений 319 н��ть т���, чт� �хе�а аутентифи�ации ��жет �ыть неаде�ватна в решении �адач в���ре��т�тв�вани� и���ль��вани� WMI �етевы�и ��ль��вател��и дл� ��лучени� д��ту�а �� в�е� ча�т�� ����ьютера. К��да вы ��д�лючаете�ь � WMI в удаленн�� режи�е, эт�т ин�тру�ентарий на�тр�ен на �ини�и�ацию ри��а �а �чет �а�у��а ��д т�й учетн�й �а�и�ью, ��д ��т�р�й вы в�шли в �и�те�у. Эт� на�ывает�� �аи��тв�� вание� �рав (�mp��so����o��, в ре�ультате ��т�р��� WMI не ��жет нане�ти ур�н выше т���, ��т�рый ��� �ы �ыть нане�ен, е�ли �ы вы �а�и �идели не���ред�твенн� �а эти� ����ьютер��. При ��д�лючении � �рава�и ад�ини�трат�ра WMI ��лучает ��лный д��ту�, ���твет�твующий данн�й учетн�й �а�и�и, н� «�а��й�ни�удь та� Дж�» не ��жет ��лн��тью �ахватить вла�ть над ����ьютер��. На�тр�й�и �аи��тв�вани� �рав, ��т�рые ���ут и���ль��вать�� WMI, ���а�аны в та�лице 7.7. Таблица 7.7. Режимы заимствования прав при подключении Имя Значение Имя и описание константы Anonymous 1 WbemImpersonationLevelAnonymous — не дает WMI �т�равл�ть ваши ��ль��ватель��ие ��лн���чи� на удаленный ����ьютер. Следует уче�ть, чт� ��льшин�тв� ����ьютер�в на�тр�ены на �т�л�нение ��д�лючений в режи�е Anonymous Identify 2 WbemImpersonationLevelIdentify — ���в�л�ет удаленн�й WMI� �луж�е �р�верить идентифи�ацию ��д�лючающе���� ��ль��� вател�, н� ра�решает �луж�е ра��тать � ее «�е�тны�» ур�вне� �ривиле�ий. Эт�т режи� ��ычн� �а�рещен Impersonate 3 WbemImpersonationLevelImpersonate — WMI��луж�а удаленн��� ����ьютера ра��тает та�, �удт� в �и�те�у в�шел ��ль��ватель, �р�шедший аутентифи�ацию. Эт� наи��лее вер��тна� ра��ча� на�тр�й�а, и дл� ��льшин�тва вер�ий W��dows эт�т режи� и�� ��ль�ует�� �� у��лчанию Delegate 4 WbemImpersonationLevelDelegate — ���в�л�ет WMI��р�вайдера� удаленн��� ����ьютера и���ль��вать идентифи�ацию ��ль��� вател�, чьи �рава �аи��тв�ваны �ри ��д�лючении � еще �дн��у ����ьютеру дл� ���ра инф�р�ации. П�ддерживает�� т�ль�� в д��енн�й �ети � ���b��os�аутентифи�ацией О�ычн� WMI тре�ует, чт��ы вх�д�щие ��д�лючени� и���ль��вали �аи��тв�ва� ние �рав (вариант 3 или 4�. Н� вер�ии и���ль�уе�ых в �ценари�х WMI���ъе�т�в, ��т�рые �ыли вы�ущены д� W��dows XP S��v��� P��k 2, ���ут не ��редел�ть �� у��лчанию режи� �аи��тв�вани� �рав �ри ���дании ��д�лючений � удаленны� ����ьютера�. Е�ли и�ве�тн�, чт� в�е ����ьютеры, на ��т�рых �удет ра��тать ваш �ценарий, и�еют ��ераци�нную �и�те�у вер�ии W��dows XP SP2 или выше, д�лжны ра��тать у�тан�в�и �аи��тв�вани� �рав, и���ль�уе�ые �� у��лчанию. В �р�тивн�� �лучае на �равильн��ть у�тан�в�� �� у��лчанию ра��читывать не �рих�дит��, и нужн� у�а�ать, чт� ва� тре�ует��, чт��ы �луж��й WMI и���ль��ва� л��ь �аи��тв�вание �рав. П�р�д�� у�а�ани� вариант�в �аи��тв�вани� �рав �удет ���а�ан в �ледующе� ра�деле.
320 Глава 7. Инструментарий управления Windows ▼) Режим, используемый по умолчанию для исходящих подключений на заданном компьютере, можно проверить или установить путем изучения или изменения значения параметра реестра Default Impersonation Level в разделе HKLM\SOFTWARE\Microsoft\WBEM\Scripting с использова- нием одного из числовых значений из табл. 7.7. Экспресс-проверку можно провести, набрав следующую команду: reg query HKLM\SOFTWARE\Microsoft\WBEM\Scripting Привилегии Бла��дар� �ехани��а� аутентифи�ации и �аи��тв�вани� �рав ��жн� вы��лнить лю��е дей�твие ���ред�тв�� WMI, ��т�р�е ра�решен� вы��лн�ть � и���ль�уе��й учетн�й �а�и�ью. Н� не��т�рые �тандартные ��ль��ватель��ие �ривиле�ии WMI ��ычн� не �ред��тавл�ют�� и д�лжны в�лючать�� �вны� ��ра��� �ри ���дании WMI���д� �лючени�. Е�ли нужн� вы��лнить ��ерации, ��редел�е�ые эти�и �ривиле�и��и, т� �ридет�� �р�инф�р�ир�вать WMI � на�ерени�х их и���ль��вани�, у�а�ав варианты �ривиле�ий �ри ���дании WMI���д�лючени� � удаленн��у ����ьютеру. ▼) Нельзя запросить привилегию, которую учетная запись пользователя, используемая WMI, обычно не имеет. При попытке указать такую привилегию подключение к удаленному компью- теру не устанавливается. Можно указать только те привилегии, которые уже имеются у учет- ной записи, но которые не включаются WMI по умолчанию. (Пользователи Windows 7 должны быть знакомы с этой концепцией, поскольку она используется в расширении привилегий при запуске команд и при использовании WMI.) Очевидно, что атрибуты привилегий не требуются при управлении компьютерами с операционными системами Windows 95, 98 или Me, поскольку в них нет механизма безопасности. В та�л. 7 .� �еречи�лены ��ецифиче��ие �ривиле�ии, и�еющие �тн�шение � WMI и �начени� их чи�л�вых ��д�в. П�р�д�� их д��авлени� � WMI���д�лю� чению ��ъ��н�ет�� в �ледующе� ра�деле. Таблица 7.8. Привилегии, применяемые для WMI-подключений Название привилегии Зна- чение Возможности MachineAccount 5 С��дание учетн�й �а�и�и �ашины в д��енн�й �ети, т� е�ть д��авление ����ьютера � д��ену Tcb 6 Дей�твие в �аче�тве ча�ти ��ераци�нн�й �и�те�ы Security 7 У�равление анали��� и ведение� журнала �е���а�н��ти TakeOwnership 8 При�енение ��н���льн��� и���ль��вани�. На�ри�ер, ��н�� ��льн�е и���ль��вание файл�в LoadDriver 9 За�ру��а и вы�ру��а драйвер�в у�тр�й�тв Systemtime 11 И��енение даты и ���а�аний �и�те�ных ча��в CreatePagefile 14 С��дание или и��енение на�тр�е� файла ��д�ач�и CreatePermanent 15 С��дание ���т��нн��� ��ъе�та, на�ри�ер у�тр�й�тва Backup 16 С��дание ре�ервн�й ���ии �и�те�ы
Создание WMI-подключений 321 Название привилегии Зна- чение Возможности Restore 17 В���тан�вление �и�те�ы и� ре�ервн�й ���ии Shutdown 18 Вы�лючение ����ьютера, е�ли вх�д в �и�те�у �ыл л��аль� ны� SystemEnvironment 21 И��енение на�тр�е� �и�р��р��ра��н��� ��е��ечени�, хра� н�ще���� в� флеш��а��ти (эле�триче��и �р��ра��ируе��� ПЗУ� ChangeNotify 22 И��енение �атал���в дл� ра�решенных ��д�а���, даже е�ли �а�рещен д��ту� � р�дитель��и� �а��а� (та�же на�ывает�� обходом проверки пути — byp�ss ���v��s� �h��k��g� RemoteShutdown 23 Вы�лючение ����ьютера и� удаленн��� ��д�лючени� Undock 24 Удаление ����ьютера и� е�� д����танции EnableDelegation 26 Выдача ����ьютеру или учетн�й �а�и�и д�веренн��ти на �ередачу ��лн���чий ManageVolume 27 У�равление т��а�и ди��а (ра�дела�и� В та�л. 7.� �ривиле�ии �еречи�лены �� их ��р�т�и� и�ена�, на�ри�ер Manage- Volume. В дей�твительн��ти �уще�твуют четыре ������а ��ыл�и на �аждую �ри� виле�ию: y y С использованием короткого имени, на�ри�ер ManageVolume. К�р�т�ие и�ена ��жн� и���ль��вать �ри у�а�ании �ривиле�ий в ��ни�ере, чт� �удет в���ре ра����трен�. y y С использованием числового значения, на�ри�ер 27 дл� �ривиле�ии Manage- Volume. Чи�л�вые �начени� и���ль�уют�� � �ет�д�� .Add, ��т�рый �удет ра�� ���трен в �ледующе� ра�деле. y y С использованием предопределенной константы, е�ли дл� �ценари� и���ль� �ует�� ф�р�ат файла .wsf и д��авлена �а�и�ь ��ыл�и <reference object="Wbem- Scripting.SWbemLocator"/>, т� �ри и���ль��вании �ет�да .Add ��жн� в�е�т� чи�л�в��� �начени� в����ль��вать�� и�ене� �ред��ределенн�й ��н�танты. И�ене� ��н�танты �ривиле�ии �лужит на�вание эт�й �ривиле�ии � �рефи���� WbemPrivilege, на�ри�ер WbemPrivilegeManageVolume. y y С использованием «имени константы C++», дл� эт��� �ледует д��авить Se �еред ��р�т�и� и�ене� и Privilege ���ле не��. На�ри�ер, SeManageVolumePrivilege. И�� ��н�танты C++ ��жн� и���ль��вать � �ет�д�� AddAsString, ��т�рый ра�� ��атривает�� в �ледующе� ра�деле. Определение режимов безопасности Ели на�тр�й�и �� у��лчанию дл� ваше�� �етев��� ��ружени� не ра��тают, тре� �ует�� ��ределить альтернативную аутентифи�ацию, �аи��тв�вание �рав или на�тр�й�и �ривиле�ий дл� �ажд��� WMI���д�лючени�. В �лучае �т�ут�тви�
322 Глава 7. Инструментарий управления Windows уверенн��ти в т��, чт� в�е ����ьютеры вашей �ети ра��тают ��д у�равление� W��dows XP S��v��� P��k 2 или ��лее н�в�й вер�ии, или в �лучае и���ль��вани� ��лее ранних вер�ий W��dows, ��т�рые �ыли ��дерни�ир�ваны д� WMI вер�ии 1.5 или выше, ва�, �а� �ини�у�, ��над��ит�� ��ределить режи� �аи��тв�вани� �рав (Imp��so���� mod��. Е�ть два ������а ��ределени� режи��в �е���а�н��ти. В �дн�� и� них и���ль� �ует�� ��ъе�т SWbemServices, ��т�рый в��вращает�� ��ъе�т�� Locator, а в� вт�р�� и���ль�ует�� �и�те�а ��ни�ер�в. Определение режимов безопасности с помощью объекта SWbemServices Е�ли ��д�лючение � удаленн��у ����ьютеру ��уще�твл�ет�� � ����щью ��ъе�та Locator, в ре�ультате эт��� ���дает�� ��ъе�т SWbemServices. У не�� е�ть �в�й�тв� ��д на�вание� Security_, ��т�р�е в��вращает ��ъе�т SWbemSecurity, у ��т�р���, в �в�ю �чередь, и�еют�� три �в�й�тва: AuthenticationLevel, ImpersonationLevel и Privileges, ���леднее и� ��т�рых �вл�ет�� ��лле�цией. П��ле ��д�лючени� � удаленн��у ����ьютеру эле�ента� ��лле�ции ��жн� �ри�в�ить н�вые �начени�. На�ри�ер, �ледующий фра��ент �ценари� у�танавливает ��д�лючение � ����ью� теру �� и�ени Java и �а�рашивает �ривиле�ии SystemEnvironment и RemoteShutdown: set locator = CreateObject("WbemScripting.SWbemLocator") set svcs = locator.ConnectServer("Java", "root\CIMV2") svcs.Security_. AuthenticationLevel = 2 ' Connect svcs.Security_. ImpersonationLevel = 3 ' Impersonate svcs.Security_. Privileges.Add 21 ' WbemPrivilegeSystemEnvironment svcs.Security_. Privileges.Add 23 ' WbemPrivilegeRemoteShutdown ' и зме нен ие нас троек системной среды удаленного компьютера с его последующей ' п ерезагрузкой ... ▼) Привилегии можно также добавлять с помощью метода AddAsString. В этом методе использует- ся имя константы привилегии C++. Например: svcs.Security_ .Privileges.AddAsString "seSystemEnvironmentPrivilege" Определение режимов безопасности в моникерах Е�ли WMI���ъе�ты ���дают�� � и���ль��вание� �и�те�ы �а�и�и ��ни�ер�в, ��ре� делить дру�ие режи�ы �е���а�н��ти и л��альные на�тр�й�и ��жн� в �тр��е ��ни�ера. Д���лнительна� инф�р�аци� �ледует �ра�у же �а winmgmts: вну� три фи�урных ������ и �авершает�� в���лицательны� �на���, �а� в данн�� �ри� �ере: setsvcs=_ GetObject("winmgmts:{impersonationLevel=impersonate}!\\java\root\CIMV2") В фи�урные �����и ��жет �ыть ���ещен �дин или не���ль�� и� ниже�еречи�� ленных эле�ент�в: y y AuthenticationLevel=name, �де name — �дн� и� �л�в, �еречи�ленных в �т�л�це «И��» та�л. 7 .6, ��редел�ющее �хе�у аутентифи�ации и шифр�вани�;
WMI-коллекции и запросы 323 y y ImpersonationLevel=name, �де name — �дн� и� �л�в, �еречи�ленных в �т�л�це «И��» та�л. 7.7, ��редел�ющее ур�вень �аи��тв�вани� �рав; y y Authority=kerberos:domain\server или Authority=ntlmdomain:domain, ��т�рый �лужит дл� ��ределени� ��н�ретн��� д��енн��� и�ени ���b��os или W��dows, �� ��т�р��у �ледует �р�вер�ть ��ль��ватель��ие ��лн���чи�; y y Privileges=(name[,name...]), �де эле�енты name �ред�тавл�ют �дн� или не���ль� �� на�ваний �ривиле�ий, ��лученных и� ��н�тант, �еречи�ленных в та�л. 7.� �а �чет �т�ра�ывани� лидирующей ча�ти «wb�mP��v���g�» дл� ��ределени� д���лнительных �ривиле�ий; y y Locale=name, �де name — �дин и� M���oso���идентифи�ат�р�в л��али�ации MS_xxx дл� ��ределени� альтернативн��� ��ы�а. Е�ли и���ль�ует�� ��лее �дн��� эле�ента, в �аче�тве ра�делител� нужн� и�� ��ль��вать �а��тую. В �ледующе� �ри�ере делает�� т� же �а��е, чт� и в� фра��ен� те �ценари� в �редыдуще� ра�деле, н� на эт�т ра� � �ри�енение� �и�те�ы �а�и�и ��ни�ера: setsvcs=_ GetObject("winmgmts:{authenticationLevel=Connect,ImpersonationLevel=3,"& _ "privileges=(SystemEnvironment,RemoteShutdown)}!\\JAVA\root\CIMV2 ") WMI-коллекции и запросы В �редыдуще� ра�деле уже у���инал��ь � т��, чт� ��жн� ��д�лючить�� � WMI� �луж�е на л��альн�� или на удаленн�� ����ьютере и ��лучить WMI���ъе�т на лю��� и� трех ур�вней иерархии �р��тран�тва и�ен: y y М�жн� ��д�лючить�� на ур�вне в�е�� �р��тран�тва и�ен, и���ль�у� та��й �уть, �а� "root\CIMV2". П�лучае�ый ��ъе�т на�ывает�� SWbemServices и и�еет �ет�ды и �в�й�тва, ���в�л�ющие ��лучить ни���ур�вневые ��ъе�ты, �ред�тавл�ющие те ча�ти W��dows, ��т�ры�и нужн� у�равл�ть. Один и� е�� �ет�д�в ���в�л�ет и�вле�ать инф�р�ацию и� WMI, и���ль�у� ��ециальный ��ы� �а�р���в, ��т�� рый на�ывает�� W��dows M���g�m��� I�s��um������o� Qu��y L��gu�g� (WQL�. y y М�жн� ��д�лючить�� � ��н�ретн��у ��ъе�ту у�равлени�, у�а�ав та��й �уть, �а� "root\CIMV2:Win32_DiskDrive". В ре�ультате �удет ��лучен ��ъе�т SWbem- Object, н� �н �ред�тавл�ет �ате��рию, а не на�т��щий у�равл�е�ый эле�ент. Дл� ��лучени� ��ъе�т�в, �ред�тавл�ющих эле�енты в �ате��рии, нужн� в��� ��ль��вать�� е�� �в�й�тв�� Instances_, ��т�р�е �ред��тавл�ет ��лле�цию ��д на�вание� SWbemObjectSet. y y М�жн� ��д�лючить�� � ��н�ретн��у э��е��л�ру у�равл�е���� ��ъе�та, и�� ��ль�у� та��й �уть, �а� root\CIMV2:Win32_DiskDrive="C". П�р�й эт� не та� �р�� �т�, �����ль�у не��т�рые ут�чн�ющие �ара�етры вы�л�д�т �чень �транн�. Эт�т в��р�� �чень ���р� �удет ра����трен. Эти э��е��л�ры �ред�тавлены ��ъе�т�� SWbemObject, чьи �в�й�тва и �ет�ды ���в�л�ют у�равл�ть т�й ча�тью W��dows, ��т�рую �ред�тавл�ет данный ��ъе�т.
324 Глава 7. Инструментарий управления Windows В не��т�рых �ате��ри�х ��ъе�т�в в �илу ��н�тру�тивных ����енн��тей ��жет �ыть т�ль�� �дин э��е��л�р ��ъе�та (на�ывае�ый синглтоном�, и не �ыть ни�а�их �начений ут�чн�ющих �ара�етр�в, ��т�рые идентифицируют �тдельный э��е��л�р в �ате��рии. В та�их �луча�х �ледует и���ль��вать �и�� в�лы =@, чт��ы ���а�ать, чт� нужен э��е��л�р, а не �ате��ри�. На�ри�ер, �ри у�а�ании �ути root\Win32_CurrentTime в��вращает�� ��ъе�т дл� �ате��рии Win32_CurrentTime, а �ри у�а�ании �ути root\Win32_CurrentTime=@ в��вращает�� �дин ��н�ретный э��е��л�р те�уще�� вре�ени. П��ле ��лучени� �дн��� и� этих трех ти��в ��ъе�т�в л��альны� или удален� ны� ����ьютер�� ��жн� у�равл�ть �уте� и��енени� WMI���ъе�т�в. Эт� ��и�ы� вает�� в ��ти �ледующих ра�делах. SWbemServices О�ъе�т SWbemServices в��вращает�� �ет�д�� ConnectServer ��ъе�та Locator или фун�цией GetObject � ��ни�ер��, ��т�рый в�лючает �р��тран�тв� и�ен, н� �е� и�ени ��ъе�та (на�ри�ер, "winmgmts:\\JAVA\Root\CIMV2"�. Наи��лее важные �е� т�ды и �в�й�тва ��ъе�та SWbemServices ��др��н� ��и�аны в ��рав�е 7.1 . СПРАВКА 7.1. СВОЙСТВО И МЕТОДЫ ОБЪЕКТА SWBEMSERVICES (НЕПОЛНЫЙ ПЕРЕЧЕНЬ) СВОЙСТВО Security_ В��вращает ��ъе�т SWbemSecurity, ��т�рый ��жн� и���ль��вать дл� ��нфи� �урации DCOM�аутентифи�ации, �аи��тв�вани� �рав и у�тан�в�и �ривиле�ий дл� данн��� ��д�лючени� � удаленн��у ����ьютеру. Д���лнительна� инф�р� �аци� дана выше в ра�деле «О�ределение режи��в �е���а�н��ти � ����щью ��ъе�та SWb�mS��v���s». МЕТОДЫ Delete(path) Удал�ет э��е��л�р ��ъе�та SWbemObject, у�а�анный � ����щью �тр��и �ути path. Эт�т �ет�д ��жн� �ри�енить т�ль�� дл� ��н�ретных нефи�иче��их ��ъ� е�т�в, та�их �а� �т��ражени� �етевых ди���в и файлы. Дей�твие �а�лючает�� в удалении �����нента W��dows или �т��ражени�, �ред�тавленн��� ��ъе�т��. Путь path д�лжен у�а�ать на ��ъе�т в т�� же �р��тран�тве и�ен, в ��т�р�� на� х�дит�� ��ъе�т SWbemServices. Синта��и� �утей � ��ъе�та� �удет ра����трен в данн�й �лаве чуть ���же. ExecMethod(path, methodname, inparams) Вы��лн�ет �дин и� дина�иче��их �ет�д�в ��ъе�та SWbemObject, у�а�анный � ����щью �ути path. Вы�ывает�� �ет�д, у�а�анный � ����щью ар�у�ента methodname, ��т�р��у �ередают�� ар�у�енты, у�а�анные в ��ъе�те���лле�ции inparams. Мет�д ExecMethod �ред��тавл�ет�� дл� тех ��ы��в, ��т�рые не ��д�
WMI-коллекции и запросы 325 держивают вых�дных ар�у�ент�в («�� ��ыл�е»�, на�ри�ер дл� JS���p�. Дл� ��лучени� д���лнительн�й инф�р�ации � �ет�де ExecMethod ��ратите�ь � ин� тернет�д��у�ентации M���oso�� �� WMI, ра����тренн�й в ��нце данн�й �лавы. Дл� �ценариев, ���данных на V�S���p�, �ет�д ExecMethod не нужен. ExecQuery(query) О�ра�атывает �а�р�� query (��и���вый �а�р���, на�и�анный на ��ы�е �а�р�� ��в WQL, и в��вращает ��ъе�т���лле�цию SWbemObjectSet, �ред�тавл�ющий ре�ультаты. На�ри�ер, �а�р�� "select * from Win32_LogicalDisk" в��враща� ет на��р ��ъе�т�в, �ред�тавл�ющих в�е ди��и, и�еющие�� на ����ьютере. С ����щью ��лее �л�жных �а�р���в ��жн� вы�рать ��ъе�ты, ��н�ванные на �ред��тавл�е��� ва�и �ритерии. Б�лее ��др��н� ��ы� WQL ра���атривает�� в �ледующе� ра�деле. InstancesOf(class) В��вращает ��ъе�т���лле�цию SWbemObjectSet, �ред�тавл�ющий в�е э�� �е��л�ры �аданн�й �ате��рии (�ла��а� WMI. На�ри�ер, InstancesOf("Win32_ LogicalDisk") в��вращает та��й же на��р, чт� и �редыдущий �ри�ер и���ль� ��вани� �ет�да ExecQuery. Две ��н�вные фун�ции SWbemServices в �ценарных �рил�жени�х — эт� �ред�� �тавление д��ту�а � ExecQuery и � InstancesOf. Наи��лее �р��ты� и� этих двух �ет�д�в �вл�ет�� InstancesOf: � е�� ����щью ��жн� ��лучить ��лле�цию и� в�ех ��ъе�т�в �аданн��� ти�а и �р���анир�вать ее дл� выв�да ��и��а или и��енени� инф�р�ации. На�ри�ер, � ����щью �ледующе�� �ценари� ��жн� ��лучить ��и��� в�ех ди���в на ����ьютере �� и�ени JAVA и �а� �тавить W��dows �а�у�тить �р��ра��у chkdisk на л��альных же�т�их ди��ах в� вре�� �ледующе�� �а�у��а �и�те�ы: ' Файл примера script0702.vbs set svcs = GetObject("winmgmts:\\JAVA\root\CIMV2") set drives = svcs.InstancesOf("Win32_LogicalDisk") for each drv in drives wscript.echo drv.name if drv.DriveType = 3 then drv.ScheduleAutoChk next Дл� ��лучени� ��и��а ��ъе�т�в не����ательн� в�е�да и���ль��вать т�ль�� ��ъе�т SWbemServices и �ет�д InstancesOf. К �ри�еру, ��лле�цию ди���в ��жн� ��лучить не���ред�твенн� �а �чет и���ль��вани� �ледующе�� ��ни�ера: set drives = GetObject("winmgmts:\\JAVA\root\CIMV2:Win32_LogicalDisk") Че� лучше в����ль��вать��: ф�р�ат�� ��ни�ера или ��лее длинны� ф�р�ат�� ��д�лючение��а�р��? Ф�р�ат ��ни�ера �р�ще в на�и�ании, е�ли �т ��д�лючени� на удаленн�� ����ьютере нужн� ��лучить т�ль�� �дин ре�ультат. Н� е�ли нужн� вы��лнить не���ль�� �а�р���в или вне�ти �ра�у не���ль�� и��енений, ф�р�ат ��д�лючени� ра��тает �ы�трее.
326 Глава 7. Инструментарий управления Windows WQL-запросы Дру�и� ��н�вны� ар�у�ент�� в ��ль�у ��д�лючени� чере� ��ъе�т SWbemServices �вл�ет�� ��лучение д��ту�а � е�� �ет�ду ExecQuery. П��ред�тв�� ��ы�а �а�р���в WQL, ��х�же�� на ��ы� S��u��u��d Qu��y L��gu�g� (SQL�, и���ль�уе�ый �а�а�и данных, ��жн� у�а�ать, �а��й на��р ��ъе�т�в �ледует и�влечь и� WMI. Суще�тву� ют три ф�р�ы WQL��а�р���в: y y Select — эти �а�р��ы в��вращают на��р ��ъе�т�в на ��н�ве ��в�адени� ти�а ��ъе�та и (или� �начений �ара�етр�в. y y references of — эти �а�р��ы в��вращают в�е ��ъе�ты, ��т�рые не���ред�твенн� �тн���т�� � у�а�анн��у ��ъе�ту. П��в�л�ют вернуть, � �ри�еру, в�е �луж�ы W��dows, �ави��щие �т ��н�ретн�й �луж�ы. y y associators of — эти �а�р��ы в��вращают в�е ��ъе�ты, ��т�рые ���венн� �тн���т�� � у�а�анн��у ��ъе�ту. На�ри�ер, �а�р�� associators of {Win32_ LogicalDisk.DeviceID= "C:"} ��жет выдать ��лле�цию, ��держащую ��ъе�ты, �ред�тавл�ющие �а�у ����ьютерную �и�те�у, ��рнев�й �атал�� ди��а C: и ди�� ��вый ра�дел, ��держащий л��иче��ий ди�� C:. Д��тат�чны� �е�т�� дл� ��лее ��др��н��� ��и�ани� ф�р� associators of и references of � не ра���ла�аю, н� вы ��жете найти д���лнительную инф�р� �ацию в интернет�д��у�ентации M���oso�� �� WMI, ра����тренн�й в ��нце данн�й �лавы. За�р��ы select ���ут и���ль��вать�� дл� и�влечени� WMI���ъе�т�в на ��н�ве у�а�анн��� �ритери�, та���� �а� �у�вы ди���в, ти�ы ди���в, ти�ы �етевых �р�� вайдер�в и т. д . Х�т� дл� ��лучени� ��ъе�т�в �аданн��� �ла��а ��жн� в����ль��� вать�� ��ни�ер�� или �ет�д�� InstancesOf (��т�рые �ыли ра����трены ранее�, �а�р�� select �ред��тавл�ет ��лее детальн�е у�равление �р�це���� и�влечени� инф�р�ации. Дл� �а�р��а ��ъе�т�в и���ль�ует�� �ледующий ��н�вн�й ф�р�ат ��ерат�ра select: select propertylist from class [where conditions] Ар�у�ент propertylist д�лжен �ыть ��и���� � �а��ты�и в �аче�тве ра�делителей, в ��т�р�� у�а�ывают�� интере�ующие ва� �в�й�тва ��ъе�та, или �и�в�л�� * дл� в��вращени� в�ех �в�й�тв ��ъе�та. Си�в�л * ��жн� и���ль��вать дл� ��льшин� �тва �ценарных �рил�жений. Е�ли ��наружит��, чт� �ет�д ExecQuery вы��лн�ет�� �лиш��� д�л��, ��жн� вве�ти ��и��� т�ль�� тех �в�й�тв ��ъе�та, ��т�ры�и вы интере�уете�ь, чт��ы ���ратить ��ъе� данных, ��т�рые нужн� вернуть и� удален� н��� ����ьютера. Ар�у�ент class �вл�ет�� �дни� и� �ла���в ��ъе�т�в в �р��тран�тве и�ен. На� �ри�ер, �дни� и� эле�ент�в, ���а�анных в та�л. 7 .2 . Н� вы не ��раничены в �в�е� вы��ре т�ль�� лишь �ла��а�и Win32_xxx и в�е�т� них ��жете вы�рать �дин и� �у� �ер�ла���в, и� ��т�рых �р�и�х�д�т эти �ла��ы. На�ри�ер, �у�ер�ла�� Device в�лю� чает в �е�� в�е �ла��ы у�тр�й�тв, �реди ��т�рых �ла��ы Modems, Keyboards и т. д . У�л�ви� where �вл�ют�� не����ательны�и и �ред�тавл�ют ����й �улев� вы� ражение. У�л�ви� where ��раничивают ��лучае�ый на��р т�ль�� те�и ��ъе�та�и,
WMI-коллекции и запросы 327 чьи �в�й�тва ���твет�твуют у�л�ви��, т� е�ть те�и ��ъе�та�и, дл� ��т�рых вы� ражение вычи�л�ет�� в True. При и���ль��вании �а�р���в в �ценарии выражение �а�р��а вв�дит�� в виде те��т�в�й �тр��и, ��эт��у �ледует уделить �����е вни�ание лю�ы� �авыч�а� внутри �а�р��а, чт��ы вве�ти их в ���твет�твии � �равила�и вы�ранн��� ва�и ��ы�а �ценариев. В V�S���p�, � �ри�еру, �ни д�лжны �ыть �р�ду�лир�ваны. Кр��е эт���, в �а�р��е ��жн� и���ль��вать �динарные �авыч�и. Дл� �ри�ера ра����три� не���ль�� ��ерат�р�в select: set disks = svcs.ExecQuery(_ "s elect * from Win32_LogicalDisk where Filesystem = ""NTFS """ ") set codes = svcs.ExecQuery(_ "s elect * from Win32_Codecs where Group = 'Video'") set dirs = svcs .ExecQuery(_ "s elect Name, LastModified from Win32_Directory") Нужн� та�же �р�ду�лир�вать в �в�их �а�р��ах лю�ые ��ратные �лэши (\�, �����ль�у WMI �читает их ��ециальны�и �и�в�ла�и. Эт� ��начает, чт� в JS���p� и в дру�их ��ы�ах �ценариев, ��т�рые та�же �читают ��ратный �лэш ��ециальны� �и�в�л��, не��х�ди�� дл� ��дир�вани� �тр��и �а�р��а вв�дить четыре ��ратных �лэша. WQL��а�р��ы ��жн� и���ль��вать не т�ль�� дл� ��лучени� ��и��а эле�ент�в, н� и дл� выделени� у�равл�е�ых эле�ент�в. На�ри�ер, WMI ��жн� и���ль��вать дл� �авершени� �ри�ладных �р��ра�� �� их и�ена�. Дл� �авершени� ра��ты, � �ри�еру, в�ех ���ий Бл��н�та ��жн� �а�у�тить �ледующий �ценарий: ' Файл примера script0703.vbs dim processes set processes = GetObject("winmgmts:").ExecQuery(_ "s elect * from Win32_Process where Name='notepad.exe' ") for each process in processes process.Terminate next SWbemObjectSet О�ъе�т SWbemObjectSet �вл�ет�� ��лле�цией ��ъе�т�в, в ��т�р�й ��держит�� не� ���ль�� эле�ент�в SWbemObject. О�ъе�т SWbemObjectSet ��жет �читать�� ��д��ие� лю��й и���ль�уе��й в �ценари�х �тандартн�й ��лле�ции ��ъе�т�в. В не� и�еют�� �в�й�тва Count и Item, ��т�ры�и ��жн� в����ль��вать�� дл� вы��ра �тдельных ��ъе�т�в, или же дл� ��анир�вани� ��лле�ции ��жн� в����ль��вать�� �р�цеду� р�й�ну�ерат�р��, та��й �а� ��ерат�р for each в V�S���p�. Заранее ��жет �ыть трудн� у�нать, �а� вы�рать т�т или ин�й эле�ент и� ��л� ле�ции. Св�й�тв� Item не в���рини�ает чи�л�вые инде��ы, ��эт��у �р����треть эле�енты � ����щью ��ерат�р�в ти�а collection.item(0), collection.item(1) и т. д . нев����жн� . К �ри�еру, �ри ра��те � ди��а�и инде���� �лужит �у�ва ди��
328 Глава 7. Инструментарий управления Windows �а. Н� дл� �н��их дру�их ти��в ��ъе�т�в �начение� инде��ации �лужит д�в�льн� �транный внутренний идентифи�аци�нный ��д W��dows. Дл� �у�у�� �дин�чных ��ъе�т�в, та�их �а� ��ъе�т Win32_ComputerSystem, ��� т�рый �ред�тавл�ет цели��� ве�ь ����ьютер, �уще�твует у�т��вша��� �ра�ти�а и���ль��вани� for each или дру�их ци�л�в�ну�ерат�р�в дл� ��анир�вани� ��ъе�� та���лле�ции и ��хранени� ���ии �ерв��� (и един�твенн���� найденн��� ��ъе�та. Эт� ��ще�рин�та� �хе�а, ��т�рую на� нужн� �афи��ир�вать. ШАБЛОН Для получения из коллекции отдельного WMI-объекта, чье полное путевое имя не известно за- ранее, следует воспользоваться циклом for each, чтобы извлечь объект из коллекции. Напри- мер, для получения первого (и единственного) экземпляра объекта Win32_OperatingSystem из коллекции Win32_OperatingSystem используются следующие операторы: set loc = CreateObject("WBemScripting.Locator") set svcs = loc.ConnectServer("JAVA ", "Root\CIMV2") set oss = svcs.ExecQuery("select * from Win32_OperatingSystem") После чего для извлечения объекта из коллекции используется цикл: for each item in oss ' исследование коллекции set os = item ' с охранение первого элемента и прекращение цикла exit for next Теперь объектом можно воспользоваться в остальной части сценария. Например: os.ShutDown() SWbemObject В ��нечн�� �чете, в�� �и�те�на� инф�р�аци�, в��вращае�а� WMI, �ред�тавлена ��ъе�т�� SwbemObject: эт� ли�� �дин�чный ��ъе�т, ли�� ��ъе�т, �ринадлежащий ��лле�ции. О�ъе�т SWbemObject и�еет �а��вый на��р �ет�д�в и �в�й�тв, �вл�ющий�� ��щи� дл� в�ех э��е��л�р�в. Эт� статические �ет�ды и �в�й�тва, на�ванные та� �� �ричине �в�е�� не�ре�енн��� �ри�ут�тви� в �ажд�� ��ъе�те SWbemObject. За� те� �ледуют д���лнительные �ет�ды и �в�й�тва, варьирующие�� в �ави�и���ти �т т���, �а��й �и�те�ный �����нент �ред�тавлен ��ъе�т��. Они на�ывают�� динамическими �в�й�тва�и и �ет�да�и, �����ль�у ���вл�ют�� т�ль�� в тех э�� �е��л�рах ��ъе�та, ��т�ры� �ни �ри�ущи. На�ри�ер, ��ъе�т SWbemObject, �ред� �тавл�ющий ��ъе�т Win32_CDROMDrive и�еет та�ие д���лнительные �в�й�тва, �а� Drive (ди��� и VolumeName (и�� т��а�. О�ъе�т SWbemObject, �ред�тавл�ющий ��ъе�т Win32_NetworkConnection, ��ладает �в�й�тва�и, �тн���щи�и�� � �етевы� ��д�лю� чени��, та�и�и �а� UserName (и�� ��ль��вател�� и RemotePath (�уть � удаленн��у ����ьютеру�. И в эт�� в�� �уть WMI! Каждый и� ��ъе�т�в, �еречи�ленных в та�л. 7 .2, и�еет не���ль�� дина�иче��их �в�й�тв и �ет�д�в, ���в�л�ющих и��лед�вать и и��енить в�е внутренние а��е�ты W��dows.
WMI-коллекции и запросы 329 Е�ли важные �ет�ды и �в�й�тва и�еют дина�иче��ую �рир�ду, �а� у�нать их и�ена и �а� их и���ль��вать в �в�их �ценари�х? Суще�твует вели��е �н�же�тв� ��ъе�т�в, и �аждый �� �в�и�и ���ут�твующи�и �в�й�тва�и и �ет�да�и, ��эт��у � не в ���т��нии �ри�ту�ить � их �еречи�лению ни в данн�й �ни�е, ни в �рил�же� ни�х � ней. Лучше �удет �р�читать интернет�д��у�ентацию или в����ль��вать�� �р��ра��ны� �ред�тв�� S���p�om����, ��т�р�е �удет ра����трен� в данн�й �лаве. Наи��лее ��ле�ные �татиче��ие (фи��ир�ванные� �в�й�тва и �ет�ды ��ъе�та SWbemObject �еречи�лены в ��рав�чн�� ��и��е 7.2 . СПРАВКА 7.2. СТАТИЧЕСКИЕ СВОЙСТВА И МЕТОДЫ ОБЪЕКТА SWBEMOBJECT (НЕПОЛНЫЙ ПЕРЕЧЕНЬ) СВОЙСТВА Methods_ В��вращает ��ъе�т���лле�цию SWbemMethodSet, ��т�рый ��и�ывает в�е дина�иче��ие �ет�ды эт��� ��ъе�та. О�ъе�т SWbemMethodSet ра���атривает�� в �ледующе� ра�деле. Path_ В��вращает ��и�ание ��лн��� �ути данн��� ��н�ретн��� ��ъе�та в ф�р�ате ��ни�ера. Эт�т �уть ��жн� и���ль��вать дл� ��лучени� эт��� ��ъе�та не��� �ред�твенн� � ����щью фун�ции GetObject(). Properties_ В��вращает ��лле�цию ��ъе�т�в SWbemPropertySet, ��т�ра� ��и�ывает в�е дина�иче��ие �в�й�тва ��ъе�та. О�ъе�т SWbemPropertySet ра���атривает�� в �ледующе� ра�деле. Св�й�тва Methods_ и Properties_ и���ль�уют�� не дл� у�равлени� W��dows, а дл� т���, чт��ы ���в�лить ва� ���давать �ценарии, д��у� �ентирующие в����жн��ти WMI���ъе�т�в. Эт�т в��р�� �удет ра���атривать�� в �ледующе� ра�деле. МЕТОДЫ Delete_ Удал�ет ��ъе�т и удал�ет в�ю �ред�тавл�е�ую и� инф�р�ацию W��dows, на�ри�ер �а�и�ь рее�тра или файл. Эт�т �ет�д ра�решен т�ль�� на тех ��ъе�тах, ��т�рые �ред�тавл�ют чт��ни�удь, чт� ��жет �ыть удален�. Instances_ В��вращает ��лле�цию SWbemObjectSet в�ех э��е��л�р�в �ла��а ��ъе�та, ��т�р��у �ринадлежит данный ��ъе�т. Put_ С�хран�ет лю�ые и��енени�, вне�енные в ��ъе�т на т�� ����ьютере, ��т�� рый эт�т ��ъе�т �ред�тавл�ет. WMI���ъе�ты �вл�ют�� ���ией инф�р�ации � W��dows. О�ъе�т ��жн� и��енить, и���ль�у� е�� �в�й�тва и �ет�ды, н� и�� �енени� не ��вли�ют на W��dows, ���а не �удет и���ль��ван �ет�д Put_ .
330 Глава 7. Инструментарий управления Windows ▼) Последний метод из справочного списка 7.2 играет очень важную роль. Если изменить зна- чение любого свойства WMI-объекта, для введения этого изменения в действие в той части Windows, которая представлена объектом, следует воспользоваться методом Put_. Те�ерь давайте �����три� на не��т�рые ��н�ретные �ри�енени� WMI в у�рав� л�е�ых �� �ети ����ьютерах. SWbemMethodSet и SWbemPropertySet Ка� у���инал��ь в �редыдуще� ра�деле, �аждый э��е��л�р SWbemObject �рира�� тает те�и �в�й�тва�и и ��ъе�та�и, ��т�рые �ри�ущи �ред�тавл�е��й и� ��ъе�тн�й ��дели CIM. У не�� та�же и�еют�� два �татиче��их �в�й�тва � и�ена�и Methods_ и Properties_, �ред��тавл�ющие ��и�ани� дина�иче��их д���лнений. Эти ��л� ле�ции ���ут �ыть �р���анир�ваны ��ычны� �������� дл� и�учени� т���, чт� и� �е�� �ред�тавл�ют дина�иче��ие �в�й�тва и �ет�ды. Ка� уже ранее у���инал��ь, эт� ���в�л�ет д��у�ентир�вать в����жн��ти WMI���ъе�та. Е�ли дл� ��лучени� ��и��а ��ъе�т�в, �ред�тавл�ющих ди��и или ��ераци�нные �и�те�ы, и���ль�уют� �� WMI��а�р��ы, т� эти ин�тру�енты ��жн� и���ль��вать дл� и�учени� �в�й�тв и �ет�д�в, и�еющих�� у этих ��ъе�т�в, а �ате� ��жн� �удет на�и�ать и���ль�у� ющий их �ценарий. О�ъе�т SWbemMethodSet �вл�ет�� ��лле�цией ��ъе�т�в SWbemMethod, �аждый и� ��т�рых ��и�ывает �дин и� дина�иче��их �ет�д�в и�х�дн��� ��ъе�та. К наи��лее �уще�твенны� ��жн� �тне�ти �ледующие �в�й�тва ��ъе�та SWbemMethod. Свойство Описание InParameters О�ъе�т SWbemObject, чь� ��лле�ци� Properties_ ��и�ывает вх�дные �ара�етры �ет�да Name И�� �ет�да OutParameters О�ъе�т SWbemObject, чь� ��лле�ци� Properties_ ��и�ывает вых�дные �ара�етры �ет�да С��ла�ите�ь, д�в�льн� �л�жн� ��н�ть, чт� �ажд�е и� �в�й�тв InParameters и OutParameters в��вращает еще �дин ��ъе�т SWbemObject, чье �в�й�тв� Properties_ ва� нужн� и��лед�вать дл� ��и��а ��и��а ар�у�ент�в. О�ъе�т SWbemPropertySet �вл�ет�� ��лле�цией ��ъе�т�в SEbemProperty, �аждый и� ��т�рых ��и�ывает �дн� и� дина�иче��их �в�й�тв и�х�дн��� ��ъе�та. К наи� ��лее �уще�твенны� ��жн� �тне�ти �ледующие �в�й�тва SWbemProperty. Свойство Описание IsArray Булев� �начение. Е�ли �н� и�еет �начение True, �в��анн�е � ни� �в�й�тв� �вл�ет�� �а��ив�� �начений Name И�� �в�й�тва Value Те�ущее �начение �в�й�тва
WMI-коллекции и запросы 331 Ра����три� �ри�ер в����жн��� и���ль��вани� этих �ред�тв. Следующий �це� нарий выв�дит ��и��� �ет�д�в и �в�й�тв ��ъе�та Win32_ComputerSystem: ' Файл примера listprops.vbs set obj = GetObject("winmgmts:{impersonationlevel=Impersonate}!" & _ "/ /./root/CIMV2:Win32_ComputerSystem ") wscript.echo obj.path_ & vbCRLF ' Список полных путей объектов wscript.echo "Свойства:" ' Вывод списка имен всех свойств for each prop in obj.Properties_ wscript.echo " ", prop.name next wscript.echo ' Вывод списка всех методов wscript.echo "Методы:" for each meth in obj.Methods_ arglist = "" ' по строение списка аргументов for each arg in meth.InParameters.Properties_ if arglist <> "" then arglist = arglist & ", " arglist = arglist & arg.Name next for each arg in meth.OutParameters.Properties_ if arg.Name <> "ReturnValue" then if arglist <> "" then arglist = arglist & ", " arglist = arglist & arg.Name end if next ' Игнорирование элемента ReturnValue; он представляет ' во звращаемое значение самого метода wscript.echo " ", meth.name & "(" & arglist & ")" next Выв�д эт��� �ценари� ��жет и�еть �ледующий вид: \\JAVA\ROOT\CIMV2:Win32_ComputerSystem Свойства: AdminPasswordStatus AutomaticResetBootOption AutomaticResetCapability BootOptionOnLimit BootOptionOnWatchDog BootROMSupported ... WakeUpType Workgroup Методы: SetPowerState(PowerState, Time) Rename(Name, Password, UserName) JoinDomainOrWorkgroup(AccountOU, FJoinOptions, Name, Password, UserName) UnjoinDomainOrWorkgroup(FUnjoinOptions, Password, UserName)
332 Глава 7. Инструментарий управления Windows П� эти� и�ена� ��жн� ��н�ть, чт� дина�иче��ие �в�й�тва и �ет�ды ��ъе�та Win32_ComputerSystem ���ут �ыть ��ле�ны� �ред�тв�� у�равлени� ра��чи�и �танци��и �� �ети. Н� дл� ��ределени� д��ту�ных ва� �в�й�тв и �ет�д�в ��ла�ать�� на и���ль� ��вание �ценари� не �т�ит. М�жн� �р�читать интернет�д��у�ентацию �� WMI, ра���атривае�ую в ��нце данн�й �лавы, или в����ль��вать�� �а�ечательны� �ред�тв�� �т M���oso�� ��д на�вание� S���p�om����. Scriptomatic Ка� вы уже ��н�ли, WMI — вещь не�р��та�, ��ы� �а�р���в, ��т�рый �ридет�� и�� ��ль��вать дл� ��лучени� д��ту�а � ��ределенны� ча�т�� W��dows, та�же ��утан тайн�й, а ��и��� ��ъе�т�в �р��т� ��р��ен. Слиш��� �н���е нужн� �а���инать. К �ча�тью, �а�тера и� M���oso�� �жалили�ь над на�и и ра�ра��тали �р��ра��н�е �ред�тв�, �����ающее ���давать WMI��ценарии, и���ль�у� �р��т�й интерфей� у�а�аний и щелч��в. Эт� �ред�тв� на�ывает�� S���p�om���� и е�� ��жн� �а�ру�ить � ве���айта www.microsoft.com. Вы��лните �ледующие дей�тви�, и���ль�у� учетную �а�и�ь ад�ини�трат�ра: 1. От�р�йте I������� �xp�o���, �айдите на ве���айт www.microsoft.com и на�ерите в ��ле ��и��а �тр��у download scriptomatic. Эт� ���в�лит найти �траницу �а� �ру��и �р��ра��ы S���p�om���� 2.0 . Щел�ните на �н���е Загрузить (Dow��o�d�, а �ате� щел�ните на �н���е Выполнить (Ru��, чт��ы �а�ру�ить и �а�у�тить �р�� �ра��у у�тан�в�и. 2. В диал���в�� ��не �а��ра��а��вывающе���� архива W��Z�p вы�ерите ���т��н� н�е �е�т� хранени� двух в�люченных в архив файл�в. Дл� эт��� в��лне ��д�й� дет �а��а ваше�� �р�фил�. На W��dows 7 и V�s�� эт� �а��а \users\ИмяВашейУ­ четнойЗаписи, а на XP — эт� \Documents and Settings\ ИмяВашейУчетнойЗаписи. Щел�ните на �н���е Unzip, �ате� на �н���е OK и на �н���е Close. 3. Щел�ните �рав�й �н����й на �в�е� Ра��че� �т�ле и вы�ерите �ун�ты ��н� те��тн��� �еню Создать (N�w�, Ярлык (Sho���u��. 4. Щел�ните на �н���е Обзор (��ows��, найдите �а��у, у�а�анную �ри вы��лне� нии �ун�та 1, вы�ерите файл ScriptomaticV2.hta и щел�ните на �н���е OK, чт��ы �а�рыть диал���в�е ��н� Обзор файлов и папок (��ows��. 5. Щел�ните на �н���е Далее (N�x��. 6. И��ените и�� �рлы�а на Scriptomatic и щел�ните на �н���е Готово (F���sh�. 7. Е�ли и���ль�ует�� W��dows XP, в�е ��т�в� � ра��те. А е�ли и���ль�ует�� W��dows 7 или V�s��, щел�ните �рав�й �н����й на н�в�� �рлы�е и вы�ерите �ун�т Свойства (P�op�����s�. На в�лад�е Ярлык (Sho���u�� щел�ните на �н���е Дополнительно (Adv����d� и у�тан�вите флаж�� Запуск от имени администратора (Ru� As Adm���s����o��. Щел�ните на �н���е OK, а �ате� еще ра� щел�ните на �н���е OK.
Scriptomatic 333 Дл� �а�у��а �р��ра��ы S���p�om����, ���а�анн�й на ри�. 7.3, дважды щел�ните на н�в�� �рлы�е. Ка� видите, ��жн� вы�рать лю��й и� четырех ��ы��в �ценари� ев. Кн���а Run �а�у��ает уче�ный �ценарий и ���а�ывает ре�ультаты в лю��� и� ��ти ф�р�ат�в выв�да. В ф�р�ате ���андн�й �тр��и, Command Prompt, ре�ультаты ра��ты ��ерат�р�в WScript.Echo �ценари� ���а�ывают�� в ��н��льн�� ��не. При вы��ре дру�их вариант�в ре�ультаты ��хран�ют�� в файле, ���твет�твующи� ��ра��� �ереф�р�атируют�� и ���а�ывают�� в Бл��н�те (No��p�d�, в I������� �xp�o��� или в �x���. Я ��н�л, чт� �р�ще в�е�� ра��тать � вер�ией ��ычн��� те��та (p���� ��x��. Рис. 7 .3 . Средство Scriptomatic создает сценарии, показывающие, как просматривать все свойства WMI-объектов С� �ред�тв�� S���p�om���� ���тавл�ет�� д�в�льн� �а�авный, н� не���ль�� де��р�ани��ванный файл read_me .doc. Чт��ы е�� �т�рыть, ��тре�ует�� M���oso�� Wo�d или �в���дн� ра��р��тран�е��е �ред�тв� M���oso�� Wo�d V��w��. М�жн�, ��нечн�, �р�читать эт�т файл, н� лучше, наверн�е, �удет �р��т� ��и�рать � �р�� �ра���й. Вы�ирайте ра�ные ��ъе�ты и щел�айте на �н���е Run, чт��ы �����треть, �а�ие �в�й�тва �удут ���а�аны. Лю�ые �р�и�веденные эти� �ред�тв�� уче�ные �ценарии ���ут �ыть ��хранены и и���ль��ваны в �аче�тве �т�равных т�че� дл� ваших ����твенных �ценариев.
334 Глава 7. Инструментарий управления Windows ▼▼ Программа Scriptomatic создает сценарии, которые только лишь выводят свойства объекта. Если модифицировать сценарий, чтобы он изменял свойства объекта, нужно не забыть после внесения изменений воспользоваться методом Put_ этого объекта, чтобы сохранить изменения; в противном случае сценарий не приведет ни к какому эффекту. ▼) Программа Scriptomatic показывает свойства каждого объекта, но она не показывает, как ис- пользовать какие-либо методы объекта. Чтобы это узнать, нужно прочитать интернет-справоч- ник по WMI, рассматриваемый в последнем разделе данной главы. Примеры WMI Ка� видите, WMI на�н��� �р�ще и���ль��вать, че� ��и�ывать. В� в�ей ��тальн�й ча�ти �лавы ���а�ывают�� не���ль�� �ценариев, и���ль�ующих WMI дл� �т�ле� живани� ���т��ни� �дн��� или не���ль�их ����ьютер�в и у�равлени� и�и. Уче�ные �ценарии в данн�� ра�деле на�и�аны дл� и���ль��вани� ��д�р�� �ра��ы, ��ра�атывающей �аждый ����ьютер. Эта ��д�р��ра��а вы�ывает�� дл� �ажд��� ����ьютера, � ��т�ры� ра��тает �ценарий; ��и��� ����ьютер�в ��жн� ра�шир�ть, �ри����а�лива� �ценарий � вашей ����твенн�й �ети, или же ��жн� �а�тавить �ценарий ра��тать � ����ьютера�и, у�а�анны�и в ���андн�й �тр��е, �а�енив ��и��� вы��в�в ��д�р��ра��ы, ��д��ный эт��у: process "JAVA" process "BALI" process "SUMATRA" �ледующи�и ��ерат�ра�и: if WScript.Arguments.Count = 0 then WScript.echo "Порядок использования: <scriptname> computername ... " WScript.quit end if for each arg in WScript.Arguments process arg next В�е�т� <scriptname> в� вт�р�й �тр��е нужн� ���тавить и�� �в�е�� �ценари�. Эти ��ерат�ры выв�д�т инф�р�ацию � ��р�д�е и���ль��вани� �ценари� в ���анд� н�й �тр��е, е�ли в эт�й �тр��е не у�а�аны ����ьютеры. Зате� �ценарий �а�у��ает�� � ����щью ���андн�й �тр��и �ледующе�� вида: script java bali sumatra Сбор системной информации Сценарии WMI ���ут и�вле�ать инф�р�ацию � ваших ����ьютерных �и�те�ах � целью д��у�ентир�вани�. Следующий �ценарий ���ирает инф�р�ацию � �етевых ада�терах �т �ажд��� у�а�анн��� ����ьютера: ' Файл примера script0704.vbs process "JAVA" process "BALI" process "SUMATRA"
Примеры WMI 335 sub process (name) wscript.echo name & ":" ' получение коллекции сетевых адаптеров set adapters = GetObject("winmgmts:{impersonationlevel=impersonate}!" & _ " //" & name & "/root/CIMV2:Win32_NetworkAdapterConfiguration") ' вк люч ени е в сп исо к и нформации о каждом адаптере for each card in adapters.Instances_ ' в ывод данных о каждом адаптере if not isnull(card.IPAddress) then wscript.echo " ", card.Caption for each addr in card.IPAddress ' в ывод каждого IP-адреса wscript.echo " IP-адрес ", addr next for each addr in card.DefaultIPGateway ' вывод каждого шлюза wscript.echo " Шлюз ", addr next wscript.echo " MAC-адрес", card.MACAddress wscript.echo end if next end sub Управление принтерами Си�те�а WMI ��жет �р�делать ве�ь�а ��ле�ную ра��ту �� у�тан�в�е и на�тр�й�е л��альных и �етевых �ринтер�в. Интере�н� �т�етить, чт� W��dows ���тавл�ет�� � не���ль�и�и V�S���p���ценари��и, и���ль�ующи�и WMI дл� у�равлени� �ринтера�и, ��эт��у � не �тану �ани�ать �е�т�, ���а�ыва� их в данн�й �ни�е. П�ищите �ледующие файлы в �а��е \windows\system32 в W��dows XP или в �а��е \windows\system32\Printing_Admin_Scripts\xxxx в W��dows 7 и V�s��, �де xxxx �вл�ет�� идентифи�ат�р�� ваше�� наци�нальн��� ��ы�а. Имя файла Описание prncnfg.vbs У�равление ��нфи�урацией �ринтера prndrvr.vbs У�равление драйвера�и �ринтера prnjobs.vbs Выв�д �аданий �ринтера и у�равление и�и prnmngr.vbs У�тан�в�а и удаление л��альных и �етевых �ринтер�в prnport.vbs Пр����тр и и��енение ��рт�в �ринтера prnqctl.vbs Ра��ечат�а те�т�в�й �траницы Х�т� �� �равнению � �ред�тавленны�и �де�ь �ри�ера�и эти �ценарии �лиш� ��� �н����л�вны, в них де��н�трируют�� �н��ие а��е�ты д��р�тных «��ле�ных» �ценариев: и���ль��вание �лючей ���андн�й �тр��и, ��др��н�е ��наружение и ��и�ание �ши��� и �ра�тиче��ие �рие�ы �ри�енени� WMI в у�равлении �ринтера�и.
336 Глава 7. Инструментарий управления Windows Отслеживание пакетов обновлений Windows и критических обновлений О�ъе�т Win32_QuickFixEngineering �ред��тавл�ет инф�р�ацию � �ритиче��их ��н�влени�х, у�тан�вленных на ����ьютере. Критиче��ие ��н�влени� �ред�� �тавл�ют�� �луж��й ��н�влений W��dows Upd���. В ��льших �р�ани�аци�х в��� ��жн��ть авт��атиче����� ��н�влени� W��dows ��жет �ревратить�� в ��ш�ар не��в�е�ти���ти и не���ла��ванных ��н�влений. WMI ��жн� и���ль��вать дл� �т�леживани� ��н�влений, у�тан�вленных на �аданн�� ����ьютере. У ��ъе�та Win32_QuickFixEngineering и�еют�� �ледующие �в�й�тва. Caption InstalledBy CSName InstalledOn Description Name FixComments ServicePackInEffect HotFixID Status InstallDate Следующий �ценарий ��анирует ����ьютеры �� ��и��у и ����щает � �ритиче� ��их ��н�влени�х, у�тан�вленных на �ажд�� и� них. Эт�т �ценарий та�же ���а� �ывает, �а� ��жн� ��ределить �ши��и в ��д�лючении � удаленн��у ����ьютеру. Е�ли �а��й�ни�удь и� удаленных ����ьютер�в не в�ту�ает в ��трудниче�тв�, эт�т �ценарий в�е�т� �ре�ращени� ра��ты выв�дит ����щение �� �ши��е: ' Файл примера script0705.vbs set loc = CreateObject("WBemScripting.SWbemLocator") process "BALI" process "JAVA" ... sub process (name) wscript.echo name & " - --- --- --- --- --- --- --- --- --- --- --- --- --- " on error resume next ' продолжение выполнения при ошибке set qfe = GetObject("winmgmts:{impersonationlevel=impersonate}!" &_ " //" & name & "/root/CIMV2:Win32_QuickFixEngineering") errno = err .number ' со хранение данных при сбое GetObject msg = err .description on error goto 0 ' во звращение к обычной обработке ошибок if errno <> 0 then ' со общение об ошибке wscript.echo "Подключение к ", name, "не удалось: ", msg exit sub end if ' выв од списка информации по каждому установленному элементу for each hotfix in qfe.Instances_ wscript.echo " ", hotfix.hotfixid, hotfix.description next end sub
Примеры WMI 337 В ��ей �ети ра��ечат�а вы�л�дит �ледующи� ��ра���: BALI: Q147222 Q293826 Windows 2000 Hotfix (Pre-SP3) [See Q293826 for more information] Q299553 Windows 2000 Hotfix (Pre-SP3) [See Q299553 for more information] Q300972 Windows 2000 Hotfix (Pre-SP3) [See Q300972 for more information] JAVA: Q147222 Q307869 Windows XP Hotfix (SP1) [See Q307869 for more information] Q308210 Windows XP Hotfix (SP1) [See Q308210 for more information] Q309521 Windows XP Hotfix (SP1) [See Q309521 for more information] . . . Инф�р�аци� ��ъе�та Win32_QuickFixEngineering д��ту�на на W��dows 2000 и ��лее ���дних вер�и�х, н� нед��ту�на на W��dows 9x или NT. Управление службами и задачами WMI �ред��тавл�ет �ла�� Win32_Service, ���в�л�ющий у�равл�ть �и�те�ны�и �луж�а�и. Каждый э��е��л�р ��ъе�та Win32_Service �ред�тавл�ет �дну у�тан�в� ленную �луж�у и ���а�ывает ее те�ущее ра��чее ���т��ние и у�тан�в�у режи�а �а�у��а. В д��у�ентации �� WMI �еречи�лены в�е �в�й�тва и �ет�ды ��ъе�та. Не��т�рые наи��лее интере�ные и� них �ред�тавлены в ��рав�е 7.3 . СПРАВКА 7.3. НЕПОЛНЫЙ СПИСОК СВОЙСТВ И МЕТОДОВ ОБЪЕКТА WIN32_SERVICE СВОЙСТВА DesktopInteract Булев� �начение. И�еет �начение True, е�ли �луж�а ��жет в�аи��дей�тв�� вать � Ра��чи� �т�л��. (Т�ль�� чтение.� (К�тати, на W��dows 7 и V�s�� Ра��чий �т�л, и���ль�уе�ый �луж�а�и, не види� дл� ��ль��вателей.� DisplayName К�р�т��е на�вание �луж�ы. (Т�ль�� чтение.� Name Длинн�е ��и�ательн�е на�вание. (Т�ль�� чтение.� PathName П�лн��тью у�а�анный �уть и и�� и���лн�е���� файла, реали�ующе�� �луж�у. (Т�ль�� чтение.� Started Булев� �начение. И�еет �начение True, е�ли ди��етчер �луж�ы �ытает�� ее �а�у�тить. (Т�ль�� чтение.� StartMode Режи� �а�у��а дл� данн�й �луж�ы. М�жет и�еть �дн� и� �ледующих �тр�� ��вых �начений: "Boot", "System", "Auto", "Manual" или "Disabled". (Т�ль�� чтение.�
338 Глава 7. Инструментарий управления Windows StartName И�� учетн�й �а�и�и, ��д ��т�р�й ра��тает �луж�а. Е�ли эт� �начение равн� NULL, �луж�а ра��тает ��д учетн�й �а�и�ью LocalSystem. (Т�ль�� чтение.� State Те�ущее ра��чее ���т��ние �луж�ы. М�жет и�еть �дн� и� �ледующих �тр���вых �начений: "Stopped", "Start Pending", "Stop Pending", "Running", "Continue Pending", "Pause Pending", "Paused" или "Unknown". (Т�ль�� чтение.� Перед �р�вер��й �начений �в�й�тва State или Status лучше �удет вы�вать �ет�д InterrogateService. Status Те�ущий �тату� �луж�ы. М�жет и�еть �дн� и� �ледующих �тр���вых �на� чений: "OK", "Error", "Degraded", "Unknown", "Starting", "Stopping", "Service" или "Pred Fail". (Т�ль�� чтение.� МЕТОДЫ StartService За�у��ает �луж�у. StopService Вы�лючает �луж�у. PauseService При��танавливает �луж�у. ContinueService В����н�вл�ет ра��ту �луж�ы ���ле �ри��тан�в�и. InterrogateService Пр��ит �луж�у ��н�вить �начени� ее �в�й�тв state и status. ChangeStartMode(newmode) У�танавливает н�в�е �начение режи�а �а�у��а �луж�ы. Ар�у�ент newmode д�лжен �ыть �дни� и� �ледующих �тр���вых �начений: "Boot", "System", "Automatic", "Manual" или "Disabled". О�ъе�т Win32_Service ���в�л�ет ва� ���дать �ценарий дл� �т�леживани� �луж� на удаленн�� ����ьютере и дл� у�равлени� и�и; эт� ����енн� ��жет �ри� ��дить�� �ри ра��те � �ервера�и, на ��т�рых �а�ущены IIS, �x�h��g� или дру�ие важные �луж�ы. Х�т� в W��dows 7, V�s�� и в �а�ых ���ледних вер�и�х W��dows S��v�� в�лючены на�тр�ечные фун�ции, ���в�л�ющие W��dows авт��атиче��и �ере�а�у��ать те �луж�ы, ��т�рые �ере�тали реа�ир�вать на ���ыти�, ��дх�д, ��� н�ванный на и���ль��вании �ценариев, ���в�л�ет ��четать �т�леживание �луж� � ���тавление� �тчет�в и их �а�и�ью.
Дополнительные источники информации 339 В �ледующе� �ри�ере ���а�ан�, �а� � ����щью �ценари� ��жн� �т�леживать �лючевые �луж�ы �ра�у на не���ль�их ����ьютерах: ' Файл примера script0706.vbs check "BALI", " W3Svc" check "JAVA", " W3Svc" check "BALI", "DNS" check "SUMATRA", "DNS " sub check (server, servicename) set service = GetObject("winmgmts:{impersonationlevel=Impersonate}!" & _ "// " & server & "/root/CIMV2:Win32_Service.Name='" & servicename & "'") state = service.state ' получение копии состояния и выявление аварийной ситуации if state <> "Running" then state = ucase(state) & " <<<" wscript.echo server, servicename, state end sub Инф�р�аци�, выв�ди�а� эти� �ценарие�, и�еет �ри�ерн� �ледующий вид: BALI W3Svc Running JAVA W3Svc STOPPED <<< BALI DNS Running SUMATRA DNS Running Дополнительные источники информации Ка� утверждал��ь ранее, в эт�й �лаве дан� �а��е ��верхн��тн�е введение в WMI. Са� � �начала ���читал те�у WMI �лиш��� трудн�й дл� у�в�ени�, и �владение эт�й те��й �ан�л� д�в�льн� �н��� вре�ени. Я надею�ь, чт� данн�е введение да�т ва� в��лне д��тат�чные �тарт�вые ���иции дл� т���, чт��ы �рин�ть�� �а д��у�ен� тацию M���oso�� и дру�ие и�т�чни�и. Е�ли ва� ��нравил��ь в�е �де�ь увиденн�е, и�евшее �тн�шение � WMI, у ва� не�ре�енн� д�лжн� ���вить�� желание ���нуть ���лу�же. Дл� ��лучени� д���лнительн�й инф�р�ации �� WMI �айдите на ве���айт msdn. microsoft.com. Вы�ерите та� в�лад�у Library и в ра�деле MSDN library вы�ерите ��дра�� делы Win32 and COM Development, Administration and Management, Windows Management Instrumentation, WMI Reference. Наи��лее ��ле�ны�и �удут ра�делы WMI Classes, Scripting API for WMI и WMI Command Line Tools. Я �читаю, чт� �ре�ра�ны� и�т�чни��� инф�р�ации, уче�ных �ценариев и ди�� �у��ий �вл�ет�� н�в��тна� �ру��а M���oso��, ���в�щенна� WMI (microsoft.public. win32.programmer.wmi�. Е�ли �адать та� в��лне ре��нный в��р��, т� �твет на не��, в����жн�, �удет ��лучен в течение не���ль�их ча��в. Е�ли ваш интернет��р�вай� дер не дает вых�да на данную н�в��тную �ру��у, вы ��жете ��д�и�ать�� на ��лу� чение н�в��тей на ве���айте news.microsoft.com. В Ou��ook �xp��ss ��жн� �р��т�
340 Глава 7. Инструментарий управления Windows д��авить еще �дну учетную �а�и�ь н�в��тей, нацеленную на данный �ервер, чт��ы ��лучить д��ту� � эт�й и � ваши� ��ычны� н�в��тны� �ру��а�. В Интернете вы найдете �н�же�тв� ��ле�ных WMI��ценариев или, �� �райней �ере, ��ле�ных фра��ент�в �ценариев. П�ищите инф�р�ацию в Goog�� �� �люче� в��у �л�ву "winmgmts", и вы ��й�ете, чт� � и�ел в виду. В���ще�т�, не���ль�� �ценариев уже ��жн� найти в у�р��ных у��л�ах ваше�� ����твенн��� ����ьютера. Е�ли вы в�е еще и���ль�уете W��dows XP, ��ищите в �атал��е \windows\system32 файлы, чьи и�ена �а�анчивают�� ра�ширение� .vbs. В�е �ни, �а и��лючение� pubprn.vbs, и���ль�уют WMI. Эт� д�в�льн� длинные и ра�вернутые �р��ра��ы, н� �ни ���а�ывают ва� р�д �ра�тиче��их �ри�енений W��dows S���p� Hos� и WMI.
Active Directory Scripting Interface В эт�й �лаве вы у�наете, чт� ADSI ��жет у�равл�ть ра��чи�и �ру��а�и, ���� �ьютера�и, NT�д��ена�и, д��ена�и A���v� D�����o�y, �ет��и Nov���, а та�же IIS и �x�h��g�. y y Х�т� в ра��ах �дн�й �лавы нев����жн� дать ��лный анали� ADSI, эта �лава в�е же дает в����жн��ть, �а� ��в�рит��, �р��унуть н��у в дверь. y y Дл� и�учени� ADSI ����ательн� нужн� у�в�ить �атериал �лавы 3 «С��дание �ценариев и ра��та � ��ъе�та�и» и �лавы 4 «Д��ту� � файла� и рее�тру». y y Дл� ���дани� �ценариев, у�равл�ющих A���v� D�����o�y, тре�ует�� тверд�е у�в�ение ��н�в �инта��и�а LDAP. Управление каталогом пользователя Одна и� �а�ых ра��р��траненных �адач, � ��т�р�й �тал�ивают�� �етевые ад�ини� �трат�ры, — эт� ���луживание учетных �а�и�ей ��ль��вателей. Н�в��у ра��тни�у �ра�у же нужн� �ред��тавить учетную �а�и�ь, а учетна� �а�и�ь ув�ливше���� ра��тни�а �� ����ражени�� �е���а�н��ти �ра�у же д�лжна �тать нед��ту�н�й. П� �ере и��енени� ур�вн� �твет�твенн��ти ра��тни��в �ен�ют�� и их д��ту� � ра�� личны� �ащищенны� �етевы� ре�ур�а�. В ��льш�й ����ании, �де люди ежедневн� нани�ают��, ув�льн�ют��, �р�в�жают�� на �ен�ию, ��в���ждают�� �т д�лжн��тей, �ерев�д�т�� на дру�ую ра��ту и на�начают�� на н�вые д�лжн��ти, �инхр�нн�е ��ддержание д�лжн��� ���т��ни� их учетных �а�и�ей тре�ует ��р��н��� ��ъе�а ра��ты, и а���лютн� нереальн� тратить �� не���ль�у �инут, щел�а� на �н���ах диал���вых ���н, чт��ы вне�ти �ажд�е и��енение. Вы, наверн�е, уже д��адали�ь, чт� решение эт��� не�р��т��� �а��ла �а�лючает�� в ���дании �ценариев. О�ъе�ты A���v� D�����o�y S���p���g I�������� (ADSI� �ред�� �тавл�ют д��ту� и� �ценариев ��чти �� в�е� а��е�та� учетн�й �а�и�и W��dows и инфра�тру�туры �е���а�н��ти. С ����щью �ценариев ��жн� ��уще�твл�ть д��авлени�, удалени� и и��енени� учетных �а�и�ей, �ар�лей, �ред��чтений �ри вх�де в �и�те�у и т. д ., а та�же у�равл�ть та�и�и �етевы�и ре�ур�а�и, �а� ��щие �а��и и �ринтеры. 8
342 Глава 8. Active Directory Scripting Interface ▼) Название ADSI звучит так, будто этот интерфейс может использоваться только для управле- ния системой безопасности Active Directory в больших корпоративных сетях, но пусть это вас не смущает. ADSI не требует, чтобы ваша сеть использовала Active Directory. Этот интерфейс может управлять учетными записями пользователей, общими сетевыми ресурсами и службами в любой сети и даже на отдельно взятом компьютере. Использование Active Directory Scripting Interface ADSI ����енн� х�р�ш� ��дх�дит дл� ра��ты � A���v� D�����o�y, ��р��ративн�й �и�те��й у�равлени�, ���тавл�е��й в�е�те � вер�и��и W��dows S��v��. Н� ADSI ра��тает даже �е� A���v� D�����o�y и ��жет �ред��тавить д��ту� � �атал��а� ��ль� ��вател� в д��енных �ет�х и �ет�х ра��чих �ру��, не ��н�ванных на и���ль��вании A���v� D�����o�y. С ����щью ADSI ��жн� у�равл�ть, �а� �ини�у�: y y A���v� D�����o�y на �и�те�ах W��dows S��v��; y y д��ена�и в �тиле W��dows NT; y y �луж�а�и Nov��� N��W��� D�����o�y S��v���s (NDS�; y y �ервера�и Nov���, ра��тающи�и в режи�е ���d��y (х�т�, � ��д��реваю, чт� в наши дни �ни ���адают�� �райне ред���; y y M���oso�� �x�h��g� S��v��; y y M���oso�� I������� I��o�m���o� S��v�� (IIS�; y y лю��й �и�те��й �атал���в, ��н�ванн�й на LDAP. У�р�щенный �р�т���л д�� �ту�а � �атал��а� — L�gh�w��gh� D�����o�y A���ss P�o�o�o� (LDAP�, эт� �р�� �ышленный �тандарт �етев��� д��ту�а � ��ль��вателю и � �етевы� ре�ур�а� �а� данных; y y ��щи�и �ринтера�и и �а��а�и на �тдельных ����ьютерах; y y и���ль�уе�ы�и ��щи�и файла�и; y y л��альны�и ��ль��вател��и и �ру��а�и; y y ��нфи�ураци��и �луж� W��dows. Нетрудн� д��адать��, чт�, ��ериру� та�и� ��личе�тв�� �етевых �а� данных, ADSI и�еет ��тенциал «инте�рир�вани�» у�равлени� ��льш�й �етер��енн�й �етью. В�лючение �x�h��g�, IIS и дру�их ти��в �ервер�в ��начает, чт� вы ��жете �дн�вре�енн� авт��ати�ир�вать ���луживание эле�тр�нн�й ��чты и учетных �а�и�ей ве���айта. Эт� делает ADSI еще ��лее ��ле�ны� ин�тру�ент�� дл� ��р� ��ративных ад�ини�трат�р�в и ���тавщи��в у�лу�. ADSI ��н�ван на на��ре д��ту�ных �ценари�� ��ъе�т�в, �ред�тавл�ющих ��н�вные данные � ��ль��вателе и �ети. В не���ль�их �ледующих ра�делах �удут ра����трены наи��лее важные и� этих ��ъе�т�в. Охватить ве�ь ADSI в данн�й �ни� �е �р��т� нев����жн�, н� ��жн� ���ту�ить т�чн� та� же, �а� � ин�тру�ентарие� W��dows M���g�m��� в �лаве 7, и �ред��тавить ва� дл� начала ра��т�������ный ��д. А в ��нце данн�й �лавы �удут �еречи�лены и�т�чни�и д���лнительн�й ин� ф�р�ации.
Управление каталогом пользователя 343 Ограничения, накладываемые на ADSI при работе с Windows Script Host Наверн�е, �ледует ра���а�ать � �ра�тиче���й ��лн�ценн��ти ADSI �ри ра��те � W��dows S���p� Hos�. В����жн�, очень �ру�ные �р�ани�ации �ах�т�т �ри��ре�ти или ра�ра��тать ��р��ративную �и�те�у у�равлени�, в ��т�р�й и���ль�ует�� не V�S���p�, а �а��й�ни�удь ��ы� вы������ ур�вн�, и�х�д� и� ����ражений �р�и�в�� дительн��ти и ��ль��ватель����� интерфей�а. При ра��те � де��т�а�и и ��тн��и ты��ч �атал���в та�и� ����ани�� �ах�чет�� в����ль��вать�� �еред�вы�и техн�� л��и��и �р��ра��ир�вани�, чт��ы ���ратить ��ъе� данных, ��т�рый д�лжен �ыть �ередан �� �ети и у�а��ван в ��ъе�ты. Вер��тнее в�е��, та�ие �и�те�ы д�лжны �ыть ��ъединены � ����щью �а��й� ни�удь �и�те�ы у�равлени� �а�а�и данных. Н� в�е эт� вых�дит �а ра��и данн�й �ни�и. Нев����жн� та�же �хватить �де�ь и та�ую е��ую те�у, �а� и���ль��вание ADSI в ASP��ценари�х I������� I��o�m���o� S��v��. ASP ���в�л�ет ра�ра�атывать эффе�тивный ве��интерфей� дл� у�равлени� ��ль��вател��и вашей �р�ани�ации. Н� ���ть�та�и, в�е эт� не вх�дит в �ру� ��вещае�ых �де�ь те�. В та��� �лучае, ��жн� ли ����режне�у утверждать � ��ль�е ADSI, WSH и дан� н�й �ни�и? К�нечн� да. С ����щью �ценариев ���андн�й �тр��и ��лее �ру�ные �р�ани�ации ���ут ра�ра��тать и �р�те�тир�вать ��нце�цию дл� и���ль��вани� в ��льших �рил�жени�х и ASP��ценари�х. Не��льшие или �редние �� величине �р�ани�ации не ���ут э��н��иче��и ��равдать �ри��ретение или ра�ра��т�у �н����илли�нных ��р��ративных �и�те� у�равлени�, ��эт��у дл� ��льшин�тва и� на� ���дание WSH��ценариев �вл�ет�� не�л�хи� �р��ежут�чны� решение�. И на��нец, ���дание �ценари� дл� вы��лнени� �адачи у�равлени� ��жет не т�ль�� ��ле�чить ра��ту, н� и ���лужить в �аче�тве важн�й д��у�ентации. На� �ри�ер, ва� ��жет ��над��ить�� ���дать �ценарий дл� д��авлени� н�в��� ��ль� ��вател� �� в�е�и ���ут�твующи�и атри�ута�и: в�лючени� е�� в �ру��у, д��у��а � ��ще�у ��р��ративн��у �атал��у и ��нфи�урации �р�фил� �� у��лчанию. Даже дл� решени� т�ль�� �дн�й эт�й �адачи уже �т�ит ���давать �ценарий. ▼) Большинство ADSI-сценариев работают только при запуске из учетной записи с привилегия- ми администратора на компьютере или домене, к которому подключен ADSI. Изучая данную главу, следует иметь в виду, что ADSI-сценарии нужно запускать из учетной записи с правами администратора. Сценарии, обращающиеся не к тому компьютеру, на котором они запущены, можно также соз- давать с помощью объекта подключения OpenDSObject, позволяющего указать имя и пароль учетной записи с правами администратора. Более того, контроль учетных записей пользователей — User Account Control (UAC), может за- труднить удаленное управление компьютерами, работающими под Windows Vista или Windows 7 и не принадлежащими доменной сети. Для управления своим собственным компьютером под Windows 7 и Vista нужно большинство ADSI-сценариев запускать из окна командной строки, открытого с расширенными привилегиями. Дополнительная информация о вопросах безопасности, связанных с UAC, изложена в главе 7 в разделе «Удаленное управление Windows».
344 Глава 8. Active Directory Scripting Interface Концепции ADSI ADSI���ъе�ты �тражают �тру�туру �ред�тавл�е��й инф�р�ации � �атал��ах ��ль��вател�. M���oso�� A���v� D�����o�y и Nov��� NDS �ыли ра�ра��таны � и���ль� ��вание� «��ъе�тн���риентир�ванн���» ��дх�да, ��эт��у ��ъе�ты и�еют в��лне е�те�твенн�е �тр���е ���твет�твие �тру�тура� �атал��а. На�ри�ер, в д��ене A���v� D�����o�y ��жет «��держать��» �н�же�тв� ��д�ру��, �ред�тавл�ющих ��р��ративные ��дра�делени� или �е�та их нах�ждени�; �ни, в �в�ю �чередь, ���ут делить�� на ��д�ру��ы или де�арта�енты, в����жн�, на �н��их ур�вн�х. И на��нец, �а� ���а�ан� на ри�. � .1, дел� д�х�дит д� �тдельных ��ль��вателей. Рис. 8 .1. Active Directory или NDS могут представлять структуру организации, которая, в конечном счете, наполнена пользователями. ADSI -объекты в точности копируют структуру каталога На эт�� ри�ун�е ���твет�твующий ADSI���ъе�т и���ражен дл� �ред�тавлени� д��ена, в ��т�р�� ��держит�� ��лле�ци� ��дчиненных ��ъе�т�в, �ред�тавл�ющих �тделы, де�арта�енты и т. д ., �авершающа��� ��лле�цией, ��держащей т�ль�� те ��ъе�ты, ��т�рые �ред�тавл�ют ��ль��вателей и (или� ����ьютеры. Эти�и ADSI� ��ъе�та�и ��жн� у�равл�ть, д���лн��, �ереи�ен�выва�, удал�� или �ере�траива� �ред�тавл�е�ые и�и эле�енты �атал���в, и���ль�у� та�ие же техн�л��ии на�и�а� ни� �ценариев, ��т�рые �ыли ���а�аны в не���ль�их ���ледних �лавах. Ка� уже ранее у���инал��ь, х�т� ADSI �ред��тавл�ет ��ъе�ты дл� �ред�тав� лени� A���v� D�����o�y, �н не тре�ует и���ль��вани� в вашей �ети A���v� D�����o�y. ADSI ��жет у�равл�ть ����ьютера�и, учетны�и �а�и���и ��ль��вателей и та� далее и �е� не��. В �аче�тве введени� в ADSI, в та�л. �.1 �еречи�лены наи��лее важные ADSI� ��ъе�ты, �ред�тавл�ющие данные �атал���в и а�тивные �етевые ре�ур�ы. Ва�, ���рее в�е��, �удут ���адать�� и дру�ие ��ъе�ты, и���ль�уе�ые дл� хране� ни� д���лнительн�й инф�р�ации, на�ри�ер ��и���в ��лн���чий, �ред��тавлен� ных т��у или ин��у ��ль��вателю. Ча�ть и� них �удет ��и�ана в данн�й �лаве чуть ���же, а �� ��тальных ��жн� �удет у�нать �� �ере т���, �а� �ни �удут ���адать�� на �ра�ти�е. Начина� ра��ирать�� � ��н�ретны� �атал���� или � �адачей �етев��� у�равлени�, ��ратите вни�ание на та�л. � .1 и �����трите, �а��й ��ъе�т или ��ъ�
Концепции ADSI 345 е�ты �ред�тавл�ют интере�ующую ва� инф�р�ацию, а �ате� и��ледуйте M���oso��� д��у�ентацию �� эт��у ��ъе�ту. Т��да вы ��лучите в�е не��х�ди�ые �ведени�. Таблица 8.1. Описание объектов ADSI Объект Назначение IADs Эт� �а��вый ADSI���ъе�т. Е�� �ет�ды и �в�й�тва �вл�ют�� ��щи�и дл� в�ех ADSI���ъе�т�в IADsCollection Ба��вый ��ъе�т дл� ADSI���лле�ций. Пра�тиче��и ра��тать � эти� ��ъе�т�� в е�� �р��т�й ф�р�е не �ридет��; интере� �удут �ред�тав� л�ть дру�ие, и�вле�ае�ые и� не�� ��ъе�ты, а эт� �начит, чт� у них и�еют�� в�е �в�й�тва и �ет�ды IADsCollection, а та�же р�д �в�их ����твенных �в�й�тв и �ет�д�в IADsContainer Еще �дин �а��вый �ла��; �ред�тавл�ет ��нтейнеры �атал���в и �а��� файл�в�й �и�те�ы. К�нтейнеры ���ут ��держать дру�ие ��нтейнеры, ����ьютеры, ��ль��вателей и т. д. (��. ри�. �.1� IADsComputer Пред�тавл�ет �тдельный ����ьютер (�ервер или ра��чую �танцию� и и�еет �в�й�тва, ��и�ывающие и�� ����ьютера, е�� �е�т�нах�ж� дение, в����жн��ти, ��ераци�нную �и�те�у и дру�ую инф�р�ацию. Явл�ет�� та�же ��нтейнер��, и в е�� д�черних ��ъе�тах �еречи�л�� ют�� ��ль��ватели ����ьютер�в, �ру��ы и �луж�ы IADsDomain Пред�тавл�ет ����ьютер, вх�д�щий в д��ен или в ра��чую �ру��у. Явл���ь ��нтейнер��, IADsDomain �ред��тавл�ет ��и��и ��ль��ва� телей, �ру�� и учетных �а�и�ей ����ьютер�в д��ена или ра��чей �ру��ы IADsFileService Явл�ет�� вариант�� ��ъе�та IADsService, ���да ��и�ывает �луж� �у, ��т�ра� �ани�ает�� ��в�е�тны� и���ль��вание� файл�в. IADsFileService ра�шир�ет ��ъе�т IADsService д���лнительны�и ��и�ательны�и �в�й�тва�и. Явл���ь ��нтейнер��, �ред��тавл�ет ��и��и а�тивных ��ль��ватель��их ��д�лючений, на�ывае�ых �е�� �и��и IADsFileShare Пред�тавл�ет �тдельную ��щую �а��у IADsGroup Пред�тавл�ет �ру��у �е���а�н��ти, ��ределенную в �атал��е или на �тдельн�� ����ьютере. Ка� ни �транн�, �а� ��ъе�т IADsGroup не �вл�ет�� ��лле�цией, н� е�� �в�й�тв� Members �ред�тавл�ет ����й ��лле�цию ��ъе�т�в IADsUser и IADsGroup IASsNamespaces К�лле�ци�, ���тавленна� и� в�ех в����жных ���тавщи��в �атал���в IADsO О�и�ывает �р�ани�ацию, � ��т�р�й �ринадлежит ��нтейнер или учетна� �а�и�ь ��ль��вател� IADsOU О�ъе�т���нтейнер, �ред�тавл�ющий ��дра�деление �р�ани�ации и е�� ��держи��е. У эт��� ��ъе�та та�же и�еют�� в�е �в�й�тва и �е� т�ды ��ъе�та IADsO IADsOpenDSObject Пред��тавл�ет ������ ��ращени� � �атал��у � и���ль��вание� аль� тернативн�й учетн�й �а�и�и ��ль��вател� и �ар�л� продолжение 
346 Глава 8. Active Directory Scripting Interface Объект Назначение IADsPrintJob Пред�тавл�ет �дн� �тл�женн�е �адание на �ечать, �жидающее ра�� �ечат�и на �етев�� �ринтере IADsPrintQueue Пред�тавл�ет �етев�й �ринтер. Явл���ь ��лле�цией, IADsPrintQueue �ред��тавл�ет �тл�женные и вы��лн�е�ые �адани� на �ечать IADsResource Пред�тавл�ет ��щий файл, � ��т�ры� в данный ���ент ра��тает ��ль��ватель IADsService О�и�ывает �адачу �луж�ы на �аданн�� ����ьютере (на�ри�ер, IIS, ���� sh����g (��в�е�тный д��ту� � файла��, DNS и т. д.� IADsSession Пред�тавл�ет ��единение �ежду ��ль��вателе� и файл�вы� �ервер�� IADsUser Пред�тавл�ет �тдельную учетную �а�и�ь ��ль��вател� ����ьютера Множественное наследование Мн�же�твенн�е на�лед�вание �вучит, ��нечн�, не�л�х� — �т� же �т�ажет�� �т �н���чи�ленных ���атых и �ре�тарелых р�д�твенни��в? Н� в данн�� �лучае в эту фра�у в�ладывает�� ��вершенн� ин�й ��ы�л. Мн��ие ADSI���ъе�ты ��и�аны в д�� �у�ентации M���oso�� �а� «реали�ующие �н�же�тв� интерфей��в» (�mp��m�����g mu���p�� ���������s�. На �ра�ти�е эт� ��начает, чт� ��ъе�т �аи��твует �ет�ды и �в�й�тва �т дру�их, ��лее �р��тых ��ъе�т�в, а �ате� д��авл�ет ��льшин�тв� и� них в чи�л� �в�их ����твенных �ет�д�в и �в�й�тв. Эт� ве�ь�а �ривле�ательна� ���тавл�юща� �и� �те� ��ъе�тн���риентир�ванн��� �р��ра��ир�вани�, ��начающа�, чт� ��ъе�ты ���ут �рать �а ��н�ву �в�й�тва дру� дру�а. Н�вый ти� ��ъе�та ��жет в��ть на �е�� �ред��тавление не���ль�их д���лнительных ��др��н��тей и ���в�лить и�х�дн��у ��ъе�ту вы��лнить �л�жную �адачу. При ра��те � ADSI эт� �лучает�� ��ра�д� чаще, че� �ри ра��те �� в�е�и ��тальны�и �а�ета�и, ра���атривае�ы�и в данн�й �ни�е, и вы д�лжны �ыть ��т�вы � та�и� �т�рыти��, иначе ��жн� неверн� и�т�л��вать д��у�ентацию. Х�р�ши� �ри�ер�� ��жет ���лужить ��и�ание ��ъе�та IADsFileService. В д�� �у�ентации �� IADsFileService �еречи�лены т�ль�� два �в�й�тва: Description и MaxUserCount. Н� в ��и�ании ��ъе�та е�ть д�в�льн� �ильн�е выражение: «IADsF���S��v��� �s � du�� ��������� �h�� ��h����s ��om IADsS��v���» (IADsFileService �вл�ет�� дв�йны� интерфей���, на�ледующи� ����енн��ти IADsService�. Эт� ��начает, чт� ��ъе�т IADsFileService и���ль�ует �ет�ды и �в�й�тва ��ъе�та IADsService нар�ду � д��авл�е�ы�и и� �в�й�тва�и Description и MaxUserCount. Чт��ы вы��нить в�е ��тальн�е, нужн� �а�л�нуть в д��у�ентацию �� ��ъе�ту IADsService. Та� вы найдете еще 12 �в�й�тв: HostComputer, DisplayName, Version и т. д . В�е �ни та�же �ри�ени�ы и � ��ъе�ту IADsFileService. Т� же �а��е �а�ает�� и ра�личных ��ъе�т�в IADsxxxOperations. В ADSI и�еют�� ��ъе�ты, �ред�тавл�ющие ��щие �а��и, �ринтеры, �и�те�ные �луж�ы и т. д. К��да эти ре�ур�ы �вл�ют�� ча�тью ��ераци�нн�й �и�те�ы, дл� ��т�р�й ADSI ��жет Таблица 8.1 (продолжение)
Концепции ADSI 347 вы��лн�ть фун�ции у�равлени�, ��ъе�ты �ред��тавл�ют еще �дин интерфей� Operations, д��авл�ющий д���лнительные у�равл�ющие �в�й�тва и �ет�ды. Са� ��ъе�т IADsServiceOperations вы ни���да не увидите, н� ва� �ридет�� �тал�ивать� �� � е�� �ет�да�и и �в�й�тва�и, д��ту�ны�и в ��ъе�те IADsService. Начинает�� в�е � �а���� верха. ADSI���ъе�ты ��н�ваны на ��ъе�те �� и�ени IADs, ��т�рый �ред��тавл�ет фунда�ентальные �ет�ды и �в�й�тва, ��в�е�тн� и���ль�уе�ые в�е� ��тальны� ра�н���ра�ие� ��ъе�т�в. Одни� и� та�их ��щих �в�й�тв �вл�ет�� Class, ��т�р�е идентифицирует ��н�ретную ра�н�видн��ть ��ъ� е�та. Пред��тавл�е��е и� �начение ��жн� и���ль��вать дл� ��ределени� ти�а ��ъ� е�т�в, найденных в ��лле�ции, и дл� ���дани� н�вых ��ъе�т�в, та�их �а� учетные �а�и�и ��ль��вателей и �ру��ы �е���а�н��ти. И� та�же ��жн� в����ль��вать�� в �в�й�тве Filter (ра���атривает�� в ра�деле «Ра��та � ADSI���лле�ци��и»� дл� вы��ра ��ъе�т�в ��лле�ции на ��н�ве �начени� их �в�й�тва Class. В та�л. � .2 �еречи�лены в�е и�ена �ла���в ра�личных ADSI���ъе�т�в, ��т�рые ���ут ва� ��в�тречать��. Далее �аждый и� этих ��ъе�т�в �удет ра����трен ��лее ��др��н�. Таблица 8.2. Значения свойства Class для ADSI-объектов Имя класса Тип объекта Если это коллекция, то в ней содержится... Computer IADsComputer Group (�ру��а�, Service (�луж�а� и User (��ль� ��ватель� Container IADsContainer Container (��нтейнер�, OrganizationalUnit (��дра�деление �р�ани�ации�, Group и User Domain IADsDomain Computer, Group и User FileService IADsFileService FileShare IADsFileShare Group IADsGroup (Эт� не ��лле�ци�!� OrganizationalUnit IADsOU Container, OrganizationalUnit, Group и User PrintJob IADsPrintJob PrintQueue IADsPrintQueue Resource IADsResource Service IADsService Session IADsSession User IADsUser Создание ADSI-объектов В ��льшин�тве �в�е� ADSI���ъе�ты ���дают�� � ����щью фун�ции GetObject(), �ред��тавл�е��й в�е�те � V�S���p�. Е�ли и���ль�ует�� дру��й ��ы� �р��ра��ир�� вани�, та�и� же ��ра��� ��жн� в����ль��вать�� фун�цией WScript.GetObject(). П��ле т��� �а� дл� ��лучени� д��ту�а � �тдельн��у ADSI���ъе�ту �удет и���ль�
348 Глава 8. Active Directory Scripting Interface ��вана фун�ци� GetObject(), �в�й�тва и �ет�ды эт��� ��ъе�та ��жн� и���ль��вать дл� и�влечени� дру�их ��ъе�т�в, ��лле�ций и инф�р�ации. Е�ли вы читали �лаву, ���в�щенную ин�тру�ентарию W��dows M���g�m���, ва� �на���а �и�те�а отображаемых моникеров, ��т�ра� и���ль�ует�� дл� у�а�ани� ��ъе�т�в �� и�ена�. Фун�ци� GetObject() и���ль�ует в �аче�тве ар�у�ент�в �т�� �ражае�ый ��ни�ер, �ред�тавл�ющий ����й �тр��у, у�а�ывающую ти� ��ъе�та, ��т�рые нужн� ���дать. При�енительн� � ADSI �н ���т�ит и� и�ени �луж�ы �р�� вайдера �ети, � ��т�р�й нужн� ��д�лючить��, дв�ет�чи� и, д���лнительн�, �ути � ��ъе�ту в �р��тран�тве и�ен �р�вайдера. О�н�вные ADSI��р�вайдеры �ред�тавлены ниже. Провайдер Описание WinNT: A���v� D�����o�y и дру�ие ��ль��ватель��ие �атал��и; �луж�ы ��щих файл�в и �ринтер�в. Б�льшие �у�вы в WinNT д�лжны �ыть у�а�аны в т�ч� н��ти, �а� ���а�ан� NDS: Служ�ы �атал���в Nov��� N��W��� NWCOMPAT: Режи� �а�ы данных Nov��� N��W��� LDAP: Дру�ие �атал��и на ��н�ве LDAP IIS: I������� I��o�m���o� S��v�� ADs: О�н�вн�й �еречень в�ех д��ту�ных �р�вайдер�в На�ри�ер, �р��ра��а V�S���p� дл� у�равлени� W��dows A���v� D�����o�y или д��ен�� W��dows NT �� и�ени «my�omp��y» ��жет и���ль��вать �ледующий ��ерат�р: set obj = GetObject("WinNT://mycompany") А дл� д��ту�а � д��ену Nov��� NDS � та�и� же и�ене� ��жн� в����ль��вать�� ��ерат�р�� set obj = GetObject("NDS://mycompany") Путь, ��т�рый �ледует �а и�ене� �р�вайдера, т� е�ть �уть, у�а�ывае�ый ���ле дв�ет�чи�, �ави�ит �т т���, �а���� р�да ADSI���ъе�т тре�ует��. И �де�ь начинает�� �а��е �а�авн�е. В та�л. �.3 �еречи�лены �ути не���ред�твенн��� ��лучени� наи� ��лее ��ле�ных ADSI���ъе�т�в. Таблица 8.3 . Пути, используемые для получения ADSI-объектов и создания соответствующих типов объектов Путь, указываемый при вызове GetObject() * Объект "ADs:" IADsCollection "II S://компьютер/MSFTPSVC" IISFTPService "II S://компьютер/MSFTPSVC/n" IISFTPServer "II S://компьютер/MSFTPSVC/n/папка" IISFTPVirtualDir "II S://компьютер/W3SVC" IISWebService "II S://компьютер/W3SVC/n" IISWebServer
Концепции ADSI 349 Путь, указываемый при вызове GetObject() * Объект "II S://компьютер/W3SVC/n/папка" IISWebVirtualDir "LD AP://ldapserver/o=orgname[/ou=unitname] " IADsContainer "LD AP://RootDSE" IADsContainer "ND S://treename/O=orgname/OU=ouname" IADsContainer "ND S://treename/O=orgname/OU=ouname/CN=groupname" IADsGroup "ND S://treename/orgname/ouname" IADsContainer "ND S://treename/orgname/ouname/username" IADsUser "провайдер:" IADsNamespaces "провайдер://компьютер" IADsComputer "провайдер://домен" IADsDomain "провайдер://домен/компьютер[,компьютер]" IADsComputer "провайдер://домен/компьютер/LanManServer/очередь" IADsPrintQueue "провайдер://домен/компьютер/LanManServer/общий_файл" IADsFileShare "провайдер://домен/компьютер/служба" IADsService "провайдер://домен/группа[,группа]" IADsGroup "провайдер://домен/пользователь[,пользователь]" IADsUser "WinNT://домен/компьютер/LanManServer" IADsFileService * Сл�ва, выделенные �ур�ив�� (та�ие �а� провайдер, домен и компьютер�, ��начают, чт� их нужн� �а�енить на�т��щи�и и�ена�и �р�вайдера, д��ена и ����ьютера и т. д. Квадратные �����и [ ] ����на� чают не����ательную ча�ть, а �н���т�чи� ... ���а�ывают, чт� �редыдуща� ча�ть ��жет �ыть ��вт�рена. ▼o Хотя обычно Windows в качестве разделителя в путевых именах принимает как прямой (/), так и обратный слэш (\), в ADSI-путях символы \ и / не являются взаимозаменяемыми. В качестве путевого разделителя нужно всегда использовать прямой слэш. В та�л. � .4 �еречи�лены наи��лее важные ADSI���ъе�ты и ���а�ан�, �а��й и� �р�вайдер�в их ��ддерживает. Дл� ��лучени� �еречи�ленных ��ъе�т�в �ри вы��ве GetObject д�лжен у�а�ывать�� т�ль�� ���еченный �р�вайдер. Таблица 8.4. ADSI-объекты, доступные у четырех основных провайдеров Объект WinNT NDS NWCompat LDAP IADsComputer ✓ ✓ IADsContainer ✓ ✓ ✓ ✓ IADsDomain ✓ IADsFileService ✓ ✓ IADsFileShare ✓ ✓ продолжение 
350 Глава 8. Active Directory Scripting Interface Объект WinNT NDS NWCompat LDAP IADsGroup ✓ ✓ ✓ ✓ IADsMembers ✓ ✓ ✓ ✓ IADsNamespaces ✓ ✓ ✓ ✓ IADsO ✓ ✓ IADsOU ✓ ✓ IADsPrintJob ✓ ✓ IADsPrintQueue ✓ ✓ ✓ ✓ IADsService ✓ IADsSession ✓ IADsUser ✓ ✓ ✓ ✓ ▼o Полная и довольно подробная документация по ADSI-провайдерам и поддерживаемым ими интерфейсам доступна на веб-сайте msdn.microsoft.com после поиска по ключевой фразе «Provider Support of ADSI Interfaces» (с использованием кавычек). Там вы найдете более пол- ную версию того, что показано в табл. 8.4. Наиболее важным, помимо этой таблицы, является список конкретных свойств и методов, фак- тически поддерживаемых этими объектами. В имеющемся в Интернете справочном материале Microsoft по ADSI для различных ADSI-интерфейсов (объектов) перечислено множество допол- нительных, фактически доступных свойств и методов. Если вы просто просматриваете справоч- ный материал и не обращаете внимание на список «фактически» доступных свойств и методов, вам будет очень трудно понять, почему ваши сценарии не работают. Безопасность каталогов Мн��ие ADSI���ъе�ты не ���ут �ыть и���ль��ваны, ���а �ценарий не �удет �а� �ущен на у�равл�е��� ����ьютере ��д учетн�й �а�и�ью ��ль��вател� � �рава�и ад�ини�трат�ра. Е�ли ��наружит��, чт� �ценарий не ра��тает ��д ��ычн�й учетн�й �а�и�ью, ваши д���лнительные в����жн��ти �удут �ави�еть �т и���ль�уе���� �р�вайдера. WinNT: не ���в�л�ет и���ль��вать альтернативн�е и�� ��ль��вател�, ��эт��у нуж� н� �а�у��ать �ценарий ��д учетн�й �а�и�ью, и�еющей ур�вень ад�ини�трат�ра. Чт� �а�ает�� �р�вайдера LDAP:, ��т�рый и���ль�ует�� дл� у�равлени� A���v� D�����o�y и LDAP, вы ��жете в����ль��вать�� �ет�д�� OpenDSObject дл� ��д� �лючени� � ADSI, и���ль�у� альтернативные ��ль��ватель��ие ��лн���чи�. Дл� и���ль��вани� альтернативн�й учетн�й �а�и�и ��ль��вател� ���дайте ��ъе�т IADsNamespaces, �рив��анный � LDAP � ����щью �ледующе�� ��ерат�ра: set ldap = GetObject("LDAP:") и в����ль�уйте�ь �ет�д�� OpenDSObject �ри�енительн� � эт��у ��ъе�ту. Дл� вы� ��ва �ет�да OpenDSObject и���ль�ует�� �ледующий �инта��и�: ldap.OpenDSObject(adspath, username, password, flags) Таблица 8.4 (продолжение)
Концепции ADSI 351 Ка� и фун�ци� GetObject(), �ет�д OpenDSObject и���ль�ует и�� ADsPath, т� е�ть ��ни�ер тре�уе���� ��ъе�та. Е�ли в �аче�тве и�ени ��ль��вател� и �ар�л� �ере� дать �начени� NULL, �удет и���ль��ван ��нте��т �е���а�н��ти те�уще�� �р�це��а. Чт��ы ��ределить тре�уе�ый ур�вень �е���а�н��ти, ��жн� та�же у�а�ать и�� ��ль��вател� (username� и �ар�ль (password � �ривиле�ир�ванн�й учетн�й �а�и�и � �дни� или не���ль�и�и �начени��и флаж��в flags, �еречи�ленных в та�л. � .5 . Путе� �л�жени� �начений ��жн� у�а�ать �ра�у не���ль�� флаж��в. Н� уд��т�� ены вни�ани� ���ут �ыть т�ль�� те флаж�и, ��т�рые ��ддерживают�� целевы� LDAP��ервер��. Таблица 8.5. Флажки выбора уровней безопасности при вызове метода OpenDSObject Константа Значение Смысл ADS_SECURE_AUTHENTICATION 1 Тре�ует �е���а�н�й аутентифи�ации в� и��е� жание �т�рав�и �ар�л� в виде �р��т��� те��та. Пр�вайдер WinNT и���ль�ует NTLM. A���v� D�����o�y и���ль�ует ���b��os, е�ли эт� в��� ��жн�, или NTLM ADS_USE_ENCRYPTION 2 За�тавл�ет ADSI шифр�вать данные, �ередава� е�ые �� �ети. Тре�ует, чт��ы д��ен и�ел у�та� н�вленный C���������� S��v�� ADS_USE_SSL 2 Т� же �а��е, чт� и ADS_USE_ENCRYPTION ADS_READONLY _SERVER 4 Инф�р�ирует ADSI � нев����жн��ти вне�ени� и��енений. Эт� ��жет ��вы�ить �р�и�в�ди� тельн��ть и ���в�лить ADSI в����ль��вать�� ре�ервны�и ��нтр�ллера�и д��ена ADS_PROMPT_CREDENTIALS � Тре�ует, е�ли в����жн�, чт��ы ��ль��вателю �ценари� �ыл� выведен� �ри�лашение на вв�д �ар�л�. M���oso�� не ре���ендует и���ль��вание эт��� флаж�а, �����ль�у в �удуще� �н ��жет не ��ддерживать�� ADS_NO _AUTHENTICATION 16 Инициирует ���ыт�у ��д�лючить�� в �аче�тве ан�ни�н��� ��ль��вател�. Пр�вайдер WinNT ан�ни�ных ��д�лючений не �рини�ает ADS_FAST_BIND 32 За�тавл�ет ADSI не д��авл�ть дина�иче��их, �тн���щих�� � ��н�ретн��у ��ъе�ту �в�й�тв и �ет�д�в, �ред��тавл�� в�е�т� них т�ль� �� лишь �ет�ды и �в�й�тва �а��в��� ��ъе�та. Эт� ��жет у���рить ��ра��т�у �а�р���в �ри не��т�рых �л�жных или не��ычных ���т��� тель�твах ADS_USE_SIGNING 64 Д��авл�ет ��нтр�ль данных �ри �еж����ью� терн�й �в��и. Та�же д�лжен и���ль��вать�� флаж�� ADS_SECURE_AUTHENTICATION продолжение 
352 Глава 8. Active Directory Scripting Interface Константа Значение Смысл ADS_USE_SEALING 12� Д��авл�ет � �еж����ьютерн�й �в��и шифр�� вание на ��н�ве ���b��os. Тре�ует у�тан�в�и флаж�а ADS_SECURE_AUTHENTICATION ADS_USE_DELEGATION 256 П��в�л�ет ADSI деле�ир�вать ��ль��вателю ��лн���чи� �ри �в��и чере� д��ены; т� е�ть ��� �в�л�ет ADSI��луж�е на удаленн�� ����ьютере �аи��тв�вать ваши �рава �ри ��щении � дру�и� �и ��нтр�ллера�и д��ена ADS_SERVER_BIND 512 С��ращает �етев�й трафи� и ��вышает �р�� и�в�дительн��ть �ри ��д�лючении � LDAP� �р�вайдеру � ADsPath��уте�, в�лючающи� и�� �ервера И���ль�у� те же �а�ые альтернативные ��лн���чи�, ��жн� ���давать дру�ие ��ъе�ты, ��вт�рн� вы�ыва� OpenDSObject � та�и� же и�ене� ��ль��вател� и и�� ��ль�у� Null в �аче�тве �начени� �ар�л�. ▼) Провайдер NWCOMPAT: не поддерживает OpenDSObject. В случае необходимости подключить- ся к серверу NetWare с альтернативными полномочиями нужно перед запуском сценария вос- пользоваться программой командной строки net use: net use \\сервер_netware /U:имя_пользователя Разница между контейнерами и листьями Ва�, наверн�е, �рих�дил��ь �лышать �л�в� дерево, и���ль�уе��е дл� ��и�ани� иерархиче���й �тру�туры, на�ри�ер �а��� на же�т��� ди��е или ���лед�ватель� н��ти ��нтейнер�в в �атал��е. На ри�. �.2 ���а�ана �тру�тура �атал��а, и���ражен� на� в виде дерева. К�нечные ��ъе�ты, не �вл�ющие�� ��нтейнера�и, ��вершенн� ��раведлив� на�ывают�� листьями, �����ль�у �ни нах�д�т�� на ��нчи�ах вет�� дерева. В �атал��е учетные �а�и�и ��ль��вателей и ����ьютер�в �читают�� ��ъ� е�та�и�ли�ть��и, ��т��у чт� �ни �вл�ют�� �авершающи�и ��ъе�та�и в ��нце �ерии ��нтейнер�в. К�нтейнеры ���ут �дн�вре�енн� ��держать �а� ��ъе�ты�ли�ть�, та� и дру�ие ��нтейнеры. С��твет�твующий �ри�ер ���а�ан на ри�. � .2, �де ��н�вн�й ��нтей� нер д��ена ��держит ли�т — учетную �а�и�ь Administrator, а та�же ��дчиненные ��нтейнеры. При ��анир�вании ��лле�ции ��ъе�т�в внутри ��нтейнера ��жет ��а�ать��, чт� ��лле�ци� ��держит �а� ��ъе�ты���нтейнеры, та� и ��ъе�ты�ли�ть� . При ��анир�вании ��держи���� ��нтейнера � ����щью �ценари� нужн� у�тан�вить ти� �ажд��� вх�д�ще�� в ��нтейнер ��ъе�та, �а� т�ль�� �н ��в�тречает��. Таблица 8.5 (продолжение)
Концепции ADSI 353 Рис. 8 .2 . Сруктура каталога часто называется деревом, а конечные объекты, которые не являются папками или контейнерами, могут быть названы листьями. (Возможно, все это лучше будет смотреться, если повернуть книгу на 90o против часовой стрелки. Не поворачивайте ее по часовой стрелке, или вместо листьев у вас получатся корни.) В д��у�ентации M���oso�� �ред�и�ывает�� и���ль��вание �в�й�тва Schema �ажд��� ��ъе�та, в��вращающее �т��ражае��е ��ни�ерн�е и�� ��ъе�та IADsClass, ��т�рый ��и�ывает ��ределение и �тру�туру данных ��ъе�та, т� е�ть е�� ти�. Св�й�тв� Schema и�еет�� у в�ех ра�н�видн��тей ADSI���ъе�т�в, �����ль�у в�е �ни �р�и�х�д�т и� �а��в��� IADs���ъе�та и на�ледуют у не�� эт� �в�й�тв�. Ра���ла�а� и�ене�, �ред��тавл�е�ы� �ринадлежащи� ��ъе�ту �в�й�тв�� Schema, ��жн� в��� ��ль��вать�� фун�цией GetObject дл� ��лучени� ��ъе�та IADsClass, у ��т�р��� и�еет�� �улев� �в�й�тв� �� и�ени Container, и�еющее �начение True, е�ли ��ъе�т �вл�ет�� ��нтейнер��, или False, е�ли �н �вл�ет�� ли�т��. Надею�ь, в�е ��н�тн�? Следующий ��д ���а�ывает, �а� M���oso�� �редла�ает в�е эт� �делать: set container = GetObject("WinNT://mydomain") for each obj in container if GetObject(obj.Schema).Container then WScript.echo obj.name, "Это контейнер" else WScript.echo obj.name, "Это лист" end if next Н� в�е дел� в т��, чт� этот код не работает. У не��т�рых ADSI���ъе�т�в и�е� ют�� дале�� не в�е �жидае�ые �в�й�тва. Зача�тую �р��ле�ы в��ни�ают и���а т���, чт� �ринадлежащее �хе�е �в�й�тв� Container не фи�урирует в �ажд�� ти�е ��ъе�та или, в �тдельных �луча�х, �т�ут�твует �а�� �в�й�тв� Schema. Та� уж у�тр�ен ADSI. Дл� ��х�да данн�й �р��ле�ы лучше в����ль��вать�� ��лее ��н�ретны� �е� т�д�� и�учени� �ринадлежащих ��ъе�ту �в�й�тв Class и Name и �рин�ти� �а��� �т��тельн��� решени�, �вл�ет�� ли ��ъе�т ��нтейнер�� или ли�т��. В ранее ���а�анн�й та�л. �.2 �еречи�лены наи��лее ра��р��траненные �ла��ы ��ъе�т�в
354 Глава 8. Active Directory Scripting Interface и ���а�ан�, че� �вл�ет�� ��ъе�т, ли�т�� или ��нтейнер��. Е�ли у ��ъе�та е�ть эле�енты, �еречи�ленные в �т�л�це «...��держит��...», �начит, эт� ��нтейнер. П����ль�у в ��нтейнерах ���ут ��держать�� ли�ть�, в них ���ут в�ладывать�� д� �е���нечн��ти дру�ие ��нтейнеры. Эта �итуаци� в��лне ��дх�дит дл� и���ль� ��вани� ре�ур�ии � целью выв�да ��и��а ��держи���� на �ажд�� ур�вне ��нтей� нера. На�ри�ер, �ледующий �ценарий выв�дит ��и��� ��держи���� ����ьютера �� и�ени Sumatra, и���ль�у� вы��в фун�ции GetObject: ' Файл примера script0801.vbs set comp = GetObject("WinNT://sumatra,Computer") ' просматриваемый объект on error resume next ' игн орирование неизбежных ошибок ' визуализация служб comp.filter = array("Service", "User","Group") ListContainer comp, 0 sub ListContainer (obj, depth) dim member, cls ' закрытые локальные переменные ' выв од списка классов и имен объектов WScript.echo space(depth*3) & obj.class & ": ", obj.name cls = lcase(obj.class) ' проверка на классы контейнеров if cls = "container" or cls = "computer" or cls = "domain" then for each member in obj ' рекурсивный вывод списка содержимого ListContainer member, depth+1 next elseif instr(cls, "group") then ' рекурсивный вывод членов группы for each member in obj.members ListContainer member, depth+1 next end if end sub Даже эт��у �ценарию не��х�ди� ��ерат�р on error resume next дл� ��х�да не� и��ежных �ши��� �ри и�влечении ��держи���� не��т�рых �ру��. ADSI-объекты для провайдера WinNT: Перечи�лить в�е ADSI���ъе�ты в данн�й �ни�е нев����жн� и���а �лиш��� ��ль� ш��� ��личе�тва �а� �а�их ��ъе�т�в, та� и их �в�й�тв и �ет�д�в. В данн�� ра�деле �удет дан ����р наи��лее важных ��ъе�т�в, и���ль�уе�ых дл� у�равлени� �ет��и W��dows и их наи��лее важны�и �в�й�тва�и. Эта ��рав�чна� инф�р�аци� да�т ва� ��щий в��л�д на в����жн��ти ADSI и �ред��тавит д��тат�чн� �ведений дл� ���дани� ��ле�ных �ценариев. Б�лее ��лную ��рав�чную инф�р�ацию нужн� и��ать в д��у�ентации M���oso�� �� ADSI. Чуть ���же в данн�й �лаве �удет дан ����р ��ъе�т�в, и���ль�уе�ых дл� у�равлени� A���v� D�����o�y � �р�вайдер�� LDAP:, а та�же дл� у�равлени� инф�р�аци�нны�и �луж�а�и Интернета — I�������
ADSI-объекты для провайдера WinNT: 355 I��o�m���o� S��v���s. На� не хватает �е�та дл� ��и�ани� ��ъе�т�в и техн�л��ий, и���ль�уе�ых дл� у�равлени� Nov��� N��W���, Nov��� NDS, M���oso�� �x�h��g� и универ�альных LDAP��ервер�в. Н� в ��нце �лавы ва� �удет �ред��тавлен ��и��� д���лнительных и�т�чни��в инф�р�ации. ▼) В сценариях при создании моникеров, передаваемых функции GetObject, нужно строго при- держиваться написания WinNT с буквами «i» и «n» в нижнем разряде. Именно такое сочетание заглавных и прописных букв будет встречаться по всей главе. Если набрать, к примеру, winnt, функция GetObject сгенерирует неустановленную ошибку — Unspeci�ed error. Это единственный пример чувствительности к регистру в именах на всю систему Windows. ВАЖНЫЕ ЗАМЕЧАНИЯ ОТНОСИТЕЛЬНО ДОКУМЕНТАЦИИ MICROSOFT ADSI���ъе�ты фи�урируют в д��у�ентации M���oso�� �� ADSI, ��т�рую ��жн� �р����треть на ве���айте msdn.microsoft.com. Вы�ерите в�лад�у Library, �ате� �т�р�йте Win32 and COM DevelopmentAdministration and ManagementDirectory Identity and Access ServicesDirectory ServicesDirectory Access TechnologiesActive Directory Service InterfacesActive Directory Services Interfaces Reference ADSI Interfaces. Эта д��у�ентаци� ��над��ит�� дл� т���, чт��ы �а� �ледует ра��� �рать�� � ADSI, и �ри ее и�учении нужн� ���нить не��т�рые не�н��� �транные и важные ���енты: y y В ��рав�чни�ах ���а�ывают�� в�е �в�й�тва и �ет�ды, ��т�рые ���ут �ыть �ред��тавлены ADSI���в�е�ти�ы�и �етевы�и �луж�а�и, н� реальн��ть та��� ва, чт� не в�е �еречи�ленные �в�й�тва фа�тиче��и �уще�твуют. Плю� � эт��у, �еречень ра��т�������ных �в�й�тв �ави�ит �т т���, �а��й �р�вайдер �етевых �атал���в ва�и и���ль�ует�� (W��NT, LDAP, NDS и т. д.� . П�эт��у нужн� найти инф�р�ацию в �татье ��д �а��л�в��� «P�ov�d�� Suppo�� o� ADSI I��������s», ��т�ра� �вл�ет�� ��дра�дел�� �татьи «ADSI S��v��� P�ov�d��s» и нах�дит�� �ра�у же �а ��дра�дел�� «ADSI I��������s», � ��т�р�й � уже у���инал. На�ри�ер, �ри чтении ра�дела «ADSI I��������s» ��жет �л�� жить�� �нение, чт� у интерфей�а IADsComputerServices д�лжен �ыть �ет�д вы�лючени� — ShutDown, ��т�рый ��жн� �ыл� �ы и���ль��вать � лю�ы� ��ъ� е�т�� Computer. Н�, � ��жалению, е�� та� нет. Е�ли �р�читать �татью «P�ov�d�� Suppo��...», �танет ��н�тн�, чт� ни �дин и� те�ущих ADSI��р�вайдер�в на �а��� деле эт�т �ет�д не ��ддерживает. y y В этих ��рав�чни�ах �еречи�л�ют�� �ет�ды ��ъе�т�в � та�и�и и�ена�и, �а� Get_LastLogin и Get/put_Description. Их ��жн� �р�и�н�рир�вать и ра��тать не � ни�и, а � ���твет�твующи�и �в�й�тва�и � та�и�и и�ена�и, �а� LastLogin и Description. Ча�ти и�ен Get_ и Put_ и���ль�уют�� т�ль�� � ����илируе�ы�и ��ы�а�и �р��ра��ир�вани�, та�и�и �а� C++. y y Е�ли �т �ценари� �удет ��лучен� ����щение �� �ши��е, утверждающее, чт� �аданн�е �в�й�тв� дл� и���ль�уе���� ��ъе�та не �уще�твует, ���р��уйте и�� �енить ��ыл�у в �в�е� ��де � объект.имя _свойства на объект.Get("имя_свой­ ства") или на объект.Put "имя_свойства", новое_значение . Эт�т ������ ин��да �����ает решить �р��ле�у. Е�ли �н не ����жет, ��� ратите�ь � �ерв��у �ун�ту данн��� �еречн� — �в�й�тва ��жет �р��т� не �ыть.
356 Глава 8. Active Directory Scripting Interface y y Следует ���нить, чт� дл� ��хранени� лю�ых вне�енных в �в�й�тва ADSI� ��ъе�та и��енений д�лжен �ыть и���ль��ван �ет�д .SetInfo. В ��и��е �ет�д�в дл� �ажд��� ��ъе�та SetInfo не ���а�ан. Он на�ледует�� у ��рнев��� ��ъе�та IADs, и ва� �ледует ���нить � е�� �уще�тв�вании. y y П�чти �аждый ADSI���ъе�т и�еет уна�лед�ванн�е �в�й�тв� �� и�ени Schema, ��т�р�е ��ылает�� на ��ъе�т, ��и�ывающий ти� ��ъе�та. У �н��их ��ъе�т�в и�еют�� и дру�ие �в�й�тва, на�ри�ер Parent, AdsPath и SeeAlso, ��т�рые ��ы� лают�� на дру�ие р�д�твенные ADSI���ъе�ты. Н� �ни не �вл�ют�� на�т��щи�и ��ыл�а�и на ��ъе�ты, ��т�рые ���ут и���ль��вать�� дл� не���ред�твенн��� у�равлени� �в��анны�и � ни�и ��ъе�та�и. Эт� ��ни�еры — �тр���вые �на� чени�, — ��т�рые ��жн� выве�ти на э�ран или ��жн� и���ль��вать в �аче�тве ар�у�ент�в фун�ции GetObject(), е�ли ва� дей�твительн� нужн� ра��тать � дру�и�и ��ъе�та�и. В �ледующих ра�делах �еречи�л�ют�� �ет�ды и �в�й�тва наи��лее важных ��ъе�т�в. IADs О�ъе�т IADs �вл�ет�� �а��вы� ��ъе�т��, �т ��т�р��� �р�и�х�д�т в�е ��тальные ADSI���ъе�ты. В�е ��тальные ��ъе�ты, ра���атривае�ые в данн�й �лаве, начина� ют�� �� �в�й�тв и �ет�д�в, ���а�анных в ��рав�е �.1 � д��авление� д���лнитель� ных фун�ций. ▼) Чтобы не раздувать материал, я не повторяю эти свойства в описании каждого другого объекта, поэтому следует помнить, что они являются неотъемлемой частью каждого ADSI-объекта. СПРАВКА 8.1. СВОЙСТВА И МЕТОДЫ БАЗОВОГО ОБЪЕКТА IADS, ПРИСУТСТВУЮЩИЕ ВО ВСЕХ ОБЪЕКТАХ ADSI СВОЙСТВА AdsPath М�ни�ерн�е и�� ��ъе�та в ф�р�е, и���ль�уе��й фун�цией GetObject(); на�ри�ер, "WinNT://domain/computer". Е�ли ��ъе�т и�вле�ает�� и� ��лле�ции, ADsPath �ред��тавл�ет ��ни�ер, ��т�рый в �удуще� ��жн� и���ль��вать дл� не���ред�твенн��� ���дани� ��ъе�та. Class И�� �ла��а интере�ующе�� ва� ��ъе�та. Отн��ит�� � и�ена�, �еречи�лен� ны� в та�л. �.2: "User", "Domain" и т. д. GUID Гл��альн� уни�альный идентифи�ат�р — G�ob���y U��qu� Id�������� (GUID� дл� данн��� ��ъе�та. Эт� длинна� �тр��а, ��т�ра� идентифицирует эт�т ��ъе�т в A���v� D�����o�y (е�ли ��ъе�т туда вх�дит�.
ADSI-объекты для провайдера WinNT: 357 Name И�� ��ъе�та. Б�льшин�тв� ��ъе�т�в и�еют в��лне �жидае�ые и�ена дл� ти�а ��ъе�та: и�� ��ль��вател� дл� ��ъе�та IADsUser и т. д. Parent ADsPath�и�� ��ъе�та���нтейнера, ��т�рый ��держит данный ��ъе�т, е�ли эт� � не�у �ри�ени��. Е�ли нужн�, ��ъе�т, �ред�тавл�ющий ��нтейнер, ��ж� н� ���дать � ����щью фун�ции GetObject(), в ��т�р�й и���ль�ует�� �начение �в�й�тва Parent. Schema Эт� �тр��а �и�в�л�в, ADsPath ��ъе�та IADsClass, ��т�рый ��и�ывает �в�й� �тва, �жидае�ые дл� данн��� ��ъе�та. На�ри�ер, е�ли obj — эт� IADs���ъе�т, т� ��ерат�р set sobj = GetObject(obj.Schema) вернет ��ъе�т sobj, �вл�ющий�� IADsClass���ъе�т��, ��т�рый ��жет дать ва� ��и��� �ет�д�в и �в�й�тв ��ъе�та obj. (Вре�ена�и ���адают�� IADs� ��ъе�ты, не и�еющие �в�й�тва Schema и не ���в�л�ющие ��лучить ���твет�тву� ющий IADsClass���ъе�т.� Д���лнительную инф�р�ацию � IADsClass ��жн� найти в д��у�ентации M���oso��. МЕТОДЫ Get(propertyname) В��вращает �начение �в�й�тва, чье и�� �ередан� в виде �тр��и �и�в�л�в. В �реде WSH��ценариев �� �в�й�тва�и ��жн� та�же ра��тать, и���ль�у� ��ыч� ный �инта��и� ��ъе�та. Эти два ��ерат�ра �вл�ют�� э�вивалентны�и: wscript.echo object.свойство wscript.echo object.Get("свойство") Е�ли �в�й�тв� и�еет �р��т�е �начение, в��вращает�� ��ычн�е �начение ти�а v������. Е�ли у �в�й�тва не���ль�� �начений, в��вращает�� �а��ив. GetEx(propertyname) П�х�ж на �ет�д Get, н� GetEx(propertyname) в�е�да в��вращает �а��ив, ��� держащий �начение �в�й�тва, даже е�ли в эт�� �в�й�тве в�е�� �дн� �начение. Эт�т �ет�д ��жн� и���ль��вать �ри и�учении �в�й�тв, у ��т�рых ��жет �ыть не���ль�� �начений, и��люча� та�и� ��ра��� �р�вер�у, ���в�л�ющую у�нать, чт� и�енн� �ыл� в��вращен�, �дин�чн�е �начение или �а��ив. GetInfo За�тавл�ет ADSI и�влечь �начени� �в�й�тва дл� данн��� ��ъе�та и� лежа� ще�� в е�� ��н�ве ����ьютерн��� �атал��а или �луж�ы. Эт� �р�и�х�дит авт�� �атиче��и �ри �ерв�й ��ыл�е на ��ъе�т, н� GetInfo ��жн� вы�вать и �вны� ��ра���, е�ли е�ть ��д��рение, чт� �а��ва� инф�р�аци� ���ла и��енить�� � ���ента ���дани� ��ъе�та и д� ���ента, ���да ��тре��вал��ь �����треть на е�� �в�й�тва.
358 Глава 8. Active Directory Scripting Interface GetInfoEx namearray, 0 За�тавл�ет ADSI выве�ти и� �р�вайдера (на�ри�ер, и� у�равл�е���� ���� �ьютера или д��енн��� �ервера� �начени� �ара�етр�в, чьи и�ена �еречи�лены в �а��иве namearray. Вт�р�й ар�у�ент д�лжен �ыть нуле�. О�ычн� GetInfoEx нужен в �ценарных �рил�жени�х. Put propertyname, newvalue При�ваивает �начение newvalue �в�й�тву, чье и�� �ередан� в виде �тр��и �и�в�л�в propertyname. В �реде WSH��ценариев ��ычн� и���ль�ует�� �тан� дартный �инта��и� �в�й�тва ��ъе�та, н� дл� �тчета �ледующие два ��ерат�ра �вл�ют�� э�вивалентны�и: object.свойство = новое_значение object.Put "свойство", новое_значение Н� в лю��� �лучае и��енение �начени� �в�й�тва ��ъе�та лю�ы� и� двух �ет�д�в не �рив�дит � авт��атиче����у ��н�влению инф�р�ации, ��храненн�й в A���v� D�����o�y или на у�равл�е��� ����ьютере. Дл� фа�тиче����� ��хра� нени� инф�р�ации д�лжен �ыть вы�ван �ет�д SetInfo. PutEx controlcode, propertyname, valuearray О�н�вл�ет �в�й�тв� propertyname, и�еющее не���ль�� �начений, и���ль�у� �дн� или не���ль�� �начений, ��храненных в �а��иве valuearray, в ���твет�твии �� �начение� controlcode, ��т�р�е ��жет �ыть �дни� и� �ледующих. Константа Значение Функция ADS_PROPERTY _CLEAR 1 Удаление в�ех �начений и� �в�й�тва ADS_PROPERTY _UPDATE 2 За�ена те�ущих �начений �в�й�тва у�а�анны�и �начени��и ADS_PROPERTY _APPEND 3 Д��авление у�а�анных �начений � те�ущи� �на� чени�� ADS_PROPERTY _DELETE 4 Удаление лю���� и� �еречи�ленных �начений SetInfo С�хран�ет лю�ые и��енени�, вне�енные в �в�й�тва ��ъе�та на ��л�женн�� в е�� ��н�ву ����ьютере, ��т�рый �ред�тавлен данны� ��ъе�т��. ▼) Метод SetInfo должен использоваться после внесения изменений или создания любого объ- екта, чтобы были осуществлены фактические изменения связанной с ним учетной записи, си- стемной службы, элемента Active Directory или другого управляемого объекта. Это касается всех ADSI-объектов, рассматриваемых в данной главе. IADsCollection и IADsContainer IADsCollection и IADsContainer та�же �вл�ют�� «�а��вы�и» �ла��а�и ��ъе�� т�в (интерфей�а�и�, ��т�рые и���ль�уют�� в �аче�тве ��н�вы дл� та�их ADSI� ��ъе�т�в, �а� IADsDomain.
ADSI-объекты для провайдера WinNT: 359 IADsCollection �вл�ет�� ��ъе�т�����лле�цией, ���в�л�ющи� ��анир�вать е�� ��держи��е � ����щью ��ычных �ред�тв ну�ерации ��лле�ции �ри�енительн� � вы�ранн��у ��ы�у �ценариев. В V�S���p� эт� ��жет �ыть �делан� � ����щью ци�ла for each. ➔ Д���лнительные �ведени� � �еречи�л�е�ых ��лле�ци�х даны в �лаве 3, в ра�� деле «К�нтейнеры и ��лле�ции». С�в�е�тные �в�й�тва и �ет�ды ��ъе�т�в IADsCollection и IADsContainer �ере� чи�лены в ��рав�е �.2 . П����ль�у ��ъе�т IADsContainer ра��р��тран�ет�� на ��ъ� е�т IADsCollection и д��авл�ет д���лнительные �в�й�тва, и �����ль�у �ни в�е�да ���вл�ют�� в�е�те, � �вел их �в�й�тва в данный ��и���. На �ра�ти�е ��ъе�ты, �р�и�х�д�щие и� этих интерфей��в, и�еют д���лнительные �в�й�тва и �ет�ды, ра���атривае�ые в ��тальных ра�делах данн�й �лавы. СПРАВКА 8.2. СВОЙСТВА И МЕТОДЫ ИНТЕРФЕЙСОВ IADSCONTAINER И IADSCOLLECTION СВОЙСТВА Count В��вращает ��личе�тв� эле�ент�в в ��лле�ции. (Т�ль�� чтение.� Filter М�жет и���ль��вать�� дл� ��раничени� види���� ��личе�тва ��ъе�т�в в ��лле�ции т�ль�� те�и и� них, ��т�рые �ринадлежат вы�ранн��у �ла��у или �ла��а�. Дл� эт��� нужн� ���дать �а��ив и�ен �ла���в (на�ри�ер, "Group", "LocalGroup" , "GlobalGroup", "User" и т. д.� и �ри�в�ить е�� �в�й�тву Filter. Б�лее ��др��н� �в�й�тв� Filter �удет ра����трен� в �ледующе� ра�деле. ▼) Если нужно просканировать один или несколько конкретных типов объектов в коллекции, луч- ше установить значение для свойства Filter для ограничения области видимости коллекции, чем пытаться отсортировать все типы объектов в цикле вашего сценария. Иногда ADSI-сценарии при сканировании больших контейнеров без фильтрации зависают. Hints В эт�� �в�й�тве �еречи�л�ют�� �в�й�тва ��ъе�т�в, ��т�рые ���ут �эшир�� вать�� дл� ��вышени� �р�и�в�дительн��ти; � �р��ра��ир�ванию на V�S���p� эт� �в�й�тв� �тн�шени� не и�еет. МЕТОДЫ CopyHere(sourcepath, newname) Д��авл�ет ���ию �уще�твующе�� ��ъе�та � данн��у ��нтейнеру. Ар�у�ент sourcepath �вл�ет�� �тр���й, ADsPath�и�ене� ��ъе�та (на�ри�ер, "//java/ bknittel,User"�. Ар�у�ент newname �вл�ет�� и�ене� ���ии т��� ��ъе�та, ��� т�рый д�лжен �ыть в ��нтейнере. М�жет и�еть �начение Null, в та��� �лучае ���и� и�еет т� же и��, чт� и �ри�инал. Эт�т �ет�д в��вращает ��ыл�у на н�вый ��ъе�т. П��ле ���дани� ���ии нужн� у�тан�вить �начени� лю�ых, не��х�ди�ых ва� �в�й�тв и �авершить ра��ту, в����ль��вавши�ь в �тн�шении н�в��� ��ъ�
360 Глава 8. Active Directory Scripting Interface е�та �ет�д�� SetInfo. Н�ва� �ру��а, ��ль��ватель и т. � . фа�тиче��и не �удут ���даны в �а��в�� �атал��е, ���а не �удет вы�ван �ет�д SetInfo. Create(class, name) С��дает в данн�� ��нтейнере н�вый ��ъе�т у�а�анн��� �ла��а class и �ри� �ваивает е�у у�а�анн�е и�� name. О�ычн� в �аче�тве �ла��а у�а�ывают�� "OU", "Group", "User" или "FileShare". Эт�т �ет�д в��вращает ��ыл�у на н�вый ��ъ� е�т. П��ле ���дани� ��ъе�та нужн� у�тан�вить �начени� лю�ых, не��х�ди�ых ва� �в�й�тв и �авершить ра��ту, в����ль��вавши�ь в �тн�шении н�в��� ��ъе�та �ет�д�� SetInfo. О�ъе�т не �удет фа�тиче��и ���дан в �а��в�� �атал��е, ���а не �удет вы�ван �ет�д SetInfo. На�ри�ер, дл� ���дани� н�в��� ��ль��вател� ��лучите ��ъе�т domain дл� учетн�й �а�и�и д��ена или ��ъе�т computer дл� л��альн�й учетн�й �а�и�и и в����ль�уйте�ь �ледующи� ��д��: set domain = GetObject("WinNT://имя_домена") ' (или //имя_компьютера) set user = domain.Create("user", "имя_пользователя") ' установка значений свойств: user.свойство = значение ... user.SetInfo ' фактическое создание учетной записи пользователя В ��лн�ценн�� �ценарии ���дани� учетн�й �а�и�и ��ль��вател� нужн� у�та� н�вить �начени� ра�личных �в�й�тв ��ль��вател�, та�ие �а� личный �атал��, �ар�ль и �уть � �р�филю. Нужн� �удет та�же ���дать личный �атал�� и �ри� �в�ить в не� н�в��у ��ль��вателю �ривиле�ии �� ��лн��у у�равлению, на чт� ADSI уже не ������ен. Эт� ���леднее дей�твие д�лжн� �ыть вы��лнен� �р�� �ра���й ���андн�й �тр��и cacls, ��т�ра� ��жет �ыть �а�ущена и� �ценари�. Пр��ра��а cacls ра���атривает�� в �лаве 14 «W��dows Pow��Sh���». ▼) Если нужно исследовать новый объект или изменить значения его свойств, можно после вызова метода SetInfo воспользоваться методом GetInfo. С его помощью все фактические свойства нового элемента каталога будут прочитаны обратно в объект. Метод Create не заполняет все значения по умолчанию, получаемые только что созданным физическим элементом каталога. После вызова GetInfo свойства объекта можно просмотреть и изменить. Delete class, name Удал�ет ��ъе�т в данн�� ��нтейнере на ��н�ве е�� и�ени name и �ла��а class. Дей�твие вы��лн�ет�� не�едленн� и вы��ва �ет�да SetInfo не тре�ует. Нужн� ��е��ечить ��в���ждение в�ех ��ыл�� на ��ъе�ты, ��т�рые ���ут хра� нить�� в удал�е��� ��ъе�те. На�ри�ер, эт�т �ценарий удал�ет учетную �а�и�ь ��ль��вател�: ' Файл примера script0802.vbs set domain = GetObject("WinNT://имя_домена") ' (или //имя_компьютера) domain.Delete "user", "имя _пользователя" GetObject(class, name) Дл� и�влечени� ��н�ретн��� интере�ующе�� ва� ��ъе�та �� е�� �ла��у class и и�ени name в �тн�шении ��лле�ции эле�ент�в ��жн� �ри�енить �ет�д
ADSI-объекты для провайдера WinNT: 361 GetObject. На�ри�ер, � ���у и�влечь и� д��ена IADsUser���ъе�т дл� ��н�рет� н��� ��ль��вател�, ��аже�, �� и�ени "Dave", в����ль��вавши�ь �ледующи�и ��ерат�ра�и: set domain = GetObject("WinNT://mydomain") set dave = domain.GetObject("user ", "Dave") Е�ли ��ъе�ный ��ъе�т���лле�ци� ва� не нужен дл� �а�их�т� дру�их целей, эффе�тивнее �удет ��лучить �тдельный ��ъе�т не���ред�твенн� � ����щью ��лее ��н�ретн��� ��ни�ера. На�ри�ер: set dave = GetObject("WinNT://mydomain/Dave,User") Первый �ет�д тре��вал �т W��dows и�влечени� ��лн��� ��и��а ��ль��� вателей д��ена и �ру���вых и�ен и� ��нтр�ллера д��ена, а вт�р�й тре��вал и�влечени� т�ль�� �дн��� ��ъе�та. MoveHere(sourcepath, newname) Пере�ещает ��ъе�т и� дру���� ��нтейнера в данный ��нтейнер на ��н�ве ADsPath�и�ени эт��� ��ъе�та. Ар�у�ент newname �вл�ет�� и�ене� �ере�еща� е���� ��ъе�та, ��т�рый д�лжен �ыть в данн�� ��нтейнере. Он ��жет и�еть �начение Null, в та��� �лучае и�� ��ъе�та не и��ен�ет��. Эт�т �ет�д в��вра� щает ��ыл�у на �ере�ещае�ый ��ъе�т. И���ль�ует�� �н �ледующи� ��ра���: set user = container.MoveHere("WinNT://mydomain/someuser,User", Null) ▼) При дальнейшем рассмотрении других ADSI-объектов, когда про какой-нибудь объект говорит- ся, что он происходит из объекта IADsContainer, следует помнить, что у этого объекта имеются все свойства и методы, показанные в справочных списках 8.1 и 8.2, даже если они не будут еще раз перечислены. Работа с ADSI-коллекциями ADSI���лле�ции, ��н�ванные на ��ъе�те IADsContainer, ча�т� ��держат ��е�ь ти� ��в ��ъе�т�в, �тражающую �р�ани�ацию реальных ��ъе�т�в W��dows; д��ен ��жет ��держать учетные �а�и�и ��ль��вателей, учетные �а�и�и ����ьютер�в и �ру��ы �е���а�н��ти. В ����ьютере ��держит�� в�е эт� �лю� �и�те�ные �луж�ы. К�нечн�, ��жет �ыть не�р��т� ��уще�твить целена�равленный �т��р в та��й ��лле�ции, е�ли нужн� и�учить т�ль�� ��ъе�ты ��н�ретн��� ти�а. Дл� ��наружени� интере�ующе�� ��ъе�та ��жн� и�учить �в�й�тв� Class �ажд��� ��ъе�та. На�ри�ер, �ри выв�де ��и��а �ру�� в д��ене ��жн� на�и�ать �ледующий ��д: ' Файл примера script0803.vbs set domain = GetObject("WinNT://мой_домен") for each object in domain if object.class = "Group" then WScript.echo object.name end if next Е�ли ведет�� �дн�вре�енный ��и�� �ра�у не���ль�их �ру��, эт�т ��д �та� н�вит�� �лиш��� �р����д�и�. Чт��ы ����чь в решении эт�й �адачи, ��ъе�т
362 Глава 8. Active Directory Scripting Interface IADsContainer �ред��тавл�ет ��ециальн�е �в�й�тв� Filter. Е�ли �ринадлежаще�у ��лле�ции �в�й�тву Filter �ри�в�ить в �аче�тве �начени� �а��ив, ��держащий �дн� или не���ль�� и�ен Class, ���ле эт��� ��лле�ци� �удет �ред�тавлена �а� ��держаща� т�ль�� ��ъе�ты на�ванных �ла���в. В V�S���p� та��й �а��ив �р�ще в�е�� ���дать � ����щью фун�ции array(), ��т�ра� в��вращает �в�и ар�у�енты в виде �а��ива. Предыдущий �ри�ер �ценари� ��жн� �ере�и�ать �ледующи� ��ра���: ' Файл примера script0804.vbs set domain = GetObject("WinNT://мой_домен") domain.Filter = array("group") ' просмотр только групп for each object in domain ' с кан ирование коллекции Wscript.echo object.name next Е�ли дл� ��нтейнера у�тан�влен� �начение �в�й�тва Filter, вы ��жете дл� �р�� ���тра дру�их ��ъе�т�в �ри�в�ить е�у �начение дру���� �а��ива или же ��жете �ри�в�ить е�у �начение Nothing, чт��ы ��лн��тью удалить фильтр. Кр��е т���, ��жн� ���дать фильтр, д��у��ающий ��лее �дн��� ти�а �ла��а, �р��т� ���дав ��лее �ру�ный �а��ив: domain.Filter = array("group", "user ") Н�, �а� эт� ни �транн�, � ��наружил, чт� в V�S���p�, е�ли вы ���даете �а��ив Filter � ����щью V�S���p����ерат�ра dim, эт�т фильтр не ра��тает, или же �цена� рий �енерирует �ши��у, ���да вы �ытаете�ь �ри�в�ить �начение �а��ива �в�й�тву Filter. Предыдущий �ри�ер ра��тает, а в�т эт�т �ри�ер нет: dim flt(1) ' создание массива из двух элементов (с индексами 0 и 1) flt(0) = "group" flt(1) = "user" domain.filter = flt Наверн�е, эт� нед��тат��, �ри�ущий ли�� V�S���p�, ли�� ADSI. IADsComputer и IADsComputerOperations О�ъе�т IADsComputer �ред�тавл�ет учетную �а�и�ь ����ьютера в д��енн�й �ети W��dows. О�ъе�т IADsComputer ���в�л�ет �р���атривать инф�р�ацию � �ажд�� ����ьютере, вх�д�ще� в д��ен, и у�равл�ть ею. Е�� �в�й�тва �еречи�лены в ��рав� �е �.3. СПРАВКА 8.3. СВОЙСТВА ОБЪЕКТА IADSCOMPUTER Division И�� �тдела, �р�ани�ации или ����ании, на ��т�рую �аре�и�трир�вана ��е� раци�нна� �и�те�а ����ьютера. OperatingSystem Се�ей�тв� ��ераци�нн�й �и�те�ы, ��д у�равление� ��т�р�й ра��тает дан� ный ����ьютер. Дл� W��dows 7, V�s��, XP, 2000 и NT эт� "Windows NT".
ADSI-объекты для провайдера WinNT: 363 OperatingSystemVersion Вер�и� ��ераци�нн�й �и�те�ы на данн�� ����ьютере. Дл� W��dows XP и 2000 эт� �в�й�тв� и�еет �начение "5.0". Дл� V�s�� — "6.0", а дл� W��dows 7 — "6.1". Owner И�� чел�ве�а, на ��т�р��� �аре�и�трир�вана ��ераци�нна� �и�те�а, �а�у� щенна� на данн�� ����ьютере. Processor Т�р��ва� �ар�а и ��дель центральн��� �р�це���ра, ра��тающе�� на данн�� ����ьютере (на�ри�ер, � ��е� �р�це���ре ����щает�� чт� �н "AMD64 Family 15 Model 35 Stepping 2"�. ProcessorCount П��а�ывает, на чт� ���нфи�урир�вана W��dows — на ра��ту � �дни� �р�� це���р�� или � не���ль�и�и �р�це���ра�и. М�жет �ыть �тр���й "Uniprocessor Free" или "Multiprocessor Free". Сл�в� «F���» не и�еет �тн�шени� � цене — �н� ���а�ывает, чт� у�тан�в� ленна� вер�и� W��dows �вл�ет�� ��ычн�й, �р�давае��й в р��ницу вер�ией. Ра�ра��тчи�и �р��ра��н��� ��е��ечени� ин��да ��ль�уют�� дру��й вер�ией, «Ch��k�d», и�еющей д�в�льн� ��ъе�ный в�тр�енный внутренний ��д �тлад�и. К���ьютерный ��ъе�т ��жн� ��лучить �уте� вы��ва фун�ции GetObject() в �дн�� и� �ледующих ф�р�ат�в: set computer = GetObject("WinNT://имя_компьютера,Computer") set computer = GetObject("WinNT://имя_домена/имя_компьютера,Computer") П��ле и�ени нужн� ����ательн� у�а�ать ",Computer", чт��ы не в��ни�ла �ута� ница �ежду и�ена�и ����ьютер�в, �ру�� и д��ен�в. В д��у�ентации M���oso�� �� интерфей�у ADSI �в�й�тва ��ъе�та IADsComputer ��и�ывают�� �а� д��ту�ные �� чтению и �а�и�и, н� на �а��� деле и��енить их �ред�тва�и ADSI нев����жн�. Е�ли т�чнее, �в�й�тва ��жн� и��енить, н� �ет�д SetInfo в данн�� �лучае нед��ту�ен, ��эт��у вн��ить в �в�й�тва �а�ре�л�е�ые и��енени� фа�тиче��и нев����жн�. В д��у�ентации M���oso�� та�же �рив�дит�� ��и��� д���лнительных, на �ер� вый в��л�д, д�в�льн� ��ле�ных �в�й�тв, н� их наличие в �ажд�� ��н�ретн�� э��е�� �л�ре ��ъе�та IADsComputer нев����жн�. На�ри�ер, в �еречне �в�й�тв фи�урирует MemorySize, н� те�уще�� ADSI��р�вайдера, реали�ующе�� эт� �в�й�тв�, ���а нет. При ���ыт�е на не�� ���лать�� �ценарий ��енерирует �ши��у. В �ценари�х � эт�й не��ределенн��тью ��жн� ��равить�� �уте� �тл�ва �ши��и, ��т�ра� �р�и�х�дит �ри ���ыт�е ��ращени� � не�уще�твующе�у �в�й�тву �ри� �енительн� � ��н�ретн�й ���ии и�еюще���� у ва� ��ъе�та: name = "." ' и мя исс ледуемого компьютера set computer = GetObject("WinNT://" & name & ",Computer") memsize = "не определен" on error resume next if len(computer.MemorySize) > 0 then memsize = computer.MemorySize
364 Глава 8. Active Directory Scripting Interface on error goto 0 wscript.echo "У компьютера ", name, " объем памяти ", memsize М�жн� в�е эт� ����щить, на�и�ав фун�цию, �ред�рини�ающую ���ыт�у ��лу� чить �начени� �в�й�тв ��ъе�та чере� �ет�д Get: ' Файл примера script0805.vbs name = "mycomputer" ' имя ис следуемого компьютера set computer = GetObject("WinNT://" & name & ",Computer") wscript.echo "Компьютер " & name & ":" wscript.echo "Объем памяти:", getprop(computer, "MemSize", "не определен") wscript.echo "Тип ЦПУ:", getprop(computer, "Processor", "не определен") function getprop (obj, propertyname, default_value) getprop = default_value ' предположение об отказе и установка ' зна чен ия по умолчанию on error resume next ' и гнорирование ошибок getprop = obj.Get(propertyname) ' попытка установить возвращаемому значению ' зна чен ие свойства ' есл и Get не сработает, исходное значение ' не изменится end function И�учить фа�тиче��ий на��р �в�й�тв ��ъе�та ��жн� � ����щью и��лед�вани� IADsClass���ъе�та, ��и�ывающе�� е�� �тру�туру: ' Файл примера script0806.vbs name = "java" ' имя ис следуемого компьютера set computer = GetObject("WinNT://" & name & ",Computer") set cls = GetObject(computer.Schema) ' получения объекта со списком свойств ' MandatoryProperties — это строковый массив с именами тех свойств, которые ' должны быть у каждого объекта IADsComputer. OptionalProperties — это массив ' и мен св ойств, которые могут быть у объекта IADsComputer для данного ' к онкретного компьютера. For Each p In cls.MandatoryProperties wscript.echo p & ":", computer.get(p) ' в ывод списка, состоящего из имен ' и зн аче ний свойств Next For Each p In cls.OptionalProperties wscript.echo p & ":", computer.get(p) Next Считает��, чт� ��ъе�т Computer та�же �ред��тавл�ет �в�й�тва и �ет�ды у�рав� лени� чере� �в�й интерфей� ADsComputerOperations, в ��т�р��, ���ла�н� д��у�ен� тации, и�еет�� �ет�д Shutdown и �в�й�тв� Status. Н� те�ущий ADSI их реали�аций не �ред��тавл�ет, ��эт��у ADSI нель�� и���ль��вать дл� вы�лючени� (или �ере� �а�ру��и� ����ьютера, ра��тающе�� ��д у�равление� W��dows. Интерфей� IADsComputerOperations ��жет �ыть �ад��у�ентир�ван, н� в реаль� н�й �ра�ти�е е�� не �уще�твует. И на��нец, ��ъе�т IADsComputer ��жет ��тенциальн� �ыть ��ра��тан �а� ��л� ле�ци�. О�ъе�ты в е�� ��лле�ции в�лючают IADsService���ъе�ты, �ред�тавл�ю� щие в�е у�тан�вленные на ����ьютере �луж�ы, ��ъе�ты IADsUser и IADsGroup дл� л��альных ����ьютерных ��ль��вателей и �ру��, и ��тенциальн� дру�ие ��ъе�ты,
ADSI-объекты для провайдера WinNT: 365 та�ие �а� «P����Job» (�адани� на �ечать� и т. д. Эти ра�личные ти�ы ��ъе�т�в �ере�ешаны в данн�й ��лле�ции, � че� ��жн� �удить, �����трев на инф�р�ацию, выведенную �ледующи� уче�ны� �ценарие�: ' Файл примера script0807.vbs ' и мя исс ледуемого компьютера (его нужно изменить перед запуском сценария): name = "computername" set computer = GetObject("WinNT://" & name & ",Computer") for each obj in computer ' исс ледование содержимого контейнера wscript.echo obj.class, obj.adspath ' вывод типа и имени объекта next Я ��наружил, чт� данный ��н�ретный �ценарий не в�е�да ра��тает �равильн�. На�ри�ер, на W��dows S��v�� 2003 � видел, �а� �н выв�дит ��и��и ��ль��вате� лей, �ру�� и ��льше ниче�� — �ценарий �а�тревает на ���ыт�е �р�движени� �� ��лле�ции � ����щью ци�ла for each. Перед и���ль��вание� эт��� ци�ла дл� у�а�ани� ти�а (или ти��в� и��ледуе�ых ��ъе�т�в ��жн� в����ль��вать�� �в�й� �тв�� .Filter. IADsDomain О�ъе�т IADsDomain �ред�тавл�ет д��ен �е���а�н��ти W��dows или N��W���, �ру��у ��ль��вателей и ����ьютер�в, ��в�е�тн� и���ль�ующих ��щую �а�у дан� ных учетных �а�и�ей ��ль��вателей. О�ъе�т IADsDomain �ред��тавл�ет �ет�ды и �в�й�тва, ���в�л�ющие �р���атривать ��ль��ватель��ие учетные �а�и�и в д�� �ене и у�равл�ть и�и. Отдельные ����ьютеры, вх�д�щие в д��ен или в �р��тую (�ирин��вую� �еть ра��чей �ру��ы, та�же и�еют л��альные �а�ы данных учетных �а�и�ей ��ль��вателей, ��т�ры�и IADsDomain та�же ��жет у�равл�ть. Св�й�тва и �дин �ет�д ��ъе�та IADsDomain ра����трены в ��рав�е �.4 . О�ъе�т IADsDomain �р�и�х�дит и� ��ъе�т�в IADsContainer и IADs, ��эт��у у не�� та�же и�еют�� �в�й�тва и �ет�ды этих ��ъе�т�в. Не���ль�� та�их д���лнительных �в�й�тв �еречи�лены в ��рав�е �.5, н� �ледует ���нить, чт� е�ть еще и дру�ие, уна�лед�ванные �в�й�тва и �ет�ды. СПРАВКА 8.4. СВОЙСТВА И МЕТОД ОБЪЕКТА IADSDOMAIN СВОЙСТВА AutoUnlockInterval Вре�� в �е�ундах, в течение ��т�р��� учетна� �а�и�ь ��тает�� нед��ту�н�й ���ле �ерии неверных ���ыт�� в�йти в �и�те�у � и���ль��вание� �ар�л�. Filter О�раничивает види���ть ��лле�ции ��ъе�та т�ль�� те�и �ла��а�и ��ъе�т�в, ��т�рые �еречи�лены в �а��иве, �ри�в�енн�� фильтру. Д���лнителна� инф�р� �аци� �ред�тавлена в ра�деле «Ра��та � ADSI���лле�ци��и». IsWorkgroup Булев� �начение, ��т�р�е равн� True, е�ли эт�т IADsDomain���ъе�т �ред� �тавл�ет �атал�� �тдельн��� ��ль��вател� на л��альн�� ����ьютере. И�еет
366 Глава 8. Active Directory Scripting Interface и�тинн�е �начение дл� в�ех уча�тни��в �етей ра��чих �ру�� и дл� �тдельных ����ьютер�в д��енн�й �ети. LockoutObservationInterval Ма��и�альн�е вре�� в �е�ундах �ежду ���ыт�а�и вх�да � нед��у�ти� �ы� �ар�ле�, ра���атривае�ы�и �а� ча�ть ��д�читывае��й �ерии ���ыт��. Счетчи� ���ыт�� ��нул�ет�� ���ле и�течени� ��личе�тва �е�унд, у�а�анных в LockoutObservationInterval. MinPasswordAge Мини�альн�е вре�� в �е�ундах, ��т�р�е д�лжн� и�течь, ���а не ���вит�� в����жн��ть и��енени� н�в��� �ар�л�. Эт� �в�й�тв� ��жет удержать ��ль��ва� телей �т �лиш��� �ы�тр��� в��вращени� их �ар�лей � т��у �начению, ��т�р�е уже �режде и���ль��вал��ь. MinPasswordLength Мини�альна� ра�решенна� длина �ар�л�. MaxBadPasswordsAllowed Ма��и�альн�е ��личе�тв� неудачных ���ыт�� вх�да в �и�те�у � и���ль� ��вание� �ар�л�, ра�решенн�е д� т���, �а� учетна� �а�и�ь �удет �а�л��и� р�вана. MaxPasswordAge Ма��и�альн�е вре�� в �е�ундах, в течение ��т�р��� �ар�ль ��жет ��та� вать�� неи��енны�, ���ле че�� ��ль��ватель вынужден и��енить �в�й �ар�ль. PasswordAttributes Значение, ���а�ывающее не��х�ди�ую �л�жн��ть �ар�л�, в��тре�уе�ую �и�те��й. Эт� �в�й�тв� ��жет и�еть �дн� и� �ледующих �начений. Константа Зна- чение Описание PASSWORD_ATTR_NONE 0 Тре��вани� �� �л�жн��ти �т�ут�твуют PASSWORD_ATTR_MIXED_CASE 1 В �ар�ле д�лжны и���ль��вать�� �и�в�лы верх� не�� и нижне�� ре�и�тр�в PASSWORD_ATTR_COMPLEX 2 В �ар�ле д�лжен и���ль��вать�� �а� �ини�у� �дин �на� �ун�туации или �и�в�л, не выв�ди� �ый на �ечать ▼) Для других объектов, используемых в сценариях, я, вероятно, мог бы предложить упаковывать ваш сценарий в файл .wsf и использовать тег <reference> для автоматического импортирова- ния предопределенных констант. Но для ADSI, как ни печально, это предложение бесполезно. Для ADSI-сценариев вы должны определять константы самостоятельно, как в следующем при- мере на VBScript: const PASSWORD_ATTR _MIXED _CASE = 1 Файл VBScript со всеми ADSI-константами, перечисленными в данной главе, можно загрузить с веб-адреса http://www.helpwin7.com/scripting.
ADSI-объекты для провайдера WinNT: 367 PasswordHistoryLength К�личе�тв� �редыдущих �ар�лей, �а���инае�ых �и�те��й. Эт� �в�й�тв� и�� ��ль�ует��, чт��ы ����чь ��ль��вател��, вынужденны� и��ен�ть �в�и �ар�ли, и��ежать �лиш��� �ы�тр��� в��вращени� � �в�и� и�х�дны� �ар�л��. Значение PasswordHistoryLength, равн�е, ��аже�, 10, в �аре � ��льши� �начение� дл� MinPasswordAge (��аже�, 120 �е�унд� ��жет �ильн� д��аждать те� ��ль��вате� л��, ��т�рые �р�тив�т�� и��енению �ар�лей. Они �ред��читают вы�рать �е�е н�вый �ар�ль и �а�и�ать е�� на �ти�ере, �ри�леивае��� � ��нит�ру. МЕТОД SetInfo Ка� и �� в�е�и ��тальны�и ��ъе�та�и, ���данны�и на ��н�ве IADs, дл� �ередачи лю�ых и��енений, вне�енных в �начени� �в�й�тв ��ъе�та ��ратн� �ред�тавл�е���у и�и �атал��у W��dows, нужн� и���ль��вать �ет�д Set- Info. (В IADsDomain �ред�тавлены и в�е ��тальные �в�й�тва и �ет�ды IADs и IADsContainer, �еречи�ленные в ��рав�чных ��и��ах �.1 и �.2. П�вт�рн�е ра�� ���трение эт��� �ет�да вы�ван� желание� ��ратить на не�� �����е вни�ание.� Дл� ��лучени� IADsDomain���ъе�та �ледует в����ль��вать�� фун�цией GetObject: set domain = GetObject("WinNT://имя_домена") О�ъе�т IADsDomain та�же �вл�ет�� ��нтейнер��. Эле�енты е�� ��лле�ции ���ут �ыть ��е�ью ��ль��ватель��их учетных �а�и�ей (IADsUser�, �ру�� �е���а�� н��ти (IADsGroup�, ����ьютерных учетных �а�и�ей (IADsComputer� и дру�их ��ъ� е�т�в. В�ю ��лле�цию ��жн� �р���анир�вать, и���ль�у� ��ычные �ет�ды, �ри�ущие ваше�у ��ы�у �ценариев, или же ��жн� в����ль��вать�� �в�й�тв�� Filter, чт��ы �ве�ти види���ть � ��раниченн��у на��ру ти��в ��ъе�т�в. К �ри�еру, �ледующий �ценарий выв�дит т�ль�� ��и��� ��ль��вателей у�а�анн��� д��ена: ' Файл примера script0808.vbs set domain = GetObject("WinNT://имя_домена") domain.Filter = array("User") ' просмотр только объектов класса User for each user in domain ' ск анирование коллекции и вывод имени каждого ' пользователя wscript.echo user.name next IADsFileService и IADsFileServiceOperations О�ъе�т IADsFileService �ред�тавл�ет �луж�у ��щих файл�в на �аданн�� ����ью� тере. Эт�т ��ъе�т ��жн� и���ль��вать дл� и��лед�вани� ��щих �а��� и у�равле� ни� и�и и даже дл� �т�лючени� или �а�рыти� ��щих файл�в, ���еченных �а� «и���ль�уе�ые» (на�ри�ер, ���ле аварии ра��чей �танции�. Он ��н�ван на ��ъе�те IADsService, ��т�рый �ред�тавл�ет �и�те�ные �луж�ы лю���� ти�а. У эт�й файл�� в�й �луж�ы е�ть не���ль�� интерфей��в, и эта ����енн��ть уже ра���атривала�ь в данн�й �лаве.
368 Глава 8. Active Directory Scripting Interface О�ъе�т IADsFileService ��ладает в�е�и �в�й�тва�и и �ет�да�и ��ъе�т�в IADsService и IADsServiceOperations, ��т�рые еще �удут ра����трены в данн�й �лаве, и и�еет д���лнительные фун�ции, �редна�наченные дл� ��ддерж�и ��щих файл�в. Кр��е эт���, д���лнительные �в�й�тва и �ет�ды д��авл�ют�� интерфей� ��� IADsFileServiceOperations. В ��нечн�� ре�ультате эт�т ��ъе�т у�равлени� файл�в�й �луж��й и�еет в�е �в�й�тва, �еречи�ленные дл� IADsFileService и IADsFileServiceOperations и ра�� ��атривае�ые в ��рав�е �.5 . СПРАВКА 8.5. ОБЩИЕ СВОЙСТВА ИНТЕРФЕЙСОВ IADSFILESERVICE И IADSFILESERVICEOPERATIONS Description Ка� уже �т�ечал��ь в данн�й �лаве, в� вре��е «Важные �а�ечани� �тн��и� тельн� д��у�ентации M���oso��», не��т�рые ���в�ренные �в�й�тва на �а��� деле не ра��тают, и эт� �дн� и� них. Он� в�е�да в��вращает �у�тую �тр��у. MaxUserCount С��ла�н� д��у�ентации M���oso��, �в�й�тв� MaxUserCount в��вращает или ���в�л�ет у�тан�вить �а��и�альн�е ��личе�тв� ��ль��вателей, ��т�ры� ра�� решен� ��д�лючить�� � ��щи� файла� на �в��анн�� � интерфей�а�и ���� �ьютере. Н� эт� еще �дн� нереали��ванн�е �в�й�тв�. MaxUserCount в�е�да в��вращает �начение –1, а �ценарий �енерирует �ши��у �ри ���ыт�е и��енить эт� �начение. Resources В��вращает ��лле�цию IADsResource���ъе�т�в, �вл�ющую�� ��и���� �аж� д��� и� и���ль�уе�ых в данный ���ент ��щих ре�ур��в �в��анн��� � интер� фей�а�и ����ьютера (на�ри�ер ��ъе�т�в, �т��ражающих файлы, и�ен�ванные �аналы и т. д .� . О�ъе�т IADsResource �удет ра����трен в данн�� ра�деле чуть ���же, �����ль�у в дру��� �е�те �н не и���ль�ует��. ▼o Свойство Resources может быт неправильно понято. Оно описывает общие ресурсы, которые ис- пользуются в данное время. Объект IADsFileService сам по себе является коллекцией, и его со- держимым являются объекты, которые представляют все общие папки и принтеры компьютера. Sessions В��вращает ��лле�цию IADsSession���ъе�т�в, �ред�тавл�ющую ��единени� �в��анн��� � интерфей�а�и ����ьютера и лю�ы�и �лиента�и (��ль��вател�� �и�, �ри��единенны�и � �луж�е ��в�е�тн��� д��ту�а � файла� — F��� Sh����g. О�и�ание ��ъе�та дает�� далее в ра�деле «IADsS�ss�o�». О�ъе�т IADsFileService �аданн��� ����ьютера ��жн� ��лучить �уте� �ри� в���и � �луж�е LanManService � ����щью ��ерат�ра set fs = GetObject("WinNT://имя_компютера/LanManServer") или ��ерат�ра set fs = GetObject("WinNT://имя_домена/имя_компютера/LanManServer")
ADSI-объекты для провайдера WinNT: 369 Ка� уже у���инал��ь, в д���лнение � �в�й�тва�, �еречи�ленны� в ��рав�е �.5, ��ъе�т IADsFileService �а� �вл�ет�� ��лле�цией IADsFileShare���ъе�т�в, ��и� �ывающих ��щие ре�ур�ы ����ьютера. О�ъе�т IADsFileShare �удет та�же в���ре ра����трен. Св�й�тв� Resources в��вращает ��лле�цию IADsResource���ъе�т�в, чьи �в�й�тва �еречи�лены в ��рав�е �.6 . В эт�й ��лле�ции �еречи�лены ��щие �а��и, и���ль� �уе�ые ��ль��вател��и �ети. СПРАВКА 8.6. ОБЪЕКТА IADSRESOURCE Name У �ажд��� ��ъе�та IADsResource, �а� и у в�ех ��ъе�т�в ADSI, е�ть и��, н� в данн�� �лучае эт� �р�и�в�льна� �тр��а цифр, на�наченна� ����ьютер��, вы� дел�ющи� ��щие ре�ур�ы, ��т�ра� ни�де не и���ль�ует��. User В��вращает и�� учетн�й �а�и�и т��� ��ль��вател�, ��т�рый �т�рыл эт�т ре�ур�. UserPath В��вращает ADsPath ��ль��вател�, ��т�рый �т�рыл эт�т ре�ур�. Дл� ��лу� чени� IADsUser���ъе�та, �ред�тавл�юще�� эт��� ��ль��вател�, нужн� в����ль� ��вать�� фун�цией GetObject() � эт�й �тр���й. Path В��вращает �уть и и�� файла ре�ур�а на е�� х��т�����ьютере. LockCount В��вращает ��личе�тв� и�еющих�� �л��ир�в�� файл�в на эт�� ре�ур�е. (Бл��ир�в�а файла �вл�ет�� �ехани���� ��ераци�нн�й �и�те�ы, и���ль�уе� �ы� �н�����ль��ватель��и�и �а�а�и данных и дру�и�и �р��ра��а�и в� и�� �ежание ���ыт�� �� �т�р�ны �ра�у не���ль�их ��ль��вателей �дн�вре�енн� и��енить �дну и ту же инф�р�ацию.� Следующий �ценарий выв�дит в�е файлы, �вл�ющие�� ��щи�и на у�а�анн�� ����ьютере, ��т�рые и���ль�уют�� в данный ���ент: ' Файл примера script0809.vbs set cname = "sumatra" set fs = GetObject("WinNT://" & cname & "/LanManServer") wscript.echo "Общие файлы, используемые на ", cname & ":" on error resume next for each resource in fs.Resources WScript.echo resource.path, "используется", resource.user next Не��х�ди���ть ��ерат�ра on error resume next вы�вана те�, чт� �ри ��ыл�е ��ъе�та IADsFileService на ����ьютер, не �вл�ющий�� ����ьютер��, на ��т�р�� �а�ущен �ценарий, ин��да �дин и� ��ъе�т�в, в��вращенный в ��лле�ции Resources �вл�ет�� не��лн�ценны� — в не� �т�ут�твует �в�й�тв� Path или �в�й�тв� User,
370 Глава 8. Active Directory Scripting Interface и �н не ��жет �ыть в�лючен в ��и���. П� в�ей вер��тн��ти, ре�ур� ��ылает�� на ADSI���д�лючение, и���ль�уе��е дл� ���ра инф�р�ации �� удаленных ре�ур�ах. Н�, не�ави�и�� �т наличи� та�их ��ъе�т�в, �ни не ���ут �ыть и��лючены, �р��е �а� �уте� их неудачн��� �р����тра, ��эт��у лучше и�еть �ценарий, и�н�рирую� щий в��ни�ающую �ши��у. Эт�т �ценарий не выв�дит и�� ��ль��ватель����� ����ьютера, х�т� �ача�тую ��ле�н� �нать, �уда нужн� ��ращать��, чт��ы �а�тавить �����ни�удь �ре�ратить и���ль��вание файла, ��т�рый ва� нужн� �ере�е�тить, �ереи�ен�вать или ����и� р�вать в ре�ервный архив. В �ледующей вер�ии �ценари� выв�дит�� �еречи�ление ��ль��вателей �� �е��и��, а �ате� �еречи�л�ют�� в�е и���ль�уе�ые и�и файлы: ' Файл примера script0810.vbs cname = "sumatra" set fs = GetObject("WinNT:// " & cname & "/LanManServer") wscript.echo "Общие файлы, используемые на ", cname & ":" on error resume next for each session in fs.Sessions ' Вывод списка пользователей ' ка ждой сессии WScript.echo "*", session.user, "из ", session.computer & ": " for each resource in fs.Resources ' с кан ирование ресурсов, но if resource.user = session.user then ' вывод только тех, которые ' от нос ятс я к данному пользователю WScript.echo " ", resource.path end if next next IADsFileShare О�ъе�т IADsFileShare �ред�тавл�ет �дну ��щую �а��у на ра��чей �танции или на �ервере. Е�� �в�й�тва �еречи�лены в ��рав�е �.7 . СПРАВКА 8.7. СВОЙСТВА ОБЪЕКТА IADSFILESHARE CurrentUserCount П��а�ывает ��личе�тв� ��ль��вателей, ��д�люченных в данный ���ент � ��щей �а��е. (Т�ль�� чтение.� Description Те��т�в�е ��и�ание ��щей �а��и (в����жн�, ее на�начени��. HostComputer ADsPath�и�� ����ьютера, на ��т�р�� нах�дит�� эта ��ща� �а��а. Е�ли нужен д��ту� � ���твет�твующе�у ��ъе�ту IADsComputer, �в�й�тв� HostComputer ��жн� и���ль��вать � фун�цией GetObject(). MaxUserCount Ма��и�альн�е ��личе�тв� ��ль��вателей, ��т�рые ���ут �дн�вре�енн� ��д�лючить�� � данн��у ре�ур�у. (Т�ль�� чтение.�
ADSI-объекты для провайдера WinNT: 371 Name О�щее и�� дл� эт�й �а��и (Эт� �в�й�тв� на�ледует�� у �а��в��� ��ъе�та IADs и д��ту�н� т�ль�� �� чтению.� Path Путев�е и�� ��ще�� файла на х��т�����ьютере. Д��ту� � �уще�твующи� IADsFileShare���ъе�та� на у�а�анн�� ����ьютере ��жн� ��лучить чере� ��лле�цию в�ех ��щих ре�ур��в: ' Файл примера script0811.vbs set lm = GetObject("WinNT://computername/LanManServer") for each share in lm wscript.echo share.name, "=", share.path next А е�ли и�ве�тн� е�� и��, т� ��жн� та�же в����ль��вать�� ��ни�ер��: set share = GetObject("WinNT://computername/LanManServer/sharename") С��дать ��щую �а��у на ����ьютере ��жн� �уте� ���дани� н�в��� IADsFile- Share���ъе�та � ����щью �ет�да Create: ' Файл примера script0812.vbs set lm = GetObject("WinNT://мой_сервер/LanManServer") set share = lm.Create("FileShare", "Общее_имя") share.path = "C:\некая_папка\некая_другая_папка" share.description = "Некий текст описания" share.SetInfo ' с охранение измененного объекта ▼) Метод Create рассматривается в справке 8.2. ▼) Текущая версия ADSI не может установить ограничения на общее использование (полномочия на использование общего ресурса). IADsGroup О�ъе�т IADsGroup �ред�тавл�ет �ру��у �е���а�н��ти, ��т�ра� �вл�ет�� на��р�� ��ль��вателей, �ажд��у и� ��т�рых на�начен на��р ��ределенных �ривиле�ий и �рав д��ту�а � файла�. П�н�тие �ру��ы �е���а�н��ти �уще�твует в ��ераци� �нных �и�те�ах W��dows NT, 2000, XP,V�s�� и 7, а та�же на в�ех вер�и�х N��W���. Св�й�тва и �ет�ды ��ъе�та IADsGroup �еречи�лены в ��рав�е �.� . Ка� ни �транн�, �а� ��ъе�т IADsGroup не �вл�ет�� ��лле�цией ��ъе�т�в. Чт��ы ��ределить ���тав �ру��ы, нужн� в����ль��вать�� �ет�д�� Members дл� и�влечени� ��лле�ции, �ред� �тавл�ющей уча�тни��в. СПРАВКА 8.8. СВОЙСТВА И МЕТОДЫ ОБЪЕКТА IADSGROUP СВОЙСТВА Description Стр��а, ��и�ывающа� на�начение �ру��ы. Name И�� �ру��ы. (Эт� �в�й�тв� на�ледует�� у �а��в��� ��ъе�та IADs.�
372 Глава 8. Active Directory Scripting Interface МЕТОДЫ Add adsPath Д��авл�ет в �ру��у н�в��� уча�тни�а. ADsPath ��и�ывает д��авл�е���� ��ль��вател� или �ру��у, на�ри�ер "WinNT://имя_домена/имя_пользователя". IsMember(user) Пр�вер�ет у�а�анн��� ��ль��вател� user на �ринадлежн��ть � �ру��е и в��� вращает True или False. П�ль��ватель д�лжен �ыть у�а�ан в виде ADsPath, �ред� �тавл�юще�� ��ль��ватель��ую учетную �а�и�ь (на�ри�ер, "WinNT://домен/ имя_пользователя"�. Members() В��вращает ��лле�цию IADsMembers, в ��т�р�й �еречи�л�ют�� в�е ��ль� ��ватели, вх�д�щие на данный ���ент в �ру��у �е���а�н��ти. К�лле�ци� IADsMembers ра���атривает�� в �ледующе� ра�деле. Remove user Удал�ет у�а�анн��� ��ль��вател� и� �ру��ы �е���а�н��ти. П�ль��ватель д�лжен �ыть у�а�ан в виде ADsPath, �ред�тавл�юще�� ��ль��ватель��ую учет� ную �а�и�ь. П�лучить ��ъе�т IADsGroup дл� у�а�анн�й �ру��ы ��жн� � ����щью фун�ции GetObject(), �а� ���а�ан� в данн�� ��ерат�ре: set group = GetObject("WinNT://домен/имя_группы,Group") Кр��е эт���, �р���анир�вать в�е �ру��ы �аданн��� д��ена ��жн� �уте� и�� учени� ��лле�ции ��ъе�та д��ена: set domain = GetObject("WinNT://домен") domain.filter = array("Group") for each group in domain wscript.echo group.name, group.class next ▼) В любом из этих примеров для управления локальной группой серверов или группами безопас- ности в компьютерах, не принадлежащих доменной сети, «домен» можно заменить именем компьютера. Н�вую л��альную или �л��альную �ру��у ��жн� ���дать, и���ль�у� и�ею� щий�� в IADsContainer �ет�д Create � ��ъе�т��, �ред�тавл�ющи� ����ьютер или д��ен. Ка� эт� �делать, ���а�ан� в �ледующе� �ри�ере: ' Файл примера script0813.vbs set server = GetObject("WinNT://мой_компьютер") set newgrp = server.Create("Group", "Приверженцы IBM 1130") newgrp.SetInfo ' указание ADSI сохранить новую группу newgrp.Add("WinNT://мой_компьютер/bknittel,User") newgrp.Add("WinNT://мой_компьютер/naleks,User")
ADSI-объекты для провайдера WinNT: 373 IADsMembers О�ъе�т IADsMembers �вл�ет�� ��лле�цией ��ъе�т�в, �ред�тавл�ющих �тдельные учетные �а�и�и ��ль��вателей, �ринадлежащие �ру��е �е���а�н��ти (IADsGroup�. Эт� ��ычна� ��лле�ци� ��ъе�т�в, � ��т�р�й ��жн� ра��тать в �ценари�х � ��� ��щью �в�й�тва Count, ���а�ывающе�� ��личе�тв� эле�ент�в в ��лле�ции и � ��� ��щью д���лнительн��� �в�й�тва Filter, ��т�р��у ��жн� �ри�в�ить �тр���в�е �начение, ��раничивающее ��личе�тв� эле�ент�в, ���а�ывае�ых в ��лле�ции. Св�й�тву Filter ��жет �ыть ��тавлен� е�� �начение �� у��лчанию, Nothing, или е�у ��жет �ыть �ри�в�ен� �начение в виде �а��ива �тр�� � и�ена�и тех �ла���в ��ъе�т�в, ��т�рые д�лжны �ыть ���а�аны. Следующий фра��ент �ценари� �ере� чи�л�ет ��ль��вателей в �аданн�й �ру��е �е���а�н��ти, и��люча� �ру��ы, ��т�рые та�же ���ут вх�дить в чи�л� уча�тни��в: ' Файл примера script0814.vbs set ptu = GetObject("WinNT://mydomain/PeachTree Users,Group") set members = ptu.Members members.filter = array("User") ' сп исо к п оль зов ате лей в группе PeachTree Users for each user in members wscript.echo "пользователь:", user.name next О�ъе�ты в ��лле�ции IADsMembers ��тенциальн� �вл�ют�� ��е�ью ��ъе�т�в IADsUser и IADsGroup. Ти� �ажд��� ��ъе�та ��жн� ��ределить, и��лед�вав е�� �в�й�тв� Class. Эт� �в�й�тв� е�ть у в�ех ��ъе�т�в, ���данных на ��н�ве IADs, и �н� дает ��и�ание ��н�ретн�й ра�н�видн��ти и�еюще���� у ва� ��ъе�та ADSI: "User", "Group", "PrintServer" и т. д. IADsNamespaces О�ъе�т IADsNamespaces �вл�ет�� ��лле�цией в�ех ADSI��р�вайдер�в, д��ту�ных ����ьютеру, на ��т�р�� �а�ущен ADSI��ценарий. В ��лле�ции �еречи�л�ют�� и�ена �р�вайдер�в в виде �тр��, ��т�рые ���ут и���ль��вать�� дл� ���тавлени� ��ни�ер�в ��ъе�т�в. О�ъе�т ���дает�� ��ерат�р�� GetObject("ADs:"). Следующий �ценарий, �а�ущенный на ��е� те�т�в�� ����ьютере set namespaces = GetObject("ADs:") wscript.echo "Пространства имен ------" for each ns in namespaces wscript.echo ns.name next выв�дит �ледующее: Пространства имен ------ WinNT: NWCOMPAT: NDS: LDAP: IIS:
374 Глава 8. Active Directory Scripting Interface П�дра�у�евает�� та�же, чт� у ��ъе�та е�ть �в�й�тв� �� и�ени DefaultContainer, ��т�р��у ��жн� �ри�в�ить �начение ADsPath. Я ��а�ал «��дра�у�евает��, чт� е�ть», ��т��у чт� ни �дна и� ��их ���ыт�� ���лать�� на не�� не увенчала�ь у��ех��: � неи��енн� ��лучал �ши��у � ����щение� «Obj��� do�s�’� suppo�� �h�s p�op���y» («О�ъе�т не ��ддерживает данн�е �в�й�тв�»�. Е�ли эт� �в�й�тв� д��ту�н� на ваших �и�те�ах, е�у ��жн� �ри�в�ить �начение ��нтейнера �� у��лчанию дл� те�ущей учетн�й �а�и�и ��ль��вател�. Дл� начала в��лне ��д�йдет и эт�т ��нтейнер, на�ри�ер, �ри �т��ражении «���едних» учет� ных �а�и�ей. Св�й�тв� DefaultContainer ��ъ�влен� д��ту�ны� �� чтению и �а� �и�и. В не� ��жн� хранить �уть � ��нтейнеру �� у��лчанию дл� �удущих ADSI� �а�р���в те�уще�� ��ль��вател�. Вы�ывать .SetInfo ���ле и��енени� �начени� �в�й�тва DefaultContainer не нужн�. IADsPrintJob и IADsPrintJobOperations О�ъе�т IADsPrintJob �ред�тавл�ет �тдельн�е �адание на �ечать в �череди �етев��� �ринтера. Эт�т ��ъе�т ��жн� и���ль��вать дл� �р����тра и�ен ��ль��вателей, �т�равивших �адание, и дру�их �ара�етр�в эт��� �адани�. О�и�ание �в�й�тв ��ъ� е�та дан� в ��рав�е �.9 . Е�ли �чередь на �ечать ���дана на W��dows� или N��W���� �ервере, ��т�рый ��жет у�равл�ть�� � ����щью ADSI, ��ъе�т ��держит д���лни� тельные �в�й�тва и �ет�ды, ��ределенные интерфей��� IADsPrintJobOperations, ��и�ание ��т�рых дан� в ��рав�е �.10. СПРАВКА 8.9. СВОЙСТВА ОБЪЕКТА IADSPRINTJOB Description Стр��а � ��и�ание� �адани� на �ечать. Зача�тую эт� и�� выв�ди���� на �ечать д��у�ента, н� ин��да эт� �у�та� �тр��а. За�ад�чн�е ��и�ание «R�mo�� Dow���v�� Do�um���» («Удаленный д��у�ент ни�ше�� ур�вн�»� �видетель�тву� ет � выв�де и� DOS��рил�жени�. HostPrintQueue ADsPath�и�� ��ъе�та IADsPrintQueue, �ред�тавл�юще�� данную �чередь �аданий на �ечать. Е�ли нужн� ��лучить ���твет�твующий ��ъе�т, эту �тр��у ��жн� и���ль��вать � фун�цией GetObject(). (Т�ль�� чтение.� Notify И�� ��ль��вател�, увед��л�е���� �ри �авершении или �т�ене данн��� �а� дани� на �ечать. NotifyPath ADsPath�и�� ��ъе�та IADsUser, �ред�тавл�юще�� учетную �а�и�ь ��ль��ва� тел�, увед��л�е���� �ри �авершении или �т�ене данн��� �адани� на �ечать. Е�ли нужн� ��лучить ��ъе�т ��ль��вател�, NotifyPath ��жн� и���ль��вать � фун�цией GetObject().
ADSI-объекты для провайдера WinNT: 375 Priority Ур�вень �ри�ритета данн��� �адани� на �ечать, н��ера �т 1 и выше. Size Ра��ер �адани� на �ечать в �айтах. (Т�ль�� чтение.� StartTime Значение даты�вре�ени, ���а�ывающее �а��е раннее вре�� ра����тре� ни� эт��� �адани� дл� выв�да на �ечать. Ча�ть, �тн���ща��� � дате, и�н�ри� рует��. TimeSubmitted Значение даты�вре�ени, ���а�ывающее вре�� выдачи �адани� на �ечать. (Т�ль�� чтение.� TotalPages О�щее ��личе�тв� �траниц в �адании на �ечать. (Т�ль�� чтение.� UntilTime Значение даты�вре�ени, ���а�ывающее �а��е ���днее вре�� ра����трени� эт��� �адани� дл� выв�да на �ечать. Ча�ть, �тн���ща��� � дате, и�н�рирует��. Е�ли �в�й�тва StartTime и UntilTime и�еют �дина��вые �начени�, �адание ��жет �ыть выведен� на �ечать в лю��е вре��. User И�� ��ль��вател�, выдавше�� эт� �адание на �ечать. UserPath ADsPath�и�� ��ъе�та IADsUser, �ред�тавл�юще�� ��ль��вател�, выдавше�� �адание на �ечать. Е�ли нужн� ��лучить ��ъе�т ��ль��вател�, UserPath ��жн� и���ль��вать � фун�цией GetObject(). О�ъе�ты IADsPrintJob �ред��тавл�ют�� в виде ��лле�ции и� �в�й�тва Print- Jobs, �ринадлежаще�� ��ъе�ту IADsPrintQueue. Ра����три� �ри�ер: ' Файл примера script0815.vbs set server = GetObject("WinNT://имя_сервера/общее_имя") for each job in server.Printjobs wscript.echo job.User, job.TotalPages next Дл� �аданий на �ерверах W��dows и N��W��� ��ъе�т IADsPrintJob вы�тавл�ет д���лнительный интерфей� IADsPrintJobOperations, дающий ��ъе�ту д���лни� тельный на��р �в�й�тв и �ет�д�в, ��и�ание ��т�рых �риведен� в ��рав�е �.10. СПРАВКА 8.10. СВОЙСТВА И МЕТОДЫ ИНТЕРФЕЙСА IADSPRINTJOBOPERATIONS СВОЙСТВА Status В��вращает �дн� и� �ледующих �начений, ��и�ывающих те�ущее ���т��ние �адани� на �ечать. (Т�ль�� чтение.�
376 Глава 8. Active Directory Scripting Interface Константа Значение (в шестнадцатеричной записи) ADS_JOB_PAUSED &H001 ADS_JOB_ERROR &H002 ADS_JOB_DELETING &H004 ADS_JOB_PRINTING &H010 ADS_JOB_OFFLINE &H020 ADS_JOB_PAPEROUT &H040 ADS_JOB_PRINTED &H080 ADS_JOB_DELETED &H100 TimeElapsed В��вращает вре�� в �е�ундах, �р�шедшее � начала вы��лнени� �адани� на �ечать, или 0, е�ли �ечать еще не начата. (Т�ль�� чтение.� PagesPrinted В��вращает ��личе�тв� ра��ечатанных на данный ���ент �траниц. (Т�ль�� чтение.� Position В��вращает ���ицию �адани� в �череди на �ечать. (Т�ль�� чтение.� МЕТОДЫ Pause О�танавливает ��ра��т�у данн��� �адани� на �ечать. Е�ли �адание еще не начал� вы��лн�ть��, �р�д�лжает�� вы��лнение дру�их �аданий в�ереди или ���ади не��. R\esume Ра�решает �р�д�лжить вы��лнение данн��� �адани� или ра����трение е�� �андидат�� на вы��лнение. ▼) Для просмотра и изменения заданий на печать на сервере, выстроившем очередь, нужны права администратора. IADsPrintQueue и IADsPrintQueueOperations О�ъе�т IADsPrintQueue �ред�тавл�ет ��щий �етев�й �ринтер. Эт�т ��ъе�т ��� �в�л�ет �р���атривать �е�т�нах�ждение �ринтера и ��и�ательную инф�р�ацию, а та�же ��лучать ��и��� не�авершенных �аданий на �ечать. О�и�ание �в�й�тв ��ъе�та дан� в ��рав�е �.11 . Дл� �чередей на �ечать на W��dows и N��W��� ��жн� и���ль��вать д���лнительные �в�й�тва и �ет�ды, �ред��тавленные интерфей��� IADsPrintQueueOperations, ���в�л�ющие у�равл�ть �чередью на �ечать. Эти �в�й� �тва и �ет�ды ���вл�ют�� �а� ча�ть т��� же ��ъе�та IADsPrintQueue, а их ��и�ание дает�� в ��рав�е �.12 .
ADSI-объекты для провайдера WinNT: 377 СПРАВКА 8.11. СВОЙСТВА ОБЪЕКТА IADSPRINTQUEUE BannerPage В��вращает �утев�е и�� файла�ра�делител� �аданий на �ечать или NULL, е�ли ра�дел�юща� �траница в ��нфи�урации не у�а�ана. Datatype Ти� данных, выв�ди�ых на �ечать, �ред��читае�ый данн�й �чередью. Эт� �тр��а, и�еюща� �дн� и� �ледующих �начений: "RAW", "RAW [FF appended]", "RAW [FF auto]", "NT EMF 1.003", "NT EMF 1.006", "NT EMF 1.007", "NT EMF 1.008" или "TEXT". DefaultJobPriority Значение ур�вн� �ри�ритета �� у��лчанию, �ри�ваивае��е �аданию на �ечать, дл� ��т�р��� не у�а�ан ��н�ретный ур�вень �ри�ритета, цел�е чи�л� �т1ивыше. Description Крат��е ��и�ание и�ени �ринтера. Эта инф�р�аци� выв�дит�� в A���v� D�����o�y и в N��wo�k N��ghbo�hood (�етев�� ��ружении� и ���твет�твует �на� чению ��л� Description в диал���в�� ��не W��dows, �т��ражающе� �в�й�тва �ринтера. HostComputer Эт� �в�й�тв� ����ы в��вращает и�� ����ьютера, на ��т�р�� ��ра��вана �чередь на �ечать. Н� �ри ��их ���ыт�ах ��ратить�� � эт��у �в�й�тву вы� давал��ь ����щение �� �ши��е «P�op���y do�s �o� �x�s�» («Св�й�тв� не �уще� �твует»�. П�х�же, чт� эт� �в�й�тв� не реали��ван� ни у �дн��� и� ADSI��р�� вайдер�в. Location Крат��е ��и�ание �е�т�нах�ждени� данн��� �ринтера. С��твет�твует �на� чению ��л� Location в диал���в�� ��не W��dows, �т��ражающе� �в�й�тва �ринтера. Model Те��т�ва� �тр��а, ��и�ывающа� �р�и�в�дител� и ��дель �ринтера. Эт� в�е�� лишь ��и�ание. И��енение �тр��и не �рив�дит � и��енению ���твет�твующе�� драйвера �ринтера. Name И�� �череди на �ечать. (Эт� �в�й�тв� уна�лед�ван� �т �а��в��� ��ъе�та IADs.� PrintDevices Стр���вый �а��ив, ��держащий и�ена ��рт�в, ���луживающих данную �чередь. Е�ли �чередь и���ль�ует �улин� �ринтер�в, т� в ��и��е ��жет �ыть ��лее �дн��� ��рта.
378 Глава 8. Active Directory Scripting Interface PrinterPath Стр��а, �ред�тавл�юща� �утев�е и�� в ф�р�ате UNC, ��т�р�е ��ылает�� на данный �ринтер (на�ри�ер, "\\servername\sharename"�. PrintProcessor И�� �р�це���ра �ечати дл� данн�й �череди. Дл� �ринтер�в W��dows эт� �в�й�тв� �ра�тиче��и в�е�да и�еет �начение "WinPrint". Priority Ур�вень �ри�ритета �аданий эт�й �череди �тн��ительн� лю�ых дру�их �чередей, ��т�рые ��дают�� на те же �а�ые �ринтерные ��рты. В�е �адани� и� �череди � ��лее вы���и� �ри�ритет�� ��ра�атывают�� �еред те�, �а� �удут ра����трены �адани� и� �чередей � ��лее ни��и�и �ри�ритета�и. Starttime Значение даты�вре�ени, ���а�ывающее вре�� �ут��, ���да �адани� �череди начинают ��ра�атывать��. Ча�ть, �тн���ща��� � дате, и�н�рирует��. UntilTime Значение даты�вре�ени, ���а�ывающее вре�� �ут��, ���да ��ра��т�а �ада� ний �череди ��танавливает��. Ча�ть, �тн���ща��� � дате, и�н�рирует��. Е�ли �в�й�тва StartTime и EndTime и�еют �дина��вые �начени�, ��ра��т�а �аданий �череди ��жет ве�ти�ь в лю��е вре��. И���ль�у� выражение �ледующе�� вида, ��ъе�ты IADsPrintQueue ��жн� ��лу� чить � ����щью фун�ции GetObject(): set queue = GetObject("WinNT://имя_сервера/общее_имя ") В данн�� �лучае имя_сервера — эт� и�� ����ьютера, на ��т�р�� ��ра��вана �чередь на �ечать, а общее_имя — эт� и�� �череди. И���ль�у� �ледующий фильтр, ��жн� та�же �р���анир�вать ��и��� в�ех �ринтер�в, �вл�ющих�� ��щи�и дл� ��н�ретн��� �ервера: ' Файл примера script0816.vbs servername = "имя_сервера" set server = GetObject("WinNT://" & servername) wscript.echo "Очередь на печать на ", servername & ":" server.Filter = Array("PrintQueue") for each printer in server wscript.echo "*** ", printer.name for each job in printer.printjobs wscript.echo " ", job.user & ":", job.totalpages, "стр." & plural next next В�т �дин и� �ри�ер�в выв�да, ��лученн��� �т эт��� �ценари�: Очередь на печать на sumatra: ***Okidata bknittel: 1 стр. IADsPrintQueueOperations �вл�ет�� д���лнительны� интерфей���, �ред��тав� л�ющи� фун�ции у�равлени�. Е�ли IADsPrinter���ъе�т ��ылает�� на �чередь на
ADSI-объекты для провайдера WinNT: 379 �ечать, ��ра��ванную в �реде W��dows или N��W���, в эт�� ��ъе�те д��ту�ны д�� ��лнительные �в�й�тва и �ет�ды, ��и�ание ��т�рых дан� в ��рав�е �.12 . СПРАВКА 8.12. СВОЙСТВА И МЕТОДЫ ИНТЕРФЕЙСА IADSPRINTQUEUEOPERATIONS СВОЙСТВА PrintJobs В��вращает ��лле�цию ��ъе�т�в IADsPrintJob, �ред�тавл�ющих в�е не�а� вершенные и а�тивные �адани� в данн�й �череди. О�ъе�т IADsPrintJob �ыл ра����трен ранее в данн�� ра�деле. Status В��вращает �начение, ���а�ывающее те�ущее ���т��ние данн�й �череди на �ечать. С��т��ние — эт� �дн� и� �начений, �еречи�ленных в та�л. � .6, или, в��� ��жн�, �у��а не���ль�их �начений. (Т�ль�� чтение.� МЕТОДЫ Pause О�танавливает ��ра��т�у �аданий на �ечать данн�й �череди. Е�ли на эт�т же �ринтер (или эти же �ринтеры� на�равлены дру�ие �череди, т� �ни ���ут �р�д�лжить �т�рав�у �аданий на �ринтер (�ринтеры�. Purge Удал�ет в�е не�авершенные �адани� и� �череди. Resume В����н�вл�ет ��ра��т�у �аданий на �ечать. О�ъе�т IADsPrintQueue ��жн� и���ль��вать дл� �р����тра �чередей на �ечать и у�равлени� и�и, н� не дл� ���дани� н�вых �чередей. В та�л. �.6 �еречи�лены �начени� ���т��ни�, в��вращае�ые IADsPrintQueue- Operations. Св�й�тв� Status ��жет и�еть �дн� и� этих �начений или �у��у не� ���ль�их �начений. Таблица 8.6. Значения состояния, возвращаемые IAdsPrintQueueOperations Константа Значение (в шестнадцатеричной записи) ADS_PRINTER_PAUSED &H00000001 ADS_PRINTER_PENDING_DELETION &H00000002 ADS_PRINTER_ERROR &H00000003 ADS_PRINTER_PAPER_JAM &H00000004 ADS_PRINTER_PAPER_OUT &H00000005 ADS_PRINTER_MANUAL _FEED &H00000006 ADS_PRINTER_PAPER_PROBLEM &H00000007 ADS_PRINTER_OFFLINE &H00000008 ADS_PRINTER_IO_ACTIVE &H00000100 продолжение 
380 Глава 8. Active Directory Scripting Interface Константа Значение (в шестнадцатеричной записи) ADS_PRINTER_BUSY &H00000200 ADS_PRINTER_PRINTING &H00000400 ADS_PRINTER_OUTPUT _BIN_FULL &H00000800 ADS_PRINTER_NOT _AVAILABLE &H00001000 ADS_PRINTER_WAITING &H00002000 ADS_PRINTER_PROCESSING &H00004000 ADS_PRINTER_INITIALIZING &H00008000 ADS_PRINTER_WARMING_UP &H00010000 ADS_PRINTER_TONER_LOW &H00020000 ADS_PRINTER_NO_TONER &H00040000 ADS_PRINTER_PAGE_PUNT &H00080000 ADS_PRINTER_USER_INTERVENTION &H00100000 ADS_PRINTER_OUT _OF _MEMORY &H00200000 ADS_PRINTER_DOOR_OPEN &H00400000 ADS_PRINTER_SERVER _UNKNOWN &H00800000 ADS_PRINTER_POWER_SAVE &H01000000 IADsService и IADsServiceOperations О�ъе�т IADsService �ред�тавл�ет �и�те�ную �луж�у, у�тан�вленную на �тдельн�� ����ьютере, и у�равл�ет ее на�тр�й�а�и. Си�те�ные �луж�ы — эт� �р��ра��ы, �а�ущенные W��dows в ф�н�в�� режи�е дл� вы��лнени� ��н�вных фун�ций, на�ри�ер ��в�е�тн��� и���ль��вани� файл�в, UPS���нит�рин�а, ре�и�трации ���ытий и т. д . О�и�ание �в�й�тв и �ет�д�в ��ъе�та дан� в ��рав�е �.13. В�е �в�й� �тва IADsService д��ту�ны �а� �� чтению, та� и �� �а�и�и, н� дл� фи��ации лю�ых вне�енных и��енений �ледует и���ль��вать �ет�д SetInfo. IADsServiceOperation — д���лнительный интерфей�, д��ту�ный в ��ъе�тах �луж�, �ред�тавл�ющих ����ьютеры ��д у�равление� W��dows. Дл� IADsService� ��ъе�т�в, ��т�рые �ред�тавл�ют ����ьютеры ��д у�равление� W��dows NT, XP, 2000 и .N�T S��v�� и, в����жн�, та�же �ред�тавл�ют N��W�����ерверы, е�ть д�� ��лнительные �в�й�тва и �ет�ды, ��т�рые ��жн� и���ль��вать дл� у�равлени� �луж��й. О�и�ание д���лнительных �в�й�тв и �ет�д�в дан� в ��рав�е �.14 . ▼) Управлять Windows-службами можно также с помощью WMI-объектов, рассмотренных в гла- ве 7. Возможно, с управлением службами WMI справится проще и быстрее. Таблица 8.6 (продолжение)
ADSI-объекты для провайдера WinNT: 381 СПРАВКА 8.13. СВОЙСТВА И МЕТОДЫ ОБЪЕКТА IADSSERVICE СВОЙСТВА Dependencies Стр���вый �а��ив, ��держащий и�ена �луж�, �т ��т�рых �ави�ит данна� �луж�а (тех �луж�, ��т�рые д�лжны �ыть �редварительн� �а�ущены�. В �ажд�й �а�и�и �а��ива е�ть �л�в� "Service:", �а ��т�ры� �ледует и�� �луж�ы, или �л�в� "Group:", �а ��т�ры� �ледует и�� �ру��ы �а�ру��и (�o�d o�d�� g�oup�. DisplayName «От��ражае��е» и�� �луж�ы. ErrorControl П��а�ывает, �а� W��dows д�лжна �тветить, е�ли �луж�а не ���жет �а�у� �тить��. Эт� �в�й�тв� и�еет �дн� и� �начений, �еречи�ленных в та�л. � .7 . HostComputer И�� ����ьютера, �а�у�тивше�� данную �луж�у. Суд� �� в�е�у, эт� �в�й�тв� д��ту�н� �� чтению и �а�и�и, х�т� � та� и не ��н�л ��ы�ла е�� и��енени� — эт� �в�й�тв� �ри�ени�� т�ль�� � ����ьютеру, и� ��т�р��� эт�т ��ъе�т ��лучен. LoadOrderGroup И�� �ру��ы �а�ру��и, ��т�р�й �ринадлежит данна� �луж�а. Name И�� ��ъе�та �луж�ы. (Эт� �в�й�тв� уна�лед�ван� �т �а��в��� ��ъе�та IADs.� Path Путь и и�� файла и���лн�е��й �р��ра��ы, �ред��тавл�ющей данную �луж�у. ServiceAccountName И�� учетн�й �а�и�и, и���ль�уе��й данн�й �луж��й. О�ычн� эт� "Local- System" или "NT AUTHORITY\LocalService". ServiceAccountPath Пред��л�жительн�, эт� �тр��а ADsPath учетн�й �а�и�и, �в��анн�й �� �луж� ��й, ��т�ра� ��жет и���ль��вать�� � фун�цией GetObject() дл� и��лед�вани� �в�й�тв учетн�й �а�и�и. Н� в ADSI вер�ии 2.5 эт� �в�й�тв�, ��х�же, �т�ут�твует. ServiceType Ти� �луж�ы, вы��лн�е��й эт�й �р��ра���й. М�жет �рини�ать �дн� и� �ледующих �начений. Константа Значение (в шестнадцатеричной записи) ADS_SERVICE_KERNEL _DRIVER &H01 ADS_SERVICE_FILE_SYSTEM_DRIVER &H02 ADS_SERVICE_OWN _PROCESS &H10 ADS_SERVICE_SHARE_PROCESS &H20
382 Глава 8. Active Directory Scripting Interface StartType П��а�ывает, ���да в х�де �р�це��а начальн�й �а�ру��и W��dows �а�у��ает�� �луж�а. М�жет �рини�ать �дн� и� �ледующих �начений. Константа Значение (в шестнадцатеричной записи) ADS_SERVICE_BOOT_START &H00 ADS_SERVICE_SYSTEM _START &H01 ADS_SERVICE_AUTO_START &H02 ADS_SERVICE_DEMAND _START &H03 ADS_SERVICE_DISABLED &H04 StartupParameters Д���лнительна� �тр��а, ��т�рую �ередают в �аче�тве ар�у�ента ���андн�й �тр��и �а�у��ае��й �луж�е. Version Инф�р�аци� � вер�ии данн�й �луж�ы. МЕТОД SetInfo С�хран�ет лю�ые и��енени�, вне�енные в �в�й�тва ��ъе�та на ����ьютере ��д у�равление� W��dows, ��т�рый �ред�тавлен эти� ��ъе�т��. В та�л. � .7 �еречи�лены �начени�, в��вращае�ые �в�й�тв�� ErrorControl. Таблица 8.7. Значения для свойства ErrorControl Константа Значение Действия при ошибке ADS_SERVICE_ERROR_IGNORE 0 W��dows ре�и�трирует �ши��у и �р�д�лжает �в�й �а�у�� ADS_SERVICE_ERROR_NORMAL 1 Т� же �а��е, чт� и ADS_S�RVIC�_�RROR_ IGNOR�. Вд��ав��, ��ль��ватель ��лучает увед��ление в выв�ди��� диал���в�� ��не ADS_SERVICE_ERROR_SEVERE 2 W��dows ре�и�трирует �ши��у и �ере�а�у��а� ет �и�те�у в режи�е �а�ру��и ���ледней удач� н�й ��нфи�урации. Е�ли �ши��а �р�и��йдет и в данн�� режи�е, �а�ру��а �р�д�лжит�� ADS_SERVICE_ERROR_CRITICAL 3 Т� же �а��е, чт� и ADS_S�RVIC�_�RROR_ S�V�R�, н� е�ли �ши��а �р�и��шла в режи�е �а�ру��и ���ледней удачн�й ��нфи�урации, �а�ру��а �ре�ращает�� Дл� ��лучени� ��и��а �луж�, у�тан�вленных на �тдельн�� ����ьютере, �начала нужн� ��лучить ��ъе�т IADsComputer дл� �тдельн��� ����ьютера, а �ате� �р�� ��анир�вать ��держи��е е�� ��лле�ции в ��и��ах ��ъе�т�в IADsService. Задачу у�р�щает �в�й�тв� Filter:
ADSI-объекты для провайдера WinNT: 383 ' Файл примера script0817.vbs set computer = GetObject("WinNT://имя_компьютера,Computer") computer.Filter = Array("service") ' ограничение поля видимости только службами for each service in computer wscript.echo service.name, service.status next Дл� �р����тра и и��енени� инф�р�ации � �луж�ах нужн� ��ладать �рава�и ад�ини�трат�ра. При�енительн� � ��ъе�та�, �ред�тавл�ющи� �луж�ы на ����ьютере ��д у�равление� W��dows, д��ту�н� �дн� �в�й�тв� и не���ль�� д���лнительных �ет�д�в, �вл�ющих�� ча�тью интерфей��в IADsServiceOperations. Они ���а�аны в ��рав�е �.14 . СПРАВКА 8.14. СВОЙСТВО И МЕТОДЫ ИНТЕРФЕЙСА IADSSERVICEOPERATIONS СВОЙСТВО Status В��вращение те�уще�� ���т��ни� �луж�ы. Д��ту�н� т�ль�� �� чтению. М�жет �рини�ать �ледующие �начени�. Константа Значение (в шестнадцатеричной записи) ADS_SERVICE_STOPPED &H01 ADS_SERVICE_START_PENDING &H02 ADS_SERVICE_STOP_PENDING &H03 ADS_SERVICE_RUNNING &H04 ADS_SERVICE_CONTINUE_PENDING &H05 ADS_SERVICE_PAUSE_PENDING &H06 ADS_SERVICE_PAUSED &H07 ADS_SERVICE_ERROR &H08 МЕТОДЫ Continue В����н�вл�ет ра��ту �луж�ы ���ле �ри��тан�в�и. Pause При��танавливает ра��ту �луж�ы. SetPassword новый_пароль У�танавливает �ар�ль, ��т�рый д�лжен и���ль��вать�� �� �в��анн�й �� �луж��й учетн�й �а�и�ью ��ль��вател�. Start За�у��ает �луж�у. Дл� �ере�а�у��а �луж�ы ее нужн� ��тан�вить, д�ждать��, ���а ее ���т��ние не �ри�ет �начение, равн�е ADS_SERVICE_STOPPED, и �ате� �а� �у�тить ее �н�ва.
384 Глава 8. Active Directory Scripting Interface Stop О�танавливает �луж�у. Дл� у�равлени� �луж�а�и нужн� ��ладать �рава�и ад�ини�трат�ра. IADsSession О�ъе�т IADsSession �ред�тавл�ет а�тивную �в��ь �ежду ��ль��вателе� �дн��� ����ьютера и дру�и� ����ьютер��, �ред��тавл�ющи� ��щие файлы, �ринтеры или удаленный ра��чий �т�л (Служ�у тер�инал�в�. О�ъе�т �е��ии дает ��и�ание т�ль�� �в��и �ежду ��ль��вателе� и дру�и� ����ьютер�� и не ��держит ��д� р��н�й инф�р�ации (на�ри�ер, �а�ие файлы и���ль�уют���. Св�й�тва ��ъе�та, ��т�рые д��ту�ны т�ль�� �� чтению, ���а�аны в ��рав�е �.15. СПРАВКА 8.15. СВОЙСТВА ОБЪЕКТА IADSSESSION Computer В��вращает и�� �лиент���й ра��чей �танции ��ль��вател�. ComputerPath В��вращает ADsPath���ни�ер дл� ����ьютерн�й учетн�й �а�и�и, н� т�ль�� дл� ����ьютер�в, вх�д�щих в �ети A���v� D�����o�y. ConnectTime В��вращает ��личе�тв� �е�унд, �р�шедших �� вре�ени ��д�лючени� ��ль� ��вател� � ��ще�у ре�ур�у. (В д��у�ентации M���oso�� фи�урируют �инуты, н� �начение в��вращает�� в �е�ундах.� IdleTime В��вращает ��личе�тв� �е�унд, �р�шедших �� вре�ени ���ледне�� ��раще� ни� ��ль��вател� � ��ще�у ре�ур�у. (В д��у�ентации M���oso�� фи�урируют �инуты, н� �начение в��вращает�� в �е�ундах.� User В��вращает и�� учетн�й �а�и�и ��ль��вател� дл� данн�й �е��ии. UserPath В��вращает ADsPath���ни�ер дл� учетн�й �а�и�и ��ль��вател�. Эт�т ��ни� �ер ��жн� и���ль��вать � фун�цией GetObject() дл� ��лучени� ���твет�тву� юще�� IADsUser���ъе�та. О�ъе�ты IADsSession ��жн� ��лучить в виде ��лле�ции и� �в�й�тва Sessions, �ринадлежаще�� ��ъе�ту IADsFileService. О�ерат�ры ' Файл примера script0818.vbs set fileserv = GetObject("WinNT://имя_компьютера/Lanmanserver") if not isempty(fileserv) then for each session in fileserv.sessions wscript.echo "Пользователь:", session.user, "Компьютер:", _ session.computer, "простой:", session.idletime, "сек." next end if
ADSI-объекты для провайдера WinNT: 385 выв�д�т ��и��� в�ех �е��ий, ���луживае�ых у�а�анны� ����ьютер��. Чт��ы найти �е��ию, �тн���щую�� � ��н�ретн��у ��ль��вателю, нужн� �р���анир�� вать ��лле�цию и �р�верить �начение �в�й�тва User на ��в�адение � нужны� и�ене�. IADsUser О�ъе�т IADsUser �ред�тавл�ет �тдельную учетную �а�и�ь ��ль��вател� ����ью� тера в д��ене или на �тдельн�й ра��чей �танции. У ��ъе�та IADsUser, �� �райней �ере, 47 �в�й�тв и 3 �ет�да, ���в�л�ющих �адавать и�� ��ль��вател� учетн�й �а� �и�и и ��нта�тную инф�р�ацию, у�танавливать �ар�ль дл� эт�й �а�и�и, �ценарий вх�да в �и�те�у и �р�филь, и��лед�вать или и��ен�ть член�тв� в �ру��е и �ере� у�танавливать �л��ир�в�у учетн�й �а�и�и ���ле т���, �а� ��ль��ватель �ред�ри� н�л �лиш��� �н��� ���ыт�� в�йти в �и�те�у � неверны� �ар�ле�. В�е �в�й�тва �еречи�лены в д��у�ентации M���oso��, и е�ли вы ���ираете�ь и���ль��вать ADSI дл� у�равлени� учетны�и �а�и���и в �ети A���v� D�����o�y, эту д��у�ентацию нужн� и�учить. Наи��лее важные �в�й�тва, а та�же в�е три �ет�да �еречи�лены в ��рав�е �.16. СПРАВКА 8.16. СВОЙСТВА И МЕТОДЫ ОБЪЕКТА IADSUSER СВОЙСТВА AccountDisabled Булев� �начение, равн�е True, е�ли учетна� �а�и�ь �ыла �делана нед�� �ту�н�й. Эт� �начение ��жн� у�танавливать дл� �а�рещени� или ра�решени� ��ль��вать�� учетн�й �а�и�ью. П��ле вне�ени� лю�ых и��енений �ледует в��� ��ль��вать�� �ет�д�� .SetInfo. Description Те��т ��и�ани� данн�й учетн�й �а�и�и. FullName П�лн�е и�� ��ль��вател�. Groups Эт� ��лле�ци� IADsMembers, ��держаща� �ру��ы �е���а�н��ти, в ��т�рых ���т�ит данный ��ль��ватель. К�лле�цию ��жн� и��ен�ть, д��авл�� или удал�� �ру��ы. Д���лнительна� инф�р�аци� �рив�дила�ь ранее в ��и�ании ��лле�ции IADsMembers. HomeDirectory Путь � личн��у �атал��у данн��� ��ль��вател�. IsAccountLocked Булев� �начение, равн�е True, е�ли учетна� �а�и�ь �ыла �а�л��ир�вана и�� �а �ревышени� ��личе�тва д��у�ти�ых ���ыт�� в�йти в �и�те�у � неверны� �ар�ле�.
386 Глава 8. Active Directory Scripting Interface LastLogin Дата и вре�� ���ледне�� вх�да в �и�те�у ��д данн�й учетн�й �а�и�ью. (Т�ль�� чтение.� LastLogoff Дата и вре�� ���ледне�� вых�да и� �и�те�ы ��д данн�й учетн�й �а�и�ью. (Т�ль�� чтение.� Profile Путь � �р�филю ��ль��вател�; на л��альн�й �ашине — ��ычн� и�� �а��и \Documents and Settings\имя_пользователя. В д��енн�й �ети � �луждающи� �р�� филе� ��ль��вател� — �уть � ��щей �а��е �р�филей. МЕТОДЫ ChangePassword oldpassword, newpassword И��ен�ет ��ль��ватель��ий �ар�ль � oldpassword на newpassword. Change- Password нужн� и���ль��вать в�е�т� SetPassword, и е�ли нет �рав ад�ини�тра� т�ра, нужн� �нать �тарый �ар�ль учетн�й �а�и�и. SetInfo С�хран�ет лю�ые и��енени�, вне�енные в �в�й�тва ��ъе�та, в те�уще� ��ль��ватель���� �атал��е W��dows. Эт�т �ет�д уна�лед�ван �т ��ъе�та IADs. SetPassword newpassword У�танавливает дл� �ар�л� учетн�й �а�и�и ��ль��вател� н�в�е �тр���в�е �начение. И��енени� �ра�у же в�ту�ают в �илу, дл� их фи��ации �ет�д .SetInfo не нужен. Дл� и���ль��вани� �ет�да SetPassword нужны �рава ад�ини�трат�ра. О�ъе�т ��н�ретн��� ��ль��вател� ��жн� ��лучить � ����щью �ледующе�� ��ерат�ра set user = GetObject("WinNT://домен/имя_пользователя,user") �де домен — и�� д��ена учетн�й �а�и�и дл� �л��альн�й д��енн�й учетн�й �а�и�и или и�� �тдельн�й ра��чей �танции дл� л��альн�й учетн�й �а�и�и или учетн�й �а�и�и ра��чей �ру��ы, а имя_пользователя — эт� и�� учетн�й �а�и�и. М�жн� та�же ���дать н�вую учетную �а�и�ь ��ль��вател� д��ена, в����ль��вавши�ь �ледующи�и ��ерат�ра�и: set domain = GetObject("WinNT://имя_домена") set user = domain.Create("user ", "новое_имя _пользователя") М�жн� ���дать н�вую учетную �а�и�ь л��альн�й ра��чей �танции: set computer = GetObject("WinNT://имя_компьютера,Computer") set user = computer.Create("user", "новое_имя_пользователя") Нужн� у�тан�вить в�е важные �в�й�тва и �авершить ���дание учетн�й �а�и�и ��ерат�р�� user.SetInfo а �ате� д��авить ��ль��вател� в лю�ые нужные �ру��ы и ��нтейнеры �атал���в. П����ль�у �ет�д Add ��ъе�т�в IADsGroup и IADsContainer тре�ует не �р���й ��ыл�
Управление Active Directory 387 �и на ��ъе�т, а ар�у�ента pathname, нужн� и���ль��вать ��ерат�ры �ледующе�� вида: set group = GetObject("WinNT://имя_домена,имя_группы,Group") group.Add user.AdsPath IIS и Exchange Наи��лее эффе�тивны� �ри�енение� ADSI��ценариев �вл�ет�� у�равление IIS и M���oso�� �x�h��g�. Дл� ад�ини�трат�р�в не��льших и �редних �етей ��ддерж�а �рих�да и ух�да �н�же�тва ве���айт�в и ��ль��вателей ��жет �ыть ве�ь�а неле�� �и� �ан�тие�. ADSI��ценарии ���ут �ред��тавить ва� ������ д��авлени� ��ль��ва� телей или �айт�в, тре�ующих на��ра в ��не ���андн�й �тр��и в�е�� лишь �дн�й ��� �анды. Е�ли ва� ���да�ли�� �рих�дил��ь дл� д��авлени� н�в��� �ервера тратить 20 �инут на в��ню � Ди��етчер�� IIS, Ди��етчер�� �ру�� и ��ль��вателей и W��dows �xp�o���, вы ���жете �� д��т�ин�тву �ценить ��д��ную раци�нали�ацию. Н� у�лу�ление в в��р��ы у�равлени� IIS �ан�л� �ы не���ль�� �лав та���� же или даже ��льше�� ра��ера, и на эт� в данн�й �ни�е �р��т� нет �е�та. Е�ли вы уже ��на���или�ь � �атериал�� данн�й �лавы и �ри��рели ��ыт на�и�ани� �ценариев дл� у�равлени� учетны�и �а�и���и ��ль��вателей и �луж�а�и, вы ��й�ете, чт� ва� в��лне �� �ила� ра��р��транить �в�е у�ение и на у�равление IIS и �x�h��g�. И�учение ADSI идет �� �рут�й в��х�д�щей, ��т�ра� д�в�льн� �ы�тр� выравнива� ет��. Где ��лучить д���лнительную инф�р�ацию, вы у�наете в ��нце �лавы. Управление Active Directory У�равление A���v� D�����o�y не �вл�ет�� �а�и��т� �и�ант��и� �рыж��� в у�в�ении н�вых ��н�тий �� �равнению � те�, чт� ра���атривал��ь в данн�й �лаве д� �их ��р. Он� цели��� �ав��ан� на ��нтейнеры, на �ере�ещение �алень�их чел�веч��в и� �дних �алень�их а��уратных ��р���че� в дру�ие — и�итацию жи�ни в �ире �и�� не�а, — и в�е �н� �ред�тавлен� �алень�и�и а��уратны�и ��ъе�та�и. Чт� �де�ь ��жет �ыть �лиш��� �л�жны�? Ну, е�ли у���инание � X.500 еще не на�нал� на ва� �траху, эт� ��жет �р�и��йти �у�вальн� чере� не���ль�� �инут. П����ль�у �луж�а �атал���в A���v� D�����o�y ��р�е�тир�вана дл� ра��ты � ��е� раци�нны�и �и�те�а�и и �етевы�и �луж�а�и дру�их �р�и�в�дителей, �на ра�ра��� тана в ���твет�твии � шир��� ра��р��траненны�и �тандарта�и дл� ��д�лючае�ых � �ети �атал���в. В эт�� е�ть �в�и д��т�ин�тва и �в�и нед��тат�и. В интере�ах фун�ци�нальн�й ��в�е�ти���ти ее �инта��и� дл� ��ецифи�ации ��ль��вателей, �ру��, ��нтейнер�в, ��дра�делений �р�ани�ации и та� далее ��н�ван на �тандарте X.500, ��т�рый �ыл ра�ра��тан ���итет��, �риче� �чень ��льши� ���итет��. И эт� д�лжн� уже �ейча� нат�л�нуть ва� на в��лне ��ределенные �ы�ли! Перед те� �а� �ри�ту�ить � ��ъе�та� и техн�л��и��, и���ль�уе�ы� дл� у�рав� лени� A���v� D�����o�y, не��х�ди�� �рат��е введение в тер�ин�л��ию X.500 и LDAP.
388 Глава 8. Active Directory Scripting Interface Терминология X.500 и LDAP Каждый эле�ент в X.500 или LDAP���в�е�ти��� �атал��е ��ладает �в�и� уни� �альны� и�ене�. Т�чн� та� же, �а� �аждый файл на ваше� же�т��� ди��е и�е� ет �в�е уни�альн�е �утев�е и��, �аждый ADSI���ъе�т и�еет �в�е �утев�е и�� ADsPath. В �р�т���ле LDAP эт� на�ывает�� �тличительны� и�ене� (d�s���gu�sh�d ��m��, или DN. Эт� и�� �ри�енительн� � ��ъе�ту �атал��а �вл�ет�� ��лн�й ��е� цифи�ацией, на�ывающей эт��� чел�ве�а, �ру��у, ����ьютер или чт��ни�удь еще и� в�ей ��ла�ти �атал���в ��ъе�т�в. Е�ли �луж�а A���v� D�����o�y вы�тр�ена та�, �а� �ыл� ���а�ан� ранее на ри�. � .1, ��ль��ватель A���� и�еет �ледующее �тличи� тельн�е и��: o=mycompany.com/ou=WestCoast/ou=Research/cn=Alice Эт� �чень ��х�же на �утев�е и�� файла, �а и��лючение� т���, чт� в �тличитель� н�� и�ени и�� на �ажд�� ур�вне иерархии д�лжн� �ыть ���ечен� �в�и� �тру�тур� ны� �начение�: o = �р�ани�аци�, ou = ��дра�деление �р�ани�ации (o�g�������o��� u����, cn = ��щее и�� (�ommo� ��m�� и т. д . П����ль�у ��нтейнеры ���ут, �� в�ей вер��тн��ти, хранить ра�ные ти�ы ��ъе�т�в � �дина��вы�и и�ена�и, эти ��ец� ифи�ат�ры дают а���лютн� чет��е ��ределение �ути. Т�ль�� чт� ���а�анн�е и�� �адан� в та� на�ывае��й ��ратн�й (��g���d���� ф�р�е, �����ль�у и�� начинает�� �� �в�е�� «��льш���» («b�g»� ��нца — �р�ани� �ации. В �р���й (L��������d���� ф�р�е �ринадлежащее A���� DN�и�� �удет и�еть �ледующий вид: cn=Alice, ou=Research, ou=WestCoast, o=mycompany.com Ка� видите, �н� начинает�� � «�ал���» ��нца, � �а���� нижне�� ур�вн� �р�а� ни�ации �атал���в, и ��дни�ает�� д� вершины. A���v� D�����o�y �рини�ает DN� и�ена в ���их ф�р�атах, н� в�е�да в��вращает их в �р���й (L��������d���� ф�р�е. П����ль�у в и�ени ��жет ��держать�� �а��та� («�������,A����»�, DN�и�� ��жет и�еть �ледующий вид: cn=Knittel\, Alice, ou=Research, ou=WestCoast, o=mycompany.com Ча�ти �тличительн��� и�ени на�ывают�� относительными отличительными именами (������v� d�s���gu�sh�d ��m�s�, или RDN�и�ена�и, �����ль�у �ни у�а�ы� вают на ��ъе�т, �тн���щий�� � ��нтейнеру, в ��т�рый �ни ���ещены. «A����» — эт� RDN, ��т�р�е �дн��начн� у�а�ывает на ��ль��вател� т�ль�� в ��дра�делении W�s� Co�s� R�s����h (в дру�их ��дра�делени�х та�же ���ут �ыть ��трудни�и �� и�ени A�����. Идентифи�ат�ры cn, ou и o на�ывают�� и�ена�и атри�ут�в. Чаще в�е�� в �т� личительных и�енах A���v� D�����o�y и���ль�уют�� �ледующие атри�уты. Атрибут Значение d� К�нте��т и�ен�вани� o Ор�ани�аци� ou П�дра�деление �р�ани�ации � Ме�т�нах�ждение �� О�щее и�� (�ри�ени�� � ��нтейнера�, �ру��а� ��ль��вателей, ����ьютера� и т. д.�
Управление Active Directory 389 ▼) Большая часть того, что касается провайдера LDAP:, применимо и к провайдеру Novell NetWare Directory Services NDS:, потому что он также основан на LDAP. Но некоторые именованные атрибуты все же отличаются. Надею�ь, чт� те�ерь, ���ле ��лучени� начальных �ведений, ва� �удет �начи� тельн� �р�ще ��н�ть, �а� в�е эт� ра��тает на �ра�ти�е. И�е� �етев�е �тличитель� н�е и�� ��ль��вател� A���v� D�����o�y, ��жн� ��лучить ��ъе�т IADsUser, и���ль�у� LDAP���ни�ер �а� в данн�� �ри�ере: set user = GetObject(_ "L DAP://CN=Alice,OU=Research,OU=WestCoast,O=mycompany.com") Эт�т ��д вернет та��й же ��ъе�т IADsUser, ��т�рый ��жн� ��лучить, е�ли у�а� �ать эт��� ��ль��вател� � и���ль��вание� е�� «ни���ур�внев���» д��енн��� и�ени W��dows NT, �а� в �ледующе� �ри�ере: set user = GetObject("WinNT://mycompany/alice,User") П�лучить ��ъе�т, �ред�тавл�ющий ��дра�деление �р�ани�ации, ��жн� �адав е�� DN. На�ри�ер: set user = GetObject("LDAP://OU=WestCoast,O=mycompany.com ") Эт�т ��д в��вращает улучшенную вер�ию IADsContainer ��д на�вание� IADsOU, ��т�ра� ра���атривает�� в �ледующе� ра�деле. И еще �дна ���ледн�� ����енн��ть �тличительных и�ен: в ��льшин�тве �етей A���v� D�����o�y верхнеур�внева� �тру�тура у�а�ывает�� не �а� O=mycompany.com, а � и���ль��вание� атри�ут�в «��нте��та и�ен�вани�», у�а�анных �ледующи� ��ра���: DC=mycompany,DC=com Эт� LDAP�вер�и� "mycompany.com" в �р���й (L��������d���� ф�р�е. В�е�т� т��� чт��ы �а�тавл�ть у�адывать и�� верхне�� ур�вн� �ети вашей �р�а� ни�ации, ADSI �ред��тавл�ет ������ ��лучени� �тличительн��� и�ени верхне�� ур�вн�, ��т�р�е на�ывает�� ��дра�у�евае�ы� ��нте��т�� и�ен�вани� — D���u�� N�m��g Co���x�. Инф�р�аци� и�вле�ает�� � ����щью �ледующе�� ��да �ценари� и� �в�й�тва ��ециальн��� ��ъе�та, ��т�рый на�ывает�� Roo� DS ����y (��рнева� DS��а�и�ь�: set rootDSE = GetObject("LDAP://RootDSE") context = rootDSE.Get("DefaultNamingContext") wscript.echo "Имя верхнего уровня", context Б�лее ��др��н� ��ъе�т RootDSE ра���атривает�� в �ледующе� ра�деле. ▼) Если нужно подключиться к конкретному LDAP-серверу, можно ускорить обслуживание ADSI- запросов, связавшись с методом OpenDSObject и указав в аргументе flags константу ADS_ SERVER_BIND. Дополнительную информацию можно найти выше в разделе «Безопасность каталогов». Дл� ��лучени� �в�й�тв ��льшин�тва ��ециальных ��ъе�т�в A���v� D�����o�y нужн� и���ль��вать �ет�д Get ��ъе�та IADs, �����ль�у �ни не �вл�ют�� ча�тью ра�личных IADs���ъе�т�в, ра����тренных ранее в данн�й �лаве. Вы ��жете в��� ��ль��вать�� эти� ��дра�у�евае�ы� ��нте��тны� и�ене� дл� ф�р�ир�вани�
390 Глава 8. Active Directory Scripting Interface DN�и�ен в �ценари�х, не�ави�и�ых �т ��н�ретн�й �р�ани�ации, �а� ���а�ан� в �ледующе� �ри�ере: set rootDSE = GetObject("LDAP://RootDSE") ' по лучение подразумеваемого ' контекста именования context = rootDSE.Get("DefaultNamingContext") set westcoast = GetObject("LDAP://OU=WestCoast" & context) Эт�т ��д и�вле�ает ��нтейнер WestCoast и� верхне�� ур�вн� �р�ани�ации вне �ави�и���ти �т т���, �а� на�ывает�� ее верхний ур�вень. ▼) Поскольку подразумеваемый контекст именования (Default Naming Context) возвращается впрямом (Little-Endian) порядке, его нужно ставить в конец любого составляемого DN-имени. К�лле�ци� ��ъе�т�в, нах�д�щих�� в эт�� ��нтейнере, ��жет �ыть �р���ани� р�вана т�чн� та� же, �а� и лю��е дру��е ADSI��еречи�ление. Фа�тиче��и ��жн� выве�ти ��лн�е ��держи��е A���v� D�����o�y � ����щью ре�ур�ивн�й �р��ра��ы, ��х�жей на эту: ' Файл примера script0819.vbs set rootDSE = GetObject("LDAP://RootDSE") ' по лучение подразумеваемого ' контекста именования context = rootDSE.Get("DefaultNamingContext") set top = GetObject("LDAP://" & context) ' получение контейнера верхнего уровня ListContainer top, 0 ' на чал о в ывода списка сверху вниз sub ListContainer (obj, depth) ' подпрограмма для вывода содержимого контейнера dim member ' закрытая локальная переменная WScript.echo space(depth*3) & obj.name ' вывод списка имен контейнеров on error resume next ' иг норирование ошибки при отсутствии коллекции for each member in obj ' вы вод внутреннего содержимого ListContainer member, depth+1 next end sub Н� д�лжен �реду�редить, чт� �ри �а�у��е данн��� �ценари� в ����ании, вх�� д�щей в ��и��� Fo��u�� 500, е�� вы��лнение ��жет �ан�ть �чень �н��� вре�ени. ▼▼ Чтобы познакомиться со структурой Active Directory, я предлагаю запустить этот сценарий с перенаправлением его вывода в файл, чтобы потом можно было изучить содержимое этого файла. М�жн� та�же �р����треть A���v� D�����o�y � ����щью д���лнительн��� �р�� �ра��н��� ��дул� M���oso�� M���g�m��� Co�so�� ADSI �d��. Е�� ��жн� у�тан�вить на вер�ии W��dows дл� на�т�льн��� ПК � ����щью \support\tools\supptools.msi на у�тан�в�чн�� ����а�т�ди��е W��dows S��v�� 2003 или �а�ру�ить W��dows S��v�� 2003 Suppo�� �oo�s � адре�а www.microsoft.com. П��ле у�тан�в�и нужн� �т�рыть ��н� ���андн�й �тр��и и на�рать ���анду start adsiedit.msc . Нужн� вы�рать LDAP�
Объекты Active Directory 391 �ервер, и���ль�уе�ый �� у��лчанию. Зате� ��жн� �р���атривать �тру�туру A���v� D�����o�y в ее не��ра��танн�й ф�р�е. У�нать ��др��н��ти, �а�ающие�� ADSI �d��, ��жн�, �р�ани��вав ��и�� эт��� на�вани� на ве���айте technet.microsoft.com. Дл� ��лучени� д���лнительн�й инф�р�ации �� A���v� D�����o�y, LDAP и X.500 ��жн� ���етить ве���айт technet.microsoft.com и �р�ве�ти ��и�� �� �лючев�й фра�е «A���v� D�����o�y Co���p�s». Считаю, чт� ��ле�н� �удет �р����треть и та�ие ве�� ре�ур�ы, �а� www.kingsmountain.com/ldapRoadmap.shtml и www.tums.com. Объекты Active Directory При ра��те � A���v� D�����o�y и дру�и�и LDAP��атал��а�и ���вл�ет�� не���ль�� ��ециальных ADSI���ъе�т�в. При ���ыт�е ��ра��тать � д��авленны�и �в�й�тва� �и A���v� D�����o�y, и�еющи�и�� в этих ��ъе�тах, ��ычный �инта��и�, ��т�рый �ред��ла�ает�� и���ль��вать, на�ри�ер: WScript.echo объект.имя_свойства объект.имя_свойства = новое_значение ��жет не ра��тать и выдавать �ши��у �ценари�. В����жн�, в�е�т� эт��� �ридет�� в����ль��вать�� �ет�да�и Get и Put, на�ри�ер: WScript.echo объект.Get("имя _свойства") объект.Put "имя _свойства", новое_значение RootDSE О�ъе�т RootDSE ��и�ывает �в�й�тва л��альн��� LDAP��ервера. У эт��� ��ъе�та нет �ривычн��� интерфей�а IADsRootDSE, ��эт��у вы не ��жете ��лучить д��ту� � е�� �в�й�тва�, и���ль�у� �тандартный �инта��и� объект.свойство. Он ��н�ван на ��ычн�� �тар�� IADs, ��эт��у дл� ��лучени� ��ециальных �в�й�тв, �еречи�� ленных в ��рав�е �.17, нужн� в����ль��вать�� �ет�д�� Get(). СПРАВКА 8.17. СВОЙСТВА ОБЪЕКТА ROOTDSE (НЕПОЛНЫЙ ПЕРЕЧЕНЬ) currentTime Те�ущие ���а�атели даты и вре�ени, выдавае�ые LDAP��ервер��. defaultNamingContext П�дра�у�евае�ый ��нте��т и�ен�вани� (� «��льш��� ��нца»� в�ех DN�и�ен в л��альн�� д��ене. dnsHostName DNS х��т�и�� те�уще�� LDAP��ервера. namingContexts Ма��ив �тр���вых �начений, в ��т�р�� �еречи�лены ра�делы �атал��а, �т� н���щие�� � верхне�у ур�вню. Дл� A���v� D�����o�y �юда в�лючен� �ледующее: y y П�дра�у�евае�ый ��нте��т и�ен�вани�. y y DN�и�� ра�дела Configuration, в ��т�р�� ��держит�� внутренн�� инф�р� �аци� � ��нфи�урации A���v� D�����o�y.
392 Глава 8. Active Directory Scripting Interface y y DN�и�� ра�дела Schema, в ��т�р�� ��держат�� �еречни �тру�туры, �в�й�тв и ра�решенных �начений дл� в�ех ��ъе�т�в �атал��а. rootDomainNamingContext К�нте��т и�ен�вани� (� «��льш��� ��нца»� дл� в�ех DN�и�ен данн��� �атал��а. serverName DN�и�� те�уще�� LDAP��ервера. supportedLDAPVersion Ма��ив н��ер�в LDAP�вер�ий, ��ддерживае�ых те�ущи� �ервер��. О�ъе�т RootDSE ��жн� ��лучить, в����ль��вавши�ь �ледующи� ��ни�ер��: set rootDSE = GetObject("LDAP://RootDSE") IADsO и IADsOU О�ъе�ты IADsO и IADsOU �ред�тавл�ют ���твет�твенн� в�ю �р�ани�ацию и ��дра�� деление �р�ани�ации. Они ��н�ваны на ��ъе�те IADsContainer, ��эт��у в�е �ет�ды и �в�й�тва ��ъе�та IADsContainer �вл�ют�� ча�тью ��ъе�т�в IADsO и IADsOU. В ча�т� н��ти, ��а �ни ведут �е�� �а� ��ъе�ты���лле�ции и ���ут ��держать ����ьютеры, ��ль��вателей и дру�ие ��ъе�ты���нтейнеры. Кр��е т���, IADsO и IADsOU на�ледуют �в�й�тва ��ъе�та IADsLocality, в ��т�р�� ��и�ывают�� та�ие эле�енты, �а� н��ера л��альн��� фа��а и телеф�на. Чт��ы ниче�� не у�л�жн�ть, � �еречи�лил ве�ь на��р �ет�д�в и �в�й�тв, д�� �ту�ный данны� ��ъе�та�. Св�й�тва и �ет�ды IADsO и IADsOU ��и�аны в ��рав�е �.1�. О�ъе�т IADsOU �ред� �тавл�ет ��дра�дел �р�ани�ации и и�еет та��й же на��р �в�й�тв, чт� и ��ъе�т IADsO, �лю� �в�й�тв� BusinessCategory. СПРАВКА 8.18. СВОЙСТВА И МЕТОДЫ ОБЪЕКТОВ IADSO И IADSOU СВОЙСТВА BusinessCategory О�и�ывает �и�не��фун�цию, вы��лн�е�ую данны� ��дра�деление� �р�а� ни�ации. (И�еет�� т�ль�� в IADsOU.� Count К�личе�тв� ��дчиненных ��ъе�т�в в ��нтейнере (и� IADsContainer�. (Т�ль�� чтение.� Description Стр��а � ��и�ание� �р�ани�ации или ��дра�делени� (на�ри�ер, на�вание ����ании�. FaxNumber Стр��а � ��и�ание� ��н�вн��� н��ера фа��а.
Разработка ADSI-сценариев 393 Filter С�. ��и�ание IADsContainer. LocalityName Стр��а � ��и�ание� фи�иче����� �е�та нах�ждени� �р�ани�ации или ��д� ра�делени�. Name И�� ��нтейнера. (Эт� �в�й�тв� уна�лед�ван� �т �а��в��� ��ъе�та IADs.� Parent ADsPath�и�� ��нтейнера, в ��т�р�� ��держит�� данный ��ъе�т (та�же уна� �лед�ван� �т IADs�. PostalAddress Стр��а � ��н�вны� ��чт�вы� адре���. SeeAlso Лю�а� д���лнительна� у�е�тна� инф�р�аци�. TelephoneNumber О�н�вн�й телеф�нный н��ер �р�ани�ации или ��дра�делени�. МЕТОДЫ С�. IADsContainer. О�ъе�ты IADsO и IADsOU ��жн� и�влечь, и���ль�у� их �тличительные и�ена или �уте� ��анир�вани� дру�их ��нтейнер�в, �а� ��и�ан� ранее в данн�� ра�деле. Разработка ADSI-сценариев На �р�т�жении в�ей эт�й �лавы ва� �редла�али�ь не��льшие �ценарии, ��т�рые ��жн� �ыл� и��енить и �р�те�тир�вать, чт��ы ��на���ить�� � ADSI. Эти ��р�т�ие �ценарии выв�дили ��и��и �в�й�тв уча�тни��в �ру�� и �тдельных ��ль��вателей. Вы ���ли ���давать и ��лее ��ле�ные �ценарии, ра�шир�� эти и�х�дные �ценарии �уте� д��авлени� д���лнительных фун�ций. О���енн� ��ле�н� ���давать �ценарии, ��лучающие ар�у�енты и� ���андн�й �тр��и. Эту техн�л��ию ��жн� и���ль��вать дл� на�и�ани� универ�альных �це� нариев, у�а�ыва� в ���андн�й �тр��е ��н�ретные �начени� �ри �а�у��е �ценари�. На�ри�ер, в не��льш�й �ирин��в�й �ети ра��чей �ру��ы, в ��т�р�й не и���ль� �ует�� �р��т�й ��щий д��ту� � файла� (S�mp�� F��� Sh����g�, �ажд��у ��ль��ва� телю е�ть ��ы�л и�еть �в�ю учетную �а�и�ь на �ажд�� ����ьютере и в �ажд�й и� �а�и�ей и���ль��вать �дин и т�т же �ар�ль. К��да ��ль��ватель �ен�ет �в�й �ар�ль на �дн�� и� ����ьютер�в, �ар�ль д�лжен �ыть и��енен и на в�ех ��тальных ���� �ьютерах, а эт� �лиш��� нудн�е �ан�тие. Следующий �ценарий ��жет �уще�твенн� у�р��тить данную �адачу:
394 Глава 8. Active Directory Scripting Interface ' Файл примера allpass.vbs ' с мен а п ароля на всех компьютерах группы if WScript.Arguments.count <> 3 then ' объяснение синтаксиса команды WScript.echo "Применение: allpass имя_пользователя старый_пароль новый_пароль" WScript.quit 0 end if username = WScript.Arguments(0) ' со хранение значений oldpass = WScript.Arguments(1) newpass = WScript.Arguments(2) Wscript.echo "Работаю ..." ' процесс требует времени, демонстрация активности fix "bali" ' вы зов fix по одному разу для каждого fix "java" ' ко мпь ютера рабочей группы. fix "sumatra" fix "ambon" fix "kalimantan" wscript.echo "Готово. " sub fix (compname) ' подпрограмма для обновления пароля на одном компьютере on error resume next ' по лучение объекта пользователя set user = GetObject("WinNT://" & compname & "/ " & username & ",User") if err then ' от каз; оповещение об отказе wscript.echo "Невозможно сменить пароль на ", compname exit sub end if user.changePassword oldpass, newpass if err then wscript.echo "Невозможно сменить пароль на ", compname exit sub end if user.setinfo ' changePassword обладает непосредственным действием, ' но лучше подстраховаться wscript.echo compname & ": OK" end sub На�ри�ер, ���да � вв�жу ���анду allpass bknittel myoldpassword anewpassword, �ценарий выдает �ледующую инф�р�ацию: Работаю ... bali: OK java: OK sumatra: OK ambon: OK Невозможно сменить пароль на kalimantan Готово. В�е �равильн�, ����ьютер �� и�ени kalimantan не �ыл в�лючен. Те�ерь �ар�ль на не� �ридет�� ��н�вл�ть вручную. ▼o Я советую, перед тем как приступить к использованию ADSI для создания и изменения инфор- мации каталогов, перейти на разработку сценариев на изолированном тестовом компьютере и не находиться в сети вашей компании. Вы должны войти в систему с правами администра- тора, и если что-нибудь пойдет не так, повреждения могут быть катастрофическими. Когда будете готовы к более масштабному тестированию, по возможности, воспользуйтесь своим сценарием на небольшом «тестовом» домене, настроенном исключительно на тестирование.
EzAD Scriptomatic 395 EzAD Scriptomatic Ма�тера �ценариев ����ании M���oso�� ���дали ADSI�вер�ию ин�тру�ентари� WMI S���p�om����, ��т�рый ра���атривал�� в �редыдущей �лаве. Эта вер�и� �енее детали�ир�вана, че� WMI S���p�om����, н� �на ������на ���давать �а��вые �а��т�в�и �ценариев дл� ���дани�, чтени� (и�учени��, �а�и�и (и��енени�� и уда� лени� ра�личных ��ъе�т�в, и�еющих�� в A���v� D�����o�y. Дл� у�тан�в�и эт��� ин�тру�ентари� �ледует в�йти в �и�те�у ��д учетн�й �а�и�ью ад�ини�трат�ра д��ена — Dom��� Adm��, и вы��лнить �ледующие дей�тви�: 1. От�р�йте I������� �xp�o���, �ерейдите на ве���айт www.microsoft.com и в ��ле ��и��а на�ерите «dow��o�d ADSI s���p�om����». Вы�ерите �траницу �а�ру��и. Щел�ните на �н���е Загрузить (Dow��o�d�, а �ате� щел�ните на �н���е Запу- стить (Ru�� дл� �а�у��а �р��ра��ы у�тан�в�и. 2. В диал���в�� ��не W��Z�p S��� �x�����o� вы�ерите ���т��нн�е �е�т� дл� хра� нени� двух ��держащих�� в архиве файл�в. Дл� эт��� в��лне ��д�йдет �а��а ваше�� �р�фил�: на W��dows 7 и V�s�� эт� ��ычн� \users\Имя_вашей_учет­ ной_записи а на XP эт� \Documents and Settings\Имя_вашей_учетной_записи . Щел�ните на �н���е Распаковать (U���p), �ате� на OK, а �ате� на Закрыть (C�os�). 3. Щел�ните �рав�й �н����й на Ра��че� �т�ле и вы�ерите �ун�ты Создать (N�w� Ярлык (Sho���u��. 4. Щел�ните на �н���е Обзор (��ows��, �ерейдите � �а��е, вы�ранн�й в �ун�те 2, вы�ерите файл EZADScriptomatic.hta и щел�ните на �н���е OK, чт��ы �а�рыть диал���в�е ��н� ����ра. 5. Е�ли вы и���ль�уете W��dows XP, щел�ните на �н���е Далее (N�x�� и �ерейдите � вы��лнению �ун�та 6. Е�ли вы и���ль�уете W��dows 7 или V�s��, ���тавьте �ур��р �еред и�ене� файла и на�ерите �у�вы mshta и �р��ел. П��ле эт��� щел�� ните на �н���е Далее (N�x��. 6. И��ените и�� �рлы�а на EzAD Scriptomatic и щел�ните на �н���е Готово (F���sh�. 7. Е�ли вы и���ль�уете W��dows XP, т� ра��та на эт�� �авершает��. На W��dows 7 или V�s�� щел�ните �рав�й �н����й на н�в�� �рлы�е и вы�ерите �ун�т Свойства (P�op�����s�. В� в�лад�е Ярлык (Sho���u�� щел�ните на �н���е Дополнитель- но (Adv����d� и у�тан�вите флаж�� Запуск от имени администратора (Ru� As Adm���s����o��. Щел�ните на �н���е OK, а �ате� еще ра� на �н���е OK. Дважды щел�ните на н�в�� �рлы�е дл� �а�у��а ��AD S���p�om����, ���а�ан� н��� на ри�. � .3 . Зде�ь ��ддерживает�� т�ль�� ��ы� V�S���p�. Ба��вый �ценарий ��AD S���p�om���� ���дает ��ъе�т, на�ванный в �ере�енн�й strName — на�ри�ер, «��AdUs��» внутри ��нтейнера �атал��а верхне�� ур�вн�. Дл� ���дани� ��ъе�та в ��дчиненн�� ��нтейнере нужн� у�тан�вить дл� �ере�енн�й strContainer �на� чение DN�и�ени ��нтейнера в �р���� (L��������d���� ф�р�ате. С�енерир�ванный �ценарий ��жн� �треда�тир�вать, щел�нуть на �н���е Запу- стить (Ru��, чт��ы е�� �а�у�тить, в����ль��вать�� ��ерацией ���ир�вать�в�тавить дл� е�� �ерен��а в дру��е �е�т� или щел�нуть на �н���е Сохранить (S�v��, чт��ы ��хранить е�� в файле. Зате� ��жн� и���ль��вать ве�ь �ценарий или е�� ча�ть дл� ���дани� �в�их ����твенных ��лн�ценных �ценариев.
396 Глава 8. Active Directory Scripting Interface Рис. 8 .3 . EzAD Scriptomatic генерирует простой сценарий для создания, изучения, изменения или записи объектов Active Directory Дополнительные источники информации Эта �лава �ыла ���в�щена в����жн��т�� ADSI. Е�ли в�е ра����тренн�е на данный ���ент ���а�ал��ь ва� интере�ны�, � на�т�йчив� ��ветую и�учить д���лнитель� ную инф�р�ацию. Ка� и �атериала �редыдущей �лавы, ���в�щенн�й W��dows M���g�m��� I�s��um������o�, �атериала данн�й �лавы д�лжн� �ыть в��лне д��та� т�чн� дл� де��н�трации ра��ты данн��� �ред�тва и дл� ���дани� начальн�й �а�ы дл� эффе�тивн��� и���ль��вани� д��у�ентации M���oso��, дающей ��лн�ценн�е ��и�ание ADSI. В Интернете на ве���айте msdn.microsoft.com ��жн� найти интера�тивную д�� �у�ентацию M���oso��. Пр�ведите ��и�� �� �лючев�й фра�е «A���v� D�����o�y S��v���s I��������s». Н� �еред эти� ����ательн� �р�читайте ��и �а�ечани� �� ин� тер�ретации эт�й д��у�ентации, и�л�женные в ранее �риведенн�й вре��е «Важные �а�ечани� �тн��ительн� д��у�ентации M���oso��». На��р �тн��ительн� ��ле�ных ру��в�д�тв и уче�ных �ценариев ��жн� найти �� адре�у technet.microsoft.com, �р�вед� ��и�� �� фра�е «S���p���g �o� A���v� D�����o�y».
Дополнительные источники информации 397 М�жн� та�же найти �н�же�тв� ве���айт�в, на ��т�рых ���уждает�� ���дание ADSI��ценариев. Е�ли �р�ве�ти в Goog�� ��и�� �� �лючев�й фра�е «g��obj��� w����», у ва� �удет �т�ль�� ��ыл��, чт� ра���рать�� � ни�и ��жн� �удет т�ль�� �а не���ль�� дней! На ве���айте microsoft.public.adsi.general нах�дит�� �у�лична� н�в��тна� �ру��а M���oso��, �редна�наченна� дл� ��ддерж�и ADSI��р��ра��ир�вани�. Я ��н�л, чт�, �а� и в �����тави�ых �ру��ах ��ддерж�и W��dows M���g�m��� I�s��um������o�, на �уще�твенную ча�ть ��ль��ватель��их в��р���в тут же дают�� �тветы, н� те�ы, ���уждае�ые в данн�й н�в��тн�й �ру��е, н���т д�в�льн� �а�утанный хара�тер. Б�льшин�тв� ра���в�р�в ��нцентрирует�� в��ру� LDAP:��р�вайдера, �����ль�у ��н�вна� ча�ть ���етителей ра��тает или �ытает�� ра��тать � A���v� D�����o�y. П�эт��у �де�ь ��жн� и не найти т�й н�в��тн�й �ру��ы, ��т�ра� �ы �тала ���аты� и�т�чни��� ��ле�н�й инф�р�ации, �а� в WMI��ру��е, е�ли т�ль�� вы не х�тите (или не д�лжны� внедрить�� в �а�ые де�ри ADSI. В �аче�тве �ечатн��� и�дани� � �ы ��ре���енд�вал �ни�у «W��dows NT�200 ADSI S���p���g �o� Sys��m Adm���s�����o�» Т��а�а Э��а (Thom�s ��k�, вы�ущенную и�датель�тв�� N�w R�d��s Pub��sh��g. Она на�и�ана х�р�ши� ��ы��� и на��лнена ве�ь�а ��ле�ны�и уче�ны�и �ценари��и, �ред�тавленны�и в �тиле ��рав�чни�а �р��ра��ных решений. Не��т�рые и� �ри�ер�в не�н��� �р��т�ваты, н� �ат� �ни на�л�дн� де��н�трируют �аждый ADSI���ъе�т в дей�твии. Дл� ��лучени� ��лее ��лн�й инф�р�ации �� и���ль��вании ADSI дл� у�рав� лени� IIS �айдите на ве���айт msdn.microsoft.com и �р�ведите ��и�� �� �лючев�й фра�е «IIS Adm�� Obj���s R��������». Уче�ные ру��в�д�тва и �р��тые �ценарии ��жн� найти и в Интернете, �р�вед� ��и�� �� и�ена� IIS���ъе�т�в, �еречи�лен� ны� в та�л. �.3.
Использование сценариев для управления компьютерами и сетями В эт�й �лаве ���а�ан�, �а� ���давать и д�в�дить �ценарии д� ��нечных ��ль��ва� телей. y y Вы научите�ь ��нфи�урир�вать �ценарии вх�да в �и�те�у �ри ра��те на �т� дельных ����ьютерах, в ра��чей �ру��е и в д��енн�й �ети. y y Вы научите�ь ���давать �ценарии дл� авт��атиче���й, ��ланир�ванн�й ��� ра��т�и. y y Вы у�наете, чт� у W��dows е�ть ин�тру�ентарий, ���в�л�ющий ���давать �р�� �тые �р��ра��ы у�тан�в�и дл� ра��р��транени� ваших ����твенных �р��ра�� и �ценариев, е�ли вы �наете, �де их ��жн� найти. Использование сценариев в реальном мире В �редыдущих �лавах ра���атривали�ь ��н�вы W��dows S���p� Hos� (WSH� и �ред��тавл�е�ые и� эффе�тивные ��ъе�ты и фун�ции дл� ��ра��т�и данных, у�равлени� и ���луживани�. Е�ли в �р�це��е и�учени� вы э���ери�ентир�вали � эти� ин�тру�ентарие�, �начит, �ри�енение WSH дл� решени� ��в�едневных �адач уже начал��ь. Не�л�жн� ���давать на ���рую ру�у �ценарии, �редна�наченные дл� решени� �а�их�ни�удь не�тл�жных �р��ле�, на�ри�ер дл� наведени� ��р�д�а в �атал��е, на��лненн�� неверн� на�ванны�и файла�и. Я �ани�аю�ь эти� ���т��нн�. Дл� та�их �дн�ра��вых �ценариев не нужн� удел�ть вни�ание ���твет�твующе�у ф�р�атир�ванию, д��у�ентации, универ�альн��ти, надежн��ти, �ерен��и���ти или �а�и��ли�� дру�и� �ри�на�а� х�р�ше�� �тил� �р��ра��ир�вани�. Н� в та� на�ывае��й �р�и�в�д�твенн�й �реде, т� е�ть в �итуаци�х, ���да ваши �ценарии ���ут и���ль��вать�� дру�и�и людь�и, на дру�их ����ьютерах или �н����ратн�, �ледует ���е�����ить�� и � ���твет�твующе� �тиле �р��ра��ир�� вани�. В данн�й �лаве ра���атривает�� р�д ин�тру�ент�в, �ред��тавл�е�ых WSH 9
Использование сценариев в реальном мире 399 дл� у�р�щени� на�и�ани� х�р�ших, надежных �ценариев, �редна�наченных дл� ��в�едневн��� и���ль��вани�. Зате� дают�� ��веты �� их ра�вертыванию в на� �т��щей �етев�й �реде. Разработка сценариев для других пользователей С��дава� �ценарии дл� личн��� ��ль��вани�, вы �наете, �а� �ни ра��тают, ��� эт��у, �а� �равил�, не удел�ете ������� вни�ани� на уд���тва и���ль��вани�. Н� ���да �ценарии ���дают�� дл� дру�их ��ль��вателей, �ледует �рать в ра�чет, чт� �ни не �ани�али�ь �р�це���� �р�е�тир�вани� и ���дани� �ценари�, ��эт��у не ра��ирают�� в нюан�ах. Та�ие �ценарии нуждают�� в �����й ��ддерж�е. Н� даже дл� �ценари�, ���данн��� дл� личн��� ��ль��вани�, �уще�твует вер��тн��ть, чт� чере� ��л��да ���ле е�� на�и�ани� вы �а�и �а�удете � т��, �а� �н ра��тает, и �ри е�� и�учении �н ���ажет�� че��т� �р�дни та�лич�е � �лин��и�ью. След�вательн�, и�е� дел� �� �ценари��и, �редна�начае�ы�и дл� ра��р��транени� или дл� ��лее� �енее длительн��� и���ль��вани�, �т�ит ��тратить не��т�р�е вре�� дл� �ридани� и� �в�й�тв �а��д��у�ентир�вани� и �ла����л�нн��ти � не��ытн��у ��ль��вателю. Ра����три� р�д �ри�на��в �аче�твенн� на�и�анн��� и друже�твенн��� �це� нари�: y y Сценарий д�лжен ��ладать �а��и�альн�й универ�альн��тью. На�ри�ер, в�е� �т� ���дани� �ценари� дл� �чи�т�и ��н�ретн�й �а��и �т вре�енных файл�в, ��жн� на�и�ать �ценарий дл� �чи�т�и лю��й �а��и или �а���, у�а�анных в ���андн�й �тр��е. Е�ли в эт�й �тр��е не у�а�ан� ни�а��й �а��и, �н ��жет �р�д�лжить ра��ту и �чи�тить �а��у, и���ль�уе�ую �� у��лчанию, или вы ��жете �а�тавить е�� выве�ти ��и�ание ��р�д�а е�� и���ль��вани�. Придание �ценарию универ�альн��ти ��вышает вер��тн��ть е�� и���ль��вани� �ра�у дл� не���ль�их целей. y y Пр��ра��и�т д�лжен ��ль��вать�� лю�ы� и�еющи��� в е�� ра���р�жении ин� �тру�ентарие�, �����ающи� е�у ���давать �равильный �р��ра��ный ��д. Эт�, � �ри�еру, ��начает, чт� �ри на�и�ании �ценари� на V�S���p� нужн� ��ль��� вать�� ��ерат�р�� option explicit, тре�ующи� ��ъ�вл�ть �аждую �ере�енную � ����щью ��ерат�ра dim. Те� �а�ы� V�S���p� �ред��тавл�ет�� в����жн��ть ��наружени� лю���� не�равильн� на�и�анн��� и�ени �ере�енн�й. К�нечн�, �тл�вить �ри эт�� �ши��и дру���� р�да не уда�т��, н� �ат� �е�� в���их у�илий �удет �хвачена цела� �ате��ри� в����жных �ши���. (О�ерат�р option explicit ра���атривает�� в �лаве 2 «Ру��в�д�тв� �� V�S���p�», в ра�деле «О�ла�ть ви� ди���ти �ере�енных».� y y Сценарий не д�лжен �ыть ра��читан на ��ределенную �реду ра��ты. На�ри� �ер, �а��а W��dows не в�е�да нах�дит�� в C:\WINDOWS. Она ��жет �ыть в D:\ WINDOWS, C:\WINNT или в лю��� дру��� не�ред��а�уе��� �е�те. В�е�т� на� �и�ани� �ценари�, и���ль�ующе�� фи��ир�ванные �ути � �и�те�ны� �а��а�, нужн� и���ль��вать �ере�енные �реды ��ружени� и ��ъе�т WScript.Shell дл� ��лучени� фа�тиче��их �утевых и�ен ра�личных �и�те�ных и личных �а���.
400 Глава 9. Использование сценариев для управления компьютерами и сетями Дл� ��лучени� ��лее ��др��н�й инф�р�ации �ледует ��ратить�� � �а�и�и GetSpecialFolder в ��рав�е 4.1 и � �а�и�и SpecialFolders в ��рав�е 4.9 . y y Сценарий д�лжен у�еждать�� в �уще�тв�вании в�ех файл�в и �а���, на�ванных в ���андн�й �тр��е � ����щью �ет�да FileExists, ра����тренн��� в ��рав�е 4.1. Е�ли �а�ие�ли�� и� у�а�анных файл�в �т�ут�твуют, �ценарий д�лжен �� эт�� у�нать и �ре�ратить �в�ю ра��ту еще д� ���ыт�и и���ль��вани� та�их файл�в. Лучше и�начальн� выве�ти ����щение ти�а «Файл ��pu�.d�� не �уще�твует», че� дать в����жн��ть �ценарию вы��лнить �а�ую�т� ча�ть е�� �адани� и т�ль� �� ���ле эт��� ��тан�вить�� и выдать ��ль��вателю �а��е�ни�удь �а�ад�чн�е ����щение ти�а: C:\scripts\process.vbs(33, 1) Ошибка выполнения Microsoft VBScript: Файл не найден y y Сценарий д�лжен тщательн� �р�вер�ть �равильн��ть �инта��и�а в�ех ар�у�ен� т�в ���андн�й �тр��и. При ��наружении �ши��и �н д�лжен в т�чн��ти ����� щить ее хара�тер и ���а�ать �рат��е, н� ��ле�н�е ��и�ание т���, чт� д��у�ти�� и���ль��вать в ���андн�й �тр��е. y y Сценарий д�лжен �ыть на�и�ан та�и� ��ра���, чт��ы д��у��ать целе����ра�� ные �начени� �� у��лчанию дл� не����ательных ар�у�ент�в ���андн�й �тр��и. На�ри�ер, е�ли в ваше� �ценарии �реду���трена в����жн��ть �т��ражени� ��др��н�й �тлад�чн�й инф�р�ации � ����щью ��ерат�ра WScript.echo, ��жн� в����ль��вать�� ар�у�ент�� /verbose дл� е�� в�лючени�, н� �ри эт�� �реду���� треть �т�лючение эт�й в����жн��ти �� у��лчанию, е�ли �тлад�а не тре�ует��. Два ���ледних �ун�та �удут ра����трены в данн�й �лаве. С��дание �ценариев, ��ладающих та�и�и �в�й�тва�и, тре�ует вре�ени. Та�же эт� �рив�дит � удлинению �ценари� и, �� ир�нии �удь�ы, ��вышает вер��тн��ть ���влени� в не� �ши���, �в��анных � д��авленны� ��д��. П�эт��у �ри ���дании �ценариев ��ще�� ��ль��вани� нужн� тщательн� те�тир�вать �ажд�е в����жн�е и��енение и е�� ���лед�тви�. Н� в �ер��е�тиве в�е эт� ��у�ит��, �����ль�у ваши �р��ра��ы �танут ��лее надежны�и и уд��ны�и дл� ��ль��вателей. Одни� и� �������в ���дани� дружелю�ных �� �тн�шению � ��ль��вател�� �ценариев �вл�ет�� их у�а��в�а в файлы W��dows S���p� F���s (WSF�. Использование WSF-файлов В �рил�жении G «C������g You� Ow� S���p��b�� Obj���s», в�люченн�� в интернет� вер�ию данн�й �ни�и и д��ту�н�� �� адре�у www.helpwinxp.com/scripting, в� в�ех ��др��н��т�х ���а�ан ������ ���дани� ��ъе�т�в Automation �уте� �а�лючени� �ценари� в файл W��dows S���p� Compo����. Дл� у�а��в�и ��ычных �ценариев та�же ��жет и���ль��вать�� ф�р�атир�вание � ����щью ра�шир�е���� ��ы�а ра�� �ет�и — �x���s�b�� M��kup L��gu�g� (XML�, ��редел�ющее WSC���ъе�т. В эт�� �лучае и�ена файл�в ��лучают ра�ширение .wsf, ��эт��у далее в эт�й �лаве � �уду на�ывать их WSF�файла�и. Дл� ���ещени� �ценариев не в ��ычный, х�р�ш� �на�
Использование WSF-файлов 401 ���ый V�S���p�, J�v�S���p�, P���s���p� или �а��й�ни�удь дру��й �р��т�й ф�р�ат, а в WSF�файлы е�ть р�д д�в�льн� ве��их �ричин: y y WSF�файлы у�р�щают не�р�тив�речивую ��ра��т�у ар�у�ент�в ���андн�й �тр��и и �ред��тавление ��рав�и ��ль��вател�� �ценари�; y y WSF�файлы ���ут �ред��тавить ва� авт��атиче��ий д��ту� � �и�в�льны� ��н�танта�, �в��анны� � внешни�и ��ъе�та�и, ��в���жда� ва� �т �а���т��� тельн��� ��ределени� �начений этих ��н�тант в ваших �ценари�х; y y WSF��ценарии ���ут ��ылать�� на ��д�р��ра��ы и фун�ции, хран�щие� �� в дру�их WSF�файлах. Эт� ���в�л�ет ��ддерживать т�ль�� �дну ���ию WSF�файла, ��держаще�� в�е ра�ра��танные ва�и уд��ные �р�цедуры, и вы ��жете ��ылать�� на эту �и�ли�те�у и� лю���� ��личе�тва WSF��р��ра��. Е�ли ��над��ит�� и��енить или ��д�равить �дну и� фун�ций, ва� не �ридет�� реда�тир�вать �аждый файл, в ��т�р�� �на и���ль�ует��. Е�ли вы не �на���ы � XML�ф�р�атир�вание� файла, � ��ветую �р�читать ра�дел �� ��н�ва� XML, «XML ��s��s», в �а�ружае��й вер�ии �рил�жени� App��� d�x G. В эт�� ра�деле ра���атривают�� ��н�вы ф�р�ата и �тру�туры XML�файл�в. П�лна� �тру�тура WSF�файла ���а�ана ниже. Следует уче�ть, чт� �авершаю� щие те�и не ���а�аны и не �ажда� дире�тива или эле�ент д�лжны и���ль��вать�� в �ажд�� �ценарии. Зде�ь �р��т� ���а�ан ��р�д��, ��т�рый ��ычн� и���ль�ует�� в WSF�файле. <?XML?> <!-- необязательная директива --> <package> <!-- требуется при наличии более одного задания --> <comment> <!-- может появляться в любом месте пакета --> <job> <?job?> <!-- необязательная директива --> <runtime> <!-- определение параметров и онлайн-справки --> <named/> <!-- необязательные определения --> <unnamed/> <description> <example> <usage> </runtime> <object/> <!-- от нуля и более --> <reference/> <!-- от нуля и более --> <resource> <!-- от нуля и более --> <script language="xxx"> <!-- от одного и более элементов сценария --> </job>... <!-- за ним может следовать другое задание--> </package> WSF�файл ���т�ит и� �ледующих ��н�вных ра�дел�в: y y <package> — в�лючает в �е�� в�е вх�д�щие в файл �ценарии. y y <job> — в�лючает в �е�� �тдельный, не�ави�и�ый �ценарий. В файле ��жет �ыть не���ль�� ра�дел�в <job>; ��жн� у�а�ать, ��т�рый и� WSH�х��т�в или не���ль�� х��т�в �а�у��ать �ри на��ре ���андн�й �тр��и. Б�лее т���, в ра�деле <job> ��жет ��держать�� ��лее �дн��� <script>�эле�ента � �р��ра��ны� ��д�� �ценари�, а та�же � ��д�р��ра��а�и и фун�ци��и.
402 Глава 9. Использование сценариев для управления компьютерами и сетями y y <runtime> — в�лючает в �е�� ��и�ание ар�у�ент�в ���андн�й �тр��и �адани�. Инф�р�аци�, и�еюща��� в ра�деле <runtime>, ���в�л�ет WSH выв�дить �ра� �ив� �тф�р�атир�ванн�е ��и�ание ���андн�й �тр��и и ��рав�у �� �инта��и�у, е�ли ��ль��ватель введет в ���андн�й �тр��е �а�у��а �ценари� �люч /? или е�ли ��ль��ватель не�равильн� у�ажет ар�у�енты ���андн�й �тр��и. Эт� ��� �в�л�ет WSF��ценари�� ве�ти �е�� ��д��н� в�е� �тандартны� �р��ра��а� ���андн�й �тр��и W��dows. y y <object/>, <reference/> и <resource> — у�танавливают ��ыл�и на ��ъе�ты и �ред��ределенные данные, ��т�рые ���ут и���ль��вать�� �ценарие�. y y <script> — эти эле�енты ��держат �р��ра��ный ��д �ценари� дл� данн��� �адани�. П�др��н�е ��и�ание в�ех ра�решенный те��в WSF�файла дает�� в �ледующе� ра�деле. П��ле эт��� �ы ра����три� их �ра�тиче���е �ри�енение. Справочник по формату WSF-файла В ��рав�е 9.1 �еречи�лены в�е те�и и атри�уты, ра�решенные в WSF�файле. В эт�� ��рав�чни�е �еречи�лены т�ль�� эле�енты, �редна�наченные дл� в�лючени� �це� нарных �р��ра��. Эле�енты, и���ль�уе�ые т�ль�� дл� ���дани� WSC���ъе�т�в, �де�ь не ра���атривают��. ▼) XML игнорирует лишние пробелы или разбиения строк между тегами, атрибутами или элемен- тами. Но текст, находящийся внутри <description>, <resource>, <helptext> и других отобража- емых элементов, выводится буквально, поэтому внутри этих тегов нужно добавлять только те пробельные символы или разбиения строк, которым нужно будет появляться в выводе сценария. СПРАВКА 9.1. ПЕРЕЧЕНЬ WSF-ТЕГОВ <?XML version="1.0" [standalone="yes"]?> Эле�ент <?XML?> тре�ует, чт��ы интер�ретат�р WSH �р�вел �тр��ую �р�� вер�у �равильн��ти XML. При в�люченн�й �р�вер�е �ри�ен�ют�� �тр���е ф�р�атир�вание и �равила интер�ретации XML. «Стр��ий» режи� ��ычн� тре�ует��, ���да е�ть на�ерение реда�тир�вать WSF�файл � ����щью реда�� т�ра XML. Д���лнительна� инф�р�аци� � �тр���й �р�вер�е XML и�л�жена в �татье, в �рил�жении G. Е�ли эле�ент <?XML?> и���ль�ует��, т� �н д�лжен �ыть в �ерв�й �тр��е файла и �еред ни� не д�лжн� �ыть �у�тых �тр��. Н��ер вер�ии д�лжен �ыть у�а�ан �а� 1.0 . Не����ательный атри�ут standalone ���а�ывает, чт� XML� файл не ��ылает�� на внешнее ��ределение ти�а д��у�ента — Do�um��� Typ� D��������o� (DTD� и ��жет �ыть ��ущен или у�а�ан �а� "yes". <?job error="value" debug="value" ?> В�лючает выв�д ����щений �� �ши��ах и� �ценариев и �тлад�у ��держаще� ���� в �адании �ценари�. П� у��лчанию ����щени� �� �ши��ах не выв�д�т�� и �тлад�а не в�лючает��. Эле�ент <?job?> ���в�л�ет и��енить ��ведение ��
Использование WSF-файлов 403 у��лчанию, у�а�ав True или False дл� в�лючени� или вы�лючени� выв�да ����щени� �� �ши��ах, а та�же �тлад�и � и���ль��вание� W��dows S���p� D�bugg�� или э�вивалентн��� е�у �тладчи�а �ценариев. Эту дире�тиву нужн� ���ещать на �ерв�й ���иции внутри эле�ента <job>. <! [CDATA[ защищенный текст ... ]]> В ра�дел CDATA ���ещает�� ��д �ценари�, ра���л�женный внутри эле�ента <script> и ���а�ывающий, чт� �н не д�лжен ра���атривать�� в �аче�тве ра�� �ет�и XML; в �р�тивн�� �лучае �ри�ут�твие в �ценарии та�их �и�в�л�в, �а� <, > и &, �удет вы�ывать �ши��и. Ра�дел CDATA ��жет и���ль��вать�� т�ль�� в�е�те � дире�тив�й <?XML?>; е�ли в начале файла эта дире�тива �т�ут�твует, �ри�ут�твие CDATA вы�ывает �инта��иче��ую �ши��у. <!-- любой текст ... --> В�е чт� нах�дит�� внутри ра�дела <!-- ... - - >, в�люча� и XML�ра��ет�у, ра���атривает�� �а� те��т ����ентари�. Эт�т ра�дел ��жет и���ль��вать�� дл� ����ентир�вани� �л���в ��да в �р�це��е те�тир�вани� или дл� вв�да ����ентариев или ��и�ательн�й инф�р�ации. Дл� в�лючени� ����ентариев ��жет та�же и���ль��вать�� эле�ент <comment>, н� в не� не ���ут ��держать�� дру�ие XML�те�и или дру�ие эле�енты ра��ет�и. <comment> любой текст ... </comment> Служит �ри�на��� те��та ����ентари�, и�н�рируе���� �ар�ер��. В ����ен� тарий ��жн� в�лючать не���ль�� �тр�� те��та, н� т�ль�� не XML�те�и . <description>любой текст </description> О�и�ывает на�начение �ценари�. Лю��й те��т, нах�д�щий�� внутри эле� �ента <description>, выв�дит�� �ри вы��лнении �ет�да WScript.Arguments. ShowUsage или �ри �а�у��е �ценари� � �люч�� ���андн�й �тр��и /?. При не��� х�ди���ти те��т ��жет �р��тирать�� на не���ль�� �тр��. Эт�т эле�ент �вл�ет�� не����ательн�й ча�тью эле�ента <runtime>. Учитывают�� в�е �р��ельные �и�в�лы (�и�в�лы ра��иени� �тр��, �р��елы и �и�в�лы та�ул�ции� �ежду �т�рывающи� и �а�рывающи� те�а�и. Выв�� ди�а� инф�р�аци� вы�л�дит лучше, е�ли те��т ��и�ани� �ледует �ра�у же �а �т�рывающи� те���, лю�ые ���ледующие �тр��и �ледуют �� лев��у ��лю, а �а�рывающий те� нах�дит�� в �тдельн�й �тр��е.
404 Глава 9. Использование сценариев для управления компьютерами и сетями <example>Пример: текст примера использования </example> И���ль�ует�� дл� �риведени� �ри�ера �равильн��� и���ль��вани� ���анд� н�й �тр��и �ценари�. Выв�дит�� �ри вы��лнении �ет�да WScript.Arguments. ShowUsage или �ри �а�у��е �ценари� � �люч�� ���андн�й �тр��и /?. Начинает�� � те��та "Пример: . ". Учитывают�� в�е �р��ельные �и�в�лы; ��. ��и�ание эле � �ента <description>. Эт�т эле�ент �вл�ет�� не����ательн�й ча�тью эле�ента <runtime>. <job [id="jobid"]> содержимое задания: <?job?>, <runtime>, <script> и т. д. ... </job> В�лючает в �е�� �а��д��тат�чный �ценарий. В �дн�� WSF�файле ��жет ��� �ещать�� ��лее �дн��� эле�ента <job>. В та��� �лучае �ажд��у �аданию ��жн� дать �в�е ����твенн�е �тличительн�е и��, у�а�ывае��е � ����щью атри�ута id. Эти и�ена �аданий и���ль�уют�� в ���андн�й �тр��е дл� вы��ра, �а��е �а� дание или �адани� нужн� �а�у��ать. Е�ли в файле и�еет�� не���ль�� �аданий и не у�а�ан�, �а��е и� них �а�у��ать,WSH �а�у��ает �ажд�е и� них �� ��р�д�у их �лед�вани� в файле. <named name="argname" helpstring="description" type="argtype" required="boolean"/> О�редел�ет �люч, ��т�рый ��жет и���ль��вать�� в ���андн�й �тр��е �а�у� ��а �ценари�. П�и�ен�ванные �лючи ���андн�й �тр��и начинают�� � �и�в�ла �лэша. На�ри�ер: имя_сценария /один_ключ /другой_ключ=3 В �еречень те�а <named/> вх�д�т �ледующие атри�уты: y y name — и�� �люча ���андн�й �тр��и. y y helpstring — �рат��е ��и�ание �редна�начени� �люча. y y type — ти� �жидае�ых данных. Эт� д�лжн� �ыть �дн� и� �ледующих �наче� ний: "string", "boolean" или "simple". П� у��лчанию и���ль�ует�� �начение "simple". y y required — "True", е�ли �люч ар�у�ент тре�ует�� в�е�да, или "False", е�ли �люч и���ль��вать не����ательн�. П� у��лчанию и���ль�ует�� �начение "False". Ти� �люча ��редел�ет, чт� нужн� вве�ти ��ль��вателю в �аче�тве �люча ���андн�й �тр��и. Е�ли нужн�, чт��ы �люч и�ел ф�р�у /ключ=текстовое_зна ­ чение, �ледует у�а�ать type="string". Е�ли нужн� лишь �ри�ут�твие �люча (на� �ри�ер, /verbose�, �ледует у�а�ать type="simple". Е�ли нужн�, чт��ы �люч �ыл �ере�лючателе� ти�а в�лючен��вы�лючен� в виде /ключ+ или /ключ-, �ледует у�а�ать type="boolean". Н� ���ледн�� ф�р�а — не �е� �транн��тей. Та�а� ф�р� �а �лючей не и���ль�ует�� ни в �дн�й �р��ра��е ���андн�й �тр��и W��dows, и не��н�тн�, �аче� в���ще нужн� ее и���ль��вание в наших �ценари�х.
Использование WSF-файлов 405 Инф�р�аци� в эле�енте <named> и���ль�ует��, т�ль�� ���да у WSH �а�ра� шивает�� выв�д инф�р�ации �� и���ль��вании �ценари� �уте� вы��ва �ет�да WScript.Arguments.ShowUsage или �уте� �а�у��а �ценари� � �люч�� ���андн�й �тр��и /?. К ��жалению,WSH не и���ль�ует эту инф�р�ацию дл� авт��атиче� ���й �р�вер�и д��у�ти���ти �лючей ���андн�й �тр��и. <object id="name" {classid="clsid:GUID" | progid="progid"} [events="boolval"]/> С��дает э��е��л�р у�а�анн��� ��ъе�та в �л��альн�й �ере�енн�й � ���� �наченны� и�ене�. Нужн� ли�� у�а�ать progid�и�� ��ъе�та (на�ри�ер, "Scripting.FileSystemObject"�, ли�� е�� идентифи�ат�р �ла��а classid. Те� object д�лжен ����ательн� �авершать�� �и�в�л�� />. Атри�ут events у�а�ывает, ��т�в ли �ценарий � ��ра��т�е ���ытий, иници� ир�ванных ��ъе�т��. С��ыти� в данн�й �ни�е не ра���атривают��. <package> один или несколько <job>­элементов ... </package> В�лючает в �е�� �дин или не���ль�� �тдельных �ценариев, и�еющих�� в WSF�файле. Е�ли в файле ��держит�� в�е�� �дн� �адание, эле�ент <package> �вл�ет�� не����ательны�. <reference {object="progid" | guid="GUID"} [version="version"]/> При�а�ывает WSH �а�ру�ить �и�ли�те�у ти��в дл� у�а�анн��� ти�а ��ъ� е�та. В ре�ультате �а�ружают�� в�е �ред��ределенные ��н�танты, �в��анные � ��ъе�т��. О�ъе�т ��жет �ыть у�а�ан � ����щью е�� progid�и�ени (на�ри�ер, дл� �а�ру��и ��н�тант W��dows M���g�m��� I�s��um������o� (WMI� нужн� у�а�ать ��ъе�т object="WbemScripting.SWbemLocator"� или е�� GUID�н��ера. П� у��лчанию WSH �а�ружает �а�ую ���леднюю вер�ию �ла��а ��ъе�та, н�, е�ли нужн�, ��жн� у�а�ать и �дну и� �режних вер�ий, в����ль��вавши�ь дл� эт��� атри�ут�� version. Те� д�лжен �ыть ����ательн� �авершен �и�в�л�� />. <resource id="resourceid"><![CDATA[текст или число]]> </resource> или <resource id="resourceid">текст или число</resource> С��дает ��и�ен�ванн�е �начение, ��т�р�е ��жет �ыть и�влечен� �ценари� е� � ����щью фун�ции GetResource(). Следует �а�етить, чт� те� <resource> �ред��тавл�ет ������ ��нцентрации в�е�� ��ецифиче����� дл� нужн��� ��ы�а те��та в �дн�� �е�те, чт��ы в �удуще� ���ла �ыть ���дана вер�и�, и���ль�ую� ща� дру��й ��ы�. Те� <resource> �ри�ваивает и�� resourceid лю�ы� те��т�вы� или чи�л�вы� данны�. Стр��а resourceid �ередает�� фун�ции GetResource() дл� и�влечени� данных и� �ценари�. Е�ли в WSC�файле и���ль�ует�� �тр���е XML����твет�твие, ��держи��е д�лжн� �ыть ���ещен� в эле�ент <![CDATA[
406 Глава 9. Использование сценариев для управления компьютерами и сетями ... ] ]>. Д���лнительна� инф�р�аци� �� эле�енте <resource> дает�� в ра�деле «D������g R�sou���s», ���в�щенн�� ��ределению ре�ур��в, в �рил�жении G. <runtime> Определения аргументов: теги <named>, <unnamed>, <usage>, <description>, <example> ... </runtime> Эле�ент <runtime> ��держит те�и, ��редел�ющие �инта��и� ���андн�й �тр�� �и дл� �ценари� �адани�. О�и�ани� этих те��в даны в ра�ных �е�тах данн��� ��рав�чн��� ��и��а. <script language="name"> <![CDATA[ код сценария ... ]]> </script> или <script language="name" src="location"/> В �ервую ф�р�у эле�ента <script> �а�лючает�� фа�тиче��ий �р��ра��ный ��д �ценари� и (или� ��д�р��ра��ы и фун�ции. Атри�ут language ��жн�, ��нечн�, ���читать и�лишни�, н� нет ни�а��й �арантии, чт� е�� �начение �� у��лчанию вы�тавлен� нужны� ��ра��� на �ажд�� ����ьютере. П�эт��у в�е�� да д��авл�йте атри�ут language="VBscript" или у�а�ывайте в эт�� атри�уте т�т ��ы�, ��т�ры� ��ль�уете�ь. Вт�ра� ф�р�а эле�ента script ���а�ывает, чт� WSH д�лжен в�лючить �р�� �ра��у �ценари�, хран�ще���� в т�� �е�те, ��т�р�е у�а�ан� в атри�уте src. Эт� �е�т� д�лжн� �ыть и�ене� файла (в�люча� �уть�, ��щи� и�ене� в ф�р�ате UNC или URL�адре���, ��т�рый д�лжен начинать�� � http://. В данн�й ф�р�е те� script �авершает�� �и�в�л�� /> и не и�еет ��держи���� или �а�рывающе�� те�а. Файл, на ��т�рый ��ылает�� эта «и���ртирующа�» вер�и� те�а script, д�лжен �ыть �р��ты� �р��ра��ны� файл�� �ценари�, не ��держащи� XML� ф�р�атир�вани�. Е�ли и���ль�ует�� не���ль�� эле�ент�в <script> ��еих ф�р� и е�ли ��лее че� �дин и� них ��держит «тел�» �р��ра��ы, �ценарии вы��лн�ют�� ���ле� д�вательн�. Те ��д�р��ра��ы и фун�ции, ��т�рые ��в�е�тн� и���ль�уют�� <script>�эле�ента�и, д�лжны �ыть ��ределены в и���ль�ующе� е�� эле�енте �ценари� или в эле�енте �ценари�, ра���л�женн�� ранее, че� �дин и� и���ль�у� ющих их эле�ент�в. В ча�тн��ти, е�ли нужн� в����ль��вать�� ф�р��й <script src=.../> дл� и���ртир�вани� �и�ли�те�и ��д�р��ра�� и фун�ций, и���рти� рующий те� д�лжен ��а�ать�� �еред те��� <script>, в ��т�р�� нах�дит�� ��д, и���ль�ующий �р�цедуры. Е�ли в �а��� начале ваше�� �ценари� и���ль�ует�� дире�тива �тр����� ���твет�тви� <?XML?>, �а� ��д �ценари� нужн� ���етить внутри эле�ент�в <![CDATA[ и ]]>, дл� т��� чт��ы лю�ые �и�в�лы < или > в ваше� �ценарии не
Использование WSF-файлов 407 �ыли интер�ретир�ваны в �аче�тве те��в. Е�ли дире�тива <?XML?> не и���ль� �ует��, не �ледует и���ль��вать и эле�енты <![CDATA[ и ]]>. В лю��� �лучае, ра��ет�у CDATA не нужн� и���ль��вать в и���ртируе�ых файлах, на ��т�рые ��ылают�� эле�енты <script src=.../>. <unnamed name="argname" helpstring="description" many="boolean" _ required="value"/> В эле�енте <runtime> эле�ент unnamed �лужит �ри�на��� не��и�ен�ванн��� ар�у�ента ���андн�й �тр��и (т� е�ть не начинающе���� � �и�в�ла /�. О�ычн� эт� и�ена файл�в или эле�енты, чье �начение �ередает�� ра���л�жение� (��� р�д��� �лед�вани�� в ���андн�й �тр��е. В �еречень те�а <unnamed/> вх�д�т �ледующие атри�уты: y y name — и�� эле�ента ���андн�й �тр��и. П�началу �ри�ваивание и�ени «не��и�ен�ванн��у» эле�енту �ажет�� не���ль�� �транны�. Причина в т��, чт� WSH д�лжен выв�дить �инта��и� ���андн�й �тр��и. Эт� и�� д�лжн� и���ль��вать�� в �аче�тве �а��лнител� в ти��в�й �тр��е �инта��и�а. Вы�ерите и��, ��т�р�е �ред�тавл�ет на�начение ар�у�ента: "имя_файла", "имя_пользователя" или чт��ни�удь ��д��н�е. y y helpstring — �рат��е ��и�ание �редна�начени� ар�у�ента. y y many — �улев� �начение; "True", е�ли ��ль��ватель ��жет вве�ти �ере�енн�е ��личе�тв� этих ар�у�ент�в, или "False", е�ли ��ль��ватель д�лжен вве�ти их фи��ир�ванн�е ��личе�тв�. y y required — �ини�альн�е ��личе�тв� ���влений т��� эле�ента, ��т�рый д�лжен �ыть введен. Д��у�ти�ые �начени� "0", "1", "2" и т. д ., "false", чт� т� же �а��е, чт� и "0" или "true", чт� т� же �а��е, чт� и "1". Ка� и в �лучае � эле�ент�� <named>, инф�р�аци� в эле�енте <unnamed> и�� ��ль�ует�� т�ль�� т��да, ���да �т WSH тре�ует�� выве�ти �ведени� � ��р�д�е и���ль��вани� �ценари�. ▼) Эти атрибуты определяют, как метод ShowUsage отображает синтаксис командной строки. Для неименованных аргументов WSH не проверяет, отвечает ли командная строка синтакси- ческим требованиям, указанным атрибутами «many» и «required». Ваш сценарий должен сам определить, содержится ли в командной строке правильное количество неименованных аргу- ментов. Если вы определили, что синтаксис не соблюден, вызовите метод WScript.Arguments. ShowUsage, а затем вызовите метод WScript.Quit. <usage>текст описания </usage> Эт�т эле�ент ��жет и���ль��вать�� в эле�енте <runtime>. Е�ли �н �ри� �ут�твует и е�ли в �ценарии вы��лн�ет�� �ет�д WScript.Arguments.ShowUsage или ��ль��ватель в����ль��вал�� в ���андн�й �тр��е �люч�� /?, те��т внутри <usage>�те��в выв�дит�� в�е�т� те��та, авт��атиче��и �енерируе���� WSH и� ��держи���� те��в <named>, <unnamed>, <description> и <example>. Е�ли и�� ��ль�ует�� <usage>, т� нет ни�а���� ��ы�ла устанавливать �начени� дру�их те��в.
408 Глава 9. Использование сценариев для управления компьютерами и сетями В те�ах <usage> учитывают�� в�е �р��ельные �и�в�лы. Дл� ��лее �ри� вле�ательн��� ф�р�атир�вани� на�ирайте те��т �ра�у же ���ле те�а <usage>, начинайте �аждую н�вую �тр��у � лев��� ��л� и на�ирайте те� </usage> в е�� ����твенн�й �тдельн�й �тр��е. А те�ерь и�учи� ������ы и���ль��вани� �в�й�тв WSF�файла. Предоставление справки в WSF-файлах Ка� уже у���инал��ь в ��рав�е 9.1, в ф�р�ате WSF�файла и���ль�ует�� эле�ент <runtime>, ��и�ывающий ар�у�енты ���андн�й �тр��и, �жидае�ые ваши� �цена� рие�. Эт� ���в�л�ет WSH авт��атиче��и выв�дить дл� ��ль��вател� ��рав�чную инф�р�ацию. Выв�д ��рав�и �р�и�х�дит �ри двух ���т��тель�твах: y y Е�ли ��ль��ватель �ри �а�у��е �ценари� ���ещает в ���андную �тр��у �люч /?, WSH выв�дит инф�р�ацию �� и���ль��вании �ценари� и �авершает ра��ту. Эт� �тандартн�е ��ведение дл� ��льшин�тва �р��ра�� ���андн�й �тр��и W��dows, и �чень х�р�ш�, чт� WSF�ф�р�ат �а�тавл�ет ваши �ценарии ве�ти �е�� т�чн� та� же. y y Е�ли вы��лн�ет�� �ет�д WScript.Arguments.ShowUsage, WSH выв�дит инф�р� �ацию �� и���ль��вании �ценари� и �р�д�лжает е�� вы��лнение. Первые ���т��тель�тва ��ладывают�� ��лн��тью �а�и �� �е�е, вт�рые же ��ла� дывают�� ��д ваши� у�равление�. Я ��ветую, чт��ы �ри �ажд�� ��наружении не��рре�тн��� вв�да ар�у�ент�в �� �т�р�ны ��ль��вател� и���ль��вал�� �ет�д WScript.echo, выв�д�щий ����щение, чет�� ��ъ��н�ющее, чт� и�енн� �ыл� вве� ден� не�равильн�, а �ате� и���ль��вали�ь �ледующие ��ерат�ры: WScript.Arguments.ShowUsage WScript.Quit 1 Они выв�д�т инф�р�ацию � �равильн�� и���ль��вании �ценари� и �ре� �ращают вы��лнение �ценари� �� �тату��� вых�да 1. Ненулев�й �тату� вых�да �видетель�твует � т��, чт� чт��т� ��шл� не та� — � �ри�еру, �ценарий �а�ущен и� �а�етн��� файла или и� Планир�вщи�а �адач. Чт� выв�дит�� �ет�д�� ShowUsage? Е�ли ��ределен эле�ент <usage>, �ет�д вы� в�дит ��держи��е эт��� эле�ента. В �р�тивн�� �лучае и�вле�ает�� инф�р�аци� и� дру�их те��в, и�еющих�� в эле�енте <runtime>, и выв�дит�� в �ледующе� ф�р�ате: текст из <description> Использование: имя_сценария /поименованные_аргументы непоименованные_аргументы Параметры: имя: описание текст из <example> � и�ен�ванны�и и неи�ен�ванны�и ар�у�ента�и, �тф�р�атир�ванны�и � и���ль� ��вание� ��ычн�й �а�и�и �инта��и�а: �вадратные �����и в��ру� не����ательных ар�у�ент�в, �н���т�чи� ���ле ��вт�р�ющих�� ар�у�ент�в и т. д . Ра����три� �ри�ер. В �ценарии, �де �ы х�ти�, чт��ы �н ��лучал не����атель� ные ар�у�енты /volname (и�еющий те��т�в�е �начение� и /eject (�ере�лючатель,
Использование WSF-файлов 409 �ри�ут�твие ��т�р��� вы�ывает не�ие дей�тви��, а та�же �дн� или не���ль�� и�ен файл�в, эле�ент ра��ет�и <runtime> ��жет и�еть �ледующий вид: <runtime> <named name="volname" required="false" type="string" helpstring="Имя тома компакт-диска. По умолчанию — дд-мм-гг." /> <named name="eject" required="false" type="simple" helpstring="Извлечение диска после записи." /> <unnamed name="name" required="true" many="true" helpstring="Записываемый на компакт-диск файл или папка." /> <description> Этот сценарий записывает указанные в командной строке файл(ы) или папку (папки) на компакт-диск или DVD-диск. </description> <example> Пример: cdburn /volname:backup c:\files </example> </runtime> Е�ли �а�у�тить WSF�файл � �люч�� �?, �ы ��лучи� �ледующее: Этот сценарий записывает указанные в командной строке файл(ы) или папку (папки) на компакт-диск или DVD-диск. Использование: cdburn.WSF [/volname:value] [/eject] name1 [name2...] Параметры: volname : Имя тома компакт-диска. По умолчанию — дд -мм -гг . eject : Извлечение диска после записи. name : Записываемый на компакт-диск файл или папка. Пример: cdburn /volname:backup c:\files О�ратите вни�ание: �лючи /volname и /eject авт��атиче��и выв�д�т�� в �ва� дратных �����ах, ��т��у чт� ��а �ни и�еют �ет�у required="False". Неи�ен�� ванный ар�у�ент ���а�ан �а� name1, ��т��у чт� е�� �ри�ут�твие не��х�ди��, а не����ательн��ть вв�да д���лнительных неи�ен�ванных ар�у�ент�в ���а�ана ��т��у, чт� дл� них �ыл� у�а�ан� many="True". Х�т� вы ���ли �ы, наверн�е, �а���т��тельн� �ф�р�ир�вать ��д��н�е ��держи� ��е и вве�ти е�� в те� <usage>, и эт� �ыл� �ы �ы�трее, че� вв�дить в�е ��тальные те�и, вх�д�щие в эле�ент ра��ет�и <runtime>, у эт��� �ет�да е�ть т� �реи�уще�тв�, чт� WSH в�е�да �р�и�в�дит �дн���ра�н�е ф�р�атир�вание инф�р�ации. ▼▼ Независимо от выбранного вами метода отображения информации о порядке использования сценария, не пренебрегайте задачей написания подобного рода вспомогательной информации в своих сценариях. Уверяю вас, она пригодится в будущем, даже если никто кроме вас не будет пользоваться вашим сценарием. Обработка аргументов командной строки Ар�у�енты ���андн�й �тр��и �ценари� �тан�в�т�� д��ту�ны �ла��дар� в�тр�ен� н��у ��ъе�ту���лле�ции WScript.Arguments. Эта ��лле�ци� уже ра���атривала�ь в �лаве 3 «С��дание �ценариев и ра��та � ��ъе�та�и». Эт� ве�ь�а ��ле�н�е �ред�
410 Глава 9. Использование сценариев для управления компьютерами и сетями �тв�, �����ль�у �н� авт��атиче��и ��ртирует ��и�ен�ванные и не��и�ен�ванные ар�у�енты ���андн�й �тр��и. У ��ъе�та WScript.Arguments и�еет�� два �в�й�тва, в��вращающие ��лле�ции, �вл�ющие�� ��дна��ра�и ��держи���� �а���� ��ъе�та WScript.Arguments: y y WScript.Arguments.Named �вл�ет�� ��лле�цией �ереданных �ценарию ��и�е� н�ванных (/xxx� ар�у�ент�в ���андн�й �тр��и. y y WScript.Arguments.Unnamed �вл�ет�� ��лле�цией в�ех ��тальных ар�у�ент�в ���андн�й �тр��и (т� е�ть и�ен файл�в и т. �.� . О�и�ание и ���уждение и���ль��вани� ��еих ��лле�ций �удет ве�ти�ь �� �череди. Обработка поименованных аргументов (ключей) Св�й�тва и �ет�ды ��лле�ции Named �еречи�лены в ��рав�е 9.2 . СПРАВКА 9.2. СВОЙСТВА И МЕТОДЫ КОЛЛЕКЦИИ NAMED СВОЙСТВА Item(имя) В��вращает в виде �тр��и ча�ть значение ар�у�ента ���андн�й �тр��и /имя:значение. Е�ли в ���андн�й �тр��е ар�у�ент � �аданны� и�ене� не у�а�ан, в��вращает �начение Empty. Е�ли, �а� ���а�ан� в �ледующей ���андн�й �тр��е, �начение ар�у�ента �ыл� �а�лючен� в �авыч�и: somescript /title:"Это заголовок, которым я захотел воспользоваться" т� WScript.Named.Item("title") в��вращает �тр���в�е �начение Это заголовок, которым я захотел воспользоваться �е� �авыче�. Дл� та�их �р��тых ар�у�ент�в, �а� /имя, в�е�да в��вращает�� �начение Empty; чт��ы ��ределить, у�а�ан эт�т ар� �у�ент или нет, нужн� и���ль��вать �ет�д Exists. Дл� д�в�льн��та�и �транных �улевых �ере�лючателей, у�а�ывае�ых в виде /имя+ или /имя-, в��вращает�� �начение True (-1�, е�ли ар�у�ент ��анчивает�� �на��� +, или False (0�, е�ли ар�у�ент ��анчивает�� �на��� -. (Чт� �а�ает�� �ен�, � эти� �инта��и��� ни� ���да не ��ль��вал��.� Length В��вращает ��личе�тв� и�еющих�� в ��лле�ции эле�ент�в. Дл� ��и�е� н�ванных эле�ент�в эт� не �ред�тавл�ет ������� интере�а, �����ль�у ��ычн� ��держи��е ��лле�ции и�учает�� � ����щью �в�й�тва Item() или �ет�да Exists(). МЕТОДЫ Count Та�же в��вращает ��личе�тв� и�еющих�� в ��лле�ции эле�ент�в. Exists(имя) В��вращает True, е�ли ��и�ен�ванный ар�у�ент у�а�ан в ���андн�й �тр��е, в �р�тивн�� �лучае в��вращает False. Эт�т �ет�д и���ль�ует�� дл� ��наруже� ни� �ри�ут�тви� «�р��тых» ар�у�ент�в, на�ри�ер /verbose.
Использование WSF-файлов 411 В �аче�тве �р��т��� �ри�ера, в �ценарии, чь� ���андна� �тр��а �ред�тавлена в �ледующе� ф�р�ате: myscript /outfile:output.txt /verbose ��лле�цию Named ��жн� и���ль��вать �ледующи� ��������: verbose_mode = WScript.Arguments.Named.Exists("verbose") output_file = WScript.Arguments.Named.Item("outfile") if isempty(output_file) then output_file = "default.out" if verbose_mode then wscript.echo "* выходной файл = ", output_file ▼) Если просканировать коллекцию Named, то получаемыми значениями будут имена аргументов. Чтобы получить их значения, нужно воспользоваться свойством Item(). Например, следующий код выводит список всех имен и значений аргументов: for each arg in WScript.Arguments.Named WScript.echo arg, "=", WScript.Arguments.Named.Item(arg) next Пр��ле��й �р��т��� ��дх�да �вл�ет�� �ледующее: е�ли ��ль��ватель на�ерет, ��аже�, /verbse в�е�т� /verbose, �ценарий эт��� не �а�етит. Х�т� W��dows S���p� Hos� у�еждает�� в �ри�ут�твии тех ар�у�ент�в, ��т�рые в ра�деле <runtime> ��ъ� �влены ����ательны�и, �н и�н�рирует ��и�ен�ванные ар�у�енты, ��т�рые не �ыли ��ределены в ра�деле <runtime>. П�эт��у «v��bs�» нах�дит�� в ��лле�ции Named, а ��ль��ватель ни���да не у�нает, чт� �н д��у�тил �ши��у. Дл� �ценари�, ра��читанн��� на ежедневн�е и���ль��вание дру�и�и людь�и, эт� не�рие�ле��. У�едить�� в т��, чт� в ���андн�й �тр��е на�раны т�ль�� �равильные ар�у�ен� ты, ����жет �ледующий ша�л�н. ШАБЛОН Для извлечения поименованных аргументов командной строки (ключей) нужно выполнить сле- дующие действия: 1. Определите все требуемые аргументы в разделе <runtime>. Для ключей типа «включен- выключен» следует забыть о том, что они относятся к типу "boolean", и использовать вместо него тип "simple". По умолчанию, если ключ отсутствует, устанавливается режим выключен (False), а если ключ присутствует, устанавливается режим включен (True). 2. Если нужно, чтобы свойство было по умолчанию включено, используйте в качестве со- ответствующего имени аргумента "noxxx", чтобы его присутствие означало «выключить свойство xxx». 3. Объявите в сценарии переменные для каждого из аргументов. 4. Инициализируйте переменные подходящими значениями по умолчанию. 5. Просканируйте коллекцию WScript.Arguments.Named и воспользуйтесь свойственным ва- шему языку эквивалентом оператора select case для обработки каждого допустимого аргумента. Считается нормой рассматривать имена аргументов независимо от регистра символов, из которых они состоят. Используйте оператор case «по умолчанию», чей блок кода выводит сообщение об ошибке и прекращает выполнение сценария. В блоке кода этого же оператора case было бы также полезно предусмотреть вывод списка всех допу- стимых аргументов. 6. Для аргументов, которые предполагается использовать для предоставления значения, име- ющих форму /volname:xxx, проводите проверку на предоставление значения (чтобы оно было не пустым) и на допустимость этого значения. Например, если пользователь набрал лишь /volname, значением выражения WScript.Arguments.Named.Item("volname") будет пустая строка "", и этот факт можно проверить.
412 Глава 9. Использование сценариев для управления компьютерами и сетями Ра����три� �ри�ер. Эт��у �ценарию �ередает�� �люч �� и�ени /verbose, вы� �лючающий �люч �� и�ени /nolisting, и �люч �� �начение� �� и�ени /copies: option explicit dim arg, verbose, listing, copies, val ' объявление переменных verbose = False ' установка значений по умолчанию listing = True copies = 1 for each arg in WScript.Arguments.Named select case lcase(arg) case "verbose": ' клю ч /verbose включает подробное освещение событий verbose = True case "nolisting": ' клю ч /nolisting выключает вывод списка listing = False case "copies": ' клю ч /copies:n должен предоставить число val = WScript.Arguments.Named.Item(arg) if len(val) > 0 then copies = cint(val) else WScript.echo "ключ /copies требует указания числа" WScript.Arguments.ShowUsage WScript.Quit 1 end if case else: ' претензия на любой неверно введенный аргумент WScript.echo "Аргумент", "/ " & arg, "указан неверно" WScript.Arguments.ShowUsage WScript.Quit 1 end select next ... При та��й или �а��й�ни�удь дру��й �р�вер�е и�ен ар�у�ент�в �ледует у�едить��, чт� в�е� ар�у�ента� �� �начени��и �ыли �ри�в�ены д��у�ти�ые �на� чени�. ▼) Эту технологию можно использовать также и в обычных файлах сценариев с расширениями имен .vbs или .js. Коллекции WScript.Named и WScript.Unnamed доступны, даже если вы не ис- пользуете WSF-файл. У вас просто не будет автоматического принуждения к использованию «обязательных» аргументов и нельзя будет воспользоваться методом ShowUsage. Для про- верки обязательных аргументов и вывода информации об использовании сценария придется создавать собственный код. Обработка непоименованных аргументов С�и��� в�ех ар�у�ент�в ���андн�й �тр��и, не начинающих�� � �и�в�ла /, �ред�� �тавл�ет ��лле�ци� WScript.Arguments.Unnamed. О�ычн� в �аче�тве не��и�ен�ван� ных ар�у�ент�в у�а�ывают�� ��и��и файл�в, ��ль��вателей или дру�их эле�ент�в ��ра��т�и. Св�й�тва и �ет�ды ��лле�ции Unnamed ���а�аны в ��рав�е 9.3 .
Использование WSF-файлов 413 СПРАВКА 9.3. СВОЙСТВА И МЕТОДЫ КОЛЛЕКЦИИ UNNAMED СВОЙСТВА Item(n) В��вращает и� ��лле�ции �дин и� ар�у�ент�в, n — эт� чи�л� �т 0 д� Length-1 . Length В��вращает ��личе�тв� ар�у�ент�в в ��лле�ции. МЕТОД Count Та�же в��вращает ��личе�тв� ар�у�ент�в в ��лле�ции. В ��льшин�тве �лучаев ��жн� на�и�ать �в�й �ценарий дл� ��ра��т�и �� �чере� ди �ажд��� и� эле�ент�в, �а� ���а�ан� в �ледующей �хе�е. Е�ли нужн� у�едить��, чт� у�а�ан� ��н�ретн�е ��личе�тв� эле�ент�в, ��жн� �р�верить �начение, в��� вращае��е Length или Count. Зате� дл� ��ра��т�и �ажд��� эле�ента ��жн� в����ль��вать�� ��ычны� ите� рат�р�� ��лле�ции. К��да в�е ар�у�енты �ред�тавл�ют �дин и т�т же ти� эле�ен� т�в, на�ри�ер и�ена файл�в или и�ена ��ль��вателей, �ача�тую лучше на�и�ать ��д�р��ра��у дл� ��ра��т�и �� �череди �ажд��� эле�ента. Эт�т вариант ���а�ан в �ледующей �хе�е. ШАБЛОН При обработке произвольного количества одинаковых по значению аргументов, например списка имен обрабатываемых файлов, для обработки каждого файла лучше воспользоваться подпрограммой. При чтении сценария это упрощает понимание принципа работы программы. Следующий код демонстрирует вполне подходящий способ: if WScript.Arguments.Unnamed.Length < 1 then WScript.echo "Нужно указать хотя бы одно имя файла" WScript.Arguments.ShowUsage WScript.Quit 1 end if ' обработка каждого файла по очереди for each arg in WScript.Arguments.Unnamed process arg next ' обработка одного файла sub process (filename) ... end sub О�ратите вни�ание на т�, чт� в �ценарии �р�в�дит�� �вна� �р�вер�а на у�а� �ание в ���андн�й �тр��е х�т� �ы �дн��� не��и�ен�ванн��� ар�у�ента. Ее нужн� �р�в�дить даже в т�� �лучае, ���да дл� у�а�ани� ����ательн��ти не��и�ен�� ванн��� ар�у�ента в WSF�файле и���ль��вал�� те� <runtime>, ��т��у чт� фа��
414 Глава 9. Использование сценариев для управления компьютерами и сетями тиче��и WSH не �а�тавл�ет и���ль��вать ����ательный ар�у�ент. Следующий XML���д <runtime> <unnamed name="filename" required="1" many="true" helpstring="Обрабатываемый файл или файлы "/> </runtime> у�равл�ет т�ль�� лишь �инта��и��� инф�р�ации, выв�ди��й �ет�д�� ShowUsage. Содержание более одного сценария в одном файле В WSF�файле ��жет �ыть �дин или не���ль�� <job>�эле�ент�в, �аждый и� ��т�� рых ��держит ��лн�ценную �р��ра��у �ценари�. Е�ли в WSF�файле ��лее �дн��� <job>�эле�ента, в ���андн�й �тр��е, и���ль�уе��й дл� �а�у��а �ценари�, ��жн� у�а�ать, �а��е и� �аданий нужн� �а�у�тить. На�ри�ер, ���андна� �тр��а cscript somefile.wsf //job:cleanup �ред�и�ывает WSH найти ра�дел �адани�, ���еченный атри�ут�� id="cleanup", и �а�у�тить и�еющий�� в не� �ценарий. М�жн� у�а�ать �ра�у не���ль�� �аданий. К��андна� �тр��а cscript somefile.wsf //job:report //job:cleanup �а�у��ает �ценарии �адани� � идентифи�ат�р�� "report", а �ате� �ценарий �адани� � идентифи�ат�р�� "cleanup". Е�ли в файле и�еет�� не���ль�� �аданий, а в ���андную �тр��у не ���ещен ни �дин ар�у�ент //job, WSH �а�у��ает все �адани� в т�� ��р�д�е, в ��т�р�� �ни нах�д�т�� в файле. П�эт��у ф�р�ат � не���ль�и�и <job>�эле�ента�и ��дх�дит дале�� не дл� в�ех �лучаев �ри�енени� �ценариев. Е�ли ваше �ценарн�е �рил�� жение д�лжн� вы��лнить т�ль�� �дн� и� не���ль�их дей�твий, лучше, наверн�е, на�и�ать т�ль�� �дн� �ценарн�е �адание, и���ль�ующее дл� у�а�ани� дей�тви� ��ычный ар�у�ент ���андн�й �тр��и. Объединение всего предыдущего в единое целое Следующий уче�ный �ценарий ���в�л�ет ��ль��вателю на�рать в ���андн�й �тр��е ��и��� файл�в или �а���, ��т�рые �ате� �удут �а�и�аны �ценарие� на ����а�т�ди�� или DVD�ди��. В �ценарии ��ъединены в�е �а�ы�лы, ра����тренные в данн�� ра�деле: y y Он и�еет в�тр�енную �нлайн���рав�у. y y Он и���ль�ует в��лне ��дх�д�щие �начени� �� у��лчанию. y y Перед те� �а� �ри�ту�ить � реальн�й ра��те, �н �р�вер�ет �в�и ар�у�енты. y y Дл� и���ртир�вани� �ред��ределенных ��н�тант �н и���ль�ует те� <refe- rence>. В �ценарии и���ль�ует�� в�тр�енный интерфей� �ри�ладн��� �р��ра��ир�ва� ни� (API� Im�g� M�s�����g, ��т�рый ���тавл�ет�� � W��dows 7 и V�s��. Он �ред� на�начен дл� ���дани� ��ра��в ди���в и �ред��тавл�ет �р��ра��а� и �ценари�� в����жн��ть �а�и�и ����а�т�ди���в и ди���в DVD.
Использование WSF-файлов 415 Эту же техн�л��ию �р��ра��ир�вани� �ценариев ��жн� �ри�енить и на W��dows XP и W��dows S��v�� 2003, е�ли �редварительн� у�тан�вить IMAPI� ��н�вление, ��и�ание ��т�р��� дан� �� адре�у support.microsoft.com/kb/KB932716. На W��dows XP �� у��лчанию �а�и�ывать ����а�т�ди��и и ди��и DVD � ����щью данн��� ин�тру�ента ��жет т�ль�� ад�ини�трат�р. Чт��ы �а�и�ывать эти ди��и ���� и ��ычный ��ль��ватель, вы��лните �ледующие дей�тви�: 1. В�йдите в �и�те�у ��д учетн�й �а�и�ью ад�ини�трат�ра и �т�р�йте ��н� ��� �андн�й �тр��и. 2. На�ерите ���анду gpedit.msc и наж�ите Ввод (������. Пр�йдите �� �ун�та� Политика «Локальный компьютер» (Lo��� Compu��� Po���y�Конфигурация компьютера (Compu��� Co���gu����o��Конфигурация Windows (W��dows S��� ���gs�Параметры безопасности (S��u���y S�����gs�Локальные политики (Lo��� Po�����s�Параметры безопасности (S��u���y Op��o�s�. 3. Дважды щел�ните на �ун�те Устройства: разрешено форматировать и извлекать съемные устройства (D�v���s: A��ow�d �o �o�m�� ��d �j��� ��mov�b�� m�d��) и вы� �ерите �ун�т Администраторы и опытные пользователи (Adm���s����o�s ��d Pow�� Us��s� или �ун�т Администраторы и интерактивные пользователи (Adm���s����o�s ��d I��������v� Us��s�. 4. Е�ли е�ть ��а�ени�, чт� �етев�й ��ль��ватель ��жет вне�ти и��енени� в� в�тавленный �а�и�ывае�ый ����а�т�ди�� или ди�� DVD, ��жн� в�лючить ��лити�у Устройства: разрешить доступ к дисководам компакт-дисков только ло- кальным пользователям (D�v���s: R�s����� CD�ROM A���ss �o Lo����y Logg�d�O� Us�� O��y�. Эта на�тр�й�а �а�ретит ��щее и���ль��вание ди���в�д�в ����а�т� ди���в и ди���в DVD �� �ети. Е�ли ваш ����ьютер �вл�ет�� ча�тью д��енн�й �ети, т� эти и��енени� в �ру���в�й ��лити�е д�лжен �делать �етев�й ад�ини� �трат�р. ▼) Дополнительную информацию о записи компакт-дисков и дисков DVD с помощью встроенных средств можно получить по адресу msdn.microsoft.com, выбрав пункт Library. В левой панели нужно выбрать пункты Win32 and COM DevelopmentSystem ServicesDevice ServicesImage Mastering API. Ра����три� �ценарий: <?XML?> <!-- Файл примера cdburn.wsf --> <job> <runtime> <named name="volname" required="false" type="string" helpstring="Имя тома компакт-диска. По умолчанию дд-мм -гг ." /> <named name="eject" required="false" type="simple" helpstring="Извлечение диска после записи. " /> <unnamed name="name " required="true" many="true" helpstring="Записываемый на компакт-диск файл или папка." /> <description> Этот сценарий записывает файл(ы) или папку (папки), указанные в командной строке, на компакт-диск или на DVD-диск. </description> <example>
416 Глава 9. Использование сценариев для управления компьютерами и сетями Пример: cdburn /volname:backup c:\files </example> </runtime> <reference object="IMAPI2.MsftDiscMaster2" /> <!-- импорт констант --> <reference object="IMAPI2FS.MsftFileSystemImage" /><!-- (из 2 библ.) --> <script language="vbscript"> <![CDATA[ option explicit dim FSO, arg, fname, volname, i, eject, devname, canRecord, objMaster dim objRecorder, objDataDisc, objFileSystem, objRoot, objImage if WScript.Arguments.Unnamed.Count = 0 then ' Провека указания ' файла (файлов) WScript.Arguments.ShowUsage WScript.Quit 1 end if ' проверка существования файлов set FSO = CreateObject("Scripting.FileSystemObject") for each fname in WScript.Arguments.Unnamed if not (FSO.FileExists(fname) or FSO.FolderExists(fname)) then wscript.echo "Файл не существует:", fname wscript.Quit 1 end if next volname = "" ' нас тройка параметров по умолчанию eject = False for each arg in WScript.Arguments.Named ' с кан ирование аргументов select case lcase(arg) case "volname": volname = WScript.Arguments.Named.Item("volname") ' (следует заметить, что если пользователь просто набрал ' /volname, то имя тома будет выражено пустой строкой) case "eject": eject = True case else: ' о тло в н едопустимых аргументов wscript.echo "Аргумент", "/" & arg, "не допустим " WScript.Arguments.ShowUsage Wscript.Quit 1 end select next if len(volname) = 0 then ' Если не указан или пуст volname = cstr(date()) ' и спо льз ова ние те кущей даны, но ... do i = instr(volname, "/") ' с заменой символов / на - ifi=0thenexitdo volname = left(volname, i-1) & " -" & mid(volname, i+1) loop end if
Использование WSF-файлов 417 ' со здание мастер-объекта Image Mastering API Set objMaster = WScript.CreateObject("IMAPI2.MsftDiscMaster2") if not objMaster.IsSupportedEnvironment then wscript.echo "На вашем компьютере нет записывающих оптических " & _ "приводов или у вас нет прав на запись " wscript.quit end if ' создание объектов записи set objRecorder = CreateObject("IMAPI2.MsftDiscRecorder2") set objDataDisc = CreateObject("IMAPI2.MsftDiscFormat2Data") ' по иск первого устройства с чистым диском и достаточным местом canRecord = False for i = 0 to objMaster.Count-1 ' проход по всем устройствам devName = objMaster.Item(i) objRecorder.InitializeDiscRecorder(devName) ' Определение формата нового диска и настройка устройства записи objDataDisc.recorder = objRecorder objDataDisc.ClientName = "Script" If objDataDisc.IsRecorderSupported(objRecorder) and _ objDataDisc.IsCurrentMediaSupported(objRecorder) and _ (objDataDisc.CurrentMediaStatus & _ IMAPI_FORMAT2_DATA _MEDIA _STATE _BLANK) then canRecord = True exit for end if next if not canRecord then wscript.echo "Не удалось найти привод компакт-дисков " & _ "и ли DVD-дисков с пустым носителем" wscript.quit end if wscript.echo "Сборка файлов (требует времени)..." ' подготовка файловой системы ISO Set objFileSystem = CreateObject("IMAPI2FS.MsftFileSystemImage") objFileSystem.ChooseImageDefaults(objRecorder) objFileSystem.FileSystemsToCreate = FsiFileSystemISO9660 objFileSystem.VolumeName = volname Set objRoot = objFileSystem.Root ' получение корневой папки for each fname in WScript.Arguments.Unnamed if FSO.FolderExists(fname) then objRoot.AddTree fname, True ' к опирование подкаталога ' на диск else objRoot.AddFile fname ' к опирование указанного ' файла на диск end if next
418 Глава 9. Использование сценариев для управления компьютерами и сетями ' запись диска wscript.echo "Идет запись диска... " Set objImage = objFileSystem.CreateResultImage() objDataDisc.Write(objImage.ImageStream) wscript.echo "Готово." if (eject) then objRecorder.EjectMedia ]]> </script> </job> В��л�нув на ��д, ��жн� ��а�ать: «Та� �де�ь в�е�� ���л� де��ти �тр��, вы��л� н�ющих реальную ра��ту», и эт� �удет �равд�й. Н� �ат� эт�т �ценарий ��ладает вы����й надежн��тью, и та ��ддерж�а, ��т�рую �н ��жет ��а�ать н�вич�у (или �а�ывчив��у ��ль��вателю�, �т�ит д���лнительн� �атраченных у�илий. Развертывание сценариев в сети Сред�тва, ра����тренные в эт�й �ни�е, на данный ���ент дают в����жн��ть у�рав� л�ть �тдельны� ����ьютер��, и�еющи� ��ераци�нную �и�те�у W��dows. К��да �рих�дит�� у�равл�ть цел�й �етью ����ьютер�в, х�чет�� и���ль��вать �ценарии не���ль�и�и ������а�и: y y На отдельном компьютере для удаленного управления многими другими компьютерами. В та��� �лучае �ценарий д�лжен у�равл�ть ����ьютер��, �т� личающи��� �т т��� ����ьютера, на ��т�р�� �н �а�ущен. y y На нескольких компьютерах со сценариями, размещенными в общедоступном месте. В эт�� �лучае целью �вл�ет�� хранилище �ценарных �р��ра�� и �це� нарных �����нент�в, д��ту�ных дл� и���ль��вани� та�, �де в них в��ни�ает не��х�ди���ть �ри наличии в�е�� �дн�й ���ии, чт� �нижает вре�� и �т�и���ть их ���луживани�. y y На нескольких компьютерах со сценариями, доступными на каждом ком- пьютере. К���ьютер ��жет не в�е�да нах�дить�� в централи��ванн�й �ети, н� ва� в�е равн� нужн� ��хран�ть д��ту�н��ть �ценариев дл� их и���ль��вани� ад�ини�трат�ра�и и ��нечны�и ��ль��вател��и. Дл� эт��� нужен �ехани�� ра��р��транени� �ценариев и ��ддерж�и их ���т��ни� на ур�вне ���ледней вер�ии. Ра�у�еет��, эт� выражает�� в ��лее вы���их труд��атратах �� �равне� нию � хранение� в�ех �ценариев в �дн�� �е�те. y y На нескольких компьютерах во время подключения пользователей. В W��dows �реду���трены «�ценарии вх�да в �и�те�у», ������ные ре��нфи� �урир�вать ����ьютер ��ль��вател� �ри �ажд�� вх�де в �и�те�у. Эт� ���в�л�ет ��е��ечить цел��тн��ть ра��чей �реды и авт��атиче���е ��н�вление тре�уе���� �р��ра��н��� ин�тру�ентари�. WSH �ред��тавл�ет ва� ин�тру�ентарий дл� и���ль��вани� �ценариев в� в�ех этих вариантах. Эт� и �танет те��й не���ль�их �ледующих ра�дел�в.
Создание простой программы установки с помощью IExpress 419 ▼) Следует помнить, что кроме управления развертыванием сценариев нужно убедиться в том, что все требуемые объекты установлены должным образом на каждом управляемом компьюте- ре. Если ваш сценарий использует нестандартные объекты, может понадобиться скопировать программные файлы объектов на удаленные компьютеры и запустить на них regsvr32 для вне- сения объектов в реестр. Это можно будет сделать с помощью рассматриваемого далее в дан- ной главе инструментария удаленного использования сценариев. Создание простой программы установки с помощью IExpress W��dows 7, V�s�� и XP ���тавл�ют�� в�е�те � �р��ра���й ��д на�вание� I�xp��ss, ��т�рую ��жн� и���ль��вать дл� ���дани� �р��тых у�тан�в�чн��на�тр�ечных �р��ра��. И�начальн� �на �редна�начала�ь дл� ����щи ад�ини�трат�ра� �етей, ���луживающих M���oso�� Ou��ook, н� ее ��жн� та�же и���ль��вать дл� ра��р�� �транени� �ценариев и �р��ра�� �реди ��ль��вателей. (Инф�р�ацию � ней ��жн� найти �� адре�у support.microsoft.com/kb/237803.� I�xp��ss �ред��тавл�ет �тличный ������ ра��р��транени� �ценариев, WSC� �����нент�в и �а�етных файл�в, ��т�рые ���ут �ыть ���даны �ри ����щи ин�тру� �ент�в, ра����тренных в данн�й �ни�е; а та�же ��ычных W��dows��рил�жений и �рил�жений ���андн�й �тр��и, ра�ра��танных � ����щью дру�их �ред�тв. Ма�тер I�xp��ss ���дает и���лн�е�ые �р��ра��ы (� ��жалению, не в ф�р�ате .MSI�файла W��dows I�s�������, ��т�рые д�х�д�т д� ��нечн��� ��ль��вател� чере� �р�це�� у�тан�в�и и и�влечени� файл�в на же�т�ий ди��. У�тан�вщи� ��жет ���давать �а�и�и рее�тра и ��жет даже �а�у��ать �р��ра��у у�тан�в�и или �це� нарий дл� ре�и�трации WSC���ъе�т�в, и��енени� �ути или вы��лнени� дру�их начальных ре�и�траци�нных �адач. Па�ет у�тан�в�и, ���давае�ый I�xp��ss, ���ирует файлы ваше�� �рил�жени� в� вре�енную �а��у на �и�те�е ��нечн��� ��ль��вател�. Ва� не��х�ди�� �ред�� �тавить �ценарий, �а�рашивающий у ��ль��вател� ���т��нн�е �е�т� дл� файл�в и ���ирующий их и� вре�енн�й �а��и в вы�ранн�е �е�т�. Дл� эт��� ��жн� на� �и�ать �в�й ����твенный �ценарий или ��жн� в����ль��вать�� �а�етны� файл�� или файл�� � ра�ширение� .INF . Зде�ь нет �е�та дл� ��и�ани� .INF �файл�в, н� �а�етные файлы и �ценарии �р�ще в и���ль��вании, ��эт��у �ы ниче�� не тер�е�. У�тан�в�чные �ценарии или �а�етные файлы ���ут �ыть ве�ь�а �л�жн� у�тр�� ены. Н� чт��ы дать ва� �ред�тавление � т��, �а� �ни ра��тают, �риведе� �ри�ер �р��т��� �а�етн��� файла, ���ирующе�� в �а��у в�е, в�люча� .VBS �файлы: @echo off set drv=%SYSTEMDRIVE% if not exist %drv%\scripts mkdir %drv%\scripts copy *.vbs %drv%\scripts Далее �удет ра����трен ��лее �л�жный у�тан�в�чный �ценарий, на�и�анный на ��ы�е V�S���p�.
420 Глава 9. Использование сценариев для управления компьютерами и сетями Дл� и���ль��вани� I�xp��ss ��д��т�вьте файлы, ��т�рые нужн� ра��р��тра� нить, а та�же �ледующие эле�енты: y y Лицен�и�нн�е ���лашение, ��ъ��н�ющее ваши у�л�ви� ���тав�и �р��ра��н��� ��е��ечени�, авт�р��ие �рава и т. д . Эт� не����ательный эле�ент. y y Пр��ра��у у�тан�в�и, �а�етный файл или �ценарий, ���ирующий файлы в ���т��нн�е �е�т�. У�тан�в�чна� �р��ра��а ��жет �ыть .exe� или .inf�файл��, .vbs� или .js��ценарие� или же �а�етны� файл�� � .cmd� или .bat�ра�ширение�. y y Пр��ра��у, �а�у��ае�ую ���ле ���нчани� у�тан�в�и. Эта �р��ра��а д�лжна вы��лнить, на�ри�ер, ре�и�трацию WSC или A���v�X �����нент�в, ���дание �а���, на�тр�й�у �начени� �ере�енн�й �реды PATH или инициали�ацию �а� �и�ей рее�тра. Она та�же ��жет �ыть .exe� или .inf�файл��, �ценарие� или �а�етны� файл��. Эт� не����ательный эле�ент. К��да �атериалы �удут ��т�вы, в ��не ���андн�й �тр��и нужн� на�рать iexpress и вы��лнить в�е �ледующие дей�тви�, �редла�ае�ые э�рана�и �а�тера: 1. В диал���в�� ��не �ривет�тви� нужн� вы�рать Select Create New Self Extraction Directive File дл� ���дани� н�в��� у�тан�вщи�а или Open Existing Self Extraction Directive File дл� реда�тир�вани� ранее ���данн��� �а�ета. 2. На �транице Package Purpose нужн� вы�рать ти� у�тан�в�чн��� файла, ��т�рый д�лжен �ыть ���дан �р��ра���й I�xp��ss. Она ��жет ���дать �р��ра��у, и�� вле�ающую файлы и вы��лн�ющую у�тан�в�чную ���анду, �р��ра��у, ��т�ра� т�ль�� лишь и�вле�ает файлы, или .cab�файл �е� фун�ции �а��и�влечени�. В ��льшин�тве �лучаев ва� ��тре�ует�� авт��атиче��а� у�тан�в�а файл�в в целев�й �атал��, ��эт��у нужн� вы�рать �ервый вариант, Extract �les and run an installation command (и�влечь файлы и вы��лнить ���анду у�тан�в�и�. 3. На �транице Package Title нужн� вве�ти и��, ��и�ывающее вашу �р��ра��у. 4. На �транице Con�rmation Prompt нужн� �рин�ть решение, �ледует ли ��нечн��у ��ль��вателю ��дтверждать �в�е желание �а�у�тить у�тан�вщи�. Зде�ь ��жн� вве�ти в��р��, �адавае�ый ��ль��вателю, на�ри�ер: «Вы дей�твительн� х�тите у�тан�вить эту �р��ра��у?» Е�ли у�тан�в�а удал�ет или и��ен�ет файлы, эта ����енн��ть тре�ует ��ъ��нени� в в��р��е на ��дтверждение. 5. На �транице License Agreement, е�ли тре�ует��, ��жн� у�а�ать те��т�вый файл, ��держащий лицен�и�нн�е ���лашение. Он� д�лжн� �ыть �р�де��н�трир�ван� ��ль��вателю � �р��ь��й ���ла�ить�� � ни� в �аче�тве у�л�ви� дл� �р�д�лже� ни� у�тан�в�и. 6. На �транице Packaged Files нужн� вы�рать в�е файлы, ���тавл�ющие ра��р�� �тран�е�ые �р��ра��ы или �ценарии. М�жн� та�же в�лючить у�тан�в�чный �а�етный файл, �ценарий, .inf�файл или �р��ра��у у�тан�в�и, ��т�рую нужн� у�а�ать в �ледующе� дей�твии. В �р�це��е у�тан�в�и в�е эти файлы ���и� руют�� в �дну и ту же вре�енную �а��у. Ваша �р��ра��а у�тан�в�и д�лжна ����ир�вать файлы в нужн�е ���т��нн�е �е�т�. 7. На �транице Install Program to Launch в ��ле Under Install Program нужн� у�а�ать �р��ра��у или �ценарий, ���ирующий файлы и� вре�енн�й �а��и в их ��� �т��нн�е �е�т�.
Создание простой программы установки с помощью IExpress 421 В �ави�и���ти �т ти�а �р��ра��ы или �ценари�, ��т�рый нужн� ���дать дл� ���ир�вани� и ��нфи�урации файл�в, и���ль�ует�� �дна и� �ледующих техн�л��ий: y y сценарий — нужн� на�рать wscript, �р��ел, а �ате� и�� файла �ценари�. На�ри�ер, wscript do_setup.vbs. (Я ре���ендую wscript, ��т��у чт� �ри и���ль��вании cscript в �лучае в��ни�н�вени� �ши��и в �ценарии ��ль� ��ватель не увидит ����щение �� �ши��е.� y y пакетный файл — нужн� на�рать cmd /c, �р��ел, а �ате� и�� �а�етн��� файла. На�ри�ер, cmd /c do_setup.bat. Пр��т�й вы��р �а�етн��� файла и� ра��рывающе���� ��и��а не ��д�йдет, ��т��у чт� у�тан�вщи� в та��� �лучае не �удет ра��тать на 64�ра�р�дных вер�и�х W��dows. (М�жн� �а�етить, чт� �а�етные файлы � ра�ширение� .cmd в ра��рывающе��� ��и��е не ���а�ы� вают��. Ниче�� �трашн���, �р��т� на�ерите ���анду, ���а�анную выше.�� y y INF-файл — дл� вы��ра и�ени INF�файла �ледует в����ль��вать�� ра�� �рывающи��� ��и����. y y исполняемая программа — нужн� вве�ти и�� .exe�файла, ���р�в�ждае��е лю�ы�и не��х�ди�ы�и ар�у�ента�и ���андн�й �тр��и. В лю��� �лучае �р��ра��ный файл д�лжен �ыть �дни� и� тех файл�в, ��� т�рые �ыли вы�раны �ри вы��лнении �ун�та 6, или д�лжен �ыть �тандартн�й �р��ра���й W��dows. При у�а�ании файла, и�еюще�� в �в�е� и�ени �р��елы, и�� файла нужн� в��ть в �авыч�и ("�. В ��ле Post Install Command нужн� вве�ти еще �дну ���анду, ��т�ра� �удет �а�ущена ���ле �авершени� ра��ты �р��ра��ы у�тан�в�и. Х�т�, в���ще�т�, и���ль��вание ���анды, �а�у��ае��й ���ле у�тан�в�и, н��ит не����ательный хара�тер. �. На �транице Show Window нужн� вы�рать ти� ��на, выв�ди���� у�тан�вщи���: Default (�� у��лчанию�, Hidden (��рыт�е�, Minimized (�вернут�е� или Maximized (ра�вернут�е�. Дл� ���дани� ��лчалив�й, ��рыт�й �р�цедуры у�тан�в�и вы� �ерите �ун�т Hidden. (В та��� �лучае в дей�твии 4 нужн� вы�рать �ун�т �е� ��дтверждени� — No prompt, а в дей�твии 5 нужн� вы�рать �ун�т �е� ���а�а лицен�и�нн��� ���лашени� — Do not display a licence.� Или же дл� ��ычн��� х�да �р�це��а у�тан�в�и вы�ерите �ун�т Default. 9. На �транице Finished Message нужн� вве�ти ��р�т�ую те��т�вую �тр��у, ��т�ра� �удет выведена �� �авершении у�тан�в�и. В ней ��жет ����щать�� � ������е �а�у��а �р��ра��ы или � т��, ���у �ледует ���в�нить �ри в��ни�н�вении �р��ле�. 10. На �транице Package Name and Options �ледует вве�ти �уть и и�� �р��ра��ы у�тан�в�и, ���давае��й I�xp��ss. Ра�ширение .exe у�а�ывать не �т�ит, �а�тер �делает эт� �а���т��тельн�. Та�же �ледует у�тан�вить флаж�� Store Files Using Long File Name Inside Package (��хран�ть внутри �а�ета файлы � длинны�и и�ена�и�. 11. На �транице Configure Restart нужн� у�а�ать, д�лжна ли ��ль��ватель��а� �и�те�а �ыть �ере�а�ущена ���ле у�тан�в�и. П� у��лчанию и���ль�ует��
422 Глава 9. Использование сценариев для управления компьютерами и сетями �ун�т Only Restart if needed (�ере�а�у�� т�ль�� в �лучае не��х�ди���ти�, н� в ��льшин�тве �лучаев та��й не��х�ди���ти нет, ��эт��у �ледует вы�рать �ун�т �е� �ере�а�у��а — No Restart. 12. Страница Save Self Extraction Directive и���ль�ует�� дл� ��хранени� в�ей вве� денн�й в данн�� �а�тере инф�р�ации в .sed�файле. Эт� ���в�л�ет �а�у�тить �а�тер еще ра� дл� �ередел�и �а�ета у�тан�в�и или дл� и��енени� не��т�рых вы��р�в �е� не��х�ди���ти ��вт�рн��� вв�да в�ей инф�р�ации. 13. На �транице Create Package �ледует щел�нуть на �н���е Next, а �ате� щел�нуть на �н���е Finish, чт��ы �авершить �р�це�� ���дани�. Н�вый .exe�файл д�лжен �ыть найден в �а��е, у�а�анн�й в �ун�те 10. Е�ли �а�у�тить эту �р��ра��у, �удет ��уще�твлен ве�ь �р�це�� у�тан�в�и ваше�� �ри� л�жени�. ▼▼ После первого запуска мастера установку можно переделать, набрав команду iexpress /n filename.sed где �lename.sed — это имя .sed-файла, созданного при выполнении пункта 12. Эту команду можно использовать для быстрого обновления пакета установки после изменения распростра- няемых файлов. Пр��ра��ный файл, ���давае�ый I�xp��ss и� этих файл�в, ��жет �ыть д�веден д� ��нечных ��ль��вателей �� вашей �ети или чере� ве���траницу, д��авл�е�ую � �ценари�� вх�да в �и�те�у или ���тавл�е�ую дру�и�и �ред�тва�и. ▼▼ Версия IExpress, предоставляемая 64-разрядными версиями Windows, создает установщики, являющиеся 64-разрядными программами. Эти установщики не работают на 32-разрядных версиях Windows. Запустить 32-разрядный установщик на 64-разрядной версии Windows мож- но без всяких проблем, но, как вам может быть известно, если он пытается записать файлы в \windows\system32, Windows создает эти файлы в \windows\sysWOW64. Такое же перена- правление применяется для изменения частей реестра. Если установщик разрабатывается на 64-разрядной версии Windows, я предлагаю получить копию iexpress.exe из компьютера, работающего под управлением Windows XP, назвать ее iexpress32.exe и скопировать в папку, упомянутую в вашей переменной path. После этого мож- но будет запустить iexpress32 для создания 32-разрядных версий пакетов установки, а если нужно будет предоставить вашим пользователям оба варианта, то можно будет запустить IExpress для создания 64-разрядных установщиков. Кроме этого, если вашему установщику необходимо создать или изменить файлы в \windows\ system32 или внести изменения в раздел реестра HKE�_LOCAL_MACHINE, для этого, наверное, понадобится создать отдельные 32- и 64-разрядные версии установщиков и установочных сце- нариев. Тогда будет получен более полный контроль над местами фактического размещения файлов и параметров реестра. Создание установочных сценариев или пакетных файлов IExpress К��да �р��ра��а у�тан�в�и, ���данна� I�xp��ss, вы��лн�ет�� на целев�� ����ью� тере, �на ���ещает в�е у�а�анные в �а�тере файлы в� вре�енный �атал�� и �а�у� ��ает у�а�анную ва�и ���анду. Ка� уже у���инал��ь, ���анда ��жет �а�у��ать
Создание простой программы установки с помощью IExpress 423 �а�етный файл, �ценарий или .inf�файл. П��ле т��� �а� ���анда �авершит �в�ю ра��ту, у�тан�вщи� I�xp��ss удал�ет в�е файлы и уничт�жает вре�енную �а��у. П�эт��у ва�, �а� �ини�у�, нужн� у�а�ать ������ вы��ра �атал��а, в ��т�рый нужн� у�тан�вить ра��р��тран�е�ые ва�и файлы, и ����ир�вать их в �е�т� на� �начени�. (В���ще�т� ��жн� �р��у�тить �а�р�� у ��ль��вател� т��� �е�та, �уда нужн� у�тан�вить файлы, и в����ль��вать�� �аранее �аданны� �е�т�� у�тан�в�и, н� в�е�та�и файлы нужно �уда�ни�удь ����ир�вать.� При на�и�ании �а�етн��� файла или �ценари�, вы��лн�юще�� эту �адачу, �ред� ��л�жить � т��, �де нах�дит�� те�ущий �атал��, нев����жн�. М�жн� т�ль�� �ред� ��л�жить, чт� в�е ра��р��тран�е�ые файлы нах�д�т�� в те�уще� �атал��е, а ваш �а�етный файл или �ценарий д�лжен ����ир�вать или �ере�е�тить их в нужн�е �е�т�. Он та�же ��жет на�тр�ить лю�ые �а�и�и рее�тра, �аре�и�трир�вать ���� ��ненты и т. д ., и���ль�у� лю�ые, ра����тренные в данн�й �ни�е техн�л��ии. При у�тан�в�е на��ра ��ле�ных �ценариев ва�, види��, �ах�чет��, чт��ы �ценарий у�та� н�в�и д��авил �а��у �ценариев � �и�те�н�й �ере�енн�й PATH, е�ли ее та� еще нет. В�е эт� делает�� V�S���p���ценарие� �� и�ени copy_all.vbs: ' Файл примера copy_all.vbs option explicit dim FSO, shl, target, file, pathlist, pathdir, I, env on error resume next ' не останавливаться на ошибке; пользователь не будет ' видеть сообщение set FSO = CreateObject("Scripting.FileSystemObject") set shl = CreateObject("WScript.Shell") ' установка в x:\scripts, где x: - это системный (Windows) диск set env = shl.Environment("process") target = env .item("SYSTEMDRIVE ") & "\scripts" if not fso.FolderExists(target) then fso.CreateFolder(target) ' к опирование всех распространяемых файлов, за исключением данного сценария for each file in FSO.GetFolder(". ").Files if lcase(file.Name) <> "copy_all.vbs" then wscript.echo "Копирование", file.Name, "в", target file.Copy fso.BuildPath(target, file.Name) if err.number <> 0 then msgbox "Невозможно скопировать" & file.Name & " в " & target & _ "; установка не удалась." wscript.quit end if end if next ' установка целевой папки в PATH pathlist = env.Item("PATH") ' изучение PATH do while len(pathlist) > 0 i = instr(pathlist, ";") ' пои ск разделяющей точки с запятой ifi=0then pathdir = pathlist ' точ ка с з апя той отсутствует, это была ' пос ледняя запись pathlist = ""
424 Глава 9. Использование сценариев для управления компьютерами и сетями else pathdir = left(pathlist, i-1) ' текст слева от точки с запятой pathlist = mid(pathlist, i+1) ' остальной текст после точки с запятой end if ' есл и c :\scripts уже указан в пути, работа завершается if lcase(pathdir) = lcase(target) then wscript.quit loop ' е сли мы по пал и с юда, значит, целевой папки в пути еще нет; добавление папки. wscript.echo "Добавление", target, "к значению PATH" set env = shl.Environment("system") env.item("PATH") = env.item("PATH ")& "; " & target if err.number <> 0 then msgbox "Добавить " & target & " в PATH не получилось" end if При ���дании у�тан�в�чн��� �а�ета в �аче�тве ���анды на вы��лнение нужн� у�а�ать �ледующую �тр��у: wscript copy_all.vbs ▼) Если при использовании в качестве команды на установку пакетного файла или сценария, запущенного с помощью cscript, возникнет ошибка при запуске, то сообщения об ошибке поль- зователь не увидит. Окно программы закроется оттого, как он сможет ее увидеть. Я советую запускать установочный сценарий с помощью wscript. Кроме того, для того чтобы ваш сценарий обнаруживал любые ошибки и уведомлял о них пользователя, вы должны использовать техно- логию обработки ошибок, примененную в сценарии copy_all.vbs. Вы ��жете �р�те�тир�вать и �тладить �в�й �ценарий на целев�� ����ьютере, �адав в �а�тере I�xp��ss �т��ражение ����щени� � �авершении ра��ты (��. �ун�т 9 �редыдуще�� ра�дела�. К��да у�тан�вщи� �удет �а�ущен и ��тан�вит�� на эт�� ��� ��щении, не �а�рывайте диал���в�е ��н� �авершени� у�тан�в�и. От�р�йте ��н� ��� �андн�й �тр��и и �делайте те�ущей вре�енную �а��у у�тан�вщи�а (��т�ра� и�еет на�вание, ��х�жее на IXP000.TMP, и нах�дит�� в вашей �а��е TEMP�. П��ле эт��� вы ���жете вручную �а�у�тить и �тладить у�тан�в�чный �ценарий, а та�же увидеть в�е ����щени� �� �ши��ах. П��ле �р�вер�и у�тан�в�чн��� �ценари� и вне�ени� в не�� не��х�ди�ых ���рав�� е�� обязательно нужн� ����ир�вать в �а�ую�ни�удь дру�ую �а��у, ���ле че�� �а�рыть диал���в�е ��н� �авершени� у�тан�в�и. П��ле эт��� у�тан�вщи� удалит вре�енные файлы и �а��у. Работа с контролем учетных записей пользователей При ра��те ��д у�равление� W��dows 7 и V�s�� ��нтр�ль учетных �а�и�ей ��ль� ��вателей �ешает ��ычны� �рил�жени�� и �ценари�� �а�и�ывать файлы в �а��и \windows и \program и их ��дчиненные �а��и, и��ен�ть �а�и�и рее�тра в ра�деле HKE�_LOCAL_MACHINE и вн��ить и��енени� в ��ще�и�те�ные �ере�енные �реды ��ружени�, ���а �рил�жение не �удет �а�ущен� � ра�ширенны�и �рава�и ад�и� ни�трат�ра. W��dows 7 и V�s�� ра����нают .exe�файл, ���данный I�xp��ss в �аче�тве у�та� н�в�чн���, и авт��атиче��и выв�д�т �ри�лашение ��нтр�л� учетных �а�и�ей
Создание простой программы установки с помощью IExpress 425 ��ль��вателей, е�ли файл на�ывает�� setup.exe. Зате� у�тан�в�чный �ценарий �а�у��ает�� � ра�ширенны�и �ривиле�и��и. Н� �ри ���дании у�тан�вщи�а � и�ене�, �тличающи��� �т setup.exe, ваш у�та� н�в�чный �ценарий �а�у��ает�� на целевых ����ьютерах � W��dows 7 и V�s�� �е� ра�ширенных �ривиле�ий. Не�ави�и�� �т и�ени, е�ли ��ль��ватель �а�у��ает ваш у�тан�вщи� на ����ьютерах � W��dows XP �е� �рав ад�ини�трат�ра, �н не ���жет вн��ить и��енени� в �ащищенных �е�тах. Не�ави�и�� �т ��ераци�нн�й �и�те�ы, и���ль�уе��й на целевых ����ьютерах, �равильн� ра�ра��танный у�тан�в�чный �ценарий д�лжен �арантир�вать наличие не��х�ди�ых �рав �еред начал�� �в�ей ра��ты. Е�ли �ценарий ��ределит �т�ут� �твие д��тат�чных �ривиле�ий дл� вы��лнени� �в�е�� �адани�, �н ��жет выве�ти ����щение, ин�тру�тирующее ��ль��вател� � т��, чт� нужн� в����ль��вать�� �а�у���� �т и�ени ад�ини�трат�ра или в�йти в �и�те�у ��д учетн�й �а�и�ью ад�ини�трат�ра, а �ате� ��вт�рить ���ыт�у �а�у��а у�тан�вщи�а. На W��dows 7 или V�s�� дл� �ценари� не �уще�твует �р��т��� ������а ��реде� лени� фа�та наличи� ра�ширенных �ривиле�ий ад�ини�трат�ра. Один и� �������в ��ределени� �а�лючает�� в ���ыт�е ���дани� файла в �а��е windows\system32, н� ре�ультаты та��й ���ыт�и �л�жн� и�т�л��вать. К ��жалению, дл� ��др��н��� ра����трени� эт�й �р��ле�ы в данн�й �ни�е нед��тат�чн� �е�та, н� � ва� ���ажу, �а� эт� делает�� в уче�н�� �ценарии, ��� т�рый ��жн� �а�ру�ить � адре�а www.helpwin7.com/scripting. Сценарий на�ывает�� setup_admin.vbs, и в не� ��редел�ет��, и�еет ли �н ра�ширенные �ривиле�ии. Е�ли �н та�их �ривиле�ий не и�еет, ��ль��вателю �редла�ает�� �а�у�тить е�� �т и�ени ад�ини�трат�ра. В не� та�же и�еет�� в����жн��ть �т�ены у�тан�в�и, ��т�ра� ра���атривает�� в �ледующе� ра�деле. ▼▼ Чтобы не усложнять чью-то жизнь, если установщику нужно создавать файлы в защищенных папках Windows или вносить изменения в параметры раздела реестра HKE�_LOCAL_MACHINE, назовите программу-установщик setup.exe. ▼▼ Чтобы дать пользователям более существенную гарантию вашей причастности к созданию уста- новщика и безопасности его работы, может потребоваться снабдить установочный файл с рас- ширением .exe цифровой подписью. Для этого нужно воспользоваться программой signtool, речь о которой пойдет в данной главе чуть позже — в разделе «Подписывание сценариев». Если сценарий используется в качестве команды на установку, может потребоваться подписать этот сценарий до запуска программы IExpress, создающей .exe-файл. Затем воспользуйтесь утилитой signtool для установки подписи в .exe-файле. Обе установки подписей можно автома- тизировать, создав пакетный файл по имени makeinstaller.bat, имеющий примерно следующий вид: rem * подписывание командного сценария установки signtool sign /a /t http://timestamp.comodoca.com/authenticode copy_all.vbs rem * создание setup.exe iexpress /n myinstaller.sed rem * подписывание программы-установщика signtool sign /a /t http://timestamp.comodoca.com/authenticode setup.exe Тогда для создания новой версии setup.exe потребуется всего лишь набрать в командной стро- ке команду makeinstaller.
426 Глава 9. Использование сценариев для управления компьютерами и сетями Предоставление возможности отмены установки Е�ли нужн� �ред��тавить ��ль��вател�� ������ удалени� т���, чт� у�тан�влен� � ����щью у�тан�в�чн�й �р��ра��ы, ���данн�й I�xp��ss, нужн� вы��лнить два дей�тви�: y y На�и�ать ���твет�твующий �ценарий, �а�етный файл или �р��ра��у, удал�ю� щую у�тан�вленные файлы и лю�ые ���данные в �р�це��е у�тан�в�и �рлы�и или эле�енты �еню Пуск (S�����. Зате� д��авить эт�т �ценарий или файл � на� ��ру файл�в, и� ��т�р��� ���т�ит ваше �рил�жение, и в �р�це��е у�тан�в�и ����ир�вать е�� в ту ���т��нную �а��у, ��т�ра� и���ль�ует�� дл� хранени� файла (или файл�в� ваше�� �рил�жени�. y y Сделать �а�и�ь в рее�тр, чт��ы ваша �р��ра��а ���вила�ь в ��и��е Программы и компоненты �анели у�равлени�. К��да ��ль��ватель ее вы�ирает, �рил�жение, �ани�ающее�� у�тан�в��й и удаление� �р��ра��, �а�у��ает �ценарий �т�ены у�тан�в�и. Чт��ы �делать эту �а�и�ь, нужн� в и�х�дн�� у�тан�в�чн�� �ценарии в��� ��ль��вать�� �ет�д�� Registry ��ъе�та WScript.Shell или �р��ра���й ���анд� н�й �тр��и reg дл� ���дани� �ара�етра �� и�ени HKE�_LOCAL_MACHINE\Software\ Microsoft\Windows\CurrentVersion\Uninstall\ ИмяВашегоПриложения, и�еюще�� три �тр���вых �начени� в ф�р�ате R�G_SZ. Имя значения Содержимое значения DisplayName И�� �рил�жени�, �а�и� е�� нужн� увидеть в �рил�жении у�тан�в� �и и удалени� �р��ра�� Publisher На�вание вашей �р�ани�ации (или ваше и��� UninstallString К��андна� �тр��а, и���ль�уе�а� дл� �а�у��а �ценари� �т�ены у�тан�в�и, ���твет�твующе�� �а�етн��� файла или �р��ра��ы. Е�ли дл� эт��� и���ль�ует�� �ценарий, нужн� у�а�ать �s���p�.�x�, �ате� ��лный �уть � �ценарию �т�ены у�тан�в�и в �е�те е�� ��� �т��нн��� хранени� Ка� эт� делает��, ���а�ан� в �ценарии setup_admin.vbs, у����нут�� в ��нце �редыдуще�� ра�дела. ▼) Если пользователям предоставляется возможность непосредственного запуска сценария от- мены установки, например, через ярлык меню Пуск (Start), нужно сделать так, чтобы этот сце- нарий удалял этот параметр реестра и приложение больше не появлялось в списке программ и компонентов. Если же альтернативные средства для отмены установки не предоставлялись, беспокоиться об этом не стоит: приложение панели управления удалит этот параметр автома- тически.
Создание сценариев для управления другими компьютерами 427 Создание сценариев для управления другими компьютерами В эт�� ра�деле ра���атривает�� те�а, �а�ающа���, ���рее, не ра�вертывани� сцена­ риев, а ра�ширени� вашего собственного ��л� де�тельн��ти. Е�ли ва� �рих�дит�� у�равл�ть �н�же�тв�� ����ьютер�в, не���ненн� не��х�ди���ть фи�иче����� ��х�да �ажд��� и� них дл� вне�ени� ��н�влений и и��енений или даже дл� �а� �у��а вручную на�и�анн��� ва�и же ��ле�н��� у�равл�юще�� �ценари� л�жит�� на ва� т�ж�и� �ре�ене�. П�эт��у нет ниче�� удивительн��� в т��, чт� ����ани� M���oso�� и дру�ие �р�и�в�дители �р��ра��н��� ��е��ечени� ра�ра��тали ������ы удаленн��� у�равлени� ����ьютера�и. Суще�твует не���ль�� �������в решени� эт�й �адачи. Те вер�ии W��dows, ��� т�рые �редна�начали�ь дл� дел�в�й �реды, в�лючают в �е�� �ред�тва у�равлени� удаленны� ра��чи� �т�л��. Вер�ии W��dows S��v�� �ред��тавл�ют �����тави�ые Службы терминалов для администрирования (T��m���� S��v���s �o� Adm���s�����o��. Та� �ие же фун�ци�нальные в����жн��ти �ред��тавл�ют�� �рил�жени��и �т�р�нних �р�и�в�дителей, на�ри�ер LogM�I�, GoToMyPC, PCA�ywh��� и вер�и��и �рил�� жений � �т�рыты� ��д�� VNC (��льшин�тв� и�еет �в���дн�е ра��р��транение�. При�ен�� ��д��ные техн�л��ии, вы ��жете «наве�тить» дру��й ����ьютер �� �ети и у�равл�ть и�, не ���ида� �в�е�� ра��че�� �е�та. При в�ей ценн��ти этих ин�тру�ент�в удаленн��� у�равлени�, �ни не ���ут авт��атиче��и �р�йти�ь �� ��и��у и� ��тен ����ьютер�в, ��д�равив на �ажд�� и� них �� �череди �а��й�ни�удь �ара�етр, �а� эт� ��жет �делать �ценарий. В �лаве 7 «Ин�тру�ентарий у�равлени� W��dows» и в �лаве � «A���v� D�����o�y S���p���g I��������» ра���атривали�ь ��ъе�ты, ������ные у�равл�ть ����ьютера�и �� �ети, и���ль�у� их и�ена. Сл�жн��ть и���ль��вани� техн�л��ий на �а�е �ценариев дл� ра��р��транени� и��енений �� в�е� ра��чи� �танци�� �р�ани�ации �а�лючает��, в���ервых, в ��лу� чении и у�равлении ��и���� в�ех ����ьютер�в и, в��вт�рых, в ра��те � ����ьюте� ра�и, нед��ту�ны�и на ���ент �а�у��а �ценари�. П�лучить ��и��� в�ех ра��чих �танций ��жн�, �а� �ини�у�, дву�� ������а�и: y y Е�ли в �р�ани�ации и���ль�ует�� д��енна� �еть � A���v� D�����o�y, ��жн� и���ль��вать �атал�� дл� ��анир�вани� в�ех учетных �а�и�ей ����ьютер�в, в����ль��вавши�ь техн�л��и��и, ра����тренны�и в �лаве �. Нужн� ��лучить тре�уе�ые дл� эт��� ��нтейнеры и и�учить и�еющие�� в них ��лле�циии, ��д� чиненные ��лле�ции ����ьютерных учетных �а�и�ей. y y Е�ли �луж�а �атал���в A���v� D�����o�y нед��ту�на или е�ли в вашей �р�ани�а� ции д� �их ��р (�а� ни �транн�� и���ль�ует�� W��dows 9x�M�, нужн� ���тавить ��и��� ра��чих �танций �� и�ена� и (или� �� IP�адре�а� вручную. М�жн�, ��нечн�, в����ль��вать�� �етью и �р���анир�вать ее � целью ��и��а в�ех и�ен, н� эт�, наверн�е, не та� надежн�, �а� ручна� инвентари�аци�. Бе� ��н�влени� ��и��а, чт��ы у�едить�� в т��, чт� н�вые ����ьютеры не д��авили�ь, нужн� вы��лнить �н�же�тв� ��ераций у�равлени� �етью и дру�их �р�цедур.
428 Глава 9. Использование сценариев для управления компьютерами и сетями Не�ави�и�� �т ������а ��лучени� ��и��а ����ьютер�в, �ри не��х�ди���ти ра��р��транени� и��енений в �а�шта�е в�ей �р�ани�ации � �редла�аю ва� ���дать те��т�вый файл �� ��и���� и�ен в�ех ����ьютер�в в �аче�тве ���ии, и���ль� �ующей�� исключительно дл� данн��� ��н�ретн��� �р�е�та. Зате� нужн� �удет на�и�ать �ценарий, ��анирующий эт�т ��и���, вы��лн�� тре�уе�ые и��енени� � ����щью WMI или ASDI, и удал�ющий и� ��и��а и�ена тех ����ьютер�в, на ��т�рых и��енени� �ыли �р�ведены у��ешн�. Т��да ��жн� �удет �ери�диче��и �ере�а�у��ать �ценарий, ���а ��н�влени� не �удут вы��лнены на в�ех ����ью� терах. П�д��н�е ��рре�тир�вание ��и��а ��уще�твл�ет�� в �ледующе� уче�н�� �ценарии: ' Файл примера deploy.vbs option explicit dim complist, maxcomputers, compname(), fso, s, nleft, str, i complist = "update_printers.dat" ' файл с именами обновляемыхкомпьютеров maxcomputers = 100 ' ис ходный размер автоматически растущего массива redim compname(maxcomputers) ' список все еще требующих обновления компьютеров nleft = 0 ' ко лич ест во ком пью теров в списке ' *** чтение списка компьютеров set fso = CreateObject("Scripting.FileSystemObject") set s = fso.OpenTextFile(complist) do while not s.AtEndOfStream ' п острочное чтение файла str = trim(s.ReadLine) if len(str) > 0 then ' рост массива с каждым именем, if nleft >= maxcomputers then ' если это необходимо maxcomputers = nleft+100 redim preserve compname(maxcomputers) end if compname(nleft) = str ' с охранение имени nleft = nleft+1 end if loop s.close set s = Nothing ' * ** обработка каждого оставшегося компьютера: compname(0..nleft-1) i=0 do while i < nleft WScript.echo "Обновление ", compname(i) & ". .." if process(compname(i)) then ' ес ли обновление прошло успешно, nleft = nleft-1 ' удаление имени из массива и compname(i) = compname(nleft) ' заполнение пустоты последним именем savelist ' запись списка без только что ' обновленного компьютера else WScript.echo ".. . н е удалось" i=i+1 ' пропуск данного компьютера ' до следующего раза end if loop ' * ** report on status
Создание сценариев для управления другими компьютерами 429 WScript.echo select case nleft case 0 WScript.echo "ВСЕ КОМПЬЮТЕРЫ ОБНОВЛЕНЫ" case 1 WScript.echo "Осталось обновить 1 компьютер" case else WScript.echo "Осталось обновить", nleft, "компьютер(а,ов) " end select ' s avelist – запись списка компьютеров все еще требующих обновления sub savelist dims,i set s = fso.CreateTextFile(complist, True) fori=0tonleft-1 s.WriteLine compname(i) next s.Close end sub ' process – выполнение необходимого обновления function process (computername) process = False ' предположение об отказе on error resume next ' не ос тан авл ива ть сценарий при ошибке '. .. обновление названного компьютера. Нужно тщательно проверять на наличие '. .. ошибок. Значение True должно возвращаться только при полном успехе if (обновление было успешным) then process = True end if end function Фа�тиче��а� ра��та на ��н�ретн�� ����ьютере вы��лн�ет�� и�еющей�� в �ценарии фун�цией process, ��т�ра� д�лжна вернуть True т�ль�� �ри удачн�� ��н�влении. П��ле ��н�влени� в�ех ����ьютер�в файл ��и��а ����ьютер�в, �в�� �анных � ��н�ретны� �р�е�т��, �удет �у�т. Удаленное выполнение сценариев Х�т� WMI и ADSI х�р�ш� ��равл�ют�� � �р�ни�н�вение� в� внутренн��ти W��dows на удаленных ����ьютерах, еще �дни� �������� у�равлени� удаленны�и ра��чи�и �танци��и �вл�ет�� ���ир�вание �ценариев на дру�ие ����ьютеры и �а� �у�� на них этих �ценариев. Е�ли эт� ��жн� �делать и� �дн��� централи��ванн��� ����ьютера, т� эт� ��жн� на�вать удаленным выполнением сценариев. В W��dows и�еет�� в�тр�енна� в����жн��ть удаленн��� вы��лнени� �ценариев (R�mo�� S���p���g�, и���ль�ующа� WSH���ъе�т Controller, � ��т�р�� ��жн� �р�чи� тать на ве���айте msdn.microsoft.com. Х�т� �дн� вре�� �т не�� �ыла �а�а��т� ��ль�а в д��енных �ет�х на ра��чих �танци�х ��д у�равление� W��dows XP, н� � �читаю, чт� в ��вре�енных �етевых �редах �н �ра�тиче��и �е���ле�ен �� �ледующи� �ричина�: y y Дл� целевых ����ьютер�в, ра��тающих ��д у�равление� W��dows 7 и V�s��, �н ра��тает т�ль�� в д��енных �ет�х W��dows и т�ль�� дл� ад�ини�трат�р�в д��ена.
430 Глава 9. Использование сценариев для управления компьютерами и сетями y y Дл� в�лючени� данн��� �в�й�тва нужн� и� ��нтр�ллера д��ена чере� �ру���� вую ��лити�у ра��р��транить р�д на�тр�е�. Кр��е эт���, �еред те� �а� в����ль� ��вать�� эт�й техн�л��ией дл� удаленн��� у�равлени�, на �ажд�� у�равл�е��� ����ьютере д�лжна �ыть �а�ущена ���анда. y y Он тре�ует на�тр�е� и��лючений �ранд�ауэра W��dows. П����ль�у �еред удаленны� и���ль��вание� ин�тру�ента нужн� ���етить �аж� дый ����ьютер, удаленн�е у�равление �ценари��и нель�� �читать эффе�тивны� �ред�тв�� у�равлени�. В����жн�, �р�ще �удет в����ль��вать�� удаленны� ра��� чи� �т�л��, дру�и�и �р��ра��а�и удаленн��� у�равлени�, ��ециали�ир�ванны� ин�тру�ентарие� удаленн��� вы��лнени� �р��ра�� вр�де и�еющей�� в W��dows �луж�ы T����� или ин�тру�ентарие� «ps�x��» � ве���айта www.syinternals.com. В �лаве 16 «И���ль��вание Pow��Sh���» �удут та�же ра����трены в����жн��ти удаленн��� у�равлени�, �ред��тавл�е�ые �ред�тв�� W��dows Pow��Sh���. Репликация сценариев на несколько компьютеров Сценарии, ��т�рые не��х�ди�� и���ль��вать на не���ль�их ����ьютерах вашей �ети, ��жн� ���е�тить в ��щую �етевую �а��у, д��ту�ную � лю���� ����ьютера. К��да нужн� у�равл�ть ����ьютера�и, не входящими в вашу ��н�вную �еть, на� �ри�ер ра��чи�и �танци��и ��трудни��в, ра��тающих на д��у, ��ециали�т�в, ра� ��тающих на �тдельных ��ъе�тах, или ����ьютера�и в удаленных �ет�х, ��т�рые ���ут не и�еть ���т��нн��� ��д�лючени�, тре�уют�� �ред�тва ра��р��транени� файл�в �ценариев еще д� т���, �а� эти �ценарии ��над���т��. Лучше в�е�� и�еть авт��атиче��ие �ред�тва ра��р��транени�, ���в�л�ющие �р�в�дить �в�евре�енн�е ��н�вление файл�в. Между у�ла�и ��льш�й ��р��ративн�й �ети ча�ть �адани� может быть ав� т��ати�ир�вана � и���ль��вание� �луж�ы ре�ли�ации файл�в (F��� R�p������o� S��v����, �ред��тавл�е��й W��dows S��v��. Эта �луж�а ��е��ечивает �в�евре�ен� н�е ��н�вление ���ий на��ра ��щед��ту�ных, ��в�е�тн� и���ль�уе�ых файл�в в ��льш�� �етев�� ����ле��е. Е�ли ��н�ретнее, в�е файлы и ��д�атал��и, ��т�рые нах�д�т�� в �атал��е \%windir%\sysvol\sysvol\имя_домена �ажд��� д��енн��� �ер� вера, ���ируют�� на в�е ��тальные д��енные �ерверы. В данн�� �лучае ни�а��й «�а�тер»����ии не �уще�твует; е�ли файл ���дан или �треда�тир�ван на лю��� �ервере, �н ���ирует�� на в�е ��тальные �ерверы. М�жн� �делать ��щей �а��у �ценариев в �дн�� и� ре�лицируе�ых �атал��ах и и�еть �дин и т�т же на��р �ценариев, д��ту�ный в лю��й л��альн�й �ети �р�ани�ации. Сценарии та�же ��� хран�ют�� в ��д�атал��ах ��лити�и. Дру��е дел� — ���ир�вание �ценариев на �тдельные ра��чие �танции � и�� ��ль��вание� или �е� и���ль��вани� д��енн�й �ети. Зде�ь уже нужн� �р��вить ��е�ал�у. М�жн� ����вет�вать �ледующее: y y В д��енн�й �ети ��жн� и� �ажд��� ��ль��ватель����� �ценари� вх�да в �и�те�у вы�вать �а�етный файл или ��д�р��ра��у �ценари�, ���ирующую �ценарии и� �а��и ре�ли�ации на д��енн�� �ервере в �а��у на �ажд�й ра��чей �танции. Т��да �ри �ажд�� вх�де �а�����ни�удь ��ль��вател� в �и�те�у �эш �ценариев
Создание сценариев для управления другими компьютерами 431 ра��чей �танции �удет ��н�вл�ть��. Пр�цедура ��н�влени� д�лжна �ыть «ра�� у�н�й» и ���ир�вать т�ль�� н�вые или и��ененные файлы. Файлы �ценариев ���ут делать эт�, и���ль�у� �ет�ды FileSystemObject, ра����тренные в �лаве 3; � ���ажу ва� уче�ный �ценарий, вы��лн�ющий эту �адачу. Дл� вы��лнени� ��д��н��� �адани� �а�етный файл вы�ывает та�ую �р��ра��у ��н�влени� фай� л�в, �а� robocopy. Эта �р��ра��а �ред��тавл�ет�� в�е�те � W��dows 7 и V�s��, и е�ли �на ��над��ит�� дл� XP, т� �на д��ту�на в ра�личных вер�и�х Suppo�� Too�s и R�sou��� ���s. y y Е�ли ра��та ведет�� вне д��енн�й �ети, ��жн� ���е�тить �нач��, �а�у��ающий ��д��ный ре�ли�аци�нный �а�етный файл или �ценарий в ��щую �етевую �а�� �у. Т��да ��танет�� т�ль�� ��тре��вать �т ваших ��ль��вателей �ери�диче��и щел�ать на �нач�е ��н�влени�. Та��й �рие� не�л�х� ра��тает в не��льших �ет�х. Он та�же ра��тает в д��енных �ет�х, ���да ��ль��ватели �ани�ают�� уда� ленн�й ра��т�й, на�ри�ер, в виртуальн�й ча�тн�й �ети — v���u�� p��v��� ���wo�k (VPN�. Я �ред��читаю ���ещать �рлы� в ��щую �ерверную �а��у на �ажд�� удаленн�� ��ль��ватель���� ра��че� �т�ле. П��ле т��� �а� �ни ��д�лючат�� �� ����утируе��й �ети или �� VPN, �ни ���ут щел�нуть �� �нач�у �рлы�а, чт��ы увидеть �а��у, ��лную ���твет�твующих �адач, �в��анных � �етью. В �ледующе� �ценарии ���а�ан�, �а� ��жн� ре�лицир�вать �а��у, ��лную �ценарных файл�в � �ервера (или дру���� централи��ванн��� �е�та хранени��, на л��альный ����ьютер. Эт�т �ценарий ��жет �ыть �а�ущен �� �ценари� вх�да в �и�те�у или вручную: ' Сценарий REPL.VBS ' Репликация каталога файлов с доменного сервера на рабочую станцию set fso = CreateObject("Scripting.FileSystemObject") set wshShell = CreateObject("WScript.Shell") set environ = wshShell.Environment("Process") ' предполагается наличие мастер-копии, в общей репликационной папке сервера ' регистрации домена. Вместо этого можно указать фиксированное путевое имя, ' е сли у вашей сети нет доменного контроллера или если вы не используете ' репликацию. ' Здесь используется переменная среды LOGONSERVER, поскольку ' з арегистрировать пользователя мог каждый контроллер домена. Этот вариант ' б удет работать при любой структуре сети предприятия. srcpath = environ("LOGONSERVER") & "\scripts\path" ' указание места хранения копий на всех рабочих станциях destpath = environ("WINDIR") & "\scripts" wscript.echo srcpath wscript.echo destpath if fso.FolderExists(srcpath) then checkfolder fso.GetFolder(srcpath), destpath end if ' checkfolder копирует содержимое мастер-папки в место назначения.
432 Глава 9. Использование сценариев для управления компьютерами и сетями ' Folder — это объект Folder, а destpath — имя целевого каталога. sub checkfolder (folder, destpath) dim file, subfolder if not fso.FolderExists(destpath) then fso.CreateFolder(destpath) for each file in folder.Files ' к опирование каждого файла checkfile file, destpath & "\" & file.Name next ' по вторный вызов для обработки подчиненных папок for each subfolder in folder.SubFolders checkfolder subfolder, destpath & "\" & subfolder.Name next end sub ' checkfile проверяет один файл и, если нужно, копирует его в место назначения. ' s rcfile — это объект File, представляющий мастер-копию, destname — полное ' путевое имя целевой копии target copy. sub checkfile (srcfile, destname) dim copyit, destfile if fso.FileExists(destname) then ' файл уже присутствует? set destfile = fso.GetFile(destname) ' определение необходимости ' е го коп ирования copyit = (srcfile.DateLastModified > destfile.DateLastModified) or _ (srcfile.size <> destfile.size) else copyit = True ' файла пока еще нет end if if copyit then ' к опирование файла on error resume next ' не останавливаться при ошибке fso.CopyFile srcfile.Path, destname, True if err.number then ' с ообщение об ошибке MsgBox "Не могу обновить " & srcfile.Name & ": " & err.description end if on error goto 0 end if end sub Вопросы безопасности выполнения сценариев П��ледние не���ль�� ��тен �траниц ���в�лили у�едить�� в т��, чт� �ценарии �вл�ют�� д�в�льн� ��щны� ин�тру�ент��, ������ны� �р�ни�нуть в� в�е у��л�и W��dows. Т�, чт� �аждый ��жет на�и�ать и �а�у�тить �ценарий на �в�е� ���� �твенн�� ����ьютере — еще ��л�еды, н� в эт�й �лаве �ыл� ���а�ан�, чт� �цена� рии ���ут �ыть ��рытн� �т�равлены и �а�ущены на дру�их ����ьютерах. И эт��� д��тат�чн� дл� ��ш�арных �н�в и �л�х��� �а��чув�тви� ��ециали�та �� �етев�й �е���а�н��ти.
Вопросы безопасности выполнения сценариев 433 С�а�ает т�, чт� дл� ��льшин�тва �ерье�ных у�равл�ющих фун�ций тре�уют�� �рава ад�ини�трат�ра. В�е �ценарии, в�люча� удаленные, вы��лн�ют�� в т�й �реде �е���а�н��ти, ��т�ра� и�еет�� у �а�у��ающих их ��ль��вателей. П�эт��у вред, ��т�рый и�и ��жет �ыть нане�ен, ��раничивает�� те� ��ъе���, ��т�рый �ыл �ы д��ту�ен ��ль��вателю, е�ли �ы �н �а� �идел �а ����ьютер��. Н� эт� �удет �ла�ы� утешение�, е�ли ��ль��ватель ���ан�� �удет в�влечен в �а�у�� вред�н��н��� �це� нари�, ��держаще���� на ве���транице, �т�равленн��� в ��чт�в�� вл�жении или �р��т� ���авше���� ��д ру�у. В W��dows 7 и V�s�� еще �дин ур�вень �е���а�н��ти д��авл�ет ��нтр�ль учетных �а�и�ей ��ль��вателей, ��т�рый эффе�тивн� ��рани� чивает удаленн�е �етев�е вы��лнение �ценариев, дела� е�� в����жны� т�ль�� дл� ад�ини�трат�р�в д��енн�й �ети. Один и� �������в �ащиты ����ьютер�в вашей �р�ани�ации �т нежелательных WSH�э���ери�ент�в �а�лючает�� в на�тр�й�е WSH на вы��лнение т�ль�� под­ писанных �ценариев. П�д�и�ывание — �на�жение �ценари� �ри�т��рафиче���й ��д�и�ью, дающей �арантию, чт� �ценарий �ыл на�и�ан и�ве�тны�, ��ль�ующи��� д�верие� ��ль��вателе�. W��dows S���p� Hos� вер�ии 5.6 и выше ���в�л�ет у�а�ать �начение рее�тра, �ред�твращающее �а�у�� не��д�и�анных �ценариев. Пара�етр рее�тра KE�_CURRENT_USER\Software\Microsoft\Windows Script Host\Settings\TrustPolicy ��жет и�еть лю��е и� трех DWORD��начений, ��редел�ющих �тн�шение WSH � не��д�и�анны� �ценари��. Значение Уровень ограничения 0 За�у�� лю���� �ценари�, ��д�и�анн��� или нет 1 За�р�� ра�решени� у ��ль��вател�, е�ли �ценарий не ��д�и�ан 2 Кате��риче��ий �т�а� �т �а�у��а не��д�и�анных �ценариев ▼) В новостной группе поддержки Windows утверждается, что ограничение, позволяющее запу- скать только подписанные сценарии, вызывает проблемы с возможностью Windows запускать удаленные сценарии. Если используются удаленные сценарии, а затем устанавливается огра- ничение на запуск только подписанных сценариев, нужно проверить работоспособность своих удаленных сценариев. Значение эт��� �ара�етра рее�тра ��жн� у�тан�вить на в�ех ����ьютерах ва� шей �р�ани�ации на т�т ур�вень, ��т�рый вы �читаете не��х�ди�ы�. В д��енн�й �ети эт� ��раничение ��жн� вве�ти � ����щью �ру���в�й ��лити�и. М�жн� та�же �р�ве�ти на�тр�й�и вручную, реда�тиру� рее�тр, или ра��р��транить файл рее�тра � ра�ширение� .reg. Еще �дн� ��а�ение �а�лючает�� в т��, чт� ��нечные ��ль��ватель ���ут ��лу� чить �лиш��� �н��� ��нфиденциальн�й инф�р�ации, �ри�тальн� и�уча� �ценарии на �в�их ����ьютерах и в �ети. В �ценари�х ��жет ��держать�� �а��а инф�р�ации вы������ ур�вн�: и�ена �ервер�в и, в����жн�, �ведени� � ��рытых ��щих ре�ур�ах, �е�та ра���л�жени� важных файл�в и даже техн�л��ии, и���ль�уе�ые �ценари��и дл� у�равлени� W��dows. В �реде, нацеленн�й на ���людение �ер �е���а�н��ти, нужн� �ерье�н� �аду�ать�� � д��ту�н��ти ��д��н��� р�да инф�р�ации. Я не ���
434 Глава 9. Использование сценариев для управления компьютерами и сетями �ираю�ь д�х�дить д� �редл�жений � �а�рете данн�й �ни�и, н� вы ��жете �ашиф� р�вать �ценарии, �атрудн�� те� �а�ы� их �в���дн�е чтение. В данн�� ра�деле �удет ���а�ан�, �а� ��д�и�ать ваши ����твенные �ценарии, чт��ы и� ��жн� �ыл� д�вер�ть в вашей �ети, и �а� �ашифр�вать �ценарии дл� ��вышени� ур�вн� их �а�рыт��ти. Подпись сценариев Цифровая подпись программы — эт� �р�це�� �ри�ре�лени� � файлу �р��ра��ы �ри�т��рафиче��и ��енерир�ванн��� ����щени�, ��т�р�е ��жет �ыть ���дан� т�ль�� и�ве�тны� д�веренны� лиц�� или �р�ани�ацией. При�енительн� � �цена� ри��, ��д�и�ывание �ар�ирует �ценарий �а� ��длинный �р�ду�т и� д�веренн��� и�т�чни�а и �арантирует, чт� �ценарий не �ыл и��енен ни�е� дру�и� �ежду е�� ��д�и�ывание� и д��тав��й. П�д�и�ывание ��жет ��вы�ить �е���а�н��ть, е�ли ва�и �удут вы��лнены �ледующие три дей�тви�: y y Вы или ваша �р�ани�аци� д�лжны �ри��ре�ти сертификат, ��ециальный файл, вы�ущенный центр�� �ертифи�ации — C����������o� Au�ho���y (CA�, ��т�р�е ��жет �а�видетель�тв�вать вашу личн��ть. Файл �ертифи�ата ��держит ин� ф�р�ацию и �лючи шифр�вани�, а та�же дает в����жн��ть �ашифр�вать файл, чт��ы лю��й ��лучатель файла ��� �ыть уверен, чт� �н ���лан вами — е�ли, ��нечн�, �н д�вер�ет центру �ертифи�ации. К чи�лу та�их центр�в �тн���т�� V���S�g�, Comodo, Th�w��, а та�же дру�ие ����ании. Сертифи�аты та���� р�да �т��т �ри�ерн� �т 200 д� 400 д�ллар�в в ��д. (В���ре � ���ажу ва�, �а� �а��лучить �ертифи�ат �� ��лее ни���й цене.� W��dows S��v�� ��жет �а���т��тельн� �енерир�вать �е��латные �ертифи�аты дл� и���ль��вани� в ра��ах �р�ани�ации, н� �е� «шта��а �д��рени�» центра �ертифи�ации. Эти �ертифи�аты не ���ут �ыть �р�верены �а �редела�и д�� �енн�й �ети данн�й �р�ани�ации. y y Каждый �ценарий, �редна�наченный дл� �а�у��а ваши�и ��ль��вател��и, д�лжен и�еть цифр�вую ��д�и�ь в виде та���� �ертифи�ата. В���ре � ���ажу, �а� эт� ��жн� �делать. y y На �ажд�� ����ьютере вашей �р�ани�ации д�лжна �ыть на�тр�й�а на �а�рет �а�у��а не��д�и�анных �ценариев или, �� �райней �ере, на �реду�реждение ��ль��вател� � ���ыт�е �а�у��а не��д�и�анн��� �ценари�, ���данна� � ��� ��щью �ру���в�й ��лити�и, л��альн�й ��лити�и �е���а�н��ти или �ара�етра рее�тра. Ра����три� ��лее ��др��ные ин�тру�ции. Получение инструментов изготовления цифровой подписи Дл� у�тан�в�и и и���ль��вани� ваше�� �ертифи�ата цифр�в�й ��д�и�и тре�у� ет�� наличие двух ин�тру�ент�в ���андн�й �тр��и, ра�ра��танных ����анией M���oso��: pvk2pvc.exe и signtool.exe. Е�ли у ва� и�еет�� вер�и� W��dows So��w��� D�v��opm��� ��� (или, �а� эт� раньше на�ывал��ь, P����o�m SD�� или у�тан�влен лю��й �р�ду�т M���oso�� W��dows дл� ра�ра��т�и �р��ра��н��� ��е��ечени�,
Вопросы безопасности выполнения сценариев 435 ��ищите ��а этих файла в �а��е \Program Files. Е�ли �ни �удут найдены, д��авьте ��держащую их �а��у в �начение �ере�енн�й PATH, чт��ы их ��жн� �ыл� �а�у��ать и� ���андн�й �тр��и. Е�ли у ва� еще нет этих ин�тру�ент�в, �а�ру�ите и у�тан�вите �а�ую ���леднюю вер�ию W��dows SD� � ве���айта msdn.microsoft.com. На вре�� на�и�ани� данн�й �ни�и �а�а� ���ледн�� вер�и� на�ывала�ь M���oso�� W��dows SD� �o� W��dows 7 ��d .N�T F��m�wo�k 4. За�ру�ите и �а�у�тите ее �р��ра��у у�тан�в�и, и���ль�ующую интернет, и у�тан�вите ин�тру�ентарий ра�ра��т�и �р��ра�� дл� W��32. Файлы signtool.exe и pvk2pvc.exe �удут нах�дить�� в �атал��е \Program Files\Microsoft SDKs\Windows\vxxx\ bin. Д��авьте е�� в �начение �ере�енн�й PATH. Получение сертификата с цифровой подписью Дл� ��д�и�и �ценариев нужн� вы�рать центр �ертифи�ации (CA�. М�жн� и���ль� ��вать �у�личн�е, �латн�е CA, или ��жн� в����ль��вать�� ����твенны� CA вашей �р�ани�ации, е�ли ваши �ценарии �редна�начают�� т�ль�� лишь дл� внутренне�� и���ль��вани� и у ва� е�ть д��ту�ный W��dows S��v��. ▼▼ У меня была возможность приобрести сертификат цифровой подписи Comodo всего за 75 дол- ларов (это вполне приемлемая цена) для создания подписи на author.tucows.com. Если предло- жение о снижении цены еще в силе, вы можете получить сертификат, щелкнув на Code Signing Certi�cates в пункте Resources в левой части этой веб-страницы. Зате� нужн� �а�а�ать и у�тан�вить �ертифи�ат цифр�в�й ��д�и�и �р��ра��ы. Дл� ��щед��ту�н��� CA эт� делает�� на ве���айте или �� эле�тр�нн�й ��чте � вы� ��лнение� �р�цедур, �ред�и�анных CA. В ��льшин�тве �лучаев эти �р�цедуры �а�лючают�� в �ледующе�: 1. Вы �а�рашиваете �ертифи�ат цифр�в�й ��д�и�и (Au�h�����od�� на ве���айте CA. В �р�це��е эт��� ве���айт тре�ует ��хранить уни�альный �а�рытый �люч на ваше� ����ьютере в файле � ра�ширение� .pvk. На�ри�ер, дл� эт��� файла ��жн� вы�рать и�� «s�g���g.pvk». Запомните место, где находится этот файл! 2. Чуть ���же CA �а�р��ит инф�р�ацию у ва� или у вашей ����ании, чт��ы �р�� верить, чт� вы т�т �а ���� �е�� выдаете. В нее ���ут �ыть в�лючены ���ии ва� ше�� ра�решени� на ��уще�твление ����ерче���й де�тельн��ти, в�дитель��их �рав, �чет�в �а ����унальные у�лу�и и т. д. 3. Вы ��лучите увед��ление � т��, ���да ��жн� �а�рать �т�рытую ча�ть �люча ваше�� �ертифи�ата. Ве���айт Comodo у�танавливает �люч не���ред�твенн� в хранилище �ертифи�ата W��dows, н� эт�т �люч �вл�ет�� не��лны�, ��� ���ль�у в не�� не в�лючен �а�рытый �люч. Чт��ы �ереу�тан�вить �люч, нужн� вы��лнить �ледующие дей�тви�: 1� За�у�тить Ди��етчер �ертифи�ат�в ���анд�й "start certmgr.msc". 2� В ра�деле Сертификаты – текущий пользователь (U�d�� C����������s � Cu����� Us��� �т�рыть Личное (P��so����Сертификаты (C����������s�. Выделить т�ль�
436 Глава 9. Использование сценариев для управления компьютерами и сетями �� чт� д��авленный �ертифи�ат, щел�нуть на не� �рав�й �н����й и вы�рать �ун�ты Все задачи (A�� T�sks�Экспорт (�xpo���. 3� Е�ли на �ерв�й �транице Ма�тера э����рта ��рашивает��, желаете ли вы в�лючить �а�рытый �люч, т� �р�д�лжени� не тре�ует��. В�е уже у�тан�в� лен�. В �р�тивн�� �лучае нужн� �р�д�лжить ра��ту. 4� Вы�ерите Файлы X.509 (.CER) в кодировке DER (D�R ���od�d �����y X.509 (.C�R�� и щел�ните на �н���е Далее (N�x��. Перейдите на ту �а��у, в ��� т�р�й ��держит�� файл �а�рыт��� �люча (.pvk�, ��храненный �ри ��даче �а�в�и на �ертифи�ат, и введите и�� файла, на�ри�ер signing.cer. Щел�ните на �н���е Далее (N�x��, а �ате� на �н���е Готово (F���sh�. 5� От�р�йте ��н� ���андн�й �тр��и и �делайте те�ущей �а��у, в ��т�р�й те� �ерь ��держат�� файлы signing.pvk и singing.cer. 6� На�ерите �ледующую ���анду: pvk2pfx -pvk signing.pvk -spc signing.cer -pfx signing.pfx Е�ли у�а�ывает�� �ар�ль дл� �ащиты файла .pvk, в ��нце ���андн�й �тр��и нужн� д��авить -pi пароль. Та�и� ��ра��� �р�и��йдет ��ъединение �а�рыт��� и �т�рыт��� �люча. 7� Верните�ь в Ди��етчер �ертифи�ат�в, удалите и�еющий�� �ертифи�ат цифр�в�й ��д�и�и, а �ате� щел�ните на �ун�те Действие (A���o�� и вы�ери� те Все задачи (A�� T�sks�Импорт (Impo��� дл� и���ртир�вани� т�ль�� чт� ���данн��� файла signing.pfx. Мне �ришл��ь вы��лнить и�енн� эти дей�тви�, н� ��н�ретные ин�тру�ции ���ут варьир�вать�� в �ави�и���ти �т и���ль�уе���� центра �ертифи�ации. Е�ли вы и���ль�уете CA �в�ей ����твенн�й �р�ани�ации, �ледуйте у�а�ани�� �в�е�� �етев��� ад�ини�трат�ра. П��ле у�тан�в�и �ертифи�ата �н �удет виден в ра�деле �ертифи�ат�в MMC, �а� в �ри�ере, ���а�анн�� на ри�. 9 .1 . Рис. 9 .1 . Список сертификатов, установленных для вашей учетной записи, показывается в консоли Диспетчера сертификатов
Вопросы безопасности выполнения сценариев 437 Подписывание сценариев WSH ���тавл�ет�� � ��ъе�т��, ��т�рый ��жет ��д�и�ывать файлы �ценариев � ��� ��щью в�е�� лишь не���ль�их ��ерат�р�в. О� ��ъе�те Scripting.Signer ��жн� �р�читать на ве���айте msdn.microsoft.com. В уче�ные �ценарии, ��т�рые ��жн� �а� �ру�ить � ве���айта helpwin7.com/scripting, � в�лючил �ценарий �� и�ени signscript.vbs, ��т�рый ��жет и���ль��вать�� дл� ��д�и�ывани� файл�в �ценариев и ���а�ывает ��р�д�� и���ль��вани� данн��� ��ъе�та. Н� � �редла�аю, �а� эт� уже ра���атривал��ь ранее, дл� ��д�и�ывани� �це� нариев в�е�т� эт��� �а�ру�ить и и���ль��вать �р��ра��у signtool.exe � ве���айта www.microsoft.com. Причина в т��, чт� �р�� и���ль��вани� цифр�в�й ��д�и�и в �ценари�х, ��д�и�анных � ����щью ��ъе�та Scripting.Signer, и�те�ает в�е�те � и�течение� �р��а дей�тви� �ертифи�ата (��ычн� �т �дн��� д� трех лет �� вре�ени �ри��ретени��, и W��dows ��льше не �читает �ценарии �е���а�ны�и дл� �а�у��а. Утилита signtool ��жет д��авить цифр�вую �ет�у вре�ени, ��эт��у цифр�ва� ��д�и�ь �читает�� дей�твующей �е���нечн�, ���а �ценарий не �удет �а�и��ли�� ��ра��� и��енен. Кр��е т���, �ри ��лучении �ертифи�ата цифр�в�й ��д�и�и �ледует �р�верить ве���айт центра �ертифи�ации дл� ��ределени� URL�адре�а е�� �ервера �т�ет�� вре�ени. На�ри�ер, дл� Comodo URL�адре� эт��� �ервера http://timestamp.comodoca. com/authenticode. Дл� ��д�и�ывани� �ценари� и� ���андн�й �тр��и и���ль�ует�� �ледующий �инта��и�: signool sign /a [/t "Имя сертификата"] [/t URL_сервера_отметок_времени] scriptfile На�ри�ер, signtool sign /a /t http://timestamp.comodoca.com/authenticode myscript.vbs ▼▼ Эту команду целесообразно поместить в пакетный файл, чтобы ее не приходилось набирать, а также чтобы записать имя и информацию об URL для упрощения ссылки. Написание пакет- ных файлов будет рассмотрено в следующих главах. Моя собственная версия по имени sign.bat включена в загружаемые учебные сценарии. П�лучить д���лнительную инф�р�ацию � �лючах ���андн�й �тр��и signtool ��жн�, на�рав ���анду signtool sign /?. Ка��й �ы ин�тру�ент не и���ль��вал��, ���ле т��� �а� �ценарий ��д�и�ан, в е�� ��нце �удет виден �л�� ����ентариев длин�й ��лее �та �тр��. П�лучивший�� файл ��жет и�еть �ледующий вид: MsgBox "Это сценарий, имеющий цифровую подпись" '' SIG '' Begin signature block '' SIG '' MIIIMAYJKoZIhvcNAQcCoIIIITCCCB0CAQExDjAMBggq '' SIG '' hkiG9w0CBQUAMGYGCisGAQQBgjcCAQSgWDBWMDIGCisG ... '' SIG '' Hn7AhAQwZGWgpTbAYPWh0AT5Wz6rQdSpnuAj6w9zviVP '' SIG '' qvCa6VFH9/0iE9VqBc+zuwIGYn11 '' SIG '' End signature block Е�ли �ценарий �ыл ��д�и�ан, �ри �р����тре �траницы е�� �в�й�тв в W��dows �xp�o��� ���вл�ет�� ���а�анна� на ри�. 9.2 д���лнительна� в�лад�а Цифровые подписи (D�g���� S�g���u��s�. П��ле щелч�а на �н���е Сведения (D�����s�, а �ате� на
438 Глава 9. Использование сценариев для управления компьютерами и сетями �н���е Просмотр сертификата (V��w C����������� ��жн� �удет �р�верить ��длин� н��ть ��д�и�авше�� и центра �ертифи�ации. ▼) Если в подписанный сценарий внесены какие-нибудь изменения, подпись становится недействи- тельной. Нужно будет либо удалить строки комментария подписи, либо заново подписать файл. Рис. 9 .2 . У подписанных файлов сценариев на их страницах свойств появляется вкладка Цифровые подписи (Digital Signatures), позволяющая проверить подлинность подписавшего Ужесточение мер безопасности для запуска подписанных сценариев Чт��ы на�тр�ить �е���а�н��ть �тдельн�й ра��чей �танции W��dows или �танции, вх�д�щей в ра��чую �ру��у, и ��тре��вать �т WSH �р�вер�и аутентифи�ации �ценариев, нужн� в����ль��вать�� ��лити��й �е���а�н��ти. В д��енн�й �ети эт� ��жн� �делать � ����щью �ру���в�й ��лити�и. На авт�н��н�й ра��чей �танции эт� ��жн� �делать чере� л��альную ��лити�у, у�равл�е�ую �ру���в�й ��лити��й в� в�тр�енн�й ��н��ли у�равлени� M���oso�� (MMC�. На�тр�й�и �р�и�в�д�т�� чере� эле�енты ��лити�и, д��ту�ные чере� �ун� �ты Конфигурация компьютера (Compu��� Co���gu����o��Конфигурация Windows (W��dows S�����gs�Параметры безопасности (S��u���y S�����gs�Политики огра- ниченного использования программ (So��w��� R�s������o� Po�����s�Дополнительные правила (Add���o��� Ru��s�. Ад�ини�трат�р ��жет д��авить «�равил� �ути» дл� �л��ир�вани� д��ту�а � ��ециальны� ти�а� файл�в. На�ри�ер, �уте� вв�да �равила «�а�рещен�» (d�s���ow�d� дл� *.vbs �е� �утев��� и�ени ��жн� ���ешать ��ль��вателю �а�у�тить лю��й файл V�S и� лю���� �е�та. Та�ие же �равила ���ут �ыть введены дл� �л��ир�в�и файл�в .vbe, .js, .jse и .wsf. М��ут та�же �ыть на�и�аны �равила дл� �л��ир�в�и �ценариев т�ль�� в� вре�енных �а��ах, и���ль� �уе�ых I������� �xp�o��� и Ou��ook �xp��ss дл� �а�руженных файл�в. Кр��е т���, ад�ини�трат�р д�лжен д��авить «�равила �ертифи�ата», ��редел�ющие д�верен� ные �ертифи�аты, в ча�тн��ти �ертифи�ат, и���ль�уе�ый дл� ��д�и�ани� ваших �ценариев. Сценарии, ��д�и�анные �еречи�ленны�и �ертифи�ата�и, ра�решены � �а�у��у, а не��д�и�анные �ценарии �л��ируют�� дру�и�и �равила�и ��лити�и.
Вопросы безопасности выполнения сценариев 439 Е�ли ��ль��ватель �ри та��� режи�е ��лити�и ���ытает�� �а�у�тить �ценарий, не и�еющий ��д�и�и или ��двер�ший�� и��енени�� ���ле ��лучени� ��д�и�и, �удет выведен� �ледующее ����щение: Ошибка CScript: Ошибка при выполнении сервера сценариев Windows. (Эта программа заблокирована групповой политикой. За дополнительными сведениями обращайтесь к системному администратору.) Еще �дн� �ред�тв� ��е��ечени� �е���а�н��ти, и�еющее�� в ваше� ра���р�� жении, — �ара�етр рее�тра в ф�р�ате DWORD ��д на�вание� TrustPolicy, ��т�рый нах�дит�� в ��дра�деле HKE�_CURRENT_USER\SOFTWARE\Microsoft\Windows Script Host\ Settings. Е�� ��жн� ���дать и �ри�в�ить е�у �дн� и� �ледующих �начений. 0 Сценарии не д�лжны �ыть ��д�и�аны (и���ль�ует�� �� у��лчанию� 1 Е�ли �ценарий не ��д�и�ан, у ��ль��вател� �а�рашивает�� ра�решение 2 Не��д�и�анные �ценарии не �а�у��ают�� Эт�т �ара�етр эффе�тивен т�ль�� в д��енн�й �ети W��dows, �де �н вв�дит�� в дей�твие чере� ша�л�н ад�ини�тративн�й ��лити�и или чере� �ру���вую ��ли� ти�у, ��т��у чт�, в �р�тивн�� �лучае, ��ль��ватель (или вред�н��на� �р��ра��а� ��жет и��енить �начение и ���йти ��раничение. ▼o Любые введенные вами ограничительные настройки должны быть тщательно проверены на работу в вашей среде. Следует убедиться в том, что нужные сценарии запускаются, а те сцена- рии, которые не должны запускаться, не запускаются. Кодировщик сценария К�дир�вщи� �ценари� (S���p� ���od��� — эт� утилита ���андн�й �тр��и, ��т�рую ��жн� найти, �а�ру�ить и у�тан�вить � ве���айта msdn.microsoft.com. Е�� �адача — �ревратить ��держи��е файл�в �ценариев � ра�ширение� .vbs или .js в дв�ичную �ешанину и �делать е�� практически нечитаемым, н� �ри эт�� ���в�лить WSH де��дир�вать е�� та� же ле���, �а� и ��ычный �ценарий. Эт� �танет �ер�й �ащиты ваших �ценариев �т ш�и�н�тва и в�р�в�тва. Я у��тре�ил выражение «�ра�тиче��и нечитае�ы�», ��т��у чт� в �тличие �т у�т�йчив��� шифр�вани�, и���ль�уе���� в W��dows ����yp��d F��� Sys��m, ��дир�вщи� �ценари� �лиш��� у�р�щен. М�жн� �адать�� целью �р�ве�ти ��ратный �р�це�� и �р�читать �а��дир�ванный файл. К ��дир�ванию �ценариев нужн� �тн��ить�� �а� � слабому �ред�тву �т случайного ��д��атривани�. ▼o В частности, не стоит вставлять в сценарии пароли в надежде на то, что кодирование сценария обеспечит их безопасность. Перед и���ль��вание� ��дир�вщи�а �ценариев нужн� �делать ре�ервные ���ии в�ех �ценариев, ��т�рые �ланирует�� �а��дир�вать и ра��р��транить, и лучше �делать их не на т�� ����ьютере, на ��т�р�� �р�и�х�дит ��дир�вание. Те� �а�ы�
440 Глава 9. Использование сценариев для управления компьютерами и сетями ��жн� ��е���а�ить�� �т ��дир�вани� �в�ей един�твенн�й ���ии и �т ��тери чи� тае��й ���ии �ценари�. Дл� �а��дир�ванных �ценариев и���ль�уют�� дру�ие ра�ширени� и�ен файл�в, нежели дл� �ценариев в виде �р��т��� те��та. Ра�ширени� и�ен файл�в дл� �р�� �тых и �а��дир�ванных �ценариев ���а�аны в та�л. 9 .1 . Таблица 9.1. Расширения имен файлов для обычных и закодированных сценариев Тип Расширение для обычного сценария Расширение для закодированного сценария V�S���p� .vbs . vb� Js���p� .js . js� Са�ый �р��т�й �инта��и� дл� ��дир�вани� файла �ценари� и�еет �ледующий вид: screnc исходное_имя новое_имя На�ри�ер: screnc myscript.vbs myscript.vbe Эта ���анда ���да�т �а��дир�ванную вер�ию myscript.vbe, ��т�рую ��жн� �ате� ра��р��транить �реди дру�их ��ль��вателей. Х�т� ��дир�вщи� �ценариев д��у��ает и���ль��вание �и�в�л�в��а�е�тителей и и�еет р�д �лючей, дл� ��дир�вани� файл�в V�S и JS �ни не �ри�ен�ют��. ▼) Если нужно распространить подписанные закодированные сценарии, их следует подписать до того, как они будут закодированы. Создание сценариев входа в систему Одн�й и� важных �фер �ри�енени� �ценариев �вл�ет�� �дн���ра�на� на�тр�й�а ��ль��ватель��их учетных �а�и�ей �ри �ажд�� вх�де в �и�те�у. Эт� и�рает важную р�ль в дел�в�� ��ружении, �де �етевые ре�ур�ы ���ут вре�� �т вре�ени �ере� �ещать��, или ��ль��ватели ���ут �� не��т�р�жн��ти и��енить ��д�люченные �етевые ди��и или дру�ие на�тр�й�и �ети. Сценарий, �а�у��ае�ый �ри �ажд�� вх�де ��ль��вател� в �и�те�у, ��жет ��е��ечить ��ль��вателю ���т��нный д��ту� � надлежащи� �етевы� ре�ур�а�. Сценарии вх�да в �и�те�у ���ут та�же �р�вер�ть не��х�ди���ть ��н�влени� �р��ра��, �чищать вре�енные �а��и и авт��атиче��и вы��лн�ть дру�ие �ери�диче��ие �адачи ���луживани�. W��dows ���в�л�ет на�начать �ценарии �тдельн� дл� �ажд��� ��ль��вател�. Сценарий вх�да в �и�те�у ��жет �ыть WSH�файл�� или �тар�режи�ны� �а�ет� ны� файл�� � ра�ширение� .bat или .cmd, ��жн� и���ль��вать лю��й желае�ый ф�р�ат. Па�етный файл ��жет даже �а�у�тить WSH, е�ли нужн� и���ль��вать ��е �реды ��ружени�. Кр��е эт��� W��dows ��ддерживает �ценарии на ��н�ве �аданий �ру���в�й ��лити�и, ��т�рые ���в�л�ют ва� �а�у��ать �ценарий �ри вх�де�вых�де ��ль��� вател� и� �и�те�ы и �ри �а�у��е и �еред вы�лючение� ����ьютера.
Создание сценариев входа в систему 441 ▼) Windows 7 и Vista могут запускать сценарии при входе в систему, выходе из нее, при запуске компьютера и перед его выключением, а также при наступлении других значимых событий, даже если компьютер не принадлежит доменной сети. Для этого используется Планировщик заданий (Task Scheduler). Этот вопрос будет рассмотрен ближе к концу главы. В данн�� ра�деле �удет ���а�ан�, �а� на�начать �ценарии вх�да в �и�те�у ��ль��вател�� и �ру��а�. Сценарии входа в систему, определяемые в профиле пользователя Са�ы� �тары� и наи��лее в��тре��ванны� �������� на�начени� �ценариев вх�да в �и�те�у �вл�ет�� и���ль��вание �ехани��а �р�фил� ��ль��вател�. W��dows ���в�л�ет на�начить �ценарий учетн�й �а�и�и ��ль��вател�. Эт� ��жн� �делать �а� в д��енных учетных �а�и��х, та� и в учетных �а�и��х л��альн��� ����ьютера. Делает�� эт� �ледующи� ��ра���: y y На �ашине W��dows S��v�� �ледует �а�у�тить утилиту дл� ���дани� учетных �а�и�ей Us�� M���g�� �o� Dom���s или �ред�тв� у�равлени� A���v� D�����o�y Us��s ��d G�oups (т� и� этих �ред�тв, ��т�р�е ��льше ��дх�дит�. y y На ра��чей �танции W��dows, на�ри�ер, дл� авт�н��н��� ����ьютера или ���� �ьютера, вх�д�ще�� в ра��чую �ру��у, или же дл� л��альных учетных �а�и�ей на �ашине, вх�д�щей в д��ен, �ледует щел�нуть �рав�й �н����й на �ун�те �еню Компьютер (My Compu����, вы�рать �ун�т Управление (M���g��, а �ате� вы�рать �ун�т Локальные пользователи и группы (Lo��� Us��s ��d G�oups�. (Дл� вер�ий W��dows Hom� эти дей�тви� нед��ту�ны.� Дл� л��альных учетных �а�и�ей, авт�н��ных ����ьютер�в и ����ьютер�в ра��чих �ру�� W��dows ищет �ценарии вх�да в �и�те�у в ве�ь�а �транн�� ��н� �ретн�� �е�те: в �атал��е W��dows в ��д�атал��е \windows\system32\repl\import\ scripts. Эта �а��а и���ль�ует�� ��т��у, чт� и�т�риче��и, �а� уже ранее у���инал��ь в данн�й �лаве, �на �ыла �а���й, ��т�ра� авт��атиче��и ���ир�вала�ь на в�е д�� �енные �ерверы �р�ани�ации. Е�ли та��й �а��и еще нет, ее нужн� ���дать. Дл� учетных �а�и�ей ��ль��вателей д��ена W��dows и�вле�ает �ценарии и� ��щей �а��и NETLOGON на д��енн�� ��нтр�ллере (�ервере�. На д��енн�� �ервере �ни хран�т�� в �атал��е \windows\sysvol\sysvol\domainname\scripts, ��т�рый ��в�е�тн� и���ль�ует�� �а� NETLOGON. Чт��ы на�начить �ценарий вх�да в �и�те�у, нужн� �айти в �в�й�тва ��ль��ва� тел� и вы�рать, �а� ���а�ан� на ри�. 9 .3, в�лад�у Профиль (P�o�����. Зате� �ледует вве�ти и�� файла �ценари� вх�да в �и�те�у, в �аче�тве ��т�р��� ��жет и���ль��� вать�� лю��й �аре�и�трир�ванный ти� �а�етн��� файла или файла �ценари�. И�� файла, вв�ди��е в данн�� ��не, и�еет �тн�шение � �атал��у \windows\system32\repl\ import\scripts. М�жн� вве�ти ли�� �р��т�е и�� файла (на�ри�ер, logon.vbs�, ли�� и�� вида подпапка\имя_файла, н� а���лютный �уть (начинающий�� � �и�в�ла \� вв�дить нель��, та�же нель�� и���ль��вать ��четание �и�в�л�в .., �ыта��ь ��д� н�ть�� в �а��у ��лее вы������ ур�вн�. В ��льшин�тве �лучаев �ценарии вх�да
442 Глава 9. Использование сценариев для управления компьютерами и сетями в �и�те�у хран�т�� в �а��ах �ценариев верхне�� ур�вн�, ��эт��у ��жн� �р��т� вве�ти и�� �е� �утев�й инф�р�ации. Рис. 9 .3 . Введите имя файла сценария входа в систему во вкладке Профиль (Pro�le) страницы свойств пользователя ▼o Поскольку сценарии входа в систему могут выполнять все, что доступно пользователю, нужно гарантировать защиту от постороннего вредоносного вмешательства в принадлежащий поль- зователю сценарий входа в систему. Нужно обязательно установить соответствующие права доступа к файлам сценариев входа в систему и к самой папке сценариев. Файлы сценариев должны храниться в разделе диска, имеющем формат NTFS. Они должны быть доступны по чтению для всех и доступны по записи и изменению только для администратора. Сценарий вы��лн�ет�� �ри �ажд�� вх�де ��ль��вател� в �и�те�у, �ра�у же ��� �ле т���, �а� W��dows в���тан�вит лю�ые ���т��нные �етевые на�тр�й�и (т� е�ть ���ле т���, �а� �етевые драйверы �удут �т��ражены, е�ли у�тан�влен флаж�� Восстанавливать при регистрации (R��o����� �� Logo���. Зате� �ценарий ��жет �ерена�тр�ить �еть, �ринтеры W��dows, на�тр�й�и �р��ра��н��� ��е��ечени� и рее�тра, а та�же �нач�и ра��че�� �т�ла и �р�и�ве�ти в�е ��тальные не��х�ди�ые е�у дей�тви�. Сценарии для входа в систему, выхода из нее и для других событий для Windows 7 и Vista W��dows 7 и V�s�� ���в�л�ют у�а�ать ���анды, вы��лн�е�ые �ри на�ту�лении �а�����ни�удь �начи���� дл� �и�те�ы ���ыти�, на�ри�ер вх�да в �и�те�у, вы� х�да и� нее, выдачи ���анды на вы�лючение, в��вращени� и� �и�ернации и т. д .
Создание сценариев входа в систему 443 Дл� этих инициирующих ���ытий ��жн� на�начить �ценарии, в����ль��вавши�ь Планир�вщи��� �аданий. Эт� �ред�тв� �удет ра����трен� в ���ледне� ра�деле данн�й �лавы. Сценарии входа в систему, выхода из нее, запуска компьютера и команды на его выключение, связанные с групповой политикой В д��енн�й �ети �ценарии вх�да в �и�те�у ��жн� на�начить � ����щью �ру���в�й ��лити�и. Сценарии, �в��анные � ��лити��й, �ледует �тличать �т ра����тренных в �редыдуще� ра�деле �ценариев �р�фил� ��ль��вател�. Сценарии, �в��анные � �ру���в�й ��лити��й, �а�у��ают�� в д���лнение � лю���у �ценарию, ��реде� ленн��у в �р�филе ��ль��вател�. Эт� �в�й�тв� д��ту�н� даже на авт�н��ных ����ьютерах и ����ьютерах ра��чей �ру��ы чере� на�тр�й�и л��альн�й ��лити�и �ажд��� ����ьютера. Н� �ри и���ль��вании A���v� D�����o�y та�а� техн�л��и� �р��вл�ет �е�� на�н��� ��щнее, �����ль�у ���в�л�ет на�начать �ценарии, вы� ��лн�е�ые �ри �а�у��е ����ьютера и �ри е�� вы�лючении, а та�же вы��лн�ть �ценарии �ри вх�де в �и�те�у и вых�де и� нее �ри�енительн� � ��ль��вател��, �ру��а�, ����ьютера�, ��дра�делени�� �р�ани�ации и т. д . Дл� на�начени� �ценариев, вы��лн�е�ых �ри вх�де в �и�те�у, вых�де и� нее, �ри �а�у��е ����ьютера или �ри е�� вы�лючении, �начала нужн� ���дать и �р�� те�тир�вать �а�и �ценарии. Зате� нужн� на�начить эти �ценарии, в����ль��вав� ши�ь ин�тру�ентарие� у�равлени� �ру���в�й ��лити��й и вы��лнив �ледующие дей�тви�: 1. Дл� у�равлени� ваши� ����твенны� ����ьютер�� �ледует щел�нуть на �н���е Пуск (S�����, на �ун�те Выполнить (Ru��; на�рать gpedit.msc и нажать Ввод. За� те� �ерейти � �ун�ту 3. 2. Дл� у�равлени� ��лити��й в д��енн�й �ети нужн� �аре�и�трир�вать�� в �а� че�тве д��енн��� ад�ини�трат�ра. Е�ли A���v� D�����o�y не и���ль�ует��, �ледует �а�у�тить, �а� �ыл� у�а�ан� в �редыдуще� �ун�те, gpedit.msc и �ерейти � вы��лнению �ун�та 3. Е�ли и���ль�ует�� A���v� D�����o�y, �ледует �т�рыть Active Directory Users and Groups, вы�рать ��ъе�т Active Directory, �р����треть е�� �в�й�тва, вы�рать в�лад�у Group Policy и д��авить или �треда�тир�вать ��ъе�т �ру���в�й ��лити�и. 3. Те�ерь, �а� ���а�ан� на ри�. 9 .4, нужн� �т�рыть ��н� реда�т�ра �ру���в�й ��лити�и. Дл� д��авлени� �ценариев, вы��лн�е�ых �ри �а�у��е ����ьютера или �ри е�� вх�де в �и�те�у, �ледует �айти в ра�дел Конфигурация компьютера (Compu��� Co���gu����o��Сценарии (запуск/завершение) (S���p�s (S����up� Shu�dow���. Дл� д��авлени� �ценари� вх�да в �и�те�у или вых�да и� нее нужн� �айти в ра�дел Конфигурация Windows (W��dows S�����gs�Сценарии (вход/выход из системы) (S���p�s (Logo��Logo����. П��ле эт��� �ледует дважды щел�нуть на нужн�� �ун�те Автозагрузка (S����up�Завершение работы (Shu�dow��Вход в систему (Logo�� или Выход из системы (Logo���.
444 Глава 9. Использование сценариев для управления компьютерами и сетями Рис. 9 .4 . Редактор групповой политики позволяет назначать сценарии запуска, завершения работы, входа в систему и выхода из нее 4. Зате� �ледует щел�нуть на �н���е Показать файлы (Show F���s�. Будет ���а�ана �а��а, и���ль�уе�а� дл� хранени� �ценариев дл� ���твет�твующей �а�и�и ��� лити�и. Эт� �удет �дна и� �ледующих �а���. Политика Папка Lo��� \WINDOWS\sys��m32\G�oupPo���y\Us��\S���p�s\Logo� \WINDOWS\sys��m32\G�oupPo���y\Us��\S���p�s\Logo�� \WINDOWS\sys��m32\G�oupPo���y\M��h���\S���p�s\S����up \WINDOWS\sys��m32\G�oupPo���y\M��h���\S���p�s\Shu�dow� G�oup \\s��v��\sysvo�\dom�����m�\Po�����s\{...}\Us��\S���p�s\Logo� \\s��v��\sysvo�\dom�����m�\Po�����s\{...}\Us��\S���p�s\Logo�� \\s��v��\sysvo�\dom�����m�\Po�����s\{...}\M��h���\S���p�s\S����up \\s��v��\sysvo�\dom�����m�\Po�����s\{...}\M��h���\S���p�s\Shu�dow� (Дл� авт�н��ных ����ьютер�в и ����ьютер�в ра��чей �ру��ы д��ту�ен т�ль�� вариант, �редла�ае�ый л��альн�й ��лити��й.� 5. Те�ерь нужн� �т�рыть еще �дн� ��н� W��dows �xp�o��� и найти �а��у, ��дер� жащую ваш н�вый, �р�веренный �ценарий. Перетащите е�� в �а��у ��лити�и, не �а�ыва� удерживать �лавишу Ctrl, чт��ы �ыла ���дана ���и�. Те�ерь ��на �xp�o���, е�ли �ни ��льше не нужны, ��жн� �а�рыть.
Создание сценариев входа в систему 445 6. Верните�ь в диал���в�е ��н� �в�й�тв ��лити�и, щел�ните на �н���е Добавить (Add�, а �ате� на �н���е Обзор (��ows��. Вы�ерите �ценарий, ����ир�ванный �ри вы��лнении �редыдуще�� дей�тви�, щел�ните на �н���е Открыть (Op���, а �ате�, дл� ��дтверждени�, на �н���е OK. Те�ерь �ценарий ���вит�� в ��и��е на�наченных �ценариев, �а� ���а�ан� на ри�. 9 .5 . Рис. 9 .5 . В диалоговом окне свойств показывается список назначенных сценариев и всех назначенных параметров 7. М�жн� д��авить не���ль�� �ценариев и дл� вы�траивани� их �� ��р�д�у в����ль��вать�� �н���а�и Вверх (Up� и Вниз (Dow��. Эти �ценарии �удут вы��лн�ть�� �� �череди, �аждый �удет �а�у��ать�� �ра�у ���ле �авершени� �редыдуще��. Дл� удалени� на�начени� �ценари� �ледует щел�нуть на �н���е Удалить (R�mov��. Дл� ��хранени� на�тр�е� �ценариев �ледует щел�нуть на �н���е OK. П� ��в�ду �ценариев, �в��анных � ��лити��й, � ���у ��делить�� не��т�ры�и на�людени��и: y y Св��анные � ��лити��й �ценарии вх�да в �и�те�у �а�у��ают�� ���ле т���, �а� W��dows у�тан�вит в�е �а���ненные �етевые ��д�лючени�. Они запускаются д� �ценари�, на�наченн��� в �р�филе ��ль��вател�, н� �р�це�� вх�да в �и�те�у не ждет �авершени� �ценари�, �в��анн��� � ��лити��й. И���а эт��� �ценарий вх�да в �и�те�у, на�наченный в �р�филе ��ль��вател�, не ��жет �арантир�вать, чт� �ри е�� �а�у��е �ценарий, �в��анный � ��лити��й, уже �авершил �в�ю ра� ��ту, или даже т�, чт� эт�т �ценарий �ри�ту�ил � вы��лнению �в�ей ра��ты. Те� вре�ене�, ���ле инициации в�ех �ценариев �а�у��а ����ьютера W��dows �р�д�лжает вы��лн�ть в�е �р��ра��ы авт��а�у��а, �еречи�ленные в рее�тре и в� в�ех ��щих и индивидуальных �а��ах авт��а�у��а.
446 Глава 9. Использование сценариев для управления компьютерами и сетями y y Сценарии �авершени� ра��ты �а�у��ают�� �еред те�, �а� W��dows �т�лючит �еть, и �р�це�� �авершени� ждет, ���а эт�т �ценарий не �удет вы��лнен, и �р�� д�лжает�� т�ль�� ���ле эт���. y y П�ль��ватель��ий �ценарий вх�да в �и�те�у, �в��анный � ��лити��й «л��аль� ный ����ьютер», не запускается ��д учетн�й �а�и�ью ад�ини�трат�ра, н� �ценарий вых�да и� �и�те�ы �а�у��ает�� дл� лю��й учетн�й �а�и�и. y y Сценарии вх�да в �и�те�у и вых�да и� нее не �а�у��ают��, е�ли ��ль��ватель вых�дит и� �и�те�ы, и���ль�у� �ы�трую ��ену ��ль��вател�. Даже е�ли ра��� чий �т�л не виден, ��ль��ватель ��тает�� �аре�и�трир�ванны� в �и�те�е. (Х�т� на W��dows 7 и V�s�� ��жн� �а�у�тить �ценарии �� эти� ���ыти��, и���ль�у� Планир�вщи� �аданий.� ▼) Использование сценариев выхода из системы и завершения работы — идея хорошая, но нет ни- каких гарантий, что оба они будут работать как запланировано, ведь иногда Windows заверша- ет свою работу аварийно, иногда пропадает питание, а бывает и так, что пользователь выходит из системы с помощью кнопки перезапуска. Можно, конечно, использовать эти сценарии для решения задач очистки и обслуживания, но они не обладают достаточной надежностью для тарификации, отслеживания показателей времени или других применений, где пропущенные запуски могут вносить существенную разницу. Планирование автоматического запуска сценариев Кр��е на�и�ани� �ни� �� W��dows, � ра��таю ��н�ультант�� и ра�ра��тчи��� �р��ра��н��� ��е��ечени� в не���ль�их ����ани�х. Я ��н�л, чт� дл� �р�е�т�в, в ��т�рых и���ль�уют�� ��льшие �а�ы данных, ��ле�н� ���давать �р��ра��ы, ра��тающие �� ра��и�анию, т� е�ть �ценарии, ��т�рые �а�у��ают�� �аждую н�чь дл� ���дани� �тчет�в, архивир�вани� �тарых данных, вы��лнени� �адач ре�ервн��� ���ир�вани� и т. д. Эта иде� не н�ва: и�т�ри� н�чн�й «�а�етн�й» ��ра��т�и и�еет чуть ли не та�ую же �р�т�женн��ть, �а� и и�т�ри� �а�их ����ьютер�в. Авт��атиче���е вы��лнение �ценариев �вл�ет�� �тличны� �������� ��е��е� чени� вы��лнени� важных ��ераций — даже е�ли вы �а�удете их �а�у�тить, �ни �удут вы��лнены в нера��чее вре��, �ра�тиче��и не �еша� вашей ра��те. Зача�тую един�твенны� уд��ны� вре�ене� дл� вы��лнени� та�их �р�цедур, �а� ре�ервн�е ���ир�вание и �чи�т�а �а� данных, �вл�ют�� н�чные ча�ы, ���да ��льшин�тв� ��ль��вателей ���инули ра��чие �е�та, �����ль�у дл� вы��лнени� этих �адач ��ычн� тре�ует��, чт��ы в�е �рил�жени� и файлы данных �ыли �а�рыты. В W��dows и�еет�� Планир�вщи� �аданий, ��ле�чающий авт��атиче��ий �лан�вый �а�у�� �ценариев. В данн�� ра�деле ��йдет речь � не��т�рых д���л� нительных ����ражени�х, �а�ающих�� на�и�ани� �ценариев, �а�у��ае�ых �� ра��и�анию, а ��т�� �удет ���а�ан� и���ль��вание Планир�вщи�а �аданий дл� на�тр�й�и та�их �ценариев.
Планирование автоматического запуска сценариев 447 Написание автоматически работающих сценариев О�ычн� �ценарии, �а�у��ае�ые �� ра��и�анию, ���дают�� �� �дн��у и� двух или �ра�у �� ���и� ��тива�: дл� ��ра��т�и инф�р�ации, ���да ни���� в��ру� нет, или дл� т���, чт��ы ��е��ечить не��х�ди�ую ��ра��т�у �е� не��х�ди���ти ��� �т��нн� ���нить � ней. В лю��� �лучае эта ��ра��т�а н��ит, �а� �равил�, важный хара�тер, и ва� важн� �нать � в��ни�н�вении �а�их�ни�удь �р��ле�, �ешающих ее вы��лнению. При в�ей �ривле�ательн��ти идеи авт��атиче���й ��ра��т�и ��жн� �а�р��т� у�у�тить чт��ни�удь и� виду, �р��л�деть или �а�ыть, чт� ��жет и�еть д�в�льн� ��а�ные ���лед�тви�. Нет ниче�� �трашнее в ����ьютерн�� �ире, че� ��н�ть ���ле �т�а�а ди��а, чт� авт��атиче���е ре�ервир�вание ценных данных �а ���ледний ��д не вел��ь. Ри��у� и�лишне у�лу�ить�� в данный в��р��, � в�е же х�чу ра����треть не� ���ль�� �������в, � ����щью ��т�рых ��жн� �делать �ценарии, ра��тающие �� ра��и�анию, �твет�твенны�и �а ��рученную и� ра��ту. Ключевы�и ��н�ти��и �де�ь �удут ре�и�траци� и увед��лени�. Пр��ле�а � �р��ра��а�и, ра��тающи�и �� ра��и�анию, ���т�ит в т��, чт� �ни не в�аи��дей�твуют � ра��чи� �т�л�� ��ль��вател�, и е�ли �ни �ере�тают ра��� тать, ���а �т��ни�удь эт� �а�етит, ��жет �р�йти не�ал� вре�ени. Я ��н�л, чт� в �аче�тве �ред�хранительн��� �ехани��а ��ле�н� �удет, чт��ы �аждый авт��атиче��ий �р�це�� �р�и�в�дил не�ую инф�р�ацию, на���инающую � �в�е� �уще�тв�вании, чт��ы не���т��вший�� �а�у�� не ��тал�� �е� вни�ани�. Эт� ��жет �ыть �а��й�ни�удь ре�и�траци�нный журнал, �ечатный �тчет или ��� ��щение эле�тр�нн�й ��чты. В �илу ��ределенн�й ��лити�и �аждый авт��атиче��и �а�у��ае�ый �ценарий д�лжен делать �а�и�ь в ре�и�траци�нный журнал � �в�их дей�тви�х, ���а�ыва� ющую дату и вре�� �авершени� в�ех е�� �лючевых �адач, и, ��нечн� же, ре�и� �трир�вать лю�ые �ши��и или нен�р�альные у�л�ви�, � ��т�ры�и �тал�ивает�� �ценарий, на�ри�ер �у�тые файлы вв�да. В �ледующе� уче�н�� �ценарии и�еет�� �р�цедура �� и�ени loggit, ��т�ра� ��жет �ыть и���ль��вана дл� �а�и�и те��т�вых ����щений в ре�и�траци�нный журнал. Эта �р�цедура �т�рывает и �а�рывает файл журнала �ри �ажд�й �а�и�и ����щени�, чт��ы �арантир�вать �а�и�ь инф�р�ации. Е�ли �ценарий �авершает�� аварийн�, ��жн� ��ределить, чт� �р��ле�а в��ни�ла ���ле т���, �а� �ыл� �а�и�ан� ���леднее ����щение. Ра����три� эт�т �ценарий: ' Файл примера sched.vbs dim logfilename, fso logfilename = "C:\scripts\logs\sched.log" set fso = CreateObject("Scripting.FileSystemObject") const ForAppending = 8 loggit "* Работа по расписанию началась " ' . .. сбор входящих данных if input_file_was_empty then ' (это выдуманные инструкции)
448 Глава 9. Использование сценариев для управления компьютерами и сетями loggit "Ошибка: входящий файл был пуст" wscript.quit 0 end if for each item in list_of_things_to_do loggit "начало обработки записи " & item next loggit "* Работа по расписанию успешно завершена" ' ----------------------------------------------- ' loggit – запись сообщения в регистрационный журнал сценария sub loggit (msg) set stream = fso.OpenTextFile(logfilename, ForAppending, True) stream.writeline date & " " & time & ": " & msg stream.close WScript.echo msg ' вывод также и в окно консоли, если за ним наблюдает end sub Ре�и�траци�нные ����щени� д�лжны и���ль��вать ���т��нный ф�р�ат. На� �ри�ер, ����щени� �� �ши��ах д�лжны в�е�да начинать�� �� �тр��и «Оши��а». Ка� �ы ���р� увиди�, эт� ����жет авт��атиче��и идентифицир�вать �р��ле�у � ����щью �ценари� дл� ��дведени� ит���в. Управление объемом регистрируемой информации При �ерв�начальн�й �тлад�е �ценари� ча�т� д��авл�ет�� �н�же�тв� ре�и�три� рующих и �тлад�чных ��ерат�р�в wscript.echo. Я �редла�аю ��хран�ть в�е эти ��ерат�ры даже ���ле т���, �а� �ценарий �ара��тал, и �ревращать их в вы��вы �р�� цедуры ре�и�трации. Чт��ы файл ре�и�траци�нн��� журнала не ра�дувал��, нужн� у�равл�ть ��ъе��� �а�и�ывае�ых ��др��н��тей � ����щью �ере�енн�й «ур�вн� ре�и�трации», ��ределенн�й в начале �ценари�. На�ри�ер, ��жн� ��ределить три инф�р�аци�нных ур�вн�: 0 = н�р�альный, 1 = �редний, 2 = �а��и�альный. Зате� дл� у�равлени� �ажд�й ре�и�траци�нн�й �а�и�ью ��жн� в����ль��вать�� ��ерат�р�� if: dim loglevel loglevel = 0 ' в клю чен ие мин има льн ой регистрации ... if loglevel >= 0 then loggit "* эта информация регистрируется всегда " ... if loglevel >= 1 then loggit "* это регистрируется при уровне 1+" ... if loglevel >= 2 then loggit "* это регистрируется только при уровне 2+" При в��ни�н�вении �р��ле�ы в�е �тлад�чные ��ерат�ры �удут на �е�те. М�ж� н� �удет у�тан�вить дл� �ере�енн�й loglevel �а��и�альн�е �начение и �а�у�тить �ценарий еще ра�, чт��ы ��лучить ��лее ��др��ную инф�р�ацию.
Планирование автоматического запуска сценариев 449 Отправка сообщения в журнал событий Ре�и�трируе�ую инф�р�ацию та�же ��жн� �а�и�ать в журнал ���ытий W��dows. Эт�т журнал д�лжен �ыть �аре�ервир�ван, наверн�е, ��д �ши��и, �����ль�у, е�ли журнал ���ытий на��лн�ть �ал��начи��й инф�р�ацией (����щени��и �� у��еш� н�� вы��лнении ��ераций и дру��й ���ут�твующей инф�р�ацией�, �н начнет тер�ть �в�ю �начи���ть. Ре�и�траци� ���ытий уже ра���атривала�ь вчерне в �лаве 4 «Д��ту� � файла� и рее�тру», н� ��н�вы в�е же �т�ит на���нить. У ��ъе�та WScript.Shell и�еет�� �ет�д LogEvent, ���в�л�ющий ��хран�ть ����щени� � журнале ���ытий. Вы��в �ет�да и�еет �ледующий вид: LogEvent(intType, strMessage [,strTarget]) �де strTarget �вл�ет�� не����ательны� ар�у�ент��, ��т�рый �ред��тавл�ет и�� ����ьютера, в журнал ���ытий ��т�р��� д�лжн� �ыть �т�равлен� ����щение, strMessage �вл�ет�� те��т�� �а�и�ывае���� ����щени�, а intType �вл�ет�� чи�л��, ���а�ывающи� �ерье�н��ть инцидента. Дл� intType и���ль�уют�� �ледующие �начени�. Значение Его смысл 0 У��ех 1 Оши��а 2 Преду�реждение 4 Инф�р�аци� � От�леживае�ый у��ех 16 От�леживае�ый �т�а� Дл� ре�и�траци�нн�й инф�р�ации и� �ценариев ��дх�д�т т�ль�� �ервые четы� ре �начени�. За�и�ь в журнал ���ытий ��жет �ыть вне�ена � ����щью �ледующих ��ерат�р�в: ' Файл примера script0903.vbs set fso = CreateObject("Scripting.FileSystemObject") set shell = CreateObject("WScript.Shell") ... ' с юда помещается программа сценария filename = "c:\scripts\data\input.dat" if not fso.FileExists(filename) then shell.LogEvent 1, "SCHED.VBS – невозможно найти входящий файл " & filename wscript.quit 1 end if ... Инф�р�аци�, �а�и�анна� в журнал ���ытий, ���а�ана на ри�. 9 .6 . Е�ли вы �ред��читаете ���ирать в�ю инф�р�ацию � ���ыти�х на ��н�ретн�� ����ьютере — в����жн�, на т��, чей журнал ���ытий �т�леживает�� ��лее �ри�
450 Глава 9. Использование сценариев для управления компьютерами и сетями �тальн�, че� журнал т��� ����ьютера, на ��т�р�� �а�у��ает�� ра��тающий �� ра��и�анию �ценарий, — т� в �аче�тве третье�� ар�у�ента �ет�да LogEvent ��жн� д��авить и�� ����ьютера. Рис. 9 .6 . Метод WshShell.LogEvent записывает произвольную строку в журнал приложений журнала событий Windows Выдача распечаток и сообщений Х�т� эт� и не �удет �д��рен� �артией «�еленых», ре�и�трируе�а� инф�р�аци� ��� жет �ыть выведена на �ринтер, �де фи�иче���е наличие �траницы �тчета �ривлечет вни�ание � лю�ы� �р��ле�а�, � ��т�рых ��жет ����щить �ценарий. Н� �� �тн�шению � ��ружающей �реде �равильнее �удет �ривлечь вни�ание � инф�р�ации � �лан�в� вы��лн�е��� �адании �уте� �т�рав�и ре�ультат�в, ��� �ещенных в ре�и�траци�нный журнал, и ����щений �� �ши��ах �� эле�тр�нн�й ��чте. О�ъе�ты �т�рав�и ����щений и� �а�ета CDO �ыли ра����трены в �лаве 6 «О�ъе�ты ����щений и фа���в», ��эт��у �де�ь � не �уду ��вт�р�ть��. Я �редла�аю ���ле �а�у��а �ценари�, ра��тающе�� �� ра��и�анию, �т�равл�ть е�� вых�дную инф�р�ацию или ре�и�траци�нный журнал ад�ини�трат�ру или дру���у �твет� �твенн��у ��ециали�ту. От�равить ре�и�траци�нный журнал �� эле�тр�нн�й ��чте ��жн� в ��нце �це� нари�. Н� е�ли �ценарий не д�ра��тает д� ��нца, ����щение эле�тр�нн�й ��чты �т�равлен� не �удет, и ��лучатель д�лжен �удет �а�етить �т�ут�твие ежедневн��� (еженедельн���, еже�е��чн���� увед��лени�, чт��ы ����нать нен�р�альн�е ра�� витие ���ытий. Лучше ��ланир�вать ра��ту �тдельн��� �ценарн��� �адани� дл� ра��ечат�и или �т�рав�и �� эле�тр�нн�й ��чте ре�ультат�в и� �редыдуще�� �це� нари� (или �ценариев�. Та�и� ��ра��� �ведени� �удут выданы вне �ави�и���ти �т
Планирование автоматического запуска сценариев 451 т���, �авершили или нет �в�ю ра��ту те �ценарии, ��т�рые �ани�али�ь ��ра��т��й инф�р�ации. Е�ли вы и�енн� та� и ���ту�ите, ���леднее, чт� д�лжен �удет �делать �ценарий, �ани�ающий�� ра��ечат��й или �т�рав��й эле�тр�нн�й ��чты, — эт� �аархиви� р�вать файл ре�и�траци�нн��� журнала, а �ате� ���дать н�вый файл, в ��т�р�� ��в�рит�� чт��ни�удь вр�де «Сценарий, ра��тающий �� ра��и�анию, не �а�ущен». Е�ли �автрашн�� �а�ланир�ванна� �адача не �а�у�тит��, �ри �ледующе� �а�у��е �ценари� �н ра��ечатает или �т�равит ва� ����щение «Сценарий, ра��тающий �� ра��и�анию, не �а�ущен». Получение итоговых результатов К��да �аждую н�чь д�лжны вы��лн�ть�� �ра�у не���ль�� �а�ланир�ванных �ада� ний, или �ценарии д�лжны �ыть �а�ущены �ра�у на не���ль�их ра�ных �ерверах, и�еет ��ы�л �а�у�тить �дн� �а�лючительн�е �а�ланир�ванн�е �адание дл� ��две� дени� ит���в н�чн�й ��ра��т�и ���ле т���, �а� в�е ��тальные �ценарии �авершат �в�ю ра��ту. Дл� эт��� ��над��ит�� т�ль�� лишь и�влечь �р��т�е увед��ление �т у��ехе или неудаче вы��лнени� �ажд��� �р�це��а. Т��да, е�ли в ит��ах н�чн�й ра��ты �удут �р��у��и или ����щени� �� �ши��ах, ад�ини�траци� �удет �нать � в��ни�шей �р��ле�е. Лучше в�е�� �т�равить та��й �тчет �� эле�тр�нн�й ��чте, �����ль�у �ри эт�� э��н��ит�� �у�а�а, и �н не �атер�ет�� в недрах и�лишне �а�руженн��� �ринтера: ' Файл примера summary.vbs option explicit dim fso, summaryfile, recipient, summary, sum, msg set fso = CreateObject("Scripting.FileSystemObject") const ForAppending = 8 summaryfile = "c:\scripts\logs\summary.log" recipient = " Administrator@quarterbyte.com" summary ="" ' ито гов ый текст собирается в этой строке ' сбор итогов работы всех запланированных на ночь сценариев summarize "c:\scripts\logs\sched.log" summarize "c:\scripts\logs\cleanup.log" summarize "c:\scripts\logs\backup.log" ' добавление заключительной строки summary = summary & string(64, "- ") & vbCRLF ' с оздание нового файла подведения итогов set sum = fso.CreateTextFile(summaryfile, True) sum.Write summary sum.Close ' з ате м о тправка файла с итогами по эл.почте, используя объект, разработанный ' в приложении Appendix F set msg = CreateObject("ScriptMail.Message") msg.To = recipient msg.ScriptName = "summarize"
452 Глава 9. Использование сценариев для управления компьютерами и сетями msg.Text = summary msg.Send ' --------------------------------------------------- ' s umm arize – запись последней строки и всех ошибок из 'filename' sub summarize (filename) dim stream, outstream, line, lastline ' При первом вызове установка метки даты и времени if summary = "" then summary = "Итоги выполнения, " & date & " " & time & vbCRLF & vbCRLF end if ' указание изучаемого файла summary = summary & filename & ":" & vbCRLF ' есл и файл отсутствует, то все, что мы можем сказать if not fso.FileExists(filename) then summary = summary & " ФАЙЛ НЕ НАЙДЕН!" & vbCRLF & vbCRLF exit sub end if set stream = fso.OpenTextFile(filename) ' мы не хот им каждую ночь включать в итоги одну и ту же информацию, ' поэ тому прикрепляем содержимое файла журнала к концу файла с таким же именем ' + ".old", и удаляем исходный журнал, когда все готово. set outstream = fso.OpenTextFile(filename & ".old", ForAppending, True) ' ска нирование файла журнала, сбор ошибок и сохранение последней строки lastline = "(empty file)" do while not stream.AtEndOfStream line = stream.ReadLine ' п олучение строки из файла журнала outstream.WriteLine line ' добавление к копии .OLD if instr(ucase(line), "ОШИБКА") > 0 then summary = summary & " " & line & vbCRLF elseif len(line) > 0 then lastline = line end if loop stream.close outstream.close ' зап ись по следней строки, это должна быть строка "завершено успешно" summary = summary & " " & lastline & vbCRLF & vbCRLF ' журнал скопирован в .OLD, поэтому удаление исходного журнала fso.DeleteFile(filename) end sub Эт�т �ценарий �т�равл�ет ���леднюю �р��у и� �ажд��� �еречи�ленн��� фай� ла журнала, �ред��ла�а�, чт� в ���ледней �тр��е ��держит�� те��т, ��х�жий на:
Планирование автоматического запуска сценариев 453 «Сценарий у��ешн� �авершен». Е�ли эта �тр��а ���вл�ет�� в ��чт�в�� ����щении, �тан�вит�� ��н�тн�, чт� �ценарий у��ешн� �авершил ра��ту. С���щение та�же в�лючает лю�ые журнальные �а�и�и �� �л�в�� «�ши��а». Та�же эт�т �ценарий ��� хран�ет �аре�и�трир�ванные данные и удал�ет �аждый файл журнала, ��эт��у �н ��жет ��ределить, �а�у��ал�� ���твет�твующий �ценарий или нет. От�ут�твующий файл журнала �видетель�твует � в��ни�н�вении �ерье�н�й �р��ле�ы. С���щение эле�тр�нн�й ��чты, ��енерир�ванн�е эти� �ценарие�, ��жет и�еть �ледующий вид: Итоги выполнения, 15.04.2011 5:45:04 c:\scripts\logs\sched.log: 15.04.2011 2:12:02: * Sched успешно завершен c:\scripts\logs\cleanup.log: 15.04.2011 3:45:02: ОШИБКА: не могу найти папку \temp\database 15.04.2011 3:47:35: * Cleanup успешно завершен c:\scripts\logs\backup.log: ФАЙЛ НЕ НАЙДЕН! --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- - Эт�т �ценарий ��дведени� ит���в д�лжен вы��лн�ть�� �начительн� ���же т��� �р��а, � ��т�р��у д�лжна �авершить�� ра��та лю���� �а�ланир�ванн��� �ценари�, н�, е�ли эт� в����жн�, д� т���, �а� ад�ини�трат�р �ри�удет на ра��ту. При�тн� видеть �ажд�е утр�, чт� «в�е у��ешн� �тра��тал�». Та�а� �и�те�а �т�рав�и ежедневн��� или еженедельн��� �тчета ��жет �ы�рать ��льшую р�ль в ��е��ечении �равильн�й ра��ты авт��ати�ир�ванн��� �а�етн��� �р�це��а даже �ри �т�ут�твии внешних види�ых �ри�на��в. Планирование выполнения сценариев с помощью Планировщика заданий Те�ерь давайте �����три�, �а� ��ланир�вать �а�у�� �ценариев дл� авт��атиче���й ��ра��т�и. Я ���ираю�ь ��и�ать �р�це�� и���ль��вани� Планир�вщи�а �аданий. (Е�ли вы ���ните, �тарый �ехани�� ���андн�й �тр��и и� W��dows NT та�же д�� �ту�ен, н� �н не на�т�ль�� �и���, �а� Планир�вщи� �аданий, ��эт��у �де�ь �ы е�� ра���атривать не �уде�.� Дл� �а�у��а Планир�вщи�а �аданий нужн� щел�нуть на �н���е Пуск (S�����, вы�рать Все программы (A�� P�og��ms�Стандартные (A���sso���s�Служебные (Sys��m Too�s�Планировщик заданий (S�h�du��d T�sks�. Зате� на W��dows 7 и V�s�� вы�рать в лев�й �анели �ун�т Библиотека планировщика заданий (T�sk S�h�du��� L�b���y�. В ��не Планир�вщи�а �аданий �удут выведены в�е ранее ��ланир�ван� ные �р��ра��ы, вре�� �ледующе�� �а�у��а, вре�� �р�шл��� �а�у��а и ре�ультат ���ледне�� �а�у��а. (Та� ���а�ан�, �авершила�ь ли �р��ра��а � н�р�альны� �тату��� вых�да «0» или вернула ненулев�й �тату� �ши��и.� Дл� �р����тра в�ей �а�и�анн�й инф�р�ации ���т��ни� ��жет ��тре��вать�� ��ри��нтальна� �р�� �рут�а �траницы.
454 Глава 9. Использование сценариев для управления компьютерами и сетями Планирование запуска сценария Дл� �ланир�вани� авт��атиче����� вы��лнени� �ценари� на W��dows 7 или V�s�� нужн� вы��лнить �ледующие дей�тви�: 1. В ра���л�женн�� ��рава �т�л�це Действия (A���o�s� нужн� вы�рать �ун�т Соз- дать простую задачу (C����� ��s�� T�sk�, вве�ти и�� �адачи (на�ри�ер, «Н�чна� �а�етна� ��ра��т�а»� и щел�нуть на �н���е Далее (N�x��. 2. Вы�рать интервал, � ��т�ры� д�лжен �а�у��ать�� �ценарий, — Ежедневно (D���y�, Еженедельно (W��k�y� или Ежемесячно (Mo��h�y�. Е�ли нужн� �а�у��ать �ценарий ежедневн�, н� �� ��н�ретны� дн�� недели, вы�ерите Еженедельно (W��k�y�. Е�ли нужн� ��лее �л�жн�е �ланир�вание �� вре�ени, т� ���же ��жн� �удет в�е эт� ��д��рре�тир�вать. (Кр��е т���, ��жн� вы�рать �а�у�� �ценари� ���ле ���твет�твующей �а�и�и в журнал ���ытий, н� �де�ь эт� ра���атривать�� не �удет.� Дл� �р�д�лжени� нужн� щел�нуть на �н���е Далее (N�x��. 3. Вы�рать вре�� �а�у��а �ценари�, �а� ���а�ан� на ри�. 9.7. М�жн� та�же вы� �рать дату начала и ча�т�ту ��вт�рений. 4. Вы�рать Запустить программу (S���� � P�og��m� и щел�нуть на �н���е Далее (N�x��. Рис. 9 .7 . Мастер планировщика заданий позволяет выбрать время начала и дни запуска сценария 5. Щел�нуть на �н���е Обзор (��ows��, а �ате� найти и вы�рать �ценарий, ��т�рый нужн� �а�у�тить; �ате� щел�нуть на �н���е Открыть (Op���. 6. У�тан�вить �ур��р �еред и�ене� файла в ��ле Программа или сценарий (P�og��m� S���p�� и на�рать cscript //B, ���тавив ��ле эт��� �р��ел. Нужн� на�рать �р�� �ые �лэши (//�, а не ��ратные (\\� и не �а�ыть ���тавить �р��ел ���ле �у�вы B. За�и�ь д�лжна и�еть �ри�ерн� �ледующий вид: cscript //B c:\scripts\nightrun.vbs
Планирование автоматического запуска сценариев 455 н� � �уте� и и�ене� файла ваше�� �ценари�. Д��авьте лю�ые ар�у�енты ��� �андн�й �тр��и, ��т�рые нужн� �ередать �ценарию. Кр��е т���, е�ли нужн� чт��ы �а��а, �� у��лчанию и���ль�уе�а� �ценарие�, �тличала�ь �т т�й, в ��т�р�й �н �а� нах�дит��, нужн� вве�ти желае��е �утев�е и�� �а��и �� у��лчанию. П��ле эт��� нужн� щел�нуть на �н���е Далее (N�x��. 7. Планир�вщи� �аданий ��р��ит, ���ираете�ь ли вы �а�у��ать �s���p� � д���л� нительны�и ар�у�ента�и. Нужн� щел�нуть на �н���е Да (Y�s�. �. У�тан�вите флаж�� Открыть окно «Свойства» после нажатия кнопки «Готово» (Op�� P�op�����s D���og Fo� Th�s T�sk Wh�� I C���k F���sh�; �ате� щел�ните на �н���е Готово (F���sh�. 9. На в�лад�е Общие (G������� в ��ла�ти Параметры безопасности (S��u���y Op� ��o�s� вы�ерите Выполнять вне зависимости от регистрации пользователя (Ru� Wh��h�� Th� Us�� Is Logg�d O� O� No��. Е�ли �ценарий тре�ует ра�ширенных �рав ад�ини�трат�ра, вы�ерите Вы- полнить с наивысшими правами (Ru� W��h H�gh�s� P��v���g�s�. Зате� е�ли ваша учетна� �а�и�ь ��ль��вател� не �вл�ет�� учетн�й �а�и�ью ад�ини�трат�ра или е�ли нужн� и��енить учетную �а�и�ь ��ль��вател� �� �а�и��т� ины� �ричина�, щел�ните на �н���е Изменить (Ch��g� Us�� O� G�oup� и вы�ерите дру��е и�� ��ль��вател�. 10. Е�ли �ценарий не нуждает�� в д��ту�е � ��щи� файла� и �а��а� вашей �ети, у�тан�вите флаж�� Не сохранять пароль (Do No� S�o�� P�sswo�d�. Т��да, е�ли �удет и��енен �ар�ль вашей ����твенн�й учетн�й �а�и�и, �а�ланир�ванный �а�у�� �ценари� в�е равн� ���т�ит��. Н� е�ли �ценарию ��над��ит�� д��ту� � �етевы� ре�ур�а�, флаж�� Не сохранять пароль (Do No� S�o�� P�sswo�d� у�танавливать не нужн�. В эт�� �лучае, е�ли ���же �ар�ль вашей учетн�й �а�и�и �удет ��енен, нужн� не �а� �ыть вернуть�� �юда и и��енить �ар�ль, �в��анный � эти� �а�ланир�ванны� �адание�, иначе �н� не �а�у�тит��. Ра��и�ание �а�у��а �адани� ��жн� и��енить в� в�лад�е Триггеры (T��gg��s�. Зде�ь ��жн� у�а�ать дру�ие ти�ы ���ытий, ��т�рые ���ут �а�тавить W��dows �а�у�тить �ценарий. На в�лад�ах Условия (Co�d���o�s� и Параметры (S�����g� и�еют�� дру�ие на�тр�й�и, ��т�рые ��жн� и��лед�вать. И��ените нужные на�тр�й�и и щел�ните на �н���е OK, чт��ы �ни ��хра� нили�ь. 11. Е�ли флаж�� Не сохранять пароль (Do Not Store Password) не �ыл у�тан�влен или е�ли �ыла вы�рана учетна� �а�и�ь, �тлична� �т вашей ����твенн�й, W��dows �а�р��ит �ар�ль. Введите �ар�ль и щел�ните на �н���е OK. Чт��ы ��ланир�вать �а�у�� �ценари� на W��dows XP, нужн� вы��лнить �леду� ющие, не���ль�� �тличающие�� дей�тви�: 1. Дважды щел�ните на �нач�е Добавить задание (Add S�h�du��d T�sk�. Зате� щел�ните на �н���е Далее (N�x�� дл� �а�у��а �а�тера Планир�вщи�а �аданий.
456 Глава 9. Использование сценариев для управления компьютерами и сетями 2. Щел�ните на �н���е Обзор (��ows�� и найдите файл �ценари�. Вы�ерите файл и щел�ните на �н���е Открыть (Op���. 3. Вы�ерите интервал, � ��т�ры� д�лжен �а�у��ать�� �ценарий, — Ежедневно (D���y�, Еженедельно (W��k�y� или Ежемесячно (Mo��h�y�. Е�ли нужн� ��лее �л�жн�е ра��и�ание, ���же е�� ��жн� �удет ���рре�тир�вать. П��ле вы��ра интервала щел�ните на �н���е Далее (N�x��. 4. Вы�ерите вре�� начала дл� �ценари�, �а� ���а�ан� на ри�. 9 .7 . М�жн� та�же вы�рать �тарт�вую дату и ча�т�ту ��вт�рени�: Каждый день (�v��y D�y�, По дням недели (W��kd�ys� или Каждые n дней (�v��y � D�ys�. Щел�ните на �н���е Далее (N�x��. 5. Введите и�� ��ль��вател� и �ар�ль, ��д ��т�ры�и �удет �а�у��ать�� �ценарий. О�ду�айте в�е эт� �а� �ледует, и���ль�уйте учетную �а�и�ь � ���твет�твую� щи�и �ривиле�и��и на чтение и �а�и�ь лю�ых не��х�ди�ых файл�в и на вы� ��лнение не��х�ди�ых �и�те�ных ��ераций, н� не ��лее т���. Не и���ль�уйте учетную �а�и�ь ад�ини�трат�ра, ���а ва� дей�твительн� не ��над���т�� в�е ее в����жн��ти. П��ле вв�да и�ени и �ар�л� щел�ните на �н���е Далее (N�x��. 6. Щел�ните на �н���е Готово (F���sh�. 7. Сценарий ���вит�� в �еречне ��ланир�ванных �аданий. Дважды щел�ните на е�� �а�и�и, чт��ы ���вила�ь �траница �в�й�тв. Вы�ерите �траницу Задание (T�sk� и �треда�тируйте ���андную �тр��у Запуск (Ru��. И�начальн� в ней ��держит�� ��лн�е �утев�е и�� файла �ценари�. Перед эти� и�ене�, �а� уже ранее ра���атривал��ь, �ледует ���тавить cscript //B. Нужн� на�рать �р��ые �лэши (//�, а не ��ратные (\\� и не �а�ыть ���тавить �р��ел ���ле �у�вы B. �. Щел�ните на �н���е OK, чт��ы �авершить �р�це�� �ланир�вани�. ▼▼ При вводе сценариев в Планировщик заданий всегда используйте полную командную строку cscript //B диск:\путь\файл_сценария аргументы.... Cscript заставляет использовать командную строку, а не оконную версию WSH, а //B не позволяет cscript выводить окно сообщения или другое диалоговое окно, которое в противном случае останавливает работу сценария. Если сценарий запущен планировщиком без ключа //B, рядом может не оказаться никого, кто бы мог щелкнуть на кнопке OK. ▼) Если подошел срок выполнения задания, а ваш компьютер не включен, оно запускается при следующем запуске вашего компьютера. Проверка запланированного выполнения сценария Дл� �р�вер�и �а�ланир�ванн��� �адани� не нужн� д�жидать�� �ледующе�� вре�е� ни �а�у��а �� ра��и�анию. Нужн� �р��т� вы�рать �адание в �еречне, �ате� в ра�� ��л�женн�� ��рава �т�л�це Действие (A���o�s� вы�рать �ун�т Выполнить (Ru��. П�т�� нужн� не�н��� ��д�ждать и нажать �лавишу F5, чт��ы ��н�вить ��и��� ���т��ний. П����трите на �т�л�ец Время прошлого запуска (L�s� Ru� T�m�� и на �т�л�ец Результат последнего запуска (L�s� Ru� R�su���, чт��ы увидеть, на���ль��
Планирование автоматического запуска сценариев 457 у��ешн� �ыл вы��лнен �ценарий. (Е�ли ваш �ценарий ���дает ре�и�траци�нный журнал или дру��й диа�н��тиче��ий выв�д, �р�верьте е��.� Е�ли �а�и�ь ���т��ни� и��енила�ь на «Не ���у �а�у�тить» («Cou�d �o� s����»�, вы, наверн�е, ввели неверный �ар�ль или неверный �уть � файлу �ценари�. Е�ли в �утев�� и�ени и�еют�� �р��елы, �н� д�лжн� �ыть �а�лючен� в �авыч�и. Вы ��жете вернуть�� в диал���в�е ��н� Свойства (P�op�����s� и вне�ти и��е� нени�: y y На в�лад�е Действия (T�sk� ��жн� и��енить и�� файла �ценари� и учетную �а�и�ь ��ль��вател� и �ар�ль, ��д ��т�ры�и �а�у��ает�� �ценарий. М�жн� та�же �н�ть флаж�� Включено (���b��d� дл� вре�енн�й �ри��тан�в�и �удуще�� �а�у��а �е� удалени� �а�и�и �ланир�вщи�а. y y На в�лад�е Параметры (S�����gs� ��жн� вы�рать наи��льшее вре�� вы��лне� ние �ценари�, ���ле ��т�р��� е�� вы��лнение �ре�ращает��. П� у��лчанию у�танавливает�� 72 ча�а, н� ��льшин�тву �ценариев тре�ует�� на�н��� �еньше вре�ени. Ра�у�еет��, ���ле вне�ени� лю�ых и��енений нужн� �ан�в� вве�ти �ар�ль, и���ль�уе�ый дл� �а�у��а данн��� �ценари�. ▼o Убедитесь в том, что файлы сценариев, созданные для запуска с помощью планировщика, могут быть отредактированы только теми пользователями, чья учетная запись используется для запуска сценария. Это может быть очень серьезной прорехой в системе безопасности. Если сценарий запускается с правами администратора, но файл может редактироваться другими пользователями, кто-нибудь может изменить сценарий. Убедитесь в том, что сценарии, выполняемые по расписанию, хранятся только на диске, име- ющем формат NTFS. Также периодически просматривайте права доступа к файлу, обеспечи- вающие его безопасность, чтобы гарантировать, что в списке имеющих права на запись или изменение файла фигурируют только соответствующие пользователи.
Среда окружения командной строки II
Командная строка CMD В эт�й �лаве ваше�у вни�анию �удет �ред�тавлена �реда ���андн�й �тр��и. y y Д��а�ана ��ле�н��ть и ��щн��ть �р��ра�� ���андн�й �тр��и. y y Вы ���на���ите�ь � �н�же�тв�� у��вершен�тв�ваний, ���вивших�� в ���л�ч�е CMD �� �равнению � COMMAND.COM. y y Зде�ь вы увидите, чт� в�тр�енные ���анды, �ред��тавл�е�ые CMD, вы��лн�ют �н�же�тв� файл�вых и у�равленче��их фун�ций. Окно командной строки Первые 9 �лав данн�й �ни�и �ыли ���в�щены ра��рытию д��т�ин�тв �р��ра�� �ир�вани� в W��dows S���p� Hos� (WSH� и �р�в���лашению е�� �ред�тв��, �ри� ��дны� дл� решени� в�ех �адач авт��ати�ации W��dows. Н� те�ерь на�тал� вре�� ���нать��, чт� �л�в� «в�ех» в данн�� �лучае — не �а��е ��дх�д�щее, и � ���ажу ва�, ��че�у. Х�т� в ���леднее де��тилетие ��льшин�тв� хвале�ных фанфар в ��вершен� �тв�вании �р��ра��ир�вани� д��тал��ь ���нны� �рил�жени�� � ра��рываю� щи�и�� �еню, диал���вы�и ��на�и и в�е�и дру�и�и интере�ны�и атри�ута�и, �тар���дна� ���андна� �тр��а �е� лишне�� шу�а та�же �тан�вила�ь в�е ��лее ��вершенн�й и у�ел�й. Е�ли щел�нуть на �н���е Пуск (S�����Все программы (A�� P�og��ms�Стандартные (A���sso���s�Командная строка (Comm��d P�omp��, ��� �вит�� ��н�, �чень ��х�жее на т�, ��т�р�е в �р�шлые вре�ена ��жн� �ыл� увидеть в �ри�инальн�й M���oso�� MS�DOS. М�жн� на�рать �тарые ���анды, на�ри�ер dir и cls, и W��dows �е�р���тн� выведет ��и��� файл�в и �чи�тит э�ран. Н� �а� �ы эт� ни вы�л�дел� ��х�жи� на ���андную �тр��у MS�DOS, ��д �а� ��т�� эт�й �ашины ��в�е� дру��й дви�атель. Н�вые ���анды, не��т�рые ве�ь�а эле�антные �рие�ы и���ль��вани� ��ль��ватель����� интерфей�а и д��ту� � не��� т�ры� наи��лее ��щны� �ред�тва� у�равлени� и на�тр�й�и W��dows �ревращают �реду ���андн�й �тр��и в эффе�тивн�е ра��чее �е�т� дл� ра��ты � �р��ра��а�и и файла�и. На�ри�ер, �де�ь д��ту�н� ��льш�е ��личе�тв� утилит дл� ���ир�вани� файл�в �� �ети и чере� Интернет, диа�н��ти�и, ��нфи�урир�вани� и у�равлени�. Мн��ие 10
Окно командной строки 461 �адачи W��dows, �в��анные � ���луживание�, ���ут �ыть вы��лнены и� ���андн�й �тр��и и �� �н��и� ин�тру�ента� дл� �ре��ра��вани� файл�в и �рафи�и и�еет�� д��ту� и� ���андн�й �тр��и. Я�ы� ���дани� �ценариев на ��н�ве �а�етных файл�в ���в�л�ет ���давать �в�и ����твенные ин�тру�енты ���андн�й �тр��и. Н� эта те�а �удет ра��рыта в не���ль�их �ледующих �лавах, а те�уща� �лава �удет ���в�щена �а��й �реде ���андн�й �тр��и. Сравнение CMD и COMMAND Х�чу �ра�у �реду�редить, чт� �ла��дар� у�равлению �р��ра���й ��д на�вание� CMD.EXE ��н� ���андн�й �тр��и уже ��в�е� не та��е, �а�и� �н� �ыл� в д�и�т�ри� че��ие вре�ена MS�DOS. Пр��ра��а CMD в�ервые ���вила�ь в W��dows NT. Она �вл�ет�� ���андн�й ���л�ч��й в�ех ��вре�енных вер�ий W��dows. В����жн�, вы в����ните, чт� �ри�инальна� ���андна� �р��ра��а MS�DOS на�ывала�ь COMMAND. COM. Б�льшин�тв� людей у�нал� �� эт�� �ла��дар� ��л�нн��ти DOS � выв�ду на э�ран ����щени� «C���o� �o�d COMMAND.COM» («Нев����жн� �а�ру�ить COMMAND.COM»� и ��тан�в�е ра��ты � ре��и� �ву���. Х�р�ш�, чт� те�ерь эт��� не �лучает��. Та�ие �р��ра��ы, �а� CMD и COMMAND, на�ывают�� оболочками, ��т��у чт� �ни �вл�ют�� ��ра�ление� ��ераци�нн�й �и�те�ы. Их �адача �а�лючает�� в ���редниче�тве �ежду ��ль��вателе� и те�и �р��ра��а�и, ��т�рые �н х�чет �а�у�тить. О��л�ч�и �ыли един�твенны� ��ль��ватель��и� интерфей���, д��ту�� ны� на ранних ��ераци�нных �и�те�ах �ини� и �и�р�����ьютер�в, на�ри�ер на U��x, Mu����s, RSX�11M и CP�M. Фа�тиче��и выражение графический интерфейс пользователя ���вил��ь �а� ������ ра����навани� н�в��� ����лени� �рафиче��их интерфей��в, в��ни�ших и� �тарых ���л�че� ���андн�й �тр��и. Са�ые �ервые ���л�ч�и ���ли ра�ве чт� �а�р��ить и�� �р��ра��ы, а �ате� найти эту �р��ра��у и �а�у�тить ее. Люди у�тали �т ���т��нн��� на��ра �дних и тех же ���анд, ��эт��у ра�ра��тчи�и ��ераци�нных �и�те� �ред��тавили ���� ���, ���в�л�ющий ���л�ч�а� читать ��и��� ���анд и� файла, а �ате� �а�у��ать эти ���анды �� �череди. С� вре�ене� ���л�ч�и �а�и �� �е�е �тали не��льши�и ��ы�а�и �р��ра��ир�вани�, и р�дили�ь сценарии оболочек и пакетные файлы. Эти ��нце�ции ��лучили ра�витие в ��ераци�нн�й �и�те�е U��x в дале�ие 1970�е ��ды, и в ит��е �ере��чевали в MS�DOS, х�т� и в �ильн� у�р�щенн�� виде. К��андна� �тр��а MS�DOS и ее ��ы� �а�етных файл�в и�ели ��раниченные в����жн��ти, �в�ю ��ецифи�у и не �тличали�ь �����й �и����тью. Х�т� ���л�ч�а CMD.EXE и ее ��ы� �а�етных файл�в ����режне�у ��ре�енена на�лед�тв�� COMMAND.COM, не��т�рые ве�ь�а важные н�вые �в�й�тва �ревратили ���андную �тр��у в друже�твенн�е ра��чее �е�т�. Личн� � и���ль�ую ���андную �тр��у ежедневн�, и ду�аю, чт� вы, та� же �а� и �, ���читаете ее �т�ль же ��ле�ны� �ред�тв��. В данн�й �лаве вни�ание �удет �ф��у�ир�ван� на тех а��е�тах CMD, ��т�рые ���ут �ыть не���ред�твенн� �ри�енены в ��не ���андн�й �тр��и. В�е, чт� на� �и�ан� в эт�й �лаве, �ри�ени�� та�же и � �а�етны� файла� (��лее �ред�етный ра���в�р � них ��йдет в �ледующей �лаве�.
462 Глава 10. Командная строка CMD ▼▼ На веб-сайте Microsoft TechNet есть хорошая статья о среде командной строки. Ее оригинал был опубликован в Windows NT Shell Scripting. Хотя в ней отсутствуют некоторые улучшения, до- бавленные между NT 4 и текущими версиями Windows, материал изложен довольно подробно и понятно. Ее можно найти, проведя поиск на веб-сайте www.microsoft.com по ключевой фразе «The Windows NT Command Shell», взятой в кавычки. Запуск CMD К��да �т�рывает�� ��н� ���андн�й �тр��и, W��dows �а�у��ает �р��ра��у CMD. EXE. О��л�ч�а CMD �а�рашивает ���анды и вы��лн�ет их д� тех ��р, ���а ��н� не �удет �а�рыт� или ���а не �удет введена ���анда exit. От�рыть ��н� ���андн�й �тр��и ��жн� не���ль�и�и ������а�и: y y Щел�нуть на �н���е Пуск (S�����, вы�рать Все программы (A�� P�og��ms�Служеб- ные (A���sso���s�Командная строка (Comm��d P�omp��. y y В W��dows 7 ��жн� �т�рыть ��н� ���андн�й �тр��и, �а� т�ль�� чт� �ыл� ��и� �ан�, щел�нуть �рав�й �н����й �ыши на е�� �нач�е в �анели �адач и вы�рать �ун�т Закрепить программу в панели задач (P�� Th�s P�og��m �o T�skb���. Те�ерь �нач�� �удет в�е�да д��ту�ен. y y Щел�нуть на �н���е Пуск (S����� и на�рать в ��ле ��и��а cmd. К��да ���вит�� ре�ультат cmd.exe, нажать Ввод или щел�нуть на ре�ультате. y y В W��dows XP (или чере� �еню Пуск, е�ли �н� на�тр�ен� на ���а� ���анды Выполнить (Ru��� щел�нуть на �н���е Пуск (S�����, щел�нуть на �ун�те �еню Выполнить (Ru��, на�рать cmd и нажать Ввод. М�жн� и��енить �в�й�тва лю���� и� этих �рлы��в, �адав и�х�дный ра��чий �атал��. П� у��лчанию в е�� р�ли �удет вы�ту�ать �а��а �р�фил� вашей учетн�й �а�и�и. ▼▼ Можно запустить окно командной строки из любого окна Windows Explorer, с заранее вы- бранной папкой в качестве текущего каталога. Этот трюк полезно запомнить. В Windows 7 и Vista нужно, удерживая нажатой клавишу Shift, щелкнуть правой кнопкой на имени папки в окне Windows Explorer и выбрать пункт Открыть окно команд (Open Command Window Here). В Windows XP найдите на веб-сайте www.microsoft.com утилиту «Open Command Open Here Power Toy» и установите ее. Тогда пункт Открыть окно команд (Open Command Window Here) появится в контекстном меню, вызываемом правой кнопкой мыши на любой папке без необхо- димости удерживать нажатой кнопку Shift. Е�ли нужн�, д���лнительн�е ��н� ���андн�й �тр��и ��жн� та�же �т�рыть и� �а��й ���андн�й �тр��и или и� �а�етных файл�в. Чт��ы �т�рыть н�в�е ��н� и� ���андн�й �тр��и, нужн� на�рать start cmd. И��енить ��ведение ���л�ч�и CMD ��жн� �уте� у�а�ани� д���лнительных ар�у�ент�в ���андн�й �тр��и, ��т�рые в���ре �удут ра����трены. ▼▼ Открытие дополнительного окна командной строки может пригодиться, когда нужно выпол- нить административные задачи, требующие особых привилегий. Этот вопрос будет рассмотрен в следующем разделе.
Запуск CMD 463 Открытие окна командной строки с правами администратора П�в�едневную ра��ту лучше вы��лн�ть, в�йд� в �и�те�у ��д ��ль��ватель���й учетн�й �а�и�ью, не дающей ��лных �рав ад�ини�трат�ра, — т��да не��д��нтр�ль� ные или вред�н��ные �р��ра��ы не ����ут �а���т��тельн� д��рать�� д� W��dows. Х�т� не��х�ди���ть и���ль��вани� �ун�та �еню Сменить пользователя (Sw���h Us��s� �ри �ажд�й не��х�ди���ти вы��лнить �а�ие�ни�удь у�равленче��ие �адачи ��жет �тать ��у��й. На W��dows 7 и V�s�� Контроль учетных записей пользователей (Us�� A��ou�� Co���o�, UAC� не���ль�� у�р�щает эту �адачу, н� в �ире ���андн�й �тр��и в�е ра��тает не���ль�� иначе. В W��dows 7 и V�s�� дл� �р��ра�� ���андн�й �тр��и нель�� вы�вать диал���в�е ��н� UAC. Нет та�же и утилиты ���андн�й �тр��и, ��т�ра� ���ла �ы ��дн�ть ур�� вень �ривиле�ий �р��ра��ы, �а�у��ае��й и� ���андн�й �тр��и, �� �райней �ере, та���� �ред�тва нет �реди тех, ��т�рые ���тавл�ют�� в�е�те � W��dows. (В���ре �ы верне��� � эт��у в��р��у.� П�эт��у дл� вы��лнени� ад�ини�тративных фун�ций � ����щью �р��ра�� ���андн�й �тр��и ��н� ���андн�й �тр��и, и� ��т�р��� �ни �а�у��ают��, д�лжн� �а�� уже �ыть �а�ущен� � ра�ширенны�и �ривиле�и��и. Дл� �а�у��а ��на ���андн�й �тр��и � «ра�ширенны�и �ривиле�и��и» в W��� dows 7 и V�s�� е�ть не���ль�� �������в: y y В W��dows 7 нужн� �а�ре�ить ��н� ���андн�й �тр��и на �анели �адач. Зате� щел�нуть �рав�й �н����й �ыши на е�� �нач�е, щел�нуть �рав�й �н����й �ыши на �ун�те Командная строка (Comm��d P�omp�� и вы�рать �ун�т Запуск от имени администратора (Ru� As Adm���s����o��. y y В W��dows V�s�� нужн� ���дать �рлы� дл� �а�у��а ��на ���андн�й �тр��и в �анели Быстрого запуска (Qu��k L�u��h�. Щел�нуть на �нач�е �рлы�а �ра� в�й �н����й �ыши и вы�рать �ун�т Запуск от имени администратора (Ru� As Adm���s����o��. y y Щел�нуть на �н���е Пуск (S�����, вы�рать Все программы (A�� P�og��ms�Служеб- ные (A���sso���s�. Щел�нуть �рав�й �н����й �ыши на �ун�те Командная строка (Comm��d P�omp�� и вы�рать �ун�т Запуск от имени администратора (Ru� As Adm���s����o��. y y С��дать на ра��че� �т�ле �рлы� дл� �а�у��а cmd.exe. Щел�нуть на е�� �нач�е �рав�й �н����й �ыши и вы�рать �ун�т Запуск от имени администратора (Ru� As Adm���s����o��. y y Щел�нуть на �н���е Пуск (S����� и на�рать cmd в ��ле ��и��а. Зате� щел�нуть �рав�й �н����й �ыши на ре�ультате cmd.exe и вы�рать �ун�т Запуск от имени администратора (Ru� As Adm���s����o��. y y Дл� ��льшин�тва �еречи�ленных �де�ь �ет�д�в в�е�т� щелч�а �рав�й �н����й �ыши на �нач�е или ре�ультате ��и��а и вы��ра �ун�та Запуск от имени админи- стратора (Ru� As Adm���s����o�� ��жн� �р��т� удерживать нажаты�и �лавиши Ctrl+Shift и щел�ать на вы�ранн�� эле�енте. Кр��е эт��� дл� �а�у��а cmd.exe (или дл� �а�етн��� файла, или �ценари� и т. д.� ��жн� ���дать �рлы� на ра��че� �т�ле и у�тан�вить в е�� �в�й�твах �а� �у�� � ра�ширенны�и �ривиле�и��и. Дл� эт��� нужн� �р��т� щел�нуть �рав�й
464 Глава 10. Командная строка CMD �н����й �ыши на �нач�е, вы�рать Свойства (P�op�����s�, щел�нуть на �н���е До- полнительно (Adv����d� и у�тан�вить флаж�� Запуск от имени администратора (Ru� As Adm���s����o��. Е�ли вы эт� �делаете, � �редла�аю �ереи�ен�вать �нач��, чт��ы в е�� и�ени у�а�ывал��ь на т�, чт� эта вер�и� �а�у��ает�� в �ривиле�ир�ванн�� режи�е. На�ри�ер, � на�вал �нач�� Elevated Command Prompt (Привиле�ир�ванна� ���андна� �тр��а�. К��да ��н� ���андн�й �тр��и �а�у��ает�� лю�ы� и� этих �������в, вы ��лу� чаете �а�р�� �т �и�те�ы UAC; �а��л�в�� ��на ���андн�й �тр��и в�е�да начинает�� �� �л�ва Администратор:, чт��ы на���нить ва�, чт� лю�а� �р��ра��а, �а�ущенна� и� эт��� ��на, и�еет ��лные �рава ад�ини�трат�ра. (Сл�в� «Ад�ини�трат�р» ���в� л�ет�� не�ави�и�� �т т���, �а��й учетн�й �а�и�ью вы ��ль�уете�ь, �н� ���вл�ет�� даже �ри вы�люченн�� UAC.� ▼) Для запуска программы с расширенными привилегиями из стандартного окна командной стро- ки или из пакетного файла стандартных средств не существует. Но имеется ряд утилит от сторонних производителей: y На веб-сайте technet.microsoft.com проведите поиск по ключевой фразе «Script Elevation PowerToys for Windows Vista». y Поищите в Google по следующим четырем словам: «john robbins elevate wintellect». Нужный вам результат будет одним из тех, что находятся на веб-сайте www.wintellect.com. y Попробуйте воспользоваться средством surun с веб-страницы www.sourceforge.net/projects/ surun/. В W��dows XP �и�те�а UAC �т�ут�твует. Б�льшин�тв� ��в�едневных дел ��жн� вы��лн�ть, в�йд� ��д учетны�и �а�и���и � �ате��ри��и «О�раниченна�» или «О�ытный ��ль��ватель», а ���да ��над��ит�� �а�у�тить �ривиле�ир�ванную ���анду, ��жн� �ы�тр� �т�рыть ��н� ���андн�й �тр��и, и�еющее �рава ад�ини� �трат�ра, на�рав runas /user:Administrator cmd в ���андн�й �тр��е или в диал���в�� ��не Выполнить (Ru�� в �еню Пуск (S�����. (Е�ли вы ра��тали в U��x, ��жете ра���атривать эт� �а� э�вивалент ���анды su. На �в�е� ����ьютере � ���е�тил эту ���анду в �а�етный файл �� и�ени su.bat.� Вы, ��нечн� же, ��жете в�е�т� эт��� и���ль��вать лю��е и�� учетн�й �а�и�и ад�ини�трат�ра ����ьютера. Н�в�е ��н� ра��тает ��д те� и�ене�, � ��т�ры� в�шел в �и�те�у ад�ини�тра� т�р, и лю�а� �р��ра��а, �а�ущенна� ва�и и� эт��� ��на ���андн�й �тр��и, та�же �удет и�еть �рава ад�ини�трат�ра. В эт�� ��не ��жн�, на�ри�ер, на�рать start compmgmt.msc чт��ы �т�рыть ��н� Управление компьютером (Compu��� M���g�m����. Н� вы не ��жете �т�рыть «ад�ини�трат�р��ую» вер�ию W��dows �xp�o��� или дру�их ���н, ��н�ванных на �xp�o���, на�ри�ер Сетевые подключения (N��wo�k Co������o�s), ���а �начала, х�т� �ы �дин ра�, не в�йдете в �и�те�у в �аче�тве ад�ини�трат�ра. От�р�йте ��н� �xp�o���, щел�ните на �ун�те �еню Сервис (Too�s�Параметры папок (Fo�d�� Op��o�s�Вид (V��w� и у�тан�вите флаж�� Запускать окна с папками в от- дельном процессе (L�u��h Fo�d�� W��dows �� � S�p����� P�o��ss�.
Запуск CMD 465 Ключи оболочки CMD У ���л�ч�и CMD е�ть не���ль�� �лючей ���андн�й �тр��и. Х�т� над��н��ть в них в��ни�ает не та� ча�т�, ва�, в����жн�, �ах�чет�� ��на���ить�� � ни�и. Дл� �а�у��а ���андн�й ���л�ч�и � альтернативны�и на�тр�й�а�и ��жн� на�рать start cmd � д���лнительны�и ар�у�ента�и или �а�у�тить cmd и� �рлы�а, �а�етн��� файла ит.д. Са�а ���анда CMD и�еет �ледующий �инта��и�: cmd [/a | /u] [/q] [/d] [/t:fg] [/e:on|off] [/f:on|off] [/v:on|off] [[/s] [/c | /k] ¬ [команда] М�жн� �ред��тавить ���л�ч�е CMD ��н�ретную ���андную �тр��у дл� вы� ��лнени� или ��жн� �а�у�тить ее �е� ���анды. В ���ледне� �лучае �на �удет ��вт�рн� �редла�ать вве�ти ���анду. Ключи ��и�аны в �ледующей та�лице. Ключ Описание /a За�тавл�ет и���ль��вать на �тандартн�� выв�де ��дир�в�у ANSI /u За�тавл�ет и���ль��вать на �тандартн�� выв�де ��дир�в�у U���od�, /q Вы�лючает �� у��лчанию ���анду ��ho �а�етн��� файла /d От�лючает вы��лнение ���анд Au�oRu�, ��ределенных в рее�тре. И���ль�ует��, е�ли не��нтр�лируе�а� �р��ра��а (или вы �а�и� у�тан�вила неверный �ара�етр Au�oRu� /t:bf У�танавливает дл� ��на ф�н�вый (���нный� цвет и цвет �ерв��� �ла� на (те��та�. На�ри�ер, ��:�0 у�а�ывает черный те��т на �ер�� ф�не. Значени� цвет�в �еречи�лены в та�л. 10.1 /e Ра�решает или �а�рещает ра�ширени� ���анд /f Ра�решает или �а�рещает авт��авершение и�ен файл�в и �атал���в /v В�лючает �тл�женн�е ра�ширение �ере�енных �реды и� эле�ент�в !имя_переменной!. Эт�т в��р�� ра���атривает�� в �лаве 11 «Па�ет� ные файлы дл� ��ль�ы и ра�влечени�» /s И��ен�ет тра�т�в�у �авыче� в ���андн�й �тр��е, �а� ���а�ан� в �ла� ве 11 /c Вы�ывает вы��лнение ���анды (или ���анд� в ���андн�� ��не � ��� �ледующи� �а�рытие� ��на /k Вы�ывает вы��лнение ���анды (или ���анд� в ���андн�� ��не � ��� �ледующи� чтение� �удущих ���анд и� �тандартн��� вв�да, ���а не ��нчит�� файл или ���а не �удет ��лучена ���анда exit При и���ль��вании �люча /c или /k �н д�лжен у�а�ывать�� не���ред�твенн� �еред �тр���й команда. В�е чт� нах�дит�� ���ле /c или /k, �читает�� ча�тью �а� �у��ае��й ���анды, а не ар�у�ент�� дл� CMD.
466 Глава 10. Командная строка CMD Дл� ��ддержани� ��в�е�ти���ти � �а�етны�и файла�и, на�и�анны�и дл� W��dows NT 4.0, ра����нает�� та�же р�д не�тандартных ар�у�ент�в ���андн�й �тр��и. Ключ Описание /x Т� же �а��е, чт� и /e:on. Ра�решение ра�ширени� ���анд /y Т� же �а��е, чт� и /e:off. За�рещение ра�ширени� ���анд /r Т� же �а��е, чт� и /c. Вы��лнение ���анды и �а�рытие ��на К�ды цвет�в, и���ль�уе�ые � �люч�� /t, �еречи�лены в та�л. 10.1. Таблица 10.1. Коды цветов, используемые с ключом /t Значение Цвет 0 Черный 1 Синий 2 Зеленый 3 Г�лу��й 4 Кра�ный 5 Фи�лет�вый 6 Желтый 7 Белый � Серый 9 Светл���иний A Светл���еленый � Светл����лу��й C Светл���ра�ный D Светл��фи�лет�вый � Светл��желтый F Яр����елый Запрещение расширений команд Дл� �а�у��а �тарых �а�етных файл�в, ��т�рые не ра��тают � ра�ширенн�й вер�и� ей в�тр�енных ���анд CMD, ��жн� �вны� ��ра��� �а�ретить ра�ширени�, в��� ��ль��вавши�ь в ���андн�й �тр��е CMD �люч�� /e:off. На�ри�ер, дл� �а�у��а не��в�е�ти���� �а�етн��� файла нужн� в����ль��вать�� �ледующей ���андн�й �тр���й: cmd /e:off oldbatch.bat Е�ли нужн� вве�ти эт� в �равил�, а не в и��лючение, т� � на вашей �т�р�не и ���у ��д��а�ать, чт� дл� эт��� ��жн� �а�ретить ра�ширени� �� у��лчанию в ��дра�деле рее�тра HKLM\Software\Microsoft\Command Processor\EnableExtensions.
Обработка командной строки 467 Е�ли эт�т �ара�етр, и�еющий ф�р�ат DWORD, �ри�ут�твует и и�еет �начение 0, ра�ширени� ���анд �а�рещены. Дл� ра�решени� ра�ширений дл� ��н�ретн��� э��е��л�ра ���л�ч�и CMD в ���андн�й �тр��е ��жн� и���ль��вать �люч /e:on. Обработка командной строки О�н� ���андн�й �тр��и �редла�ает вв�дить ���анды ���тр�чн�. В данн�� ра�деле �удет ра���а�ан�, �а� ���л�ч�а CMD интер�ретирует ���анды. Даже е�ли вы �на� ���ы � эти� в��р���� ���ле ра��ты � MS�DOS и даже е�ли вы уже �наете, �а�ую р�ль и�рают �и�в�лы > и <, эт�т ра�дел в�е же нужн� �р�читать, �����ль�у �де�ь ра���атривает�� р�д н�вых �в�й�тв, � ��т�рых вы ��жете не �нать. Чаще в�е�� ���л�ч�е CMD �рих�дит�� читать ���андую �тр��у �ледующе�� вида: имя_программы аргументы П�лучив та�ую ���анду, CMD �ытает�� найти файл и���лн�е��й �р��ра��ы �� и�ени имя_программы. Е�ли та��й файл �удет найден, W��dows ��лучает ��� �анду на �а�у�� �р��ра��ы. Лю��й д���лнительный те��т, на�ранный в ���анд� н�й �тр��е — аргументы ���анды, — �ередает�� �р��ра��е дл� интер�ретации. Ра�у�еет��, на �ра�ти�е не в�е та� �р��т�: y y CMD ра����нает не��т�рые в�тр�енные ���анды, на�ри�ер set и cls. Дл� та�их ���анд CMD не ищет файл, а �р��т� ��ра�атывает �а�у ���анду. y y Е�ли ���анда не �вл�ет�� в�тр�енн�й, CMD ищет файл �� и�ени имя_програм­ мы �начала в те�уще� ра��че� �атал��е, а �ате� в ��и��е �атал���в ��д на�вани� е� путь поиска, ��т�рый ��жн� ���рре�тир�вать. Путь ��и��а, и���ль�уе�ый �� у��лчанию, в�лючает не���ль�� �а���, вх�д�щих в �а��у \WINDOWS. (Чуть ���же в данн�й �лаве �удет ���а�ан�, �а� и��енить �уть, чт��ы в�лючить в не�� ваши ����твенные �а��и.� y y Е�ли �ри на��ре ���анды �вны� ��ра��� у�а�ать ра�ширение и�ени файла, на�ри�ер .EXE, CMD ведет ��и�� т�ль�� эт��� ти�а файл�в. Е�ли не у�а�ать ти� файла, CMD ведет ��и�� ��н�ретных и�ве�тных ти��в файл�в. С�и��� ти��в файл�в на�ывает�� PATHEXT, и в �лучае не��х�ди���ти, �еречи�ленные ти�ы файл�в и их �таршин�тв� ��жн� и��енить. y y К��да CMD найдет файл, ���твет�твующий и�ени на�ранн�й ���анды, на ��н�ве ра�ширени� �удет решен�, чт� � ни� делать. Е�ли файл и�еет ра�шире� ние .EXE или .COM, эт� и���лн�е�а� �р��ра��а, ��т�ра� �а�у��ает�� не���ред� �твенны� ��ра���. Файлы � ра�ширени��и .BAT и .CMD �читают�� �а�етны�и файла�и, и ���л�ч�а CMD интер�ретирует их �а���т��тельн�. Дл� лю���� дру���� ти�а файла CMD и���ль�ует �в��анную � файл�� ин� ф�р�ацию и� рее�тра W��dows, чт��ы ��ределить, чт� � ни� делать. Е�ли ти� файла �в��ан � �ри�ладн�й �р��ра���й, CMD �а�у��ает �в��анн�е �рил�же� ние дл� �т�рыти� файла. На�ри�ер, WSH и���ль�ует�� дл� �а�у��а файл�в � ра�ширени��и .VBS, .WSF и .JS, �а� эт� уже ра���атривал��ь в �ерв�й ча�ти данн�й �ни�и.
468 Глава 10. Командная строка CMD y y Мн��ие �и�в�лы, в�люча� <>();, | ^&% и !, и�еют дл� CMD ��ециальн�е �на� чение и и��ен�ют интер�ретацию ���анды. Эт� �ы т�же ра����три� ���днее. П��ле т��� �а� ���л�ч�а CMD идентифицир�вала и���лн�е�ую �р��ра��у, �на ее �а�у��ает. Е�ли �а�ущена �р��ра��а W��dows, �на ���вл�ет�� на э�ране и ��тавл�ет ��н� ���андн�й �тр��и �в���дны� дл� дру�их дей�твий. Е�ли �а�у� щена �р��ра��а ���андн�й �тр��и, �на �ани�ает ��н� ���андн�й �тр��и д� �в�е�� �авершени� или ���а вы не �рервете ее ра��ту. Остановка программ, вышедших из-под контроля Ин��да на�ирает�� та�а� ���анда, ��т�ра� начинает выв�дить на э�ран �дну �а дру��й те��т�вые �траницы, или та�а�, ��т�ра� выв�дит �а�ие�ни�удь �л�вещие �реду�реждени� � вне�ении не��рати�ых и��енений в W��dows, и ва� х�чет�� не�едленн� ее ��тан�вить. Б�льшин�тв� �р��ра�� ���андн�й �тр��и �ре�ращают �в�ю ра��ту �ри на� жатии ����инации Ctrl+C. Е�ли эт� не �ра��тает, �ача�тую �ра�атывает ����ина� ци� Ctrl+Break. В �райне� �лучае ��жн� �р��т� �а�рыть ��н� ���андн�й �тр��и, щел�нув на е�� �н���е �а�рыти� в �рав�� верхне� у�лу. Эт� �ре�ратит ра��ту �р��ра��ы �а��и�у� �а не���ль�� �е�унд. М�жн� та�же в����ль��вать�� �р��ра��а�и ���андн�й �тр��и tasklist и taskkill. Они �удут ра����трены в �лаве 13 «Утилиты ���андн�й �тр��и». Консольная программа ввода и вывода В �тличие �т �р��ра�� W��dows, ��т�рые выв�д�т �анель ��на � �еню и �н���а�и, ��льшин�тв� �р��ра��, ра�ра��танных дл� �а�у��а в ��не ���андн�й �тр��и, ��� �тр�чн� выв�д�т �р��тую инф�р�ацию в эт� ��н�. Они на�ывают�� консольными программами, �����ль�у в�аи��дей�твие � ни�и ведет�� ���ред�тв�� вв�да и вы� в�да ��ы�н�венн��� те��та, �а� эт� �ыл� �� �тар���дны�и �р��ра��а�и, ра��� тающи�и на ��н�вн�� тер�инале ����ьютера. Т��да ��н�вные тер�иналы ча�т� на�ывали�ь консолью. Х�р�ши� �ри�ер�� ��н��льн�й �р��ра��ы ��жет ���лужить ���анда tasklist. Е�ли в ��не ���андн�й �тр��и на�рать tasklist и нажать Ввод, эта �р�� �ра��а выведет ��и��� в�ех �р��ра�� и �луж�, �а�ущенных в данный ���ент на ваше� ����ьютере, ���а�анный на ри�. 10.1 . У �ажд��� ��на ���андн�й �тр��и �уще�твует ��н�тие те�уще�� �атал��а, е�� �а��и �� у��лчанию, ��т�ра� �вл�ет�� е�� �тарт�вы� �е�т�� �ри ��и��а файл�в. Х�т� W��dows �xp�o��� выв�дит �в�й те�ущий �атал�� в �в�ей �тр��е ���т��ни� и адре�н�� ��ле, дл� ��на ���андн�й �тр��и ��лее хара�терн� ���а�ывать и�� те�уще�� �атал��а в �ри�лашении на вв�д ���анды. Эт�т �ри�на� выв�дит�� на э�ран, чт��ы ����щить ва�, чт� ��н� ��т�в� �рин�ть �чередную ���анду. На ри�. 10.1 �ри�лашение и�еет вид C:\Users\Администратор>
Обработка командной строки 469 Рис. 10.1 . Окно командной строки позволяет вводить команды — имена запускаемых программ — и просматривать их вывод ▼) Поскольку вид приглашения изменяется в зависимости от каталога, используемого в данный момент, в этой книге примеры набираемых команд приводятся без приглашения на их ввод. Чт��ы и��енить ��ведение W��dows��р��ра��, и���ль�уют�� диал���вые ��на и �еню, а чт��ы и��енить ��ведение ��н��льных �р��ра��, нужн� на�рать дл� них ���твет�твующую инф�р�ацию. Х�р�ши� �ри�ер�� ��жет ���лужить ���анда tasklist. Ра��ечат�а на ри�. 10.1, выданна� ���анд�й tasklist, ���а�ывает в�е �и�те�ные �р��ра��ы и �луж�ы. Е�ли нужн� увидеть �адачи и �р��ра��ы, �а�у� щенные на ����ьютере �� и�ени bali, ��д�люченн�� � ��ей �ети, ��жн� на�рать �ледующую ���анду: tasklist /s bali /u Administrator Ключ /s в эт�й ���анде ����щает �р��ра��е tasklist, чт� � х�чу ���лать �а�р�� на �етев�й ����ьютер �� и�ени bali, а �люч /u ���а�ывает, чт� � х�чу дл� ��луче� ни� эт�й инф�р�ации в����ль��вать�� ре�и�трацией ад�ини�трат�ра. Ар�у�енты /s и /u на�ывают�� переключателями или ключами. Б�льшин�тв� ��н��льных �р��ра�� выв�д�т ��и��� и���ль�уе�ых в них �лючей �ри вв�де в их ���андных �тр��ах �люча /?. Мы ра����трели ��н�вы, а те�ерь давайте �����три� на т�н���ти ���л�ч�и CMD.
470 Глава 10. Командная строка CMD Использование окна консоли О�ычн� �р��ра��ы ���андн�й �тр��и вы��лн�ют�� в ��ычн�� ��не, у ��т�р��� е�ть �а��л�в��, эле�енты и��енени� ра��ер�в, �н���а �а�рыти� и ��л��ы �р�� �рут�и. В �тличие �т на�т��ще�� DOS�э�рана, в ��не ��н��ли ��жн� вернуть�� в �р�� шл�е, � ранее выведенны� на э�ран данны�, и���ль�у� дл� эт��� ��л��ы �р�� �рут�и. В ча�тн��ти, эт� �ри��дит�� �ри и���ль��вании �р��ра��, выв�д�щих на э�ран ��льше инф�р�ации, че� в не� ��жет ���е�тить��. М�жн� та�же ��н�венн� ��тан�вить выв�д инф�р�ации и� �р��ра��ы, нажав ����инацию Ctrl+S. К��да нужна� инф�р�аци� �удет �р�читана, наж�ите ����инацию Ctrl+S еще ра�, чт��ы �р��ра��а �р�д�лжила выв�д данных. Дл� лучшей на�л�дн��ти или чт��ы �ридать �р��ра��е �а��и�альн�е ��д��ие ее �а�у��а ��д DOS, ��жн� нажать ����инацию Alt+Enter, чт��ы �р��ра��а ра��� тала в полноэкранном режи�е. Е�ли �удет �а�ущена �рафиче��а� DOS��р��ра��а, эт� �р�и��йдет авт��атиче��и. В эт�� режи�е ��н� �ани�ает ве�ь э�ран, и в�е �ри�на�и W��dows и�че�ают. Чт��ы ���ть вернуть�� на ра��чий �т�л W��dows, ��жн� нажать ����инацию Alt+Enter еще ра�. Режи� э�рана и ��личе�тв� �тр��, ��т�р�е ��жет �р��ручивать�� в ��не, ��ж� н� у�тан�вить � ����щью диал���в��� ��на Свойства (P�op�����s�, ���а�анн��� на ри�. 10.2. М�жн� та�же у�тан�вить цвет�вые на�тр�й�и ��на и и���ль�уе�ый в не� шрифт. О�ычн� на�тр�й�и шрифта не тре�уют��. Лучше �р��т� и��енить ра��еры ��на ��ычны� ��������, а W��dows ���твет�твенн� и��енит ра��еры �и�в�л�в. Рис. 10.2 . Диалоговое окно Свойства (Properties), относящееся к окну командной строки, позволяет выбрать режим экрана, количество прокручиваемых строк свойства редактирования и цвета экрана Перенаправление ввода-вывода и каналы О�ычн� лю�ые выв�ди�ые ��н��льн�й �р��ра���й данные ���вл�ют�� в ��не ���андн�й �тр��и, н� их ��жн� перенаправить в файл, и���ль�у� дл� эт��� �и�� в�л >. На�ри�ер, ���анда tasklist >tasks.txt
Обработка командной строки 471 �енерирует т�чн� та��й же ли�тин�, �а� и в �редыдуще� �ри�ере, н� ��хран�ет е�� в файле �� и�ени tasks.txt. Пр��ра��ы ���андн�й �тр��и ���ылают �в�й выв�д в та� на�ывае�ый поток стандартного вывода. П� у��лчанию в�е, чт� �р��ра��а �т�равл�ет на �тандартный выв�д, ���адает в ��н� ���андн�й �тр��и. Ка� эт� вы� �л�дит, ���а�ан� на ри�. 10.3 . Перва� ���анда tasklist на эт�� ри�ун�е �т�равл�ет �в�й выв�д в ��н� ���андн�й �тр��и. Вт�ра� ���анда tasklist �ерена�равл�ет �в�й выв�д в файл. Рис. 10.3 . При перенаправлении вывода консольной программы он отравляется в файлы или в другие программы Не��т�рые �р��ра��ы читают вв�д � ��т��а стандартного ввода. П� у��лча� нию �н ��д�лючен � вашей �лавиатуре. На�ри�ер, ���анда sort читает �тр��и те��та и� �тандартн��� вв�да, ��ртирует их в алфавитн�� ��р�д�е и �а�и�ывает ре�ультаты в �тандартный выв�д. Е�ли в ��не ���андн�й �тр��и на�рать �леду� ющие �тр��и: sort c b a Ctrl+Z sort выда�т �тр��и в �ледующе� ��р�д�е: a, b, c. (Учтите, чт� ����инаци� Ctrl+Z, на�ранна� в �тдельн�й �тр��е, �лужит инди�ат�р�� �авершени� вв�да.� Стандарт� ный вв�д ��жн� �ерена�равить, в����ль��вавши�ь �и�в�л�� <. На�ри�ер, ���анда sort <somefile.txt �а�тавл�ет sort �р�читать вв�д и� файла some�le.txt. М�жн� �дн�вре�енн� �ри� �енить �ерена�равление �а� вв�да, та� и выв�да. К��анда sort <somefile.txt >sortedfile.txt �ере�тавл�ет ��держи��е some�le.txt и ���дает н�вый файл �� и�ени sorted�le.txt. М�жн� та�же � ����щью �и�в�л�в >> у�а�ать, чт��ы выв�д не �а�ен�л ����й �уще�твующий файл, а д���лн�л е�� (добавлялся�: dir /b c:\ >listing.txt dir /b d:\ >>listing.txt
472 Глава 10. Командная строка CMD Перва� ���анда ���дает файл listing.txt, а вт�ра� д��авл�ет �в�й выв�д в ��нец файла listing.txt. (Е�ли файл listing.txt еще не �уще�твует, не �т�ит в�лн�вать��: ��� �анда, в ��т�р�й у�а�аны �и�в�лы >>, е�� ���да�т.� И на��нец, ��жн� ��д�лючить выв�д �дн�й �р��ра��ы не���ред�твенн� на вв�д дру��й �р��ра��ы, и���ль�у� дл� эт��� �и�в�л верти�альн�й черты (|�, ��т�ра� ��ычн� нах�дит�� на �лавиатуре в верхне� ре�и�тре �лавиши ��ратн��� �лэша (\�. На�ри�ер, ���анда find читает �тр��и и� вв�да и �ередает т�ль�� те и� них, в ��т�рых ��держит�� нужн�е �тр���в�е �начение. К��анда tasklist | find "winword" �а�тавл�ет tasklist �ере�равить ее ��и��� в�ех �р��ра�� чере� find, ��т�ра� вы� в�дит т�ль�� �тр��у или �тр��и, ��держащие "winword". И в �авершение, ���анда tasklist | find "winword" >tasks.txt ��д�лючает tasklist � find, а find � файлу, �а� ���а�ан� в третьей ча�ти ри�. 10.4 . Перена�равление вв�да и выв�да ���в�л�ет ��д�лючать �р��ра��ы и файлы, �а� �удт� вы ���даете тру���р�в�дную �и�те�у. П�эт��у �и�в�л | ча�т� на�ывают каналом, а та�ие �р��ра��ы, �а� find, ча�т� на�ывают фильтрами. ▼) Один из удобных фильтров, о котором стоит напомнить, — это more, программа, которая пере- дает все, что она получит при вводе на свой вывод. Польза от more заключается в паузах после вывода полного экрана текста. Программа more позволяет просматривать длинные листинги, которые без нее прокручивались бы по экрану слишком быстро, не позволяя все прочитать. Например, команда tasklist | more помогает вам увидеть весь список программ. Когда в конце экрана вы увидите приглашение -- Далее -- ( -- More --), для просмотра следующего полного экрана нужно нажать клавишу про- бела. Еще �дни� ��т���� выв�да, д��ту�н�� ��н��льны� �р��ра��а�, �вл�ет�� стандартная ошибка. П� у��лчанию, е�ли �р��ра��а �а�и�ывает инф�р�ацию в ��т�� �тандартн�й �ши��и, те��т ���вл�ет�� в ��не ���андн�й �тр��и. Пр�� �ра��ы ��ычн� и���ль�уют эт� дл� �т��ражени� важных ����щений �� �ши��ах, ��т�рые тре�ует�� д� ва� д�ве�ти, даже е�ли �тандартный выв�д �ерена�равлен в файл или в �анал. Н� е�ли нужн� �тлавливать ����щени� �� �ши��ах в файл, �тандартную �ши��у та�же ��жн� �ерена�равить. Е�ли у ва� е�ть ��ыт ра��ты � DOS, L��ux или U��x, ва�, в����жн�, и�ве�тны та�ие �ерена�равлени�. Н� е�ть р�д вариант�в �ерена�равлений вв�да, ��т�рые ���ут �ыть ва� не�на���ы. В та�л. 10.2 �еречи�л�ют�� в�е ин�тру�ции �ерена� �равлени�, ра����навае�ые ���л�ч��й CMD. Таблица 10.2. Перенаправления ввода и вывода Вариант перенаправления Действие <файл Читает �тандартный вв�д и� файла >файл За�и�ывает �тандартный выв�д в файл
Обработка командной строки 473 Вариант перенаправления Действие >>файл Д��авл�ет �тандартный выв�д в файл 1>файл За�и�ывает �тандартный выв�д в файл.* 1>>файл Д��авл�ет �тандартный выв�д в файл 2>файл За�и�ывает �тандартную �ши��у в файл 2>>файл Д��авл�ет �тандартную �ши��у в файл 2>&1 На�равл�ет �тандартную �ши��у чере� т�т же ��т��, чт� и �тандартный выв�д. Зате� ��а �ни ���ут �ыть �ерена�рав� лены в файл или чере� �анал дру��й �р��ра��е | следующая_команда От�равл�ет выв�д на вв�д �ледующей ���анды * Число 1 ссылается на поток стандартного вывода, а число 2 — на поток стандартной ошибки. К дву� ��ециальны� ф�р�а� �ерена�равлени� выв�да �тн���т�� выв�д на у�тр�й�тв� NUL и выв�д на �ринтер. W��dows ра����нает ��ециальн�е и�� файла nul в лю��й �а��е на лю��� ди��е и ра���атривает е�� �а� файл «черн�й дыры». Е�ли выдать ���анду и �ерена�равить ее выв�д на nul, выв�д и�че�нет. Эт�т ти� �ерена�равлени� уд��ен в �а�етных файлах, ���да нужн�, чт��ы ���анда чт�� ни�удь �делала, н� нежелательн� или ненужн�, чт��ы ��ль��ватель видел �а�ие� ни�удь ����щени� �� �ши��ах, ��т�рые �на ��жет выве�ти. На�ри�ер, в �тр��е net use f: /del >nul 2>nul �а�у��ает�� ���анда net use и �арантирует��, чт� выв�д не ���адет ��ль��вателю на �ла�а. С�ециальные и�ена файл�в LPT1, LPT2 и т. д. �ред�тавл�ют ваш �ринтер, и�� ��ль�уе�ый �� у��лчанию, и ваш л��альный �ринтер, ��д�люченный � ��рта� LPT1, LPT2 и т. д . Выв�д �р��ра��ы ��жн� на�равить на �ринтер, и���ль�у� �ере� на�равление на эти и�ена. М�жн� та�же на�равить выв�д на �етевые �ринтеры, �т��ра�ив на них эти у�тр�й�тва � ����щью ���анды net use, ��т�ра� ра���атри� вает�� в �лаве 13. С�ециальн�е и�� PRN �вл�ет�� анал���� и�ени LPT1. В �ра�тиче���� ��в�едневн�� и���ль��вании �ерена�равление �тандартн��� выв�да ���в�л�ет �тлавливать выв�д ��н��льн�й �р��ра��ы в файл, �де эт�т выв�д ��жн� �треда�тир�вать или в�тавить в �в�и д��у�енты. Перена�равление �тандартн�й �ши��и �ри��дит�� �ри не��х�ди���ти ��лучени� �ечатн��� �ви� детель�тва и� �р��ра��ы, выв�д�щей ����щени� �� �ши��ах. Перена�равление вв�да и���ль�ует�� чаще в�е�� в на�тр�й�ах �а�етных файл�в, �де нужна ���анда, �а�у��ае�а� в авт��атиче���� режи�е �т �аранее ��д��т�вленн��� вв�да. Ра����три� р�д �ри�ер�в. cmd /? | more Эта ���анда �а�тавл�ет ���л�ч�у ���андн�й �тр��и CMD выве�ти в�тр�енную ��рав�у � �ау�а�и дл� ее ���траничн��� чтени�. cmd /? > cmd.info notepad cmd.info
474 Глава 10. Командная строка CMD Эти ���анды �н�ва �а�тавл�ют CMD выве�ти ее ��рав�у, н� на эт�т ра� те��т ��хран�ет�� в файле, ��т�рый �р���атривает�� в Блокноте. (Ин��да ���ут �ыть ��ле�ны и �р��ра��ы, ра��тающие в ��нах.� tasklist | sort /+60 | more Эта ���анда �а�тавл�ет tasklist выве�ти ��и��� в�ех ра��тающих �р��ра��, �р��у�тить е�� �� �аналу чере� �р��ра��у sort, ��т�ра� ��ртирует �тр��и, на� чина� � 60��� �т�л�ца. В ре�ультате ��лучает�� ��и���, �т��ртир�ванный �� ��ъ� е�у �а��ти, �ан�т��у �ажд�й ра��тающей �р��ра���й. От��ртир�ванный выв�д �р��у��ает�� �� �аналу чере� �р��ра��у more дл� е�� ���траничн��� �р����тра. date /f >ping.txt ping www.mycompany.com 2>&1 >>ping.txt Эти ���анды �р�вер�ют, ��жн� ли �� Интернету ��лучить д��ту� � ве���айту www.mycompany.com. Ре�ультаты, в�люча� лю�ые �ши��и, ��хран�ют�� в файле �� и�ени ping.txt. Зате� эт�т файл ��жн� �р����треть или �р�анали�ир�вать е�� ��держи��е � ����щью �а��й�ни�удь �р��ра��ы. Копирование и вставка в окнах командной строки Х�т� у ��н��льных �р��ра�� нет �т��ражае�ых ���н и �еню ��ычных W��dows� �р��ра��, н� дл� ���ир�вани� те��та и� ���н ���андн�й �тр��и и в�тав�и е�� в эти ��на �ышь в�е же ��жн� и���ль��вать. Дл� ���ир�вани� те��та в �уфер ���ена нужн� и�влечь �р���у��льный �л�� те��та (�ривычн�е ���тр�чн�е выделение те��та �де�ь нев����жн��. У�тан�вите у�а�атель �ыши в верхне� лев�� у�лу желае���� те��та, �р�т�ните е�� д� нижне�� �рав��� у�ла, а �ате� наж�ите Ввод. При вы��ре те��та в �а��л�в�е ��на ���вл�ет�� �л�в� Выбрать (S������. На ри�. 10.4 ���а�ан�, �а� вы�л�дит ��н� ���андн�й �тр��и �ри вы��ре те��та. М�жн� та�же вы�рать те��т, и���ль�у� �и�те�н�е �еню ��на. Щел�ните на верхне� лев�� у�лу ��на или наж�ите ����инацию Alt+пробел, а �ате� вы�ерите �ун�ты Изменить (�d���Пометить (M��k�. И���ль�уйте �лавиши �трел�� дл� �ере�ещени� �ур��ра в верхний левый у��л нужн�й ��ла�ти, а �ате� удерживайте нажат�й �лавишу Shift, �ере�еща� �ур��р в нижний �равый у��л. Наж�ите Ввод дл� ���ир�вани� вы�ранн��� те��та. В�тавить те��т в ��н� ���андн�й �тр��и ��жн� � ����щью т��� же �а���� �еню, н� дл� в�тав�и нужн� вы�рать �ун�ты Изменить (�d���Вставить (P�s���. Дл� в�тав�и в ��н� ���андн�й �тр��и ра��тающа� в ��не �р��ра��а д�лжна �жидать вв�д. ▼▼ Клавишные сокращения для вставки стоит запомнить: Alt+пробел, И, А (E, P). К�тати, «выре�ать» чт��ни�удь и� ��на не ��лучит��, в ��н� ���андн�й �тр��и в�е в�ечатывает�� � фи��ацией и не ��жет �ыть удален�. Е�ли в ��не ���андн�й �тр��и нужн� �а�у�тить MS�DOS��р��ра��у, ра���� �нающую �ышь, нужн� �удет �т�лючить в����жн��ть вы��ра, чт��ы �ере�еще�
Обработка командной строки 475 ни� �ыши �т�равл�ли�ь �р��ра��е, а не интер�ретир�вали�ь ��н�� ��н��льных �р��ра��. Дл� вы�лючени� и���ль��вани� �ыши �ри ���ир�вании те��та нужн� вы�рать диал���в�е ��н� �в�й�тв ��на ��н��ли и �н�ть флаж�� Выделение мышью (Qu��k �d���, ���а�анный на ри�. 10.2 . Рис. 10.4. Для копирования текста в буфер обмена выберите блок текста с помощью мыши или клавиатуры и нажмите Ввод Редактирование команд и список истории За�и�и ���андн�й �тр��и ���ут �ыть длинны�и, �а�утанны�и ��и��а�и, ���т��� щи�и и� и�ен �р��ра�� и ар�у�ент�в, на�ри�ер, �а� эта �а�и�ь: ibmfix -b -ic:\ibm\input\imports\filea.txt c:\ibm\output\impa.dat Ни�т� не ���жет �арантир�вать, чт� �ри на��ре ��д��н�й �тр��и не �удет д�� �ущена �ши��а. О��л�ч�а CMD ���в�л�ет реда�тир�вать ���анду д� нажати� �лавиши Ввод, чт��ы ��жн� �ыл� и��равить �ши��и, не �ерена�ира� в�ю �тр��у. Д���лнительные фун�ции �рав�и, �ред��тавл�е�ые в������ательн�й �р��ра���й DOS��Y в DOS и в W��dows 9x, �вл�ют�� �тандартны�и фун�ци��и CMD. При ���тавлении ���анды CMD д��у��ает ее реда�тир�вание � ����щью �ледующих �������в: y y Клавиши лев�й и �рав�й �трел�и ���в�л�ют �ере�ещать �ур��р на�ад и в�еред �� �тр��е. К���инации Ctrl+левая стрелка и Ctrl+правая стрелка ���в�л�ют �ере� �ещать �ур��р на�ад и в�еред на целые �л�ва. Клавиши Home и End ���в�л�ют ���твет�твенн� �ере�ещать �ур��р в начал� и в ��нец �тр��и. y y П� у��лчанию лю�ые на�ирае�ые ва�и �и�в�лы в�тавл�ют�� в ���иции �ур��ра, а ве�ь ��тальн�й те��т �дви�ает�� в�рав�. Дл� �ере�лючени� �ежду режи�а�и в�тав�и и �а�ены ��жн� нажать �лавишу Ins. (В COMMAND.COM �� у��лчанию и���ль�ует�� режи� �а�ены.�
476 Глава 10. Командная строка CMD y y К��андные �тр��и ���ут �ыть длиннее �дн�й �тр��и, у�ещающей�� на э�ране. Е�ли �удут введен� ��льше �и�в�л�в, че� ��жет ���е�тить�� �� ширине э�ра� на, CMD �р��ручивает �тр��у вверх. С ����щью �р��рут�и ��жн� ���а�ть � �режни� или � ���ледующи� �тр��а�, и���ль�у� дл� эт��� �лавиши лев�й и �рав�й �трел��. (В COMMAND.COM нель�� � ����щью �р��рут�и вернуть�� � �редыдущи� �тр��а�.� y y Е�ли нажать �лавишу F3, ���андна� �тр��а �а��лнит�� �и�в�ла�и и� ранее введенн�й ���анды, �т те�ущей ���иции �ур��ра и д� ��нца �тр��и. y y К��да реда�тир�вание �удет �авершен�, ��жн� нажать Ввод �ри �ур��ре, на� х�д�ще��� в лю��� �е�те �тр��и. Ра��та � �р��ра��а�и ���андн�й �тр��и ��жет �ы�тр� �тать ут��ительн�й, е�ли �ридет�� �н�ва и �н�ва на�ирать �дну и ту же ���анду. Пред�тавьте, чт� вы на�ираете вручную ���анду т�ль�� дл� т���, чт��ы у�едить��, чт� в�е�т� –b на�ран �люч –a и в�е нужн� начинать �начала: ibmfix -b -ic:\ibm\input\imports\filea.txt c:\ibm\output\impa.dat ibmfix -b -ic:\ibm\input\imports\fileb.txt c:\ibm\output\impb.dat ibmfix -b -ic:\ibm\input\imports\filec.txt c:\ibm\output\impc.dat ibmfix -b -ic:\ibm\input\imports\filed.txt c:\ibm\output\impd.dat К �ча�тью, ��н� CMD �т�леживает �аждую на�ранную ва�и �тр��у, и ��жн� �р��т� вы�вать �редыдущую ���анду дл� реда�тир�вани� или ��вт�рн��� и���ль� ��вани�. Эт�т �ехани�� ра��тает �ледующи� ��ра���: y y Дл� �р��рут�и ��и��а ранее введенных ���анд ��жн� нажать �лавиши �трел�и вверх и �трел�и вни�. Е�ли �удет найдена ���анда, ��т�рую нужн� и���ль��� вать ��вт�рн�, дл� ее ��вт�рн��� вв�да ��жн� �р��т� нажать �лавишу Ввод. Вы та�же ��жете �треда�тир�вать ���анду, и���ль�у� ранее �еречи�ленные �лавиши. y y Клавиша PgUp в��вращает �а�ую �тарую ���анду в ��и��е CMD; �лавиша PgDn в��вращает �а�ую ���леднюю ���анду и� эт��� ��и��а. y y Е�ли нажать �лавишу F7, CMD выв�дит ��и��� ранее введенных ���анд. Дл� ��вт�рн��� и���ль��вани� ��жн� вы�рать �дну и� этих �тр�� и нажать �лавишу Ввод или же ��жн� нажать �лавишу Esc, чт��ы эт�т ��и��� ���анд �ыл у�ран � э�рана. У ���л�ч�и CMD и�еет�� ��льше реда�тирующих �в�й�тв, че� �еречи�лен� в данн�й �лаве; �де�ь �ыли ра����трены лишь наи��лее ��ле�ные и� них. Дл� �р�� ���тра в�е�� ��и��а нужн� щел�нуть на �н���е Пуск (S�����, вы�рать �ун�т Справка (H��p� и �р�ве�ти ��и�� �� �лючев��у �л�ву DOSKEY. ▼▼ Свойство, о котором вам, наверное, хотелось бы прочитать — это возможность определения макросов, позволяющих вызвать всю командную строку вводом коротких аббревиатур или клю- чевых слов. Пользователям Unix это свойство известно как псевдонимы, и они были бы обрадо- ваны, узнав, что они доступны в Windows.
Обработка командной строки 477 Автозавершение имен При на��ре ���андных �тр�� в CMD �ача�тую �рих�дит�� на�ирать и�ена файл�в и �а���. Авт��авершение и�ен у�р�щает эту �адачу — ��жн� на�рать т�ль�� лишь не���ль�� �у�в и�ени файла или �а��и, нажать у�равл�ющую �лавишу, и CMD �авершит �а ва� на��р эт��� и�ени. Эт� �чень �ривле�ательн�е, н� �ал�и�ве�тн�е �в�й�тв�, ��т�р�е, ��д��н� дру�и� �ривле�ательны� н�вы� �в�й�тва�, и�еющи�� �� в CMD, M���oso�� ���аи��тв�вала и� ��ераци�нн�й �и�те�ы U��x. Авт��авершение и�ен ра��тает �ледующи� ��ра���: е�ли нажать �лавишу � �и�в�л�� авт��авершени� и�ени файла (��ычн� эт� �лавиша Ta b �, CMD и�учит �и�в�лы �лева �т �ур��ра и и���ль�ует их �а� ��н�ву дл� �ути и (или� и�ени файла. Эт� ��жн� �ред�тавить �е�е та�: �ри нажатии �лавиши � �и�в�л�� авт��а� вершени� CMD ищет лю�ые файлы, чьи и�ена начинают�� � тех �и�в�л�в, ��т�рые уже на�раны. Е�ли �лева �т �ур��ра �у�т�е �р��тран�тв� или в���ще ниче�� нет, CMD ведет ��и�� �а� дл� �и�в�ла * (��начающе�� в�е файлы�. Е�ли CMD не нах�дит ���твет�твующе�� и�ени файла или �а��и, �на выдает �ву��в�й �и�нал и ��льше ниче�� не делает. Е�ли ���твет�твующее и�� �удет найден�, CMD �авершает на��р и�ени �а ва�. Эт� вы�л�дит �ледующи� ��ра���: c:\batch> edit b <-- введены edit и буква b, затем нажата клавиша Tab c:\batch> edit bills.bat <-- CMD находит соответствующий файл и завершает имя Е�ли эт� и�� ва� ��дх�дит, ��жн� �р�д�лжить на��р ���андн�й �тр��и. Эт� �уще�твенн� э��н��ит вре��! Е�ли и��, на�ранн�е ���л�ч��й CMD, не ��в�адает � и����ы�, �лавишу авт��авершени� ��жн� нажать еще ра�, чт��ы увидеть �леду� ющее ���твет�твующее и��. П�вт�рны�и нажати��и �лавиши ��жн� �р��рутить в ци�ле в�е ���твет�твующие и�ена. Б�лее т���, дл� �р��рут�и в ��ратную �т�� р�ну ��жн� в� вре�� нажати� на �лавишу авт��авершени� удерживать нажат�й �лавишу Shift. ▼▼ Если нужно набрать длинное путевое имя, например \Users\bknittel\Documents, можно исполь- зовать автозавершение имен для каждой части имени. Для этого примера можно набрать сле- дующее: dir \u (Tab) \b (Tab) \d (Tab) (Tab) Попробуйте воспользоваться этим на своем компьютере (используя вместо bknittel свое имя пользователя). Все делается очень толково — CMD добавляет требующиеся кавычки и автома- тически расставляет их в нужных местах. Авт��авершение и�ен �атал���в ра��тает идентичны� ��ра���, �а и��лючение� т���, чт� ���твет�твие ищет�� только и�ена� �атал���в. Авт��авершение и�ен в�лючен� �� у��лчанию, н� эт� не �тн��ит�� � авт��авершению и�ен �атал���в. Е�ли ва� в��лне у�траивает и���ль��вание �лавиши Ta b дл� ци�личн��� �ере��ра �а� и�ен файл�в, та� и и�ен �а���, �р��т� ��тавьте в�е �а� е�ть. Е�ли же вы х�тите и���ль��вать �тдельную �лавишу, чт��ы ���а�ать, чт� CMD д�лжна и��ать т�ль�� и�ена �атал���в, �� эт�� �ы ����в�ри� в �ледующе� ра�деле.
478 Глава 10. Командная строка CMD Включение автозавершения имен каталогов Ка� уже у���инал��ь в �редыдуще� ра�деле, авт��авершение и�ен в�лючен� �� у��лчанию — �лавиша Ta b вы�ывает ��и�� и�ени файла или �а��и, ���твет�тву� юще�� �и�в�ла� �лева �т �ур��ра. П�х�жее �в�й�тв�, на�ванн�е автозавершением имен каталогов, ���в�л�ет и���ль��вать дру�ую �лавишу дл� ��и��а ���твет�тву� ющих и�ен и��лючительн� �реди �атал���в. В���ре � ���ажу, �а� в�лючает�� авт��авершение и�ен �атал���в, н� �еред эти� ��д��т�влю ва� � не��т�ры� �транн��т��. В���ервых, �ни �в��аны �� �транны�и на�начени��и у�равл�ющих �лавиш, и���ль�уе�ы�и �� у��лчанию: y y П� у��лчанию авт��авершение и�ен в�лючен� и и���ль�ует �лавишу Ta b , �ри эт�� авт��авершение и�ен �атал���в вы�лючен�. y y Е�ли в ���андн�й �тр��е �а�у�тить CMD � �люч�� /f:on, авт��авершение и�ен �удет в�лючен�, н� те�ерь дл� не�� �удет и���ль��вать�� ����инаци� �лавиш Ctrl+F. Авт��авершение и�ен �атал���в та�же �удет в�лючен�, и дл� не�� �удет и���ль��вать�� ����инаци� �лавиш Ctrl+D. y y Е�ли в ���андн�й �тр��е �а�у�тить CMD � �люч�� /f:off, �удут �т�лючены ��а авт��авершени�, и и�ен файл�в, и и�ен �атал���в. Е�ли нужн�, чт��ы авт��авершение и�ен �атал���в �ыл� ���т��нн� в�лючен� в W��dows XP, дл� эт��� �р�ще в�е�� в����ль��вать�� утилит�й Tw��kUI, ��т�рую ��жн� �а�ру�ить � ве���айта www.microsoft.com. У�тан�в�а д��ту�на в� в�лад�е Command Prompt. М�жн� та�же �треда�тир�вать рее�тр, и��енив на�тр�й�и �� у��лчанию в XP, V�s�� или W��dows 7. В �ара�етрах CompletionChar и PathCompletionChar у�а�ывают� �� ��ды �лавиш, и���ль�уе�ых ���твет�твенн� дл� авт��авершени� и�ен и дл� авт��авершени� и�ен �атал���в. CMD ищет �начени� этих �ара�етр�в в ра�деле HKEY_CURRENT _USER\Software\Microsoft\Command Processor в ��т�р�� хран�т�� на�тр�й�и дл� те�уще�� ��ль��вател�. Е�ли их та� нет, CMD ищет на�тр�й�и в ра�деле HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor ��редел�юще� �начени� �� у��лчанию дл� в�ех ��ль��вателей. Пара�етры CompletionChar и PathCompletionChar и�еют �начени� ф�р�ата DWORD, в ��т�рых хранит�� чи�л�, �ред�тавл�ющее ���твет�твующую �лави� шу у�равлени�. Пр�ще в�е�� вве�ти эт� �начение в виде де��тичн��� чи�ла, �де 1 = Ctrl+A, 2 = Ctrl+B,..., 26 = Ctrl+Z. Не��т�рые ��ле�ные �начени� �еречи�лены в �ледующей та�лице. Значение Клавиша 4 Ctrl+D 6 Ctrl+F 9 Ctrl+I (Tab) 32 Вы�лючение авт��авершени�
Обработка командной строки 479 Чт��ы и���ль��вать Ctrl+F дл� авт��авершени� и�ен и Ctrl+D дл� авт��аверше� ни� и�ен �атал���в, нужн� вы��лнить �ледующие дей�тви�: 1. С ����щью ���анды regedit �а�у�тить реда�т�р рее�тра. 2. От�рыть ра�дел HKE�_CURRENT_USER и найти ��дра�дел Software\Microsoft\ Command Processor. 3. Дважды щел�нуть на уже �ри�ут�твующе� �ара�етре CompletionChar, щел�нуть на �ун�те Десятичная (D���m��� и вве�ти чи�л� 6. Щел�нуть на �н���е OK. 4. Вы�рать Правка (�d���Создать (N�w�Параметр DWORD (DWORD V��u��. Вве�ти и�� PathCompletionChar. 5. Дважды щел�нуть на н�в�� �ара�етре, щел�нуть на �ун�те Десятичная (D���m���, вве�ти чи�л� 4 и щел�нуть на �н���е OK. 6. За�рыть реда�т�р рее�тра и в�е ��на ���андн�й �тр��и. С эт��� ���ента, ���да �удет �а�ущен� ��н� ���андн�й �тр��и, �удут ра��тать ����инации Ctrl+F и Ctrl+D. Та�и� ��ра���, ��ведение CMD ва� удивл�ть уже не �удет. К��да вы��лнены на�тр�й�и рее�тра, CMD вы��лн�ет дл� в�лючени� авт��авершени� в�ех и�ен и и�ен �атал���в �ледующие �равила: y y Е�ли �ара�етр рее�тра и�еет �начение в диа�а��не 1– 26, авт��авершение в�лю� чен�, е�ли т�ль�� �ри �а�у��е CMD не у�а�ан �люч /f:off. y y Е�ли �ара�етр рее�тра и�еет �начение 32, авт��авершение вы�лючен�, не�а� ви�и�� �т у�тан�в�� �люча /f. y y Е�ли дл� �ара�етра CompletionChar ��ределен� �начение 9 (Ta b �, а �ара�етр PathCompletionChar не ��ределен, CMD ведет �е�� та� же, �а� и �� у��лчанию, в ���твет�твии � ранее �риведенны� ��и�ание�. Те�ерь верне��� � ра����трени� ра��ты �реды ��ружени� ���андн�й �тр��и. Использование нескольких команд в одной строке CMD ���в�л�ет на�ирать не���ль�� �тдельных ���анд в �дн�й ���андн�й �тр��е, �тдел�� их дру� �т дру�а �и�в�л�� а��ер�анда (&�: dir & ping ftp.microsoft.com & ftp ftp.microsoft.com CMD �а�у��ает эти ���анды �� �череди, �а� �удт� �ни �ыли введены в �тдель� ных ���андных �тр��ах: dir ping ftp.microsoft.com ftp ftp.microsoft.com Ка� �ы тривиальн� эт� ни �вучал�, н� эт�т �рие� ��жет �ри��дить��. В�� �ервых, ���да вы �н����ратн� на�ираете �дни и те же не���ль�� ���анд, ��жн� �р��т� нажать �лавишу �трел�и вверх и и���ль��вать �в�й�тв� и�т�рии дл� ��� вт�рн��� вы��ва �ра�у в�ех ���анд.
480 Глава 10. Командная строка CMD Кр��е эт���, в �а�етных файлах, ��т�рые ��лее ��др��н� �удут ра����трены в �лаве 11, эт� �в�й�тв� ��жет �ыть и���ль��ван� дл� ���ещени� �ра�у не���ль�их ���анд в �дин ��ерат�р, �а� ���а�ан� в �ледующе� �ри�ере: if not exist list.dat dir c:\in >list.dat & dir c:\out >>list.dat Е�ли файл list.dat не �уще�твует, CMD �а�у��ает �� �череди две ���анды dir. Эт� ��жет у�р��тить �р��ра��у �а�етн��� файла. Е�ть еще два ������а у�а�ать не���ль�� ���анд в �дн�й и т�й же �тр��е. Е�ли �тдел�ть ���анды дру� �т дру�а дву�� а��ер�анда�и в�е�т� �дн���, на�ри�ер: ping ftp.microsoft.com && ftp ftp.microsoft.com вт�ра� и ���ледующие ���анды �удут �а�ущены т�ль�� �ри у�л�вии у��ешн��� �авершени� �редыдущей ���анды (т� е�ть е�ли вых�д и� нее �р�и��йдет �� �наче� ние� �тату�а �ши��и, равны� 0�. Эт� ���в�л�ет ���давать ��и��� ���анд, ��т�рые не вы��лн�ют�� ���ле ��наружени� �ши��и. Еще �дин вариант ���в�л�ет и���ль��вать ��четание �и�в�л�в ||, чт��ы ��� �а�ать, чт� вт�ра� ���анда д�лжна �ыть �а�ущена, только е�ли �ерва� ���анда ��тер�ит неудачу — т� е�ть е�ли вых�д и� �ерв�й ���анды �р�и��йдет � ненулевы� �тату��� �ши��и, �а� в �ледующе� �ри�ере: firstcommand || echo Первая команда потерпела неудачу Группировка команд с помощью круглых скобок Ра�ширени� ���анд ���л�ч�и CMD ���в�л�ют �ру��ир�вать не���ль�� ���анд� ных �тр�� внутри �ру�лых ������, и ���л�ч�а CMD �удет в���рини�ать их �а� �дну ���анду. Эт�т �ри�ер �ри��дит�� �ри и���ль��вании ���анд if и for. На� �ри�ер, ��жн� и���ль��вать �ледующие ���тавные ��ерат�ры: if exist c:\data\myfile.dat ( echo Myfile.dat существует! copy myfile.dat d:\backups sort myfile.dat >myfile.out print myfile.out ) Кр��е эт��� ��ру��ир�ванные ���анды ���ут и���ль��вать�� дл� ���ра вы� в�да не���ль�их �р��ра�� в �дин файл или дл� �анала � �ерена�равление�, �а� в �ледующе� �ри�ере: (dir c:\data & dir c:\temp) >listings.txt К��анды д�лжны �ыть �тделены дру� �т дру�а �и�в�ла�и н�в�й �тр��и или ра����тренны�и ранее ра�делител��и &, && или ||. К��анды ��жн� �ру��ир�вать в �а�етных файлах или в ���андн�й �тр��е. Е�ли ��ру��ир�ванные ���анды вв�д�т�� в ���андн�й �тр��е и еще не введена �а�ры� вающа� �ру�ла� �����а, �ри нажатии �лавиши Ввод CMD ��рашивает, �удете ли вы вв�дить ���андную �тр��у (или �тр��и�, выв�д� на э�ран �ледующий в��р��: Продолжить? (More?) На �а��� деле эт� не на�т��щий в��р��, ��эт��у ��л�жительный �твет вв�дить не нужн�. Следует �р��т� �р�д�лжить на��р ���андных �тр�� и �авершить е�� �а� �рывающей �ру�л�й ������й и те�, чт� д�лжн� идти ���ле нее.
Обработка командной строки 481 Аргументы, запятые и кавычки К��да �р��ра��а ���андн�й �тр��и тре�ует �т ва� у�а�ани� та��й инф�р�ации, �а� и�� ��ра�атывае���� файла или и���ль�уе�ый �люч, ��ычн� эта инф�р�аци� на�ирает�� ���ле и�ени ���анды, а ее эле�енты ра�дел�ют�� �р��ела�и. На�ри� �ер, ���анда delete удал�ет файл или файлы, на�ванные в ее ���андн�й �тр��е: delete somefile.txt anotherfile.txt Ар�у�енты ���андн�й �тр��и ��жн� та�же �тделить дру� �т дру�а т�ч�а�и � �а� ��т�й (;� или �а��ты�и (,�, н� та� делать не ре���ендует��; CMD и���ль�ует эти ра�делители т�ль�� дл� ��хранени� ��в�е�ти���ти �� �тар�й д��р�й COMMAND. COM. К ��жалению, �����ль�у и�ена файл�в в W��dows ���ут ��держать �р��елы в �ередине и�ени, ���анда delete c:\Users\bknittel\Documents\My Music\mpeg files\files.txt ���ытает�� удалить три файла: C:\Users\bknittel\Documents\My, Music\mpeg и �les\ �les.txt. Дл� решени� эт�й �р��ле�ы CMD ра���атривает �авыч�и ("� в �аче�тве �ред�тва, ���в�л�юще�� �читать те��т внутри них ча�тью �дн��� �тдельн��� ар�у� �ента. На�ри�ер, ���анда delete "c:\Users\bknittel\Documents\My Music\mpeg files\files.txt" удал�ет т�ль�� �дин ����наченный файл. Кавыч�и не ра���атривают�� �а� ча�ть и�ени файла, �ни лишь ��ъедин�ют в�е, чт� нах�дит�� внутри, в един�е цел�е. Отключение специальных символов Ка� вы уже видели, �ледующие �и�в�лы и�еют дл� CMD ��ециальн�е �начение: <>()&|,;" Е�ли лю��й и� этих �и�в�л�в нужн� и���ль��вать �а� ча�ть ар�у�ента ���анд� н�й �тр��и, �ередавае���� �р��ра��е (на�ри�ер, дл� т��� чт��ы ���анда find ��уще�твл�ла ��и�� �и�в�ла >�, эт�т �и�в�л тре�ует�� отключить, ���тавив �еред ни� �на� в�тав�и (^�. Он �удет ���а�ывать, чт� эт�т �и�в�л нужн� ра���атривать �а� лю��й дру��й �и�в�л, а е�� ��ециальн�е на�начение не �рини�ать в� вни�ание. Дл� �ередачи в ар�у�енте �а���� �и�в�ла в�тав�и ^ нужн� на�рать ^^. На�ри�ер, ���анда echo выв�дит �в�и ар�у�енты в ��н� ���андн�й �тр��и. К��анда echo <hello> �рив�дит � �р��ле�а�, �����ль�у CMD �читает, чт� вы желаете �ерена�равить вв�д и ��лучать е�� и� файла �� и�ени hello, а �ате� вы желаете �ерена�равить выв�д не��н�тн� �уда, �����ль�у ���ле > и�� файла не у�а�ан�, ��эт��у CMD выда�т ����щение �� �ши��е. А в�т ���анда echo ^<hello^> выведет в ��н� <hello>.
482 Глава 10. Командная строка CMD Конфигурирование программы CMD В �редыдущих ра�делах ра���а�ывал��ь, �а� CMD читает и интер�ретирует ���ан� ды. В данн�� ра�деле вы у�наете, �а� на�тр�ить CMD, чт��ы �на лучше �твечала ваши� �а�р��а�. AutoRun О�ычн� �ри �ерв�� �а�у��е CMD �р�вер�ет рее�тр на наличие �ара�етр�в в ра�� делах HKLM\Software\Microsoft\Command Processor\AutoRun и HKCU\Software\Microsoft\Command Processor\AutoRun (HKLM и HKCU �вл�ют�� ���ращени��и ���твет�твенн� дл� HKE�_LOCAL_MACHINE и HKE�_CURRENT_USER.� Лю�ые �ара�етры, и�еющие ти�ы R�G_SZ (�тр��а� или R�G_�XPAND_SZ (�тр��а � ра�шир�е�ы�и �ере�енны�и �реды�, в���рини�ают� �� �а� ���анды, ��т�рые д�лжны �ыть вы��лнены �ри �ерв�� �а�у��е э��е��л�ра CMD. У�тан�в�и AutoRun ���ут и���ль��вать�� дл� вы��лнени� не��т�рых фун�ций, ��т�рые в DOS �ред��тавл�ли�ь файл�� AUTOEXEC.BAT . В ча�тн��ти, ��жет ��на� д��ить�� �а�у�� DOS��Y дл� у�тан�в�и �а�р���в � ����щью ���анды AutoRun. Е�ли нужн�, ���анды AutoRun ��жн� �т�лючить, �а�у�тив CMD в ���андн�й �тр��е � �люч�� /D, ��т�рый �удет ра����трен в данн�й �лаве чуть ���же. Подстановка переменных среды окружения В �р�це��е и�учени� ���андных �тр��, введенных ва�и или �читанных и� �а�ет� н��� файла, CMD �а�ен�ет �тр��и вида %имя% �начени��и ��и�ен�ванных �ере� �енных �реды ��ружени�. На�ри�ер, ���анда echo %path% �ревращает�� в echo c:\windows\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem и �ате� ����наченный те��т выв�дит�� на э�ран. К��анда ���а�ывает �начение �ере�енн�й path. П�д�тан�в�а �ере�енных �реды ��ружени� ��жет и���ль��вать� �� в лю��� �е�те ���андн�й �тр��и, е�ли т�ль�� ��лучающий�� �ри эт�� те��т �удет �ред�тавл�ть ����й д��у�ти�ую ���анду. Е�ли нужн� и���ль��вать �ере� �енную �реды ��ружени� в �аче�тве ча�ти �утев��� и�ени, лучше �а�лючить в�е и�� в �авыч�и, �����ль�у �ере�енна� �реды ��ружени� ��жет ��держать �р��елы. На�ри�ер, �ри удалении test�le.txt и� вре�енн�й �а��и ��жн� на�рать del "%temp%\testfile.txt" ▼) Имена переменных среды окружения нечувствительны к регистру букв. Для CMD обозначения %path%, %Path% и %PATH% имеют одинаковое значение.
Конфигурирование программы CMD 483 Путь поиска В CMD и�еет�� �ехани��, ���в�л�ющий хранить те��т�вую инф�р�ацию в ��и�е� н�ванных �ере�енных, на�ывае�ых переменными среды окружения. Эти �ере�ен� ные и���ль�уют�� дл� у�равлени� ��ведение� CMD и ���ут та�же и���ль��вать�� дл� хранени� инф�р�ации в �р��ра��ах �а�етных файл�в. Пере�енные �реды ��ружени� ���ут �ыть ��ределены в �а�етных файлах, в ���андн�й �тр��е или WSH��р��ра��а�и, и �н��ие и� них �ред��редел�ют�� ��ераци�нн�й �и�те��й W��dows. Одн�й и� наи��лее важных �ере�енных �реды ��ружени� �вл�ет�� PATH, ��� т�ра� ��держит ��и��� �атал���в, �р���атривае�ых CMD �ри ��и��е �р��ра��. PATH �вл�ет�� ��и���� и�ен �а���, эле�енты ��т�р��� �тделены дру� �т дру�а т�ч�а�и � �а��ты�и. Значение эт�й �ере�енн�й �� у��лчанию и�еет �ри�ерн� �ледующий вид: C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem; ¬ C:\Windows\System32\WindowsPowerShell\v1.0\ Эт� ��и��� �утей �ред�и�ывает CMD �ри на��ре ���анды и��ать �р��ра��ный файл эт�й ���анды в данных �атал��ах в �ледующей ���лед�вательн��ти: y y те�ущий �атал��, в ��т�р�� CMD в�е�да ведет ��и�� в �ервую �чередь; y y �:\w��dows\sys��m32; y y �:\w��dows; y y �:\w��dows\sys��m32\wb�m; y y �:\w��dows\sys��m32\W��dowsPow��Sh���\v1.0 Е�ли CMD нах�дит �р��ра��ный файл в �дн�й и� этих �а���, �н �а�у��ает��, и ��и�� в ��тальных �а��ах уже не ведет��. Эт� ��начает, чт� е�ли и�еют�� ���анд� ные файлы или �а�етные файлы � �дни�и и те�и же и�ена�и в ��лее че� �дн�й �а��е, и�еющей�� в �ути ��и��а, т� �ри на��ре и�ени �а�ущен �удет т�т файл, чей �атал�� ��ажет�� в эт�� �ути раньше дру�их. ▼▼ Если одна и та же программа или пакетный файл имеются в более чем в одной папке вашего пути поиска, и первый такой файл, который будет найден CMD, окажется не тем файлом, ко- торый бы вам хотелось запустить на выполнение, то его можно обойти. Можно ввести перед командой полное путевое имя, чтобы исключить любые неоднозначности. Например, c:\windows\system32\ping укажет CMD точное место, где нужно искать программу PING. W��dows у�танавливает �начение �ере�енн�й PATH �ри �а�у��е CMD, и �ри ее и��енении нужн� �р��вл�ть ��т�р�жн��ть, е�ли �удут удалены у�а�ани� на важ� ные �атал��и W��dows, CMD не ���жет найти �н��ие �р��ра��ы, ��т�рые ���ут ва� ��над��ить��. Путь ��жн� и��енить, в�лючив в не�� ваши ����твенные �атал��и, и���ль�у� дл� эт��� ���анду path. Е�ли вы �ланируете ���давать �в�и ����твенные �а�етные файлы, WSH��р��ра��ы или дру�ие �ри�ладные �р��ра��ы, т� не�л�х� �удет
484 Глава 10. Командная строка CMD ���е�тить их в ��ециальную ����твенную �а��у, д��авив ее в �уть. Ка� эт� �делать, �удет ���а�ан� в �ледующе� ра�деле. Изменение пути Путь ��и��а ��жн� и��енить дву�� ������а�и: в���ервых, ��жн� дл� �ере�енн�й �реды ��ружени� PATH у�а�ать н�в�е �начение, и���ль�у� ���анду set. На�ри�ер: set path=c:\batchfiles В��вт�рых, ��жн� в����ль��вать�� �ледующей «���ращенн�й» ���анд�й: path c:\batchfiles О�е эти ���анды вы��лн�ют �дн� и т� же дей�твие: �ни у�танавливают дл� �ере�енн�й �реды ��ружени� PATH �начение c:\batch�les, в ре�ультате че�� CMD ведет ��и�� �р��ра�� т�ль�� в эт�й �а��е. Наверн�е, эт� не �а�а� лучша� иде�, ��т��у чт� те� �а�ы� и� �ути удал�ют�� �а��и W��dows, и в�е �тандартные �р�� �ра��ы ���андн�й �тр��и �тан�в�т�� нед��ту�ны�и. ▼) Команды path и set всего лишь изменяют переменные среды для текущего, работающего экзем- пляра программы CMD. При открытии нового окна командной строки вы возвращаетесь назад к исходным значениям, устанавливаемым по умолчанию. Если нужно внести постоянные изменения в путь или в любую другую переменную среды окру- жения, чтобы это изменение фигурировало во всех будущих окнах командной строки CMD, эти изменения нужно вносить в диалоговом окне системных свойств, как показано далее в этой главе в разделе «Установка для переменных среды окружения значений по умолчанию». Мож- но также воспользоваться сценарием, рассмотренным в главе 4 «Доступ к файлам и реестру»; в Windows 7 и Vista можно воспользоваться командой setx. В ��льшин�тве �лучаев тре�ует�� в�е�� лишь д��авить н�вую �а��у � уже �у� ще�твующе�у ��и��у �ути, ��ычн� в е�� начал�, чт��ы лю�ые на�и�анные ва�и �а�етные файлы или у�тан�вленные н�вые �р��ра��ы ���ли �ыть �а�ущены �уте� на��ра их и�ени. И�енн� �де�ь и �ри��дит�� ��д�тан�в�а �ере�енн�й �реды ��ружени�, и учитыва� в��тре��ванн��ть эт��� дей�тви�, �н� выделен� в �тдельную �хе�у. ШАБЛОН Для добавления каталога в начало пути поиска используется следующий оператор: set path=путь_к _каталогу;%path% Здесь путь_к _каталогу должен быть полностью указанным именем папки. Например: set path=c:\batchfiles;%path% Когда CMD попадается эта команда, то есть если вы набрали ее в командной строке или в пакетном файле, CMD сначала заменяет текст %path% текущим значением PATH, и команда приобретает следующий вид: set path=c:\batchfiles;c:\windows\system32;C:\WINDOWS; C:\WINDOWS\System32\Wbem; ... Теперь новый путь поиска начинается с папки c:\batch�les, но он по-прежнему включает в себя стандартные папки Windows. Если в папку c:\batch�les поместить пакетный файл test.bat, а за- тем набрать в командной строке test, этот пакетный файл будет запущен на выполнение.
Конфигурирование программы CMD 485 Н�вую �а��у ��жн� та�же д��авить в конец �ути ��и��а, в����ль��вавши�ь дл� эт��� �ледующи� ��ерат�р��: set path=%path%;c:\batchfiles П�р�д�� ра��ещени� и�рает р�ль т�ль�� в т�� �лучае, е�ли вер�ии �дн�й и т�й же ���анды и�еют�� в ��лее че� �дн�й �а��е �ути; W��dows �а�у�тит ту и� них, ��т�ра� �удет нах�дить�� в �а��е, ��двер�ае��й ��и��у �ерв�й. ▼▼ Если одной из таких команд путь поиска будет испорчен и CMD перестанет работать, просто закройте окно командной строки и откройте его снова. Будет восстановлено значение пути, устанавливаемое по умолчанию. Ра��ещение у�а�ани� на вашу ����твенную �а��у в�ереди у�а�аний на �а��и W��dows ��жет ���лужить �а� в� �ла��, та� и в� вред. Е�ли �удет ���дана �р��ра�� �а или �а�етный файл, и�� ��т�р��� ��в�адет � и�ене� �тандартн�й �р��ра��ы W��dows, ваша �р��ра��а �удет �а�ущена в�е�т� �тандартн�й. Х�р�ш�, е�ли вы д��ивали�ь и�енн� эт��� эффе�та, иначе ре�ультат ��жет �ыть ве�ь�а ��е��ура� живающи�. Предопределенные и виртуальные переменные среды окружения Пере�енные �реды ��ружени� ���ут �ыть у�тан�влены в лю��� и� 6 �е�т. Е�ли �а�а��т� ��н�ретна� �ере�енна� �реды ��ружени� у�тан�влена ��лее че� в �дн�� �е�те, и���ль�ует�� ее ���леднее ��ределение. И�т�чни�и ��ра�атывают�� в �ле� дующе� ��р�д�е: 1. Пред��ределенные, в�тр�енные �и�те�ные �ере�енные (на�ри�ер, APPDATA�. 2. О�ще�и�те�ные �ере�енные, ��ределенные. 3. Пере�енные, ��ределенные в диал���в�� ��не �в�й�тв �и�те�ы дл� ��н�рет� н��� ��ль��вател� (��т�рые у���инали�ь в �редыдуще� ра�деле�. Н� ��реде� ление �ере�енн�й PATH дл� ��н�ретн��� ��ль��вател� не �а�ен�ет ����й ��ще� �и�те�н�е ��ределение. В�е�т� эт��� �н� д��авл�ет�� � ��нцу ��держи����, ��ределенн��� в ��ще�и�те�н�й �ере�енн�й PATH. W��dows делает эт� дл� т���, чт��ы вы ���ли �е� ������� труда д��авить � PATH д���лнительные �атал��и, �в��анные � вашей ����твенн�й учетн�й �а�и�ью, не ри��у� �ри эт�� ��терей нужных ��ще�и�те�ных �атал���в, у�а�анных в PATH. 4. Пере�енные, ��ределенные в �ценари�х вх�да в �и�те�у (�а�етн��� или WSH� ти�а�. Первые четыре и�т�чни�а ��ра�атывают��, ���да ��ль��ватель вх�дит в �и�те�у — �ни ф�р�ируют и�х�дную �реду ��ружени� ��ль��вател�. О�таль� ные и�т�чни�и ��ра�атывают�� �ри �ажд�� �а�у��е н�в��� CMD��р�це��а, и в�е и��енени� тер�ют�� �ри �а�рытии ���л�ч�и CMD. 5. Пере�енные, ��ределенные в файле AUTOEXEC.NT, е�ли на вы��лнение �а�у��а� ет�� �р��ра��а DOS. 6. Пере�енные, ��ределенные в ���андн�й �тр��е, в �а�етных файлах или в WSH� �ценари�х � ����щью ��ерат�ра WshShell.Environment("Process").
486 Глава 10. Командная строка CMD Дл� в�ех ��ль��вателей �� у��лчанию ��редел�ют�� �ледующие ��ще�и�те�� ные �ере�енные. Имя переменной Обычное значение в Windows 7 ALLUSERSPROFILE C:\P�og��mD��� APPDATA C:\Us��s\us����m�\AppD���\Ro�m��g CommonProgramFiles C:\P�og��m F���s\Commo� F���s COMPUTERNAME имя_компьютера ComSpec C:\WINDOWS\sys��m32\�md.�x� HOMEDRIVE C: HOMEPATH \Us��s\имя_пользователя LOCALAPPDATA* �:\Us��s\us����m�\AppD���\Lo��� LOGONSERVER (в����жны ра�личные варианты� NUMBER_OF _PROCESSORS (в����жны ра�личные варианты� OS W��dows_NT Path C:\WINDOWS\sys��m32;C:\WINDOWS; C:\WINDOWS\Sys� ��m32\Wb�m; C:\W��dows\Sys��m32\W��dowsPow��Sh���\ v1.0\, н� в�е эт� �ави�ит �т �е�та, в ��т�р�е у�тан�влена W��dows PATHEXT . C OM;.�X�;.�AT;.CMD;.V�S;.V��;.JS;.JS�;.WSF; .WSH;.MSC PROCESSOR_ARCHITECTURE (в����жны ра�личные варианты� PROCESSOR_IDENTIFIER (в����жны ра�личные варианты� PROCESSOR_LEVEL (в����жны ра�личные варианты� PROCESSOR_REVISION (в����жны ра�личные варианты� ProgramFiles C:\P�og��m F���s ProgramData* C:\P�og��mD��� PROMPT $P$G PSModulePath* C:\W��dows\sys��m32\w��dowsPow��Sh���\v1.0\ Modu��s\ PUBLIC* �:\Us��s\Pub��� SESSIONNAME (в����жны ра�личные варианты� SystemDrive C: SystemRoot C:\WINDOWS TEMP C:\Us��s\us����m�\AppD���\Lo���\T�mp TMP C:\Us��s\us����m�\AppD���\Lo���\T�mp USERDOMAIN имя_компьютера или имя_домена USERNAME имя_пользователя USERPROFILE C:\Do�um���s ��d S�����gs\ имя_пользователя windir C:\WINDOWS
Конфигурирование программы CMD 487 За�и�и, ���еченные �ве�д�ч�а�и (*�, и�начальн� в W��dows XP не ��ределены. Д���лнительн�, ���да в�лючен� ра�ширение ���анд, �тан�в�т�� д��ту�ны�и не���ль�� «виртуальных» �ере�енных �реды ��ружени�. Следующие �ере�енные �реды ��ружени� вычи�л�ют�� в дина�иче���� режи�е, е�ли и���ль�уют�� в ��� �андн�й �тр��е или в �а�етн�� файле. Имя Значение CD Ди�� и �уть те�уще�� �атал��а DATE Те�уща� дата, �тф�р�атир�ванна� �а� в ���анде DAT� TIME Те�ущее вре��, �тф�р�атир�ванн�е �а� в ���анде TIM� RANDOM Случайн�е чи�л� в диа�а��не 0–32 767 ERRORLEVEL Стату� вых�да и� �редыдущей �р��ра��ы CMDEXTVERSION Н��ер вер�ии ра�ширений ���анд CMDCMDLINE К��андна� �тр��а, и���ль��ванна� дл� �а�у��а �а��й ���л�ч�и CMD Н� е�ли ��ределить �ере�енную � �дни� и� этих и�ен, ��ределенн�е �начение в�е�да �а�ен�ет ����й дина�иче���е �начение. Ма��и�альный ра��ер дл� �тдельн�й �ере�енн�й �реды ��ружени� (и��, �на� равен�тва и �начение� ���тавл�ет �192 �айт. О�щий ра��ер в�ех �ере�енных �реды ��ружени� д�лжен �ыть �еньше 65 536 К�айт. Установка исходных значений переменных среды окружения Чт��ы ��ределить �ере�енные �реды ��ружени� на ���т��нн�й ��н�ве, чт��ы эти ��ределени� и�ели �е�т� �ри �ажд�� ваше� вх�де в �и�те�у, щел�ните на �н���е Пуск (S�����, щел�ните �рав�й �н����й �ыши на �ун�те Компьютер (My Compu���� и вы�ерите �ун�т Свойства (P�op�����s�. П��ле эт��� вы�ерите в�лад�у Дополнительные параметры системы (Adv����d� и щел�ните на �н���е Переменные среды (��v��o�m��� V����b��s�. W��dows �т�р�ет диал���в�е ��н�, ���а�анн�е на ри�. 10.5 . В верхней ча�ти диал���в��� ��на ��жн� ��ределить и�х�дные �начени� �ере� �енных дл� вашей учетн�й �а�и�и. Чт��ы д��авить н�вую �ере�енную, ��жн� щел�нуть на �н���е Создать (N�w�, а чт��ы и��енить уже �уще�твующую �ере� �енную, ��жн� щел�нуть на �н���ах Изменить (�d��� или Удалить (D������. В �а��й нижней ча�ти диал���в��� ��на реда�тируют�� и�х�дные �ере�енные, �ред��тавл�е�ые всем учетны� �а�и��� ��ль��вателей. Эти �ара�етры на�тр�й�и ���ут �ыть �треда�тир�ваны т�ль�� �ри ра��те ��д учетн�й �а�и�ью ад�ини�тра� т�ра и ���ут �ыть �т�енены �а�и���и, ��ределенны�и дл� ��н�ретн��� ��ль��� вател�. ▼) Исходные значения переменных среды окружения могут быть также изменены с помощью WSH-сценариев путем изменения коллекций Environment("system") и Environment("user"). Этот вопрос рассматривался в главе 4, в разделе «Работа со средой окружения».
488 Глава 10. Командная строка CMD Рис. 10.5 . Диалоговое окно переменных среды окружения позволяет редактировать исходные значения этих переменных как для вашей учетной записи, так и для всех пользователей Встроенные команды CMD на�р��ую ра����нает и интер�ретирует р�д ���анд. Мн��ие и� этих ���анд �ри��д�т�� �ри на�и�ании �а�етных файл�в — �ы ����в�ри� �� эт�� в �ледующей �лаве. В эт�� ра�деле �еречень в�тр�енных ���анд �ред�тавлен в ��рав�е 10.1 . Не��т�рые и� них ��лее ��др��н� �удут ра����трены ���ле ��и��а, а дру�ие �ред� �т�ит ра����треть в �лаве 11. У �н��их ���анд и�еют�� ����енн��ти, на�ывае�ые расширениями команд. П� у��лчанию ра�ширени� ���анд в�лючены в W��dows 7,V�s�� и XP, н� е�ли нужн�, �ни ���ут �ыть вы�лючены. СПРАВКА 10.1. ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ CMD :label О�редел�ет �е�т� дл� �ерех�да �� ��ерат�ру goto или �� ��ерат�ру call. При�ен�ет�� т�ль�� в �а�етных файлах. @command Вы��лн�ет ���анду �е� ее выв�да на ��н��ль, е�ли та��й выв�д в�лючен. Чаще в�е�� и���ль�ует�� в начале �а�етных файл�в, чт��ы вы�лючить выв�д на э�ран в�ех ���анд: @echo off. a: b: c: ит.д.
Встроенные команды 489 К��анда, ���т��ща� в�е�� лишь и� �у�вы и дв�ет�чи�, и��ен�юща� и�� х�дный или «те�ущий» ди�� на ди��, у�а�анный эт�й �у�в�й. Дл� и��енени� и�х�дн��� или «те�уще��» �атал��а и���ль�уют�� ���анды cd или pushd. assoc [.extension[=[filetype]]] К��анда assoc выв�дит на э�ран или у�танавливает �в��и �ежду ра�ши� рени��и и�ен файл�в, на�ри�ер .DOC, и ти�а�и файл�в, на�ри�ер "Word. Document.12." (Эта инф�р�аци� ��н�вана на �в���х, ��т�рые �xp�o��� ���а�ы� вает и ���в�л�ет реда�тир�вать в диал���в�� ��не, вы�ывае��� �ри щелч�ах на �ун�тах �еню Сервис (Too�s�Свойства папки (Fo�d�� Op��o�s�Типы файлов (F��� Typ�s�.� К��анда assoc ��жет �рини�ать не���ль�� ф�р�. Команда Результат assoc Выв�дит в�е �в��и assoc .xxx Выв�дит ��и��� �в��ей дл� ра�ширени� .xxx assoc .xxx= Удал�ет в�е �в��и дл� .xxx assoc .xxx=type У�танавливает �в��ь дл� ти�а .xxx. Ти� д�лжен �ыть ти��� файл�в, �еречи�ленны� в рее�тре в ра�деле HKE�_CLASSES _ROOT П�ль�ы �т ���анды assoc не�н���, н� �на ��жет ����чь �ы�тр� найти �ри� л�жение, �в��анн�е � �аданны� ра�ширение� и�ени файла. К��анду assoc �ле� дует и���ль��вать дл� выв�да ти�а файла дл� ра�ширени�, а �ате� и���ль��вать ���анду ftype, чт��ы найти �в��анн�е �рил�жение. break Эта ���анда не делает ниче��. При ра��те ��д MS�DOS �на и���ль�ует�� дл� в�лючени� и вы�лючени� �р�вер�и нажати� ����инации �лавиш Ctrl+C. call batchfile [arguments...] call :label [arguments...] Вы��лн�ет вы��в «��д�р��ра��ы». Вы��лн�ет вт�ричный �а�етный файл или �ередает у�равление на у�а�анную �ет�у label внутри те�уще�� �а�етн��� файла. У�равление в��вращает�� ��ерат�ру, идуще�у ���ле ���анды call, ���да ��д�р��ра��а д�х�дит д� ��нца файла или ��ерат�ра exit /B. cd [/d][[drive:]directory] Мен�ет те�ущий ра��чий �атал�� на у�а�анный �уть, ��т�рый ��жет �ыть �тн��ительны� или а���лютны�. Е�ли у�а�ана �у�ва ди��а, и��ен�ет�� �атал�� �� у��лчанию дл� эт��� ди��а, н� ра��чий ди�� (и�х�дный ди�� ��на ���андн�й �тр��и� не �ен�ет�� д� тех ��р, ���а не �удет д��авлен �люч /d. При �т�ут�твии ар�у�ент�в cd выв�дит �ведени� � те�уще� �атал��е. Не тре�ует�� и���ль��вание �авыче�, даже е�ли и�� �атал��а ��держит �р��елы. На�ри�ер, cd \Program Files
490 Глава 10. Командная строка CMD ра��тает �равильн�. Дл� ����щи в �а��лнении длинных �утевых и�ен �ри на� ��ре ���анды cd в ���андн�й �тр��е ��жн� в����ль��вать�� авт��авершение� и�ен. На�ри�ер, на��р cd \Pr � ���ледующи� нажатие� �лавиши Ta b ��жет �авершить �уть "\Program Files" � авт��атиче��и� д��авление� �авыче�, вы� ��лн�е�ы� �и�те��й W��dows. chdir К��анда chdir идентична ���анде cd и и���ль�ует т�чн� та�ие же ар�у�ен� ты. cls Очищает э�ран (��н� ���андн�й �тр��и�. color [bf] П��в�л�ет и��енить цвета ф�на и те��та те�уще�� ��на ���андн�й �тр��и. Ар�у�ент�� дл� цвета �лужит двух�и�в�льный ��д. Первый �и�в�л ��дирует цвет ф�на э�рана, в��тый и� �начений, �еречи�ленных в та�л. 10.1 . Вт�р�й �и�в�л �вл�ет�� ��д�� цвета те��та. На�ри�ер, ���анда color 1e �адает желтый те��т на те�н���ине� ф�не. При �т�ут�твии ар�у�ент�в ���анда color в���танавливает и�х�дные цвета э�рана. Цвета ��на ���андн�й �тр��и ��жн� та�же у�тан�вить чере� е�� диал���в�е ��н� �в�й�тв. copy [/d][/v][/n][/l][/y|/-y][/z][/a|/b] source [/a|/b][+source [/a|/b]]... [destination [/a|/b]] К��анда copy ���ирует файл и� �дн��� �е�та в дру��е, а та�же делает ���ию файла в т�� же �а��� �атал��е, н� ��д дру�и� и�ене�. Пр��тейша� вер�и� ���анды выв�дит и�� �ри�инальн��� (и�х�дн���� файла sourse и и��, ��т�р�е ��лучает ���и�: copy mydata.dat e:\files\april2002data.dat copy mydata.dat mydata.backup целев�е и�� destination ��жет �ыть ��лны� �утевы� и�ене� или, е�ли ���и� и�еет та��е же и��, чт� и �ри�инал, т�ль�� �утевы� и�ене� �а��и. Дл� ���ир�вани� �ра�у не���ль�их файл�в в и�ени source ���ут и���ль� ��вать�� �и�в�лы��а�е�тители . В та��� �лучае и�� destination д�лжн� �ыть и�ене� �а��и. Е�ли �рив�дит�� ��и��� не���ль�их и�х�дных файл�в source, �тделенных дру� �т дру�а �и�в�ла�и �лю�а (+�, �ни ��ъедин�ют�� в �дин целев�й файл destination. Е�ли нужн� �тдельн� ����ир�вать не���ль�� файл�в, и�ена ��� т�рых нев����жн� у�а�ать � ����щью �и�в�л�в��а�е�тителей, нужн� выдать не���ль�� ���анд copy. Дру�ие �лючи, ��т�рые ���ут �ыть у�а�аны в ���андн�й �тр��е, ���а�аны в �ледующей та�лице. Ключ /y ���в�л�ет �ри ���ир�вании �е� види�ых �р��влений �ере�а�и� �ывать лю�ые �уще�твующие файлы, и�еющие и�ена, ��в�адающие � и�ене� целев��� файла. Е�ли у�а�ан �люч /-y, ���анда copy в�е�да делает �а�р�� �еред �ере�а�и�ью.
Встроенные команды 491 Ключ Результат /a Файл ���ирует�� в ASCII (те��т�в��� режи�е. Си�в�л Ctrl+Z в файле ��на� чает «��нец файла» — ��льше данных дл� чтени� нет /b Файл ���ирует�� в дв�ичн�� ф�р�ате (ф�р�ате данных�. (Мне �лючи /a и /b та� ни���да и не �ри��дили�ь, н� е�ли ва� �ни ���а� жут�� нужны�и, �дин или дру��й д�лжен �ыть у�а�ан в начале ���анды copy дл� �ри�енени� �� в�е� файла� или же их ��жн� д��авл�ть ���ле �тдельных и�ен файл�в.� /d Прив�дит � дешифр�в�е целев��� файла, даже е�ли �ри�инальный файл �ыл �ашифр�ван /l Е�ли на�ванный файл �вл�ет�� �и�в�личе���й ��ыл��й, ���ирует�� ��ыл�а, а не �а� файл, на ��т�рую �на ��ылает�� /n Прив�дит � т��у, чт� целев�й ���ии �ри�ваивает�� и�� в ��р�т��� ф�р�ате «�.3» /v Прив�дит � т��у, чт� W��dows �н�ва �читывает ����ир�ванный файл и �рав� нивает е�� � �ри�инал��, чт��ы у�едить�� в идентичн��ти ���ии. Эт�т �люч ����енн� ��ле�ен �ри ���ир�вании на ди��еты, Z�p�ди��и или дру�ие ��енные н��ители /y П��в�л�ет ���ии �ере�а�и�ывать лю�ые �уще�твующие файлы �е� �а�р��а ��дтверждени� /-y За�тавл�ет �ри ���ир�вании в�е�да �а�рашивать ��дтверждение �еред �ере� �а�и�ывание� �уще�твующе�� файла /z П��в�л�ет в����н�вить ���ир�вание ���ле вре�енн��� �т�лючени� �т �ети и выве�ти �р��ре��ивный �р�центный инди�ат�р �ри ���ир�вании. И�� ��ль�ует�� дл� ���ир�вани� �� �ети П�ведение �� у��лчанию �а�лючает�� в �а�р��е, е�ли ���анда copy введена и� ���андн�й �тр��и, и в �т�ут�твии �а�р��а, е�ли ���анда copy и���ль�ует�� в �а�етн�� файле. Эт� ��ведение ��жн� и��енить, �ри�ваива� �ере�енн�й �реды ��ружени� COPYCMD �начение /y или /-y . В лю��� �лучае, е�ли �люч /y или /-y у�а�ан в ���андн�й �тр��е, �н �т�ен�ет у�тан�в�и �� у��лчанию. В �ере�енную �реды ��ружени� COPYCMD дл� у�тан�в�и и�х�дн��� ��ведени� ���анды ���ут �ыть введены лю�ые дру�ие �лючи ���анды copy. Пере�енна� �реды ��ружени� COPYCMD та�же ��а�ывает вли�ние на ���анду move. date [/t | newdate] При �т�ут�твии ар�у�ент�в ���анда date выв�дит те�ущую дату и �а�ра� шивает вв�д н�в�й даты. Дл� ��хранени� те�ущей даты ��жн� нажать �лавишу Ввод. М�жн� та�же у�тан�вить дату �уте� у�а�ани� н�в�й даты newdate в ��� �андн�й �тр��е. Дата д�лжна �ыть �тф�р�атир�вана в ���твет�твии � л��аль� ны� ф�р�ат�� даты. На�ри�ер, в США и���ль�ует�� ф�р�ат ���дд ����� или ���дд����� (��. та�же ���анду time�. С �люч�� /t в ���андн�й �тр��е ���анда date выв�дит дату �е� �ри�лашени� на ее �а�ену. (Он �ри��дит��, � �ри�еру, е�ли нужн� �р��т� ���е�тить дату в те��т�вый выв�д �а�етн��� файла.�
492 Глава 10. Командная строка CMD del [/p][/f][/s][/q][/a[[:]атрибуты]] имя_файла ... Удал�ет файлы, у�а�анные в ���андн�й �тр��е. М�жет �ыть у�а�ан� �дн� и�� или не���ль�� и�ен, та�же ���ут �ыть и���ль��ваны �и�в�лы��а�е�тители. Е�ли �уть не у�а�ан, файлы �удут удалены и� те�уще�� �атал��а. ▼o Удаление файлов с помощью команды del происходит немедленно и безвозвратно. Они не по- падают в корзину. Е�ли у�а�ан� т�ль�� �а�� и�� �атал��а, и� не�� удал�ют�� в�е файлы, х�т� �а� �атал�� не удал�ет�� (дл� е�� удалени� и���ль�ует�� ���анда rd�. На�ри� �ер, �ледующие две ���анды вы��лн�ют �дн� и т� же дей�твие: del c:\temp\*.* del c:\temp В ���андн�й �тр��е эт�й ���анды и���ль�уют�� �ледующие �лючи. Ключ Действие /p Выв�д �ри�лашени� на ��дтверждение удалени� �ажд��� файла /f Принудительн�е удаление файл�в � атри�ута�и т�ль�� дл� чтени� /s Ре�ур�ивный �ере��р ��д�атал���в те�уще�� или у�а�анных �атал���в, удаление лю�ых файл�в � у�а�анны� и�ене� (и�ена�и� /q Режи� ��лчани�. При вв�де в �аче�тве и�ени *.* �а�р�� на ��дтверждение не выдает�� /a Вы��р файл�в на удаление на ��н�вании у�а�анных атри�ут�в файл�в. П�� �ле �люча /a и не����ательн��� дв�ет�чи� вв�дит�� �дин или не���ль�� �ледующих ��д�в атри�ут�в: r — файлы т�ль�� дл� чтени�; s — �и�те�ные файлы; h — ��рытые файлы; a — файлы � у�тан�вленны� архивны� �ит��; i — файлы, ���еченные �а� непроиндексированные; l — т�ч�и ��вт�рн�й ��ра��т�и (��p��s� po���s� и �и�в�личе��ие ��ыл�и; – — �еред ��д�� атри�ута ��начает не. М�жн� у�а�ать ��лее �дн��� атри�ута. На�ри�ер, /a:hr ��начает, чт� удале� нию ��длежат т�ль�� те файлы, у ��т�рых и�еют�� ��а атри�ута: ��рытый и т�ль�� дл� чтени� В�т не���ль�� �ри�ер�в ���анд del: y y del myfile.doc Удал�ет и� те�уще�� �атал��а файл myfile.doc. y y del /q c:\temp\*.* Удал�ет в�е файлы и� �атал��а C:\temp �е� �а�р��а на ��дтверждение. y y del /s c:\temp\*.tmp Удал�ет файлы � ра�ширение� .TMP и� �атал��а C:\temp и в�ех е�� ��д�ата� л���в.
Встроенные команды 493 y y del /a:h *.* Удал�ет в�е файлы и� те�уще�� �атал��а, даже ��рытые файлы. dir имя_каталога ... [/p][/q][/r][/w|/d|/b|/n|/x][/s][/l][/c][/4] [/a[[:]атрибуты]] [/o [[:]поля_сортировки]] [/t[[:]поле_имени]] К��анда dir выв�дит ��и��� и�ен файл�в и (или� ��дчиненных �а���, най� денных в у�а�анных �а��ах. При �т�ут�твии ар�у�ент�в ���анда dir выв�дит ��и��� в�ех файл�в и �а��� в те�уще� �атал��е. Ти��в�й ��и��� �атал��а в�лючает �а��л�в��, ��и��� файл�в � у�а�ание� их ра��ер�в и дат ���ледне�� и��енени�, а та�же ��щее ��личе�тв� файл�в и и���ль��ванных �айт�в. Б�лее ��др��н� ���анда dir �удет ра����трена ���ле эт��� ��рав�чн��� ��и��а. echo on|off echo текст echo. Перва� вер�и� в�лючает или вы�лючает выв�д на ��н��ль ���анд �а�етн��� файла в� вре�� е�� вы��лнени�. Вт�ра� вер�и� �а�и�ывает у�а�анный текст в �тандартный выв�д, и �н ли�� ���вл�ет�� в ��не ��н��ли, ли�� �а�и�ывает�� в дру��й файл или �р��ра��у, е�ли �тандартный выв�д �ерена�равлен. Треть� вер�и� выв�дит ��вершенн� �у�тую �тр��у — �р��т� в��врат �арет�и и �ере� в�д �тр��и, а �ри у�а�ании т�ль�� �а��й ���анды �на ���а�ывает ���т��ние, в ��т�р�� нах�дит��: выв�д в�лючен или выв�д вы�лючен. endlocal (��. setlocal.� erase К��анда erase идентична ���анде del и и���ль�ует т�чн� та�ие же ар�у� �енты. exit [/b][exitcode] Завершает ра��ту те�уще�� ��на ���андн�й �тр��и или �а�етн��� файла. В �а�етн�� файле exit /b �авершает ра��ту �а�етн��� файла (или ��д�р��ра�� �ы �а�етн��� файла� �е� �авершени� ра��ты ���л�ч�и CMD. Не����ательный чи�л�в�й ар�у�ент exitcode у�а�ывает ��д вых�да. С �люч�� /b эта ���анда у�танавливает у�а�анн�е �начение �ере�енн�й �реды ��ружени� ERRORLEVEL, �е� не�� у�танавливает ��д вых�да и� ���л�ч�и CMD. for [modifiers] %variable in (set)do command [arguments] или в �а�етных файлах for [modifiers] %%variable in (set)do command [arguments] Ор�ани�ует ��вт�рн�е вы��лнение ���анды command, � �ере�енн�й variable, �рини�ающей �ри �ажд�й итерации �дн� и� �начений и� у�а�анн��� на��ра �начений set. И�� �ере�енн�й variable у�а�ывает�� �дн�й �у�в�й, чув�твитель� н�й � ре�и�тру. О�ычн� в �аче�тве на��ра set и���ль�ует�� ��и��� �тр���вых �начений или и�ен файл�в (в����жн�, у�а�анных � ����щью �и�в�л�в��а� �е�тителей�.
494 Глава 10. Командная строка CMD Е�ли ���анда for и���ль�ует�� в �а�етн�� файле, �на� �р�цента д�лжен �ыть �р�ду�лир�ван, чт��ы �н не �ыл интер�ретир�ван в �аче�тве ар�у�ента или эле�ента ��д�тан�в�и �ере�енн�й �реды ��ружени�. Е�ли в ���андн�й �тр��е и���ль�ует�� �ере�енна� �реды ��ружени� и ее �начение и��ен�ет�� в �р�це��е вы��лнени� ���анды for, ре�ультат ��жет �ыть не�ред��а�уе�ы�. Д���лнительна� инф�р�аци� д��ту�на в �лаве 11, в ра�деле «Отл�женные ра�ширени�». Б�лее ��др��н� ���анда for �удет ра����трена ���ле эт��� ��рав�чн��� ��и��а. ftype [.extension[=[filetype]]] К��анда ftype �вл�ет�� �артнер�� ���анды assoc и выв�дит или у�танав� ливает �в��и �ежду ти�а�и файл�в, на�ри�ер "Word.Document.8", и ���анда�и, и���ль�уе�ы�и дл� �т�рыти� файл�в � целью их реда�тир�вани�. К��анда ftype ��жет �рини�ать �ледующие ф�р�ы. Команда Результат ftype Выв�д ��и��а в�ех �в��ей ftype Тип_файла Выв�д ��и��а в�ех �в��ей дл� у�а�анн��� ти�а файла ftype Тип_файла = Удаление в�ех �в��ей ftype Тип_файла =команда У�тан�в�а ���анды �т�рыти� дл� у�а�анн��� ти�а файла на у�а�анную ���анду Дл� ���андн�й �тр��и �и�в�лы вида %1 и %* ���а�ывают, �а� лю�ые дру�ие ар�у�енты и� и�х�дн�й ���андн�й �тр��и д�лжны �ыть �ереданы ���анде �т� �рыти�. Дл� ��лучени� д���лнительн�й инф�р�ации � ф�р�ате ар�у�ент�в дл� ���анд ftype �ледует �т�рыть ��н� ���андн�й �тр��и и на�рать ���анду ftype /?. П�ле�н��ть ���анды ftype не �т�ит �реувеличивать, н� �на ��жет ����чь ва� найти �рил�жение, �в��анн�е � �аданны� ра�ширение� файла. Дл� выв�да ти�а файла, �в��анн��� � ра�ширение�, нужн� в����ль��вать�� ���анд�й assoc, а �ате� дл� ��и��а �рил�жени�, �в��анн��� � данны� ти��� файла, нужн� в��� ��ль��вать�� ���анд�й ftype. На�ри�ер, �не нужн� у�нать, �а�а� �р��ра��а �удет и���ль��вана дл� �а�у��а �р��ра��ы на ��ы�е P��� на ��е� ����ьютере. Дл� эт��� � вв�жу две ���анды, выделенные жирны� шрифт��, и ре�ультаты выв�д�т�� ���л�ч��й CMD: C:\book\10>assoc .pl .p l=Perl C:\book\10>ftype Perl Perl="D:\Perl\bin\perl.exe " "%1" %* goto label goto :EOF Пред�и�ывает CMD �ерех�д на �тр��у �а�етн��� файла, начинающе���� � �ет�и :label, и �р�д�лжение �читывани� ��ерат�р�в � эт��� �е�та. К��анда goto :EOF вы�ывает �ерех�д в ��нец файла, в ре�ультате че�� вы��лнение �а�
Встроенные команды 495 �етн��� файла �ре�ращает��. Т� же �а��е делает ���анда exit /B. Эта ���анда и���ль�ует�� дл� �ре�ращени� ��ра��т�и �а�етн��� файла и дл� вых�да и� ��д�р��ра��ы �а�етн��� файла, �а�ущенн�й � ����щью ��ерат�ра call. if условие команда1 [else команда2] или if условие ( команды... ) [else ( команды... )] К��анда if и���ль�ует��, �лавны� ��ра���, в �а�етных файлах дл� вы� ��лнени� ���анд на ��н�ве у�л�вий, вычи�ленных в �р�це��е вы��лнени� �р��ра��ы �а�етн��� файла. К��анды if, call и goto и делают ��ы� �а�етн��� файла на�т��щи� ��ы��� �р��ра��ир�вани�. К��анды if ���ут вы��лн�ть �дну или не���ль�� ���анд, е�ли �р�вер�а условия дала и�тинный ре�ультат. Д���лнительн�е у�л�вие else ���в�л�ет у�а�ать ���анды, ��т�рые �удут вы��лнены, е�ли �р�вер�а у�л�ви� не да�т и�тинный ре�ультат. md foldername К��анда md ���дает н�вый �атал�� (�а��у�. И�� �а��и foldername ��жет �ыть ��лн��тью у�а�анны� �утевы� и�ене�, на�ри�ер c:\music�les, или ��жет �ыть у�а�ан� �тн��ительн� те�уще�� �атал��а. К��да в�лючен� ра�ширение ���анд, и���ль�уе��е �� у��лчанию, ���ан� да md ���дает в�е �р��ежут�чные �атал��и, в�тречающие�� в �ути, е�ли �ни еще не �ыли ���даны. Эт� еще �дн� �ру�н�е у��вершен�тв�вание CMD �� �равне� нию � COMMAND.COM. На�ри�ер, md "c:\musicfiles\folk\baguette quartette" ра��тает даже в т�� �лучае, е�ли �атал�� c:\music�les еще не �уще�твует. ▼) Если в имени создаваемого каталога присутствуют пробелы, аргумент foldername следует взять в кавычки. Если кавычки не поставить, CMD проигнорирует все, что будет идти в командной строке после первого же пробела. mkdir foldername К��анда mkdir идентична ���анде md и и���ль�ует т�чн� та�ие же ар�у�енты. move [/y|/-y][drive:][path]filename[,...] destination или move [/y|/-y][drive:][path]foldername newname К��анда move �ере�ещает файлы � �дн�й �а��и или ди��а в дру�ую �а��у или на дру��й ди��, а �р��е эт��� �на ��жет �ереи�ен�вывать �атал��и. При �ере�ещении файл�в ���анда move ��вершает та��е же дей�твие, �а� и �ерета��ивание файл�в в н�в�е �е�т� �ри ра��те в W��dows �xp�o���. Е�ли файлы �ере�ещают�� в н�вый �атал�� на т�� же �а��� ди��е, �ни не ��двер�
496 Глава 10. Командная строка CMD �ают�� фи�иче����у ���ир�ванию; �и�те�е W��dows нужн� лишь и��енить �а�и�и �атал��а. Е�ли файлы �ере�ещают�� � �дн��� ди��а на дру��й, ���анда move ���ирует файлы в н�в�е �е�т�, а �ате� удал�ет их на и�х�дн�� ди��е. Ар�у�ент или ар�у�енты filename ��жет в�лючать �и�в�лы��а�е�тители дл� �ере�ещени� �ру�� файл�в. Ар�у�ент destination д�лжен �ыть �уте� � н�в�й �а��е или, е�ли �р�и�х�дит �р��т�е ���ир�вание �дн��� файла, �уте�, в�лю� чающи� н�в�е и�� файла. Ключ /y �а�тавл�ет ���анду move �е� види�ых �р��влений �ере�а�и�ывать лю�ые уже �уще�твующие файлы в �а��е destination � та�и�и же и�ена�и. Е�ли же у�а�ан �люч /–y, ���анда move �а�рашивает ��дтверждение �еред �ажд�й �ере�а�и�ью. П� у��лчанию ���анда move �а�рашивает ��дтверждение, е�ли �на введена и� ���андн�й �тр��и, и не �а�рашивает е��, е�ли �на и���ль�ует�� в �а�етн�� файле, ���а у�тан�в�и �� у��лчанию не �удут и��енены в �ере� �енн�й �реды ��ружени� COPYCMD или не �удут �т�енены �люча�и ���андн�й �тр��и /y или /–y. Инф�р�аци� � �ере�енн�й �реды ��ружени� COPYCMD �ыла дана ранее в данн�� ра�деле в ��и�ании ���анды copy. Вт�ра� ф�р�а ���анды �р��т� и��ен�ет и�� �атал��а дл� ��ддерж� �и ��в�е�ти���ти � �режни�и вер�и��и W��dows. П����ль�у в CMD ��� �режне�у реали�ует�� �тар�е на�начение ���анды move, е�ли нужн� �ере�е�тить в�е и�еющие�� в �а��е файлы, �ледует в����ль��вать�� �и�в�ла�и��а�е�ти� тел��и. Ра����три� два �ри�ера: y y К��анда move c:\temp\*.* datafiles �ере�ещает в�е файлы, нах�д�щие�� в �а��е c:\temp в datafiles, чт� интер�ретирует�� �а� и�� ��дчиненн�й �а��и те�уще�� �атал��а. y y К��анда move c:\temp datafiles и��ен�ет и�� c:\temp на c:\data�les. ▼) В Windows 7, Vista и XP переименованием каталогов занимается команда rename, поэтому для этих целей я рекомендую вместо команды move использовать команду rename. path pathlist У�танавливает дл� �ути ��и��а �начение pathlist, �ред�тавл�ющее ����й �еречень �утевых и�ен �а��� � т�ч�а�и � �а��ты�и в �аче�тве ра�делителей. К��анда path, введенна� �е� ар�у�ент�в, выв�дит те�ущий �уть ��и��а. М�жн� та�же у�тан�вить �начение �ути ��и��а, �ри�в�ив �начение pathlist �ере�енн�й �реды ��ружени� PATH в ��ерат�ре set. Е�ли в �а����ни�удь и� и�ен и���ль� �уют�� �р��елы, эти и�ена д�лжны �ыть �а�лючены в �авыч�и, �а� ���а�ан� в �ледующе� �ри�ере: path "c:\program files\microsoft office";c:\windows\system32;c:\windows Значение �ере�енн�й PATH и���ль�ует�� �р��ра��а�и DOS и W��dows, ��эт��у е�ли вы и���ль�уете �р��ра��ы DOS, нужн� ��ль��вать�� т�ль�� ��р�т�и�и вер�и��и «�.3» �ажд��� и�ени, и���ль�уе��� в �ути ��и��а. На� �ри�ер, у�тан�в�а path c:\progra~1\micros~1;c:\windows\system32;c:\windows
Встроенные команды 497 ��редел�ет т�т же ��и��� �а���, н� уже ��в�е�ти�ый �а� � W��dows�, та� и � DOS��р��ра��а�и. pause К��анда pause и���ль�ует�� в �а�етных файлах, чт��ы ���в�лить ��ль��� вателю �р�читать выведенную инф�р�ацию �еред �р�д�лжение� вы��лнени� �р��ра��ы. Она выв�дит в ��н� ���андн�й �тр��и �на�енит�е ����щение «P��ss ��y k�y �o �o����u�» («Дл� �р�д�лжени� наж�ите лю�ую �лавишу...»� и ждет, ���а ��ль��ватель наж�ет лю�ую �лавишу, �а и��лючение� ����инации Ctrl+C или Ctrl+Break, �ре�ращающих вы��лнение �а�етн��� файла. В н�вых �а�етных файлах ��жн� �ри желании в����ль��вать�� ���анд�й set /p, чт��ы выве�ти ��лее дружелю�н�е ����щение. Эта ���анда �удет ра�� ���трена в �лаве 11. popd (��. pushd.� prompt [text] У�танавливает вид �ри�лашени� на вв�д, выв�ди���� в ��не ���андн�й �тр��и �еред �ажд�й ���андн�й �тр���й, ��ределенный ар�у�ент�� text. Е�ли ���анда prompt и���ль�ует�� �е� ар�у�ент�в, �ри�лашение на вв�д в��враща� ет�� � и�х�дны� у�тан�в�а�, $p$g. К ��жалению, � не ра���ла�аю д��тат�чны� �е�т�� дл� ��др��н��� ��и�а� ни� в�ех вариант�в �ри�лашени� на вв�д, н� их ��и��� ��жн� ��лучить �уте� вв�да ���анды prompt /?. Е�ли вы ���т��нн� ра��таете � не���ль�и�и ����ью� тера�и, т� �ледующа� у�тан�в�а �ри�лашени� на вв�д prompt %computername%\%username% $p$g на���нит ва�, � �а��й и�енн� �ашин�й вы ра��таете в данный ���ент. pushd path popd Делает те�ущи� �атал��, у�а�анный в �ути path. Предыдущий те�ущий ди�� и �атал�� �а���инают��, и ���анда popd делает те�ущи� �режний �атал��. К�� �анда pushd ��хран�ет ��личе�тв� �атал���в, ���твет�твующее ��личе�тву ��ен те�уще�� �атал��а, и �ажда� ���анда popd делает те�ущи� т�т �атал��, ��т�рый и���ль��вал�� д� вы��лнени� ���твет�твующей ���анды pushd. В �тличие �т ���анды cd, е�ли �уть, у�а�анный ���анде pushd, ��держит �у�ву ди��а, и�� �ен�ет�� и те�ущий ди��. К��да в�лючен� ра�ширение ���анд, ���вл�ет�� в����жн��ть у�а�ать в ���анде pushd �етев�й �уть (на�ри�ер, \\server\sharename\path�, и �р�и�х�дит авт��атиче���е �т��ражение �у�вы ди��а на �етев�й �уть. Бу�вы начинают�� � Z и вы�ирают�� в ��ратн�� ��р�д�е. К��анда popd авт��атиче��и удал�ет вре�енн�е �т��ражение ди���в. rd [/s][/q] path К��анда rd удал�ет �атал�� � и�ене� path. Е�ли у�а�ать �люч /s, ��жн� удалить �а��у, в�люча� в�е ее файлы и ��д� чиненные �а��и. Эт�т ������ �чень ��а�ен, �����ль�у файлы удал�ют��
498 Глава 10. Командная строка CMD не�едленн� и не �ере�ещают�� в ��р�ину. И���ль�у� �люч /s, �ледует �р�� �вл�ть ����ую ��т�р�жн��ть. В �аче�тве �еры �ред��т�р�жн��ти CMD �а� �рашивает ��дтверждение на удаление цел��� дерева ��д�атал���в. Дл� ��� давлени� выв�да эт��� �а�р��а на ��дтверждение ��жн� в ���андн�й �тр��е в����ль��вать�� �люч�� /q. Е�ли �люч /s не и���ль�ует��, у�а�анный �атал�� д�лжен �ыть �у�ты�, в �р�тивн�� �лучае ���анда выведет ����щение �� �ши��е и не удалит �атал��. ▼▼ Если предпринимается попытка с помощью команды rd удалить вроде бы пустой каталог, а Windows утверждает, что каталог не пустой, посмотрите, нет ли в нем скрытых файлов или папок, набрав команду dir /ah с указанием нужного пути. rem текст П��в�л�ет вве�ти в �а�етный файл �ри�ечание (����ентарий�. Ве�ь у�а�ан� ный текст и�н�рирует��. Та�ие ��ециальные �и�в�лы, �а� |, >, < и &, ���ле rem та�же и�н�рируют��, ��эт��у их ��жн� и���ль��вать в ����ентарии. ren [path]oldname newname Т� же �а��е, чт� и ���анда rename. rename [path]oldname newname Мен�ет и�� файла или �а��и � oldname на newname. Е�ли файл или �а��а не нах�дит�� в те�уще� �атал��е, нужн� у�а�ать ее �уть. Следует �а�етить, чт� в newname �уть в�лючать�� не д�лжен. rmdir К��анда rmdir �вл�ет�� анал���� ���анды rd и и���ль�ует т�чн� та�ие же ар�у�енты. set [name[=[value]]] set /a expression set /p name=promptstring У�танавливает и выв�дит �начени� �ере�енных �реды ��ружени�. У ��н�в� н�й ���анды set и�еет�� р�д ��ле�ных вариант�в. Команда Результат s�� Выв�дит ��и��� в�ех �ере�енных �реды ��ружени� s�� name Выв�дит лю�ую �ере�енную (�ере�енные�, и�ена ��т�рых начинают�� � �у�в name s�� name = Удал�ет �ере�енную �� и�ени name s�� name =value При�ваивает �ере�енн�й name у�а�анн�е �начение value. Зна� чение в���рини�ает�� в �у�вальн�� виде — не нужн� �тавить �р��елы ���ле �на�а равен�тва (=� и не нужн� и���ль��вать �авыч�и, е�ли т�ль�� эти �и�в�лы не д�лжны ���а�ть в �наче� ние �ере�енн�й
Встроенные команды 499 В ���анде set ��жн� и���ль��вать ��д�тан�в�у �ере�енных. На�ри�ер, чт��ы д��авить �тр���в�е �начение c:\batchfiles в начал� �уще�твующе�� �начени� �ере�енн�й PATH, ��жн� в����ль��вать�� �ледующей ���анд�й: set path=c:\batchfiles;%path% В �начени� �ере�енных �реды ��ружени� ��жн� в�тавл�ть ��ециальные �и�в�лы, на�ри�ер >, <, & и |, н� �еред ни�и нужн� ����ательн� �тавить �и�в�л в�тав�и ^, чт��ы �ни не ���ли интер�ретир�вать�� �а� ���анды �ерена�равле� ний или �а� ра�делители ���анд. На�ри�ер, ���анда set envvar=some^|text ��редел�ет �ере�енную �реды ��ружени� �� и�ени envvar, и�еющую �начение some|text. К��да в�лючен� ра�ширение ���анд, ���анда set ���в�л�ет вы��лн�ть чи�ленные ра�четы и выв�дить �ри�лашение на вв�д. Инф�р�аци� � вычи�� лени�х � ����щью ���анды set �удет ра����трена в данн�й �лаве в ра�деле «Вы��лнение чи�ленных ра�чет�в в �а�етных файлах» (�. 50��. Инф�р�аци� � выв�де �ри�лашений на вв�д �удет ра����трена в �лаве 11, в ра�деле «При� �лашение на вв�д данных». setlocal [ENABLEEXTENSIONS|DISABLEEXTENSIONS] [ENABLEDELAYEDEXPANSION|DISABLEDELAYEDEXPANSION] команды ... endlocal К��анда setlocal ��хран�ет и в���танавливает ���т��ние �реды ��ружени� �а�етн��� файла. Она ��хран�ет �а�и�ь в�ех �ере�енных �реды ��ружени�, �у�вы те�уще�� ди��а, те�ущих ра��чих �атал���в в�ех ди���в и ���т��ние ра�ширени� ���анд и �тл�женн��� ра�ширени� �реды. К��анда endlocal в��� �танавливает эти у�тан�в�и, �ри�ваива� и� �режние �начени�. Не����ательные ар�у�енты ���анды setlocal ���в�л�ют в�лючать или вы�лючать ра�ширение ���анд и (или� �тл�женн�е ра�ширение. (Отл�женн�е ра�ширение ра���атри� вает�� в �лаве 11.� На�тр�й�и в��вращают�� в �режнее ���т��ние ���ле ���анды endlocal или в ��нце �а�етн��� файла. Эт� ��начает, чт� ���анду setlocal, и�еющую�� в �а�етн�� файле, нель�� и���ль��вать дл� и��енени� �ере�енных �реды ��ру� жени� в ра�чете на т�, чт� эти и��енени� ��танут�� в �иле ���ле �авершени� вы� ��лнени� �а�етн��� файла и в��вращени� у�равлени� ��ну ���андн�й �тр��и. shift [/n] Эта ���анда �дви�ает ар�у�енты �а�етн��� файла влев�. Не����ательный ар�у�ент /n ���в�л�ет начинать �дви� � ар�у�ента ��д н��ер�� n, не �атра�ива� �ри эт�� ар�у�енты � �еньши�и н��ера�и. Б�лее ��др��н� ���анда shift ра�� ��атривает�� в �лаве 11. К��анда shift и���ль�ует�� в т�� �лучае, ���да нужн� ��ра�атывать �ере� �енн�е ��личе�тв� ар�у�ент�в, �ереданн�е �а�етн��у файлу; ваш �а�етный
500 Глава 10. Командная строка CMD файл ��жет ��ра��тать ар�у�ент %1, �р�и�ве�ти �дви� влев� и ��вт�р�ть �р�� це�� д� тех ��р, ���а ар�у�енты не �а��нчат��. start "title" [/Dpath][/I][/MIN | /MAX] [/SEPARATE | /SHARED] | [/AFFINITY value] | [/LOW | /BELOWNORMAL | /NORMAL | /ABOVENORMAL | /HIGH | /REALTIME] [/WAIT][/B] command [arguments] За�у��ает ���анду в н�в�� ��не. У�а�анна� ���анда ��жет �ыть �р��ра���й W��dows, ��н��льн�й �р��ра���й или даже и�ене� файла д��у�ента. В ��� �ледне� �лучае CMD �а�у��ает �в��анн�е � данны� д��у�ент�� �рил�жение. Е�ли ���анда start и���ль�ует�� в �а�етн�� файле, �а�етный файл �р�д�лжает вы��лн�ть��, не �жида� вых�да и� �а�ущенн�й �р��ра��ы. ▼▼ Это исключительно полезная команда. Можно набрать такую команду, как start some�le.doc, для запуска Microsoft Word и открытия указанного файла. Правда, здорово?! За�у���� �р��ра��ы у�равл�ют �ледующие не����ательные ар�у�енты ���андн�й �тр��и. Аргумент Описание "title" У�танавливает в �аче�тве �а��л�в�а ��на у�а�анн�е �тр���в�е �на� чение. П� у��лчанию и� �удет на�вание и���ль�уе��й �р��ра��ы /Dpath За�у��ает �р��ра��у в у�а�анн�� �атал��е /I За�у��ает �р��ра��у � и�х�дны�и у�тан�в�а�и �ере�енных �реды ��ружени�, а не � ���ией те�ущих у�тан�в�� /MIN За�у��ает �вернут�е ��н� /MAX За�у��ает ра�вернут�е ��н� /SEPARATE Е�ли �р��ра��а �вл�ет�� 16�ра�р�дн�й �р��ра���й W��dows, эт�т ар�у�ент �а�у��ает ее в �тдельн�� адре�н�� �р��тран�тве � ее ���� �твенн�й ���ией �реды W��16 /SHARED Е�ли �р��ра��а �вл�ет�� 16�ра�р�дн�й �р��ра���й W��dows, эт�т ар�у�ент �а�у��ает ее в ��ще� адре�н�� �р��тран�тве, �де �на ��жет в�аи��дей�тв�вать � дру�и�и 16�ра�р�дны�и �р��ра��а�и W��dows. (Ар�у�енты /SEPARATE и /SHARED не �ри�ен�ют�� в 64�ра�р�дных W��dows��и�те�ах, ��т��у чт� �ни не ���ут �а�у��ать 16�ра�р�дные �р��ра��ы W��dows.� /AFFINITY value На �н����дерных или �н����р�це���рных �и�те�ах ��раничивает �р�це�� �а�у���� на тех �р�це���рах, ��т�рые у�а�аны в ше�тна� дцатеричн�� �начении value. На�ри�ер, �начение value, равн�е 1, ��раничивает �р�це�� �ервы� �р�це���р��, а �начение value, равн�е 3, ��раничивает е�� �ервы�и дву�� �р�це���ра�и
Встроенные команды 501 Аргумент Описание /LOW /BELOWNORMAL /NORMAL /ABOVENORMAL /HIGH /REALTIME За�у��ают �р��ра��у � ����наченны� �ла���� �ри�ритета. При и���ль��вании ар�у�ента /REALTIME �ледует �р��вл�ть ����ую ��т�� р�жн��ть, �����ль�у �н ���в�л�ет �р��ра��е ра��тать, и��люча� �ра�тиче��и в�е ��тальн�е. Е�ли �р��ра��а ��ведет �е�� не�ра� вильн�, дл� ее ��тан�в�и �ридет�� вы�ывать Ди��етчер �адач. П�� �в�л�ют �а�у��ать �р��ра��у в �а�етных файлах � ра�ны� ур�вне� �ри�ритета /WAIT За�тавл�ет ���анду start �жидать вых�да и� �р��ра��ы и т�ль�� ���ле эт��� �р�д�лжить ра��ту /B Дл� �р��ра�� ���андн�й �тр��и (��н��льных �р��ра��� эт�т ар�у� �ент �а�у��ает �р��ра��у в те�уще� ��не. П� у��лчанию у�равление �р��ра���й � ����щью ����инации Ctrl+C вы�лючает��, н� ����ина� ци� Ctrl+Break, е�ли ра��ту �р��ра��ы нужн� �рервать, �р�д�лжает дей�тв�вать time [/t | newtime] Е�ли ар�у�енты не и���ль�уют��, ���анда time выв�дит те�ущее вре�� дн� и �а�рашивает вв�д н�вых ���а�аний вре�ени. Дл� ��хранени� те�у� щих у�тан�в�� ��жн� нажать Ввод. При и���ль��вании в ���андн�й �тр��е �люча /t ���анда time выв�дит вре�� �е� �а�р��а на �а�ену ���а�аний. Пред� на�начена дл� и���ль��вани� в �а�етных файлах. На�ри�ер, дл� �а�и�и даты и вре�ени �а�у��а �а�етн��� файла ��жн� в����ль��вать�� �ледующи�и ���анда�и: echo Пакетный файл был запущен >batchlog.txt date /t >>batchlog.txt time /t >>batchlog.txt echo. >>batchlog.txt другие команды >>batchlog.txt Наверн�е, дата и вре�� лучше �ы ���трели�ь на �дн�й �тр��е, дл� че�� ��ж� н� �ыл� �ы и���ль��вать ���анду echo %date% %time% >>batchlog.txt. М�жн� та�же у�тан�вить вре��, у�а�ав н�вые у�тан�в�и ча��в в ���андн�й �тр��е. Вре�� д�лжн� и�еть ф�р�ат, ���твет�твующий л��альны� у�тан�в�а�. П��а�ани� вре�ени ��жн� вв�дить �а� � у�а�ание�, та� и �е� у�а�ани� �е�унд, в 24�ча��в�� ф�р�ате или в ф�р�ате AM�PM, �а� в �ледующих �ри�ерах: time 18:58 time 6:58:20 PM title [string] У�танавливает в �аче�тве �а��л�в�а те�уще�� ��на ���андн�й �тр��и �на� чение string. П� у��лчанию �а��л�в�� �удет и�еть �начение Командная строка (Comm��d P�omp��, � �ри ра��те �р��ра��ы �р��е эт��� в ней �удет �ри�ут� �тв�вать и ��держи��е ���андн�й �тр��и.
502 Глава 10. Командная строка CMD type [path]filename За�и�ывает у�а�анный файл в �тандартный выв�д. О�ычн� эт� ��начает, чт� файл выв�дит�� в ��не ���андн�й �тр��и. (Дл� длинных файл�в лучше в����ль��вать�� ���анд�й more, �����ль�у �на ��е��ечивает выв�д файла в ��� �тр�чн�� режи�е.� К��анду type ��жн� та�же и���ль��вать дл� д��авлени� ��держи���� �дн��� файла � ��держи���у дру���� файла. На�ри�ер, �ледую� щие ���анды �а�у��ают ���анду ping, выв�д�т ре�ультат, а та�же д��авл�ют ре�ультат в файл журнала ре�и�трации, ���ирающий н�вую инф�р�ацию �ри �ажд�� �а�у��е ���анды: @echo off cls echo Тестирование подключения к mycompany.com.. . ping www.mycompany.com 2>&1 >ping.out echo Результаты: type ping.out echo. >>ping.log echo Тест запущен в >>ping.log date /t >>ping.log time /t >>ping.log type ping.out >>ping.log del ping.out ver Выв�дит �ведени� � вер�ии W��dows, у�тан�вленн�й на ваше� ����ьютере. verify [on | off] К��анда verify on �а�тавл�ет W��dows вы��лн�ть ��ратн�е чтение в�ех данных, �а�и�анных на же�т�ий ди�� �ри�ладны�и �р��ра��а�и �ра�у же ��� �ле �а�и�и, чт��ы у�едить��, чт� ���ут �читывать�� �равильные данные. Эт� ����енн� ��ле�н� �ри �а�и�и на �и��ий ди�� или на лю�ые дру�ие ��енные н��ители. К��анда verify off вы�лючает �р�вер�у �ет�д�� чтени� ���ле �а�и�и. К�� �анда verify �е� ар�у�ент�в выв�дит �в�ю те�ущую у�тан�в�у. П� у��лчанию режи� �р�вер�и вы�лючен. Дл� в�лючени� верифи�ации т�ль�� � ���анд�й copy и���ль�ует�� �люч /V. vol [drive:] Выв�дит �ет�у и �ерийный н��ер т��а ди���в��� �рив�да. П� у��лчанию ���анда vol выв�дит инф�р�ацию дл� те�уще�� ди��а. В ���андн�й �тр��е ��жн� у�а�ать и дру��й ди��. Расширенные команды В�тр�енные ���анды CMD �вл�ют�� ра�ширенны� на��р�� ���анд, ра���� �навае�ых �тар�й ���л�ч��й COMMAND.COM sh���, и �н��ие и� них ��лучили ра�ширени� �а �чет н�вых �в�й�тв. Ра�ширени� ���анд в�лючены �� у��лчанию
Встроенные команды 503 в W��dows 7,V�s�� и XP, х�т�, е�ли ��тре�ует��, их ��жн� вы�лючить. В та�л. 10.3 �еречи�лены ра�ширенные ���анды и д��авленные в них �в�й�тва. Е�ли ра�ширени� вы�ывают �р��ле�ы, на�ри�ер, е�ли нужн� и���ль��вать �тарые �а�етные файлы, ��т�рые не ра��тают � н�вы�и вер�и��и ���анд, а ��н�� вить их нев����жн�, ��жн� �а�у�тить CMD � �т�люченны�и ра�ширени��и. Эт�т в��р�� ра���атривает�� в ра�деле «За�у�� CMD». Таблица 10.3. Команды, измененные расширениями команд Команда Свойства, добавленные расширениями команд assoc Д��ту�на т�ль�� �ри в�люченных ра�ширени�х call call :label М�дифи�ат�ры ��д�тан�в�и ар�у�ента (на�ри�ер, %~f1� cd / chdir Ключ /D, и��ен�ющий те�ущий ди��. В и�ени те�уще�� �атал��а и���ль�уют�� �у�вы в верхне� и нижне� ра�р�де в ��лн�� ���твет�твии � те�, �а� �ни и���ль�уют�� в е�� реаль� н�� и�ени color Д��ту�на т�ль�� �ри в�люченных ра�ширени�х date Ключ /T �рив�дит � выв�ду даты �е� �а�р��а на вв�д н�в�й даты del / erase Ключ /S �рив�дит � выв�ду и�ен удал�е�ых файл�в endlocal В���танавливает и�х�дные у�тан�в�и EXTENSIONS и DELAYEXPANSION for (Д��ту�н� �н�же�тв� �лючей; �� ��и�ание ���анды for.� ftype Д��ту�на т�ль�� �ри в�люченных ра�ширени�х goto goto :EOF if...else /I, IF CMDEXTVERSION, IF DEFINED Та�ие �равнени�, �а� LEQ md / mkdir С��дание �ри не��х�ди���ти �р��ежут�чных �атал���в prompt Ключи $+ и $M pushd / popd Д��у��ает и���ль��вание �етев��� �ути и �т��ражение на �у�ву ди��а set Ключи /A и /P. К��анда set � ча�тью и�ени выв�дит ���твет�твующие эт�й ча�ти и�ена setlocal Ар�у�енты ENABLE... и DISABLE... shift Ключ /n start За�у��ает неи���лн�е�ые файлы, �риентиру��ь на ра�ширени� файл�в. И���ль�ует ра�ширение PATHEXT. Не �жидает вых�да и� ���анд W��32 �еред выдачей н�в��� �ри�лашени�. И���ль�ует �уть COMSPEC, ���да �а�у��ает�� ���анда CMD. За�у��ает �xp�o���, е�ли ���анда �вл�ет�� и�ене� �а��и time Ключ /T �рив�дит � выв�ду вре�ени �е� �а�р��а на вв�д н�в��� вре�ени В не���ль�их �ледующих ра�делах �удут �редл�жены д���лнительные �ведени� � не��т�рых наи��лее важных ���андах.
504 Глава 10. Командная строка CMD Вывод списка файлов с помощью команды Dir К��анда dir �вл�ет�� �дн�й и� наи��лее ��ле�ных �р��ра�� ���андн�й �тр��и. Х�т� �ача�тую дл� �р����тра ��держи���� �а��и эффе�тивнее и���ль��вать �xp�o���, у ���анды dir в ру�аве �ри�р�тан� не���ль�� �е�рет�в, � ��т�рых �т�ит у�нать. Бе� ар�у�ент�в ���андн�й �тр��и dir выв�дит ��и��� файл�в и �атал���в (�а� ����, и�еющих�� в те�уще� �атал��е. Ра����три� �р��т�й ли�тин�: Том в устройстве C не имеет метки. Серийный номер тома: 3089-70FD Содержимое папки C:\Users\Nick 05.10.2011 19:30 <DIR> . 05.10.2011 19:30 <DIR> .. 05.10.2011 19:30 <DIR> .gem 05.10.2011 19:27 32 .gitconfig 05.10.2011 19:27 <DIR> .ssh 05.10.2011 18:53 <DIR> Contacts 31.10.2011 13:36 <DIR> Desktop 05.10.2011 18:53 <DIR> Documents 07.10.2011 00:27 <DIR> Downloads 05.10.2011 18:53 <DIR> Favorites 05.10.2011 18:53 <DIR> Links 05.10.2011 18:53 <DIR> Music 05.10.2011 18:53 <DIR> Pictures 05.10.2011 18:53 <DIR> Saved Games 05.10.2011 18:53 <DIR> Searches 05.10.2011 18:53 <DIR> Videos 1 файлов 32 байт 15 папок 16 822 136 832 байт свободно (Е�ли д� �их ��р вы ��ль��вали�ь т�ль�� ����ьютера�и на ��н�ве M�����osh или W��dows, ва�, наверн�е, трудн� �удет ��верить, чт� ��в�е� не�н��� лет на�ад эт� �ыл единственный ������ �р����тра и ��наружени� файл�в.� А чт� та��е . и . .? Эт� две �транные �а�и�и, �ред�тавл�ющие те�ущий �атал�� и е�� р�дитель��ий �атал��. Се��дн� �ни уже фа�тиче��и утратили �в�е на�на� чение; эт� �р��ра��ный э�вивалент ваше�� а��енди��а, ��тавший�� �т дальне�� р�д�твенни�а U��x �и�те�ы MS�DOS, и вы ��жете их �р�и�н�рир�вать. Далее в ли�тин�е ���а�аны и�ена файл�в и ��д�атал���в, нах�д�щих�� в �ата� л��е, а та�же их ра��еры и даты ���ледних и��енений. В �авершение в не� у�а�ы� вает�� ит���в�е ��личе�тв� файл�в и их ра��ер�в. В ��рав�е 10.1 �ыли ���а�аны в�е �лючи ���андн�й �тр��и, ��т�рые ��жн� и���ль��вать � ���анд�й dir. В данн�� ра�деле �удут ра����трены т�ль�� �а�ые ��ле�ные и� них. Разбиение длинных листингов на страницы Е�ли ���анда dir выв�дит ��льше и�ен, че� их ��жет ���е�тить�� на �дн�� э�ране, вы ��жете �р��рутить ��и��� на�ад, и���ль�у� ��л��у �р��рут�и ��на ���андн�й �тр��и. М�жн� та�же ��тре��вать �т ���анды dir выв�дить на э�ран
Встроенные команды 505 т�ль�� �� 24 �тр��и, у�ещающие�� в ��не и�х�дн��� ра��ера, д��авив � лю��й ���анде dir �люч /p. К��да ли�тин� �удет и�учен, дл� выв�да �ледующей ��рции на э�ран �ледует нажать �лавишу Ввод. На�ри�ер, ���анда dir %windir% /p выв�дит ���траничн� ��держи��е �а��и W��dows. Поиск конкретных файлов М�жн� у�а�ать �тдельные и�ена файл�в и �а���, и���ль�у�, е�ли нужн�, �и�� в�лы��а�е�тители, дл� ��раничени� ли�тин�а у�а�анны�и файла�и и �е�та�и. К��анда dir *.exe выв�дит ��и��� т�ль�� файл�в, чьи и�ена ��анчивают�� на .ex e, а ���анда dir m*.* выв�дит т�ль�� файлы, чьи и�ена начинают�� на �у�ву m. К лю��й ���анде dir ��жн� д��авить �люч /s, чт��ы �а�тавить ���анду в�лю� чать в ли�тин� в�е ��д�атал��и т�й �а��и, в ��т�р�й �на начала �в�й ��и��. На�ри� �ер, dir c:\*.mp3 /s /p у�а�ывает �е�та в�ех MP3�файл�в, нах�д�щих�� �де�ли�� на ди��е C:, �����ль�у �на �а�у��ает�� в ��рнев�� �атал��е C:\ и �р�вер�ет в�е ��д�атал��и. Ра�у�еет��, дл� ��д��н��� р�да �адач ��жн� в����ль��вать�� ��н�� ��и��а W��dows, н� ���да ��н� ���андн�й �тр��и уже �т�рыт�, ин��да �ы�трее на�рать ���анду, ��д��ную эт�й, че� в��ить�� � W��dows. Ра�у�еет��, чт��ы ни и���ль��вал��ь, dir или ��н� ��и��а, �удут видны т�ль�� файлы в �а��ах, на ��� т�рые и�еют�� �рава на чтение. Создание листингов в виде столбцов При и���ль��вании �лючей /w и /d ли�тин� и�ен файл�в ра��ивает�� на не���ль� �� �т�л�ц�в; т�чн�е ��личе�тв� �т�л�ц�в трудн� �ред��а�ать, �����ль�у ���анда dir делает �т�л�цы шире или  уже в �ави�и���ти �т ра��ера ��в�тречавше���� ей �а���� длинн��� и�ени файла. Ра�ница �ежду дву�� �люча�и ���т�ит в т��, чт� �люч�� /w �адает�� выв�д и�ен �� �тр��а�, а �люч�� /d — �� �т�л�ца�. Ли�тин� �ри и���ль��вании �люча /w вы�л�дит �ледующи� ��ра���: Том в устройстве C не имеет метки. Серийный номер тома: 3089-70FD Содержимое папки C:\simh\ibm1130\sw\dmsr3v12 [.] [..] ABOOTPT.asm ABOOTPT.bin ABOOTPT.lst ASYSLDR1.asm ASYSLDR1.bin ASYSLDR1.lst CSYSLDR2.asm CSYSLDR2.bin CSYSLDR2.lst DBOOTCD.asm DBOOTCD.bin DBOOTCD.lst DCILOADR.asm DCILOADR.bin DCILOADR.lst dmsr2v12.zip DSYSLDR1.asm dsysldr1.bin dsysldr1.lst FSYSLDR2.asm FSYSLDR2.bin FSYSLDR2.lst JADUPCO.asm ... Ключи /w и /d ����енн� ��ле�ны дл� ��лучени� ра��ечат�� ��и���в ваших файл�в. Распечатка листингов каталогов Ва� не ра�дражал� �т�ут�твие в W��dows �xp�o��� ���анды выв�да на �ечать? В�т! Эт� �а� ра� та �а�а� ��ла�ть, в ��т�р�й ���андна� �тр��а де��н�трирует �в�и ��лее шир��ие в����жн��ти. Ли�тин� �атал��а ��жн� �а�р��т� ра��ечатать и� ���андн�й �тр��и.
506 Глава 10. Командная строка CMD Выв�д лю��й ���анды dir ��жн� �ерена�равить на �етев�й �ринтер или на ваш л��альный �ринтер, е�ли �н ��ъ�влен ��щи�, и���ль�у� ���анды �ледующе�� вида: cd \Users\\bknittel\Documents\My Music dir >\\localhost\printername �де printername — эт� ��щее и�� ваше�� �ринтера. Н� эта техн�л��и� не дает ��� �анду �ринтеру на �авершение ра��ечат�и ���ледней �траницы ли�тин�а, и ва�, ���рее в�е��, �ридет�� и�вле�ать ее и� �ринтера, ��дав ���твет�твующую ���анду вручную. ▼▼ Можно усилить контроль над процессом, перенаправив листинг в файл, а затем распечатав его с помощью Блокнота или текстового процессора. Но если перенаправить листинг содержимого каталога в файл в том же каталоге, этот файл появится в выводимой информации. Этого можно избежать, указав для файла листинга другой каталог: cd \Users\bknittel\Documents\My Music dir /s >..\list notepad ..\list del ..\list Обратите внимание: символы .. представляют каталог на один уровень выше того каталога, листинг которого выводится. После распечатки листинга с помощью Блокнота временный файл можно удалить. Получение списков имен файлов В и�х�дн�� ф�р�ате ли�тин�а �атал��а выв�д�т�� даты, ра��еры, ���а�ани� вре�ени, �а��л�в�чна� и ит���ва� инф�р�аци�. Ключ /b �а�тавл�ет ���анду dir выв�дить т�ль�� ��и��� и�ен. Выв�д та���� ли�тин�а ��жет �ыть �ерена�равлен в файл, и���ль�уе�ый далее в �аче�тве вв�да в �р��ра��ы, �а�етные файлы или WSH��ценарии, ��т�ры� в �аче�тве вв�да нужен ��и��� и�ен файл�в. При и���ль��вании �лючей /s и /b ���анда dir выв�дит ��лный �уть дл� в�ех �т��ражае�ых файл�в. На�ри�ер, и� ��е�� �атал��а W��dows ���анда dir /b /s *.wav выв�дит длинный ��и��� файл�в, начинающий�� �� �ледующих �тр��: C:\WINDOWS\Help\Tours\WindowsMediaPlayer\Audio\Wav\wmpaud1.wav C:\WINDOWS\Help\Tours\WindowsMediaPlayer\Audio\Wav\wmpaud2.wav ... C:\WINDOWS\Help\Tours\WindowsMediaPlayer\Audio\Wav\wmpaud9.wav C:\WINDOWS\Media\chimes.wav C:\WINDOWS\Media\chord.wav C:\WINDOWS\Media\ding.wav C:\WINDOWS\Media\notify.wav ... Отсортированные списки П� у��лчанию ���анда dir ��ртирует файлы �� и�ена�. И���ль�у� �люч /o и ��� �тавив �ра�у �а ни� �дну или не���ль�� �у�в, у�а�ывающих, �а�ую ча�ть инф�р� �ации � файле нужн� и���ль��вать дл� ��ртир�в�и, ��жн� выве�ти ��и��� файл�в в �а����ни�удь дру��� ��р�д�е. Ранее в данн�й �лаве, в ��рав�е 10.1 �ыл ���а�ан
Встроенные команды 507 ��лный �еречень �лючей ���анды sort. Не��т�рые наи��лее ��ле�ные �лючи �ред�тавлены в �ледующей та�лице. Ключ Сортировка /o-s П� ра��еру. Сначала �а�ые ��льшие /odn П� дате. Сначала �а�ые �тарые, �ате� �� и�ени /o-dn П� дате. Сначала �а�ые н�вые, �ате� �� и�ени /oen П� ти�у (�� ра�ширению�, �ате� �� и�ени Вывод в списке скрытых файлов О�ычн� ��рытые файлы в ли�тин�и, ���давае�ые ���анд�й dir, не ���адают. (А �а� же иначе?� Н�, д��авив в ���андную �тр��у �люч /ah, ��жн� �а�тавить dir выве�ти в ��и��е ��рытые файлы. Ключ /a �а�тавл�ет ���анду dir выве�ти ��и��� файл�в � у�а�анны�и атри�ута�и, а �у�ва h ���а�ывает, чт� ва� нужн� увидеть ��рытые (h�dd��� файлы. Ключ /a ��жн� и���ль��вать дл� вы��ра файл�в на ��н�ве дру�их атри�ут�в, �еречи�ленных в ��рав�е 10.1 . На�ри�ер, �люч /as ��е��ечивает выв�д т�ль�� �и�те�ных файл�в, �люч /a-s — т�ль�� тех файл�в, ��т�рые не имеют �ет�и �и� �те�ных файл�в и т. д . Локализация альтернативных файловых потоков Файл�ва� �и�те�а W��dows NTFS ��ладает �в�й�тв��, ���в�л�ющи� ��хран�ть внутри файла не т�ль�� �а� файл. Эт� �в�й�тв� на�ывает�� альтернативны�и файл�вы�и ��т��а�и и ���в�л�ет W��dows хранить инф�р�ацию �тдельн� �т ��н�вн��� ��держи���� лю���� файла и �араллельн� е�у. W��dows и���ль�ует эт� �в�й�тв� дл� хранени� �ашифр�ванн�й инф�р�ации � �ажды� файл��, �ащищен� ны� шифр�ванн�й файл�в�й �и�те��й (����yp��d F��� Sys��m�, и дл� хранени� �ар�ера, ���ечающе�� �а�руженный файл в �аче�тве ��лученн��� и� ��тенциальн� ��а�н��� и�т�чни�а. Вред�н��ные �р��ра��ы ���ут та�же хранить внутри альтер� нативных файл�вых ��т���в виру�ы. Е�ли, � �ри�еру, та��й файл �т�рыть � ��� ��щью Бл��н�та, вы увидите т�ль�� лишь �е���идный те��т, �����ль�у Бл��н�т ���трит т�ль�� на «��н�вн�й» ��т�� файла. И���ль�у� ���анду dir � �люч�� /r, ��жн� ��лучить ли�тин� лю�ых альтерна� тивных ��т���в, �в��анных � файл�� или файла�и. На�ри�ер, ли�тин�, выданный ���анд�й dir /r дл� �р��ра��н��� файла, �а�руженн��� �н�ю и� Интернета, и�еет �ледующий вид: Содержимое папки C:\Users\bknittel 27.05.2010 18:43 526 848 demo5.exe 26 demo5.exe:Zone.Identifier:$DATA 1 файлов 526 848 байт 0 папок 1 134 792 704 байт свободно О�ратите вни�ание: в ��и��� выведен� два и�ени, н� чи�лит�� в не� т�ль�� �дин файл. Д���лнительный ��т�� на�ывает�� «Zo��.Id��������», и �н �ыл д��авлен
508 Глава 10. Командная строка CMD � demo5.exe �и�те��й W��dows, ���да � �а�ружал эт�т файл. Б�льшин�тв� �р��ра�� (и Бл��н�т в т�� чи�ле� не ���в�л�ют увидеть ��держи��е альтернативных ��т�� ��в, ���а вы не введете ��лн�е и�� �е� �а�лючительн�й ча�ти :$DATA. На�ри�ер, в данн�� �лучае �ра��тает и�� «d�mo5.�x�:Zo��.Id��������». Чт��ы �ты��ать в�е файлы, и�еющие альтернативные ��т��и, ��жн� в����ль� ��вать�� ���анд�й �ледующе�� вида: dir /s /r | findstr /c:"$DATA" В ваших вре�енных �а��ах I������� �xp�o��� наверн��а �тыщет�� �а��а та�их файл�в. Установка значений переменных с помощью команды set С� вре�ен �ерв�й вер�ии MS�DOS у ��ы�а �а�етных файл�в M���oso�� на�люда� ли�ь два �р��т� ��ра�ительных нед��тат�а: нев����жн��ть вы��лнени� �тр���вых и чи�ленных ра�чет�в и нев����жн��ть выдачи �а�р���в на вв�д инф�р�ации. При в�люченных ра�ширени�х ���анд альтернативные вер�ии ���анды set �����ают в �начительн�й �те�ени и��авить�� �т этих �р��ле�. Выполнение численных расчетов в пакетных файлах К��анда set /A выражение вычи�л�ет �тр��у, в���рини�а� ее �а� �ате�атиче���е выражение. Лю�ые и�еющие�� в выражении ��ерат�ры �ри�ваивани� �а�тавл�ют CMD ф�р�атир�вать ре�ультат в виде �тр��и и �ри�ваивать е�� ��и�ен�ванн�й �ере�енн�й �реды ��ружени�. В выражении и���ль�ует�� �тандартный �ате�а� тиче��ий �инта��и�. В �ледующей та�лице �еречи�лены в ��р�д�е у�ывани� �ри� �ритетн��ти те ��ерат�ры, ��т�рые ��жн� и���ль��вать в выражении. Операторы Описание () Гру��ир�в�а выражени� !~- Унарные ��ерат�ры: Булев� НЕ, ��ра�р�дн�е инвертир�вание и ариф� �етиче���е �трицание */% У�н�жение, деление, ��лучение ��тат�а +- Сл�жение, вычитание << >> П�ра�р�дный �дви� влев�, в�рав� & П�ра�р�дн�е И |^ П�ра�р�дн�е ИЛИ и и��лючающее ИЛИ = *=/=%= При�ваивание и ��ъединенные ��ерат�р��ри�ваивание +=-=&=^= |= <<= >>= О�ерат�ры, ���аи��тв�ванные у ��ы�а �р��ра��ир�вани� C. A+= 3т�же�а��е,чт�иA=A +3 , Ра�делитель не���ль�их выражений Дл� ����начени� �ере�енных �реды и���ль�уют�� лю�ые �у�венн��цифр�� вые �л�ва. Е�ли и���ль�уе�а� в выражении ��и�ен�ванна� �ере�енна� �реды
Встроенные команды 509 ��ружени� не ��ределена или не ��держит чи�л�, ее �начение �рини�ает�� �а 0. Пере�енные ра���атривают�� �а� де��тичные чи�ла, �а и��лючение� чи�ел, на� чинающих�� � 0x, ��т�рые ра���атривают�� �а� ше�тнадцатеричные (�� ��н�ванию 16�, и чи�ел, начинающих�� � 0, ��т�рые ра���атривают�� �а� в��ь�еричные (�� ��н�ванию ��. Ра����три� р�д �ри�ер�в: set A=3 set /A B=A*2, C=2*(B+5) Эти ��ерат�ры у�танавливают �начени� �ере�енных �реды ��ружени�: A ��лу� чает�начение3,B —6иC—22. Е�ли ���анда set /A и���ль�ует�� в �а�етн�� файле, �на вы��лн�ет�� �е� ви� ди�ых �р��влений, н� е�ли на�рать ее в ���андн�й �тр��е, �на выв�дит ���леднее вычи�ленн�е �начение. На�ри�ер, ���анда set /A 3+3 выведет ре�ультат 6, не ��хран�� е�� в �а��й�ни�удь �ере�енн�й �реды ��ружени�. Она �ревращает ���андную �тр��у в не�л�х�й и �ы�трый �аль�ул�т�р. Стр���вые вычи�лени�, на�ри�ер удаление ра�ширени� и� и�ени файла, реали� ��ваны �енее ��н�тны� ��ра���. Их в����жн��ти �удут ���а�аны ���же, в ра�деле, ���в�щенн�� ��д�тан�в�е �начений �ере�енных �реды ��ружени�. Условная обработка с помощью команды if К��анда if ���в�л�ет �а�у��ать ��н�ретные ���анды т�ль�� �ри вы��лнении ��ределенных у�л�вий. К��анда if �вл�ет�� �дни� и� ��н�вных тре��ваний ре� альн��� ��ы�а �р��ра��ир�вани�, и ра�ширенна� ���анда if, �ред��тавл�е�а� ���л�ч��й CMD, делает ��ы� �а�етных файл�в ��лее ��ле�ны�, че� в� вре�ена COMMAND.COM. В �а�етных файлах ���анда if и���ль�ует�� на�н��� чаще, че� не���ред�твенн� в ���андн�й �тр��е. О�н�вны�и ф�р�ата�и ���анды if �вл�ют�� if условие команда и if условие (команда1) else команда2 Перва� вер�и� �р�вер�ет условие и, е�ли �н� вычи�л�ет�� в true, вы��лн�ет команду. Е�ли условие не вычи�л�ет�� в true, команда и�н�рирует��. Вт�ра� вер�и� �ред��тавл�ет вт�рую ���анду, ��т�ра� �а�у��ает��, е�ли у�л�� вие вычи�л�ет�� в false. В эт�й вер�ии в �ави�и���ти �т у�л�ви� �а�у��ает�� ли�� �дна, ли�� дру�а� ���анда. С ����щью �ру�лых ������ в ��ерат�ре if ��жн� ��ру��ир�вать не���ль�� ���анд. На�ри�ер, ��ерат�ры if not exist input.dat ( echo Внимание: создается новый файл input.dat dir /b c:\inputs >input.dat ) �р�вер�ют фа�т �уще�тв�вани� файла input.dat и, е�ли �н не �уще�твует, �а�у��ают ���анды echo и dir. Гру��ир�в�а ���анд �начительн� у�р�щает чтение и на�и�а�
510 Глава 10. Командная строка CMD ние �а�етных файл�в CMD �� �равнению � DOS�ф�р�ат��, �де в�е�т� в�е�� эт��� �ришл��ь �ы на�и�ать: if exist input.dat goto haveinput echo Внимание: создается новый файл input.dat dir /b c:\inputs >input.dat :haveinput С �ру��ир�в��й ���анд ��жн� в����ль��вать�� у�л�вие� else, �ри�енив дл� эт��� �ледующий ф�р�ат: if условие ( команды ... )else( команды ... ) От�ту� �де�ь не ����ателен, �н и���ль�ует�� т�ль�� лишь дл� улучшени� чи� тае���ти. В ���анде и���ль�ует�� не���ль�� те�т�в у�л�вий: y y [not] строка1 == строка2 Сравнивает строку1 �� строкой2 и в��вращает true, е�ли �тр��и а���лютн� �дина��вы, в�люча� ��в�адение ре�и�тр�в �у�в. С�ы�л ��жет �ыть и��енен на �р�тив���л�жный, е�ли �еред те�т�� ���тавить �л�в� not. y y [not] errorlevel число Пр�вер�ет �начение �тату�а вых�да и� ���ледней вы��лн�вшей�� �р��ра�� �ы. У�л�вие вычи�л�ет�� в true, е�ли �тату� вых�да ��льше че� или равен числу. Сл�в� not и��ен�ет ��ы�л на �р�тив���л�жный, те�т вычи�л�ет�� в true, е�ли �тату� вых�да �еньше че� число. y y [not] exist [путь]имя Те�т вычи�л�ет�� в true, е�ли на�ванный файл или �атал�� �уще�твует. С�ы�л ��жет �ыть и��енен на �р�тив���л�жный, е�ли �еред те�т�� ���тавить �л�в� not. Дл� �р�вер�и �уще�тв�вани� �атал��а � ��нцу и�ени эт��� �атал�� �а нужн� д��авить ��ратный �лэш (\�. На�ри�ер, ���анда if exist c:\temp\ ��наружит �уще�тв�вание �атал��а c:\temp и не �удет ��ита � т�л�у файл�� �� и�ени c:\temp. y y [/i] строка1 оператор_сравнения строка2 Сравнивает две �тр��и и в��вращает ре�ультат �равнени�. Е�ли ��е �тр��и ���т��т т�ль�� и� цифр, вы��лн�ет�� чи�л�в�е �равнение, в �р�тивн�� �лучае, вы��лн�ет�� �равнение �� �и�в�ла� алфавита. Е�ли и���ль�ует�� �люч /i, те�тир�вание �тан�вит�� нечув�твительны� � ре�и�тру �и�в�л�в. О�ерат�р �равнени� ��жет �ыть �дни� и� �ледующих: EQU — Равн� NEQ — Не равн� LSS — Меньше че�
Встроенные команды 511 LEQ — Меньше че� или равн� GTR — Б�льше че� GEQ — Б�льше че� или равн� y y cmdextversion число Те�т вычи�л�ет�� в true, е�ли н��ер вер�ии ра�ширений CMD ��льше или равен числу. Н��ер вер�ии ра�ширений дл� W��dows 7, V�s�� и XP равен 2. Те�т в�е�да вычи�л�ет�� в false, е�ли ра�ширени� ���анд вы�лючены. y y defined переменная Те�т вычи�л�ет�� в true, е�ли на�ванна� �ере�енна� �реды ��ружени� ��ре� делена и не и�еет �у�т��� �начени�. Ра�ширенный ��ерат�р if — �дн� и� �а�ых �уще�твенных улучшений CMD. В ��четании � �ере�енны�и �реды ��ружени� вы ��лучаете не�л�х�й ��ы� �р�� �ра��ир�вани�. Сканирование списка файлов с помощью команды for Ча�т� �ывает та�, чт� дл� �ажд��� и� не���ль�их файл�в нужн� ��вт�рн� вы��л� нить не��т�рые ���анды. CMD �ред��тавл�ет ���анду �� и�ени for, �����ающую ���ратить ��ъе� на�ирае���� те��та. Она ��вт�р�ет ���анды дл� �ажд��� эле�ента в у�а�анн�� ��и��е. В наи�р��тейшей ф�р�е ���анда for �а�у��ает ���анды дл� �ажд��� эле�ента, ���ещенн��� в ее на��р (��и��� эле�ент�в в �ру�лых �����ах�. На�ри�ер, ���анда for%xin(abc)doecho%x выв�дит три �тр��и: a b c На��р ���т�ит и� �тр�� a, b и c. К��анда for ���дает вре�енную �ере�енную �� и�ени x и �а�у��ает ���анду echo %x три ра�а, �ри эт�� x �рини�ает �� �череди �начение a, b и c. В ���анде лю��е ���вление %x �а�ен�ет�� �начение� �ере�ен� н�й x, ��эт��у данна� ���анда for �вл�ет�� э�вивалент�� выдачи �ледующих трех ���анд: echo a echo b echo c (К�тати, �у�ву, и���ль�уе�ую дл� и�ени �ере�енн�й, ��жн� вы�рать ��вершен� н� �р�и�в�льн�. Я вы�рал x, н� вы ��жете и���ль��вать лю�ую и� �у�в нижне�� ре�и�тра �т � д� � или верхне�� ре�и�тра �т A д� Z. Ка� ни �транн�, ре�и�тр в данн�� �лучае и�рает р�ль.� Е�ли лю��й эле�ент на��ра ��держит �и�в�лы��а�е�тители * или ?, CMD �а� �ен�ет эле�енты ��и���� в�ех ���твет�твующих и�ен файл�в. П�эт��у ���анда for %x in (*.doc) do echo %x �а�у��ает ���анду echo �� �дн��у ра�у дл� �ажд��� файла � ра�ширение� .doc.
512 Глава 10. Командная строка CMD ▼) Сложности, связанные с командой for, состоят в том, что знак процента (%) рассматривается в пакетных файлах как специальный символ. Если команда for используется в пакетном файле, то все знаки % нужно продублировать. Предыдущий оператор for в пакетном файле должен быть написан следующим образом: for %%x in (*.doc) do echo %%x Если приходится писать много пакетных файлов, к этому привыкаешь, но в таком случае нужно запомнить, что при использовании команды for непосредственно в командной строке следует применять только один символ %. Ка� ��ль��вать�� ���анд�й for в �а�етных файлах, � ���ажу в �ледующей �лаве. К��анда for в CMD на�н��� ��щнее, че� ее э�вивалент в COMMAND.COM. Между �л�в�� for и на��р�� �начений ���ут �ыть у�а�аны не���ль�� ��дифи�а� т�р�в, вы��лн�ющих р�д ��ле�ных фун�ций. Использование переменных команды for П� �ере т��� �а� ���анда for �р�х�дит �� �ажд��у и� файл�в или �л�в, у�а�анных в ��и��е на��ра, �ере�енна�, у�а�анна� в ���андн�й �тр��е, �� �череди �рини�ает �начени� эле�ент�в на��ра. Е�ли �ере�енна� ����начена, ��аже�, �а� %x, ве�де, �де ����начение %x ���вл�ет�� ���ле �лючев��� �л�ва do, �н� �а�ен�ет�� �начение� �ере�енн�й. В CMD д��авлен р�д д���лнительных �������в и�влечени� инф�р�а� ции и� �ере�енн�й, в ��льшин�тве и� ��т�рых �ере�енна� ра���атривает�� �а� и�� файла и ���в�л�ет и�вле�ать т�ль�� ��ределенные �����ненты и�ени файла. Эт� ���в�л�ет ��н�труир�вать ци�лы for, ��т�рые ���ут, � �ри�еру, �р�йти �� в�е� файла� .DOC, и�еющи��� в �а��е, и ����ир�вать их в файлы � ра�ширение� .BACKUP. CMD реда�тирует �начение �ере�енн�й на ��н�ве д���лнительных �и�в�л�в, ��т�рые �тав�т�� ���ле �и�в�ла % , и ��д�тавл�ет �треда�тир�ванную вер�ию в ���андную �тр��у. Предла�ае�ые CMD варианты реда�тир�вани� �ере�енн�й �еречи�лены в та�л. 10.4 . (Дл� ���андн�й �тр��и и дл� ар�у�ент�в ��д�р��ра��ы в �а�етных файлах и���ль�уют�� �дни и те же варианты реда�тир�вани�.� Таблица 10.4. Функции редактирования переменной Выражение Результат %n Ар�у�ент или �ере�енна� n �е� реда�тир�вани� %~n Удаление ��ружающих �авыче� (" "� %~fn П�лн�е у�а�ание �утев��� и�ени %~dn Т�ль�� �у�ва ди��а %~pn Т�ль�� �уть %~nn Т�ль�� и�� файла %~xn Т�ль�� ра�ширение и�ени файла %~sn У��р�ченный DOS�ф�р�ат «�.3» дл� файла и �ути %~an Атри�уты файла
Встроенные команды 513 Выражение Результат %~tn Дата и вре�� ���ледне�� и��енени� файла %~zn Длина файла в �айтах %~$PATH:n П�лн��тью у�а�анн�е и�� �ерв��� ���твет�твующе�� файла �ри ��и��е в PATH. Е�ли не найден� ни �дн��� файла, ре�ультат�� �лужит �тр��а нуле� в�й длины. И�� файла д�лжн� в�лючать надлежащее ра�ширение; PATHEXT не и���ль�ует�� М�дифи�ат�ры и�ени файла ���ут и���ль��вать�� в ����инации (на�ри�ер, %~dpn в��вращает ����инации �у�вы ди��а и �ути�. ▼▼ При использовании редактирования переменной лучше выбрать для этой переменной букву верхнего регистра, чтобы CMD мог отличить символ редактирования, который всегда должен быть в нижнем регистре, от вашей переменной. (Можно заметить, что в $PATH: буквы не в нижнем регистре, но наличие знака доллара и двоеточия дают CMD понять, что это редакти- рующая функция, а не переменная P.) На�ри�ер, �ледующий ци�л for ���ирует в �етевую �а��у т�ль�� те файлы, чей ра��ер �еньше 1 М�: for %X in (*.*) do if %~zX LSS 1000000 copy %X \\bali\myfiles Обработка каталогов У ���анды for е�ть не���ль�� вариант�в, и��ен�ющих ������ интер�ретации ��� держи���� �еречи�ленн��� на��ра и�ен. Вариант for /d %переменная in (набор) do команда ра��тает в� �н���� та� же, �а� и �тандартна� ���анда for, �а и��лючение� т���, чт� �и�в�лы��а�е�тители в на��ре ���твет�твуют т�ль�� и�ена� �атал���в. Эт�т вариант ��жн� и���ль��� вать дл� вы��лнени� ���анды или дл� �а�у��а �а�етн��� файла в лю��й или в� в�ех ��дчиненных �а��ах у�а�анных �а���. На�ри�ер, �ри ра��те ��д у�равле� ние� W��dows 7, ���анда for /d %d in ("%homepath%\Documents\My Music\*.* ") do echo %d выв�дит и�ена в�ех ��дчиненных �а��� в ��ль��ватель���й �а��е My Music. Обработка файлов в каталогах и подкаталогах Вариант for /r путь %переменная in (набор) do команда �а�у��ает ��лн�ценную ���анду for в �атал��е, у�а�анн�� в пути, а та�же в �ажд�� и� е�� ��д�атал���в и т. д . Дл� �ажд��� и� этих �атал���в вы��лн�ет�� ��ераци� ���твет�тви� �и�в�� ла���а�е�тител��, и���ль�ующи��� в наборе. На�ри�ер, ���анда for /r c:\data %x in (*.txt) do notepad %x ���ещает �а��у c:\data и в�е ��дчиненные ей �а��и и в �ажд�й и� них �а�у��ает ���ию �р��ра��ы Бл��н�т дл� �т��ражени� и реда�тир�вани� �ажд��� найден� н��� файла � ра�ширение� .txt. (В ре�ультате ��жет �ыть �т�рыт� �чень �н��� ���ий Бл��н�та.�
514 Глава 10. Командная строка CMD Числовой цикл for Вариант for /l %переменная in (старт#,шаг#,стоп#) do команда �а�тавл�ет пере­ менную �рини�ать чи�л�вые �начени� �т старт# д� стоп#, � �риращение� на шаг#. На�ри�ер, ���анда for /l %v in (1,1,10) do echo %1 выв�дит чи�ла � 1 д� 10. Значение ша�а ��жет �ыть ��л�жительны� или �трица� тельны�. На��р (1,1,5� �енерирует ���лед�вательн��ть (1 2 3 4 5�, а на��р (5,�1,1� �енерирует ���лед�вательн��ть (5 4 3 2 1�. Разбор текста В �в�е� �а��� не��ычн�� варианте ���анда for читает �тр��и, ��держи��е файла или выв�д ���анды и и� эт��� те��та и�вле�ает р�д �начений дл� и���ль��вани� в �аче�тве на��ра. Эт� наи��лее �л�жный вариант и���ль��вани� ���анды for. В �а��й �р��т�й вер�ии ���анда и�вле�ает т�ль�� �ерв�е �л�в� и� �ажд�й �р�читанн�й ею �тр��и. О�ределение «�л�ва» — эт� те��т, ��раниченный �дни� или не���ль�и�и �р��ела� �и или �и�в�ла�и та�ул�ции. К��анда ��жет �ыть на�и�ана дл� и���ль��вани� лю���� и� трех и�т�чни��в данных: for /f %переменная in (имена_файлов) do команда for /f "usebackq" %variable in ('команда1') do команда2 for /f %переменная in ("буквальный текст") do команда Перва� вер�и� �р�вер�ет в�е файлы в на��ре и�ен файл�в, в ��т�р�� ���ут и���ль��вать�� �и�в�лы��а�е�тители. Файлы читают�� �а� те��т�вые, и �ерва� ле��е�а (�л�в�� и� �ажд�й �тр��и и���ль�ует�� в �аче�тве и�т�чни�а �начений дл� �ере�енн�й. Вт�ра� вер�и� �а�у��ает команду1 в �аче�тве ���андн�й �тр��и CMD, а �ате� ���ирает ее выв�д. Перва� ле��е�а �ажд�й �тр��и выв�да и���ль�ует�� в �аче�тве и�т�чни�а �начений дл� �ере�енн�й. Треть� вер�и� ���трит на �у�вальный те��т, ��руженный �авыч�а�и. Эта ф�р�а �удет и�еть ��ы�л т�ль�� в �лучае и���ль��вани� � �ере�енны�и �реды ��ружени�, в��ты�и в �авыч�и. Перва� ле��е�а и���ль�ует�� в �аче�тве �начени� дл� �ере�енн�й. Е�ли и���ль�ует�� на��р и� �дн��� или не���ль�их и�ен файл�в и д�лжны и�� ��ль��вать�� �авыч�и дл� �ащиты �р��ел�в в и�енах файл�в, чт��ы ���а�ать, чт� у�а�ывают�� файлы, а не �у�вальный те��т, �ледует и���ль��вать ��дифи�ат�р usebackq: for /f "usebackq" %переменная in ("имя_файла" ...) do команда Те�ерь чтение �ерв��� �л�ва и� �ажд�й �тр��и не �ред�тавл�ет ��льш��� инте� ре�а. Х�р�ш�, чт� �и�те�а ра���ра те��та та�же ���в�л�ет вы�рать и�вле�ае�ую ле��е�у, у�а�ать ра�делители ле��е�, у�а�ать �и�в�л ���нчани� �тр��и и �а�рать ��лее �дн�й ле��е�ы и� �ажд�й вв�ди��й �тр��и. П��ле �люча /f ��жн� у�а�ать в �авыч�ах лю��й и� �ледующих эле�ент�в.
Получение дополнительной информации 515 Модификатор Описание eol=c П��а�ывает, чт� ве�ь те��т ���ле �и�в�ла c д�лжен �ыть �р�и�н�� рир�ван skip=n За�тавл�ет �р��у�тить �ервые n �тр�� файла �еред и�влечение� ле��е� delims=xyz... За�тавл�ет и���ль��вать у�а�анный �и�в�л (�и�в�лы� в �аче�тве ра�делителей ле��е� в�е�т� �р��ела и �и�в�ла та�ул�ции. На�ри�ер, ��дифи�ат�р delims=, у�а�ывает в �аче�тве ра�делител� �а��тую tokens=x,y,m-n У�а�ывает, �а�ие ле��е�ы в �тр��ах вв�да в��вращать в �аче�тве �ере�енных. Е�ли �еречи�лен� ��лее �дн��� эле�ента, ���анда for �ри�ваивает �начени� д���лнительны� �ере�енны� в в��ра�тающе� алфавитн�� ��р�д�е ���ле т�й, ��т�ра� у�а�ана � �и�в�л�� %. Чи�ла, ра�деленные дефи���, ���а�ывают диа�а��н. На�ри�ер, tokens=1,4-7 у�ажет на вы��р ле��е� вв�да 1, 4, 6 и 7 и на не��х�ди���ть ��реде� лени� четырех �ере�енных usebackq П��а�ывает, чт� �авыч�и в на��ре �видетель�твуют �� и�енах фай� л�в, а не � �у�вальн�� те��те и чт� �дин�чные �авыч�и у�а�ывают на �у�вальный те��т Следующа� ���анда for �а�у��ает ���анду arp дл� ��лучени� ��и��а �ете� вых ада�тер�в ����ьютера. К��анда arp выв�дит в ��и��е �аждый и� IP�адре��в ����ьютера и фи�иче��ие MAC�адре�а. К��анда for �р��у��ает три �а�лавных �тр��и и и�вле�ает две ле��е�ы и� �ажд�й ��тавшей�� �тр��и выв�да. Перва� и� них ��хран�ет�� в ��и�ен�ванн�й �ере�енн�й %a, а вт�ра� — в �ере�енн�й �� �ледующей �у�в�й, в %b: for /f "skip=3 tokens=1,2 usebackq" %a in ('arp -a') do ( echo IP-адрес %a, MAC-адрес %b ) ▼) А вот разбирать широко распространенный текст со значениями, разделенными запятыми (CSV-формата), команда for /f не может, потому что в этих файлах используются кавычки, в которые заключены текстовые элементы, и могут быть запятые внутри элементов. Команда for недостаточно догадлива, чтобы разобрать текст с разделителями, в которых сочетаются запятые и кавычки. Кроме этого только что показанная команда работает при вводе непосредственно в окне ко- мандной строки, а для использования ее в пакетном файла знаки процента нужно продублиро- вать. Этот вопрос будет рассмотрен в следующей главе. Получение дополнительной информации В недрах W��dows ��держит�� не�н��� инф�р�ации � �реде ���андн�й �тр��и, и �на ра��р��ана �� ра�ны� �е�та�. Чт��ы д��ыть инф�р�ацию � �а��й �р��ра�� �е CMD и в�тр�енных ���андах, нужн� щел�нуть на �н���е Пуск (S�����, вы�рать
516 Глава 10. Командная строка CMD �ун�т Справка и поддержка (H��p ��d Suppo��� и вы��лнить ��и�� �� �ледующи� �тр��а�: y y cmd y y command shell overview y y command-line reference y y command-line reference A-Z В W��dows 7 и V�s��, наверн�е, в���ще ниче�� не �удет ���а�ан�, н� � инф�р�а� ции �� эт�й те�е ��жет �риве�ти ��ыл�а Search IT Pro Content на ве���айте M���oso�� T��h���. M���oso��, �� ��льш��у �чету, и��лючил инф�р�ацию �� ��не ���андн�й �тр��и и� файл�в ��рав��, ра��р��тран�е�ых в ���таве W��dows 7 и V�s��. П� эт��у в�� �р��у нужн� ��ратить�� � �траница�, ��и�ывающи� �ерверные вер�ии W��dows. Инф�р�ацию ��жн� та�же ��лучить и� �р��ра��ы help ���андн�й �тр��и. На�ерите ���анды вида help cmd help dir help for и т. д ., и���ль�у� лю��е и�� ���анды или �р��ра��ы, у����нут�й в данн�й �лаве. К��анда help авт��атиче��и �р��у�тит �в�й выв�д чере� ���анду more дл� ��� �траничн��� �р����тра инф�р�ации. П�чти в�е �р��ра��ы ���андн�й �тр��и выв�д�т ��рав�чную инф�р�ацию �ри их �а�у��е в ���андн�й �тр��е � �люч�� /?, ��эт��у, е�ли �р��ра��а help не ра��тает, ���р��уйте �а�у�тить �р��ра��у в та��� ф�р�ате: cmd /? | more more /? | more ping /? | more
Пакетные файлы для пользы и развлечения В эт�й �лаве �удет ра���а�ан�, �а� �а�етные файлы ���в�л�ют авт��ати�ир�вать ��вт�р�ющие�� �адачи и ���давать ���андные ���ращени�. y y Вы у�наете, чт� ��ы� �а�етных файл�в в ��вре�енных вер�и�х W��dows �уще� �твенн� улучшил�� �� �равнению � вер�ией DOS�W��9x. y y П�д��н� �ценари��, �а�етные файлы ���ут �лужить д��у�ентацией дл� важ� ных дел�вых �р�цедур. y y Не��х�ди�� �редварительн� ��на���ить�� � �атериала�и �лавы 10 «К��андна� �тр��а CMD». Зачем нужны пакетные файлы? Не���тр� на наличие та��й ��щн�й �реды �р��ра��ир�вани� и на�и�ани� �цена� риев, �а� W��dows S���p� Hos� (WSH�, �тар���дные �а�етные файлы та�же ���ут �тать ��ле�ны�, ��щны� ин�тру�ент�� в �реде W��dows. П�че�у? В т� вре�� �а� WSH��р��ра��ы и���ль�уют ��ъе�ты �а� ин�тру�енты дл� ��уще�твлени� �адач у�равлени� W��dows и ��ра��т�и данных, �а�етные файлы и���ль�уют в �аче�тве �в�е�� ин�тру�ента целые �р��ра��ы. Сценарии WSH ���в�л�ют у�равл�ть �а� дачей в� в�ех ее т�н���т�х, а �а�етные файлы ���в�л�ют ра��тать на ��лее ��ще� ур�вне. П�эт��у, учитыва� �реи�уще�тва владени� �а� �ел�и�, та� и �ру�ны� ин�тру�ентарие�, дл� ва� �удет ��ле�н� у�нать � ������ах ���дани� �а� �ценариев, та� и �а�етных файл�в. Б�лее т���, ��д��н� �р��ра��а� W��dows S���p�, �а�етные файлы �лужат ф�р��й д��у�ентации, ��т��у чт� �ни в �и�ь�енн�й ф�р�е �ере� хватывают важную инф�р�ацию � �р�цедурах и ��нфи�ураци�нных данных. В �в�ей ра��те ра�ра��тчи�а �р��ра�� и �и�ател� � ��н�л, чт� ���давае�ые �н�ю �а�етные файлы ��жн� ра��ределить �� тре� �ате��ри��: y y Не��льшие файлы дл� ра��ты �� �ред�й ���андн�й �тр��и. На�ри�ер, у �ен� е�ть не���ль�� не��льших �а�етных файл�в, и��ен�ющих ра��чий �атал�� дл� ��рре�тир�вани� �а��и ��д у�а�анный �р�е�т и, в����жн�, дл� д��авлени� �атал��а в �уть ��и��а. Бла��дар� эт��у � ���у �т�рыть ��н� ���андн�й �тр��и, на�рать �дн� �л�в� и �ыть ��т�вы� � ра��те � файла�и ��н�ретн��� �р�е�та. y y Файлы �редне�� ра��ера, вы��лн�ющие ��ределенную ���лед�вательн��ть ���анд, ��т�рые �не �рих�дил��ь ���т��нн� на�ирать вручную. На�ри�ер, 11
518 Глава 11. Пакетные файлы для пользы и развлечения �не ча�т� �рих�дил��ь �т�равл�ть �лиенту ��н�вленные вер�ии ��ределенн��� на��ра файл�в. Дл� ��н�влени� ZIP�файла и �т�рав�и �� эле�тр�нн�й ��чте ре�ультат�в � и���ль�ую �а�етный файл, и в�� �адача �в�дит�� в�е�� лишь � �дн�й ���анде. y y О�р��ные �а�етные файлы, вы��лн�ющие длинные ���лед�вательн��ти �адач и ��ра�атывающие ��льш�е ��личе�тв� ар�у�ент�в ���андн�й �тр��и. В ��ей ра��те делал�� у�л�н на �ривлечение ра�ра��танных �� �а�а�у �р��ра�� ���анд� н�й �тр��и дл� ��ра��т�и данных или �ред��тавл�е�ых ����анией M���oso�� утилит, �редна�наченных дл� у�равлени� W��dows — �а� �тандартных �ред�тв, та� и тех, чт� вх�д�т в ���тав W��dows R�sou��� ���s. На�ри�ер, у �ен� е�ть �а� �етный файл, д��у�ентирующий в�е интернет�д��ены, у�равл�е�ые ��ей DNS� �луж��й W��dows S��v��. Эт�т �а�етный файл ��жет ре��н�труир�вать целый на��р д��ен�в, е�ли е�� не��х�ди�� �ере�е�тить на н�вый �ервер. Та���� р�да �адача в��лне �� �лечу �а�етн��у файлу, н� �на ��жет �тать н�чны� ��ш�ар�� �ри ���ыт�е ��вт�рн��� вв�да чере� �рафиче��ий интерфей� ��ль��вател�. В �лаве 10 ра���атривали�ь в�е ���анды, в�тр�енные в ���л�ч�у CMD. В дан� н�й �лаве �удут ра����трены ���анды, ����енн� ��ле�ные дл� �ри�енени� в �а� �етных файлах, и �риведены не��т�рые �ри�еры тех �ате��рий �а�етных файл�в, ��т�рые � ���читал ��ле�ны�и. Создание и использование пакетных файлов Па�етные файлы �тн���т�� � ��ы�н�венны� те��т�вы� файла�. Пр�ще в�е�� их ���давать и реда�тир�вать � ����щью Бл��н�та. Я �редла�аю ва� ���дать ��еци� альную �а��у и��лючительн� дл� ваших ����твенных �а�етных файл�в и д��авить ее � �ути ��и��а (�а� ра���атривал��ь в �лаве 10�, чт��ы вы ���ли �а�у��ать их и� лю��й �а��и ��на ���андн�й �тр��и. Файлы ��жн� ���е�тить в лю�ую, уд��ную дл� ва� �а��у. Они ���ут ра��е� щать�� на ваше� ����твенн�� же�т��� ди��е, или же ва� ��жет ��тре��вать�� ���е�тить �в�и �а�етные файлы в ��щую �етевую �а��у, чт��ы и�и ��жн� �ыл� ��ль��вать�� � лю���� ����ьютера. Я ���е�тил �в�и ����твенные �а�етные файлы в �а��у �� и�ени c:\bat. Дл� ���дани� эт�й �а��и нужн� �т�рыть ��н� ���андн�й �тр��и и на�рать �ледующие ���анды: c: mkdir \bat cd \bat Дл� д��авлени� эт�й �а��и в �уть ��и��а нужн� вы��лнить �ледующие дей� �тви�: 1. Дл� начала: y В W��dows 7 щел�ните на �н���е Пуск (S�����, �рав�й �н����й щел�ните на �ун�те Компьютер (Compu���� и вы�ерите �ун�т Свойства (P�op�����s�. Вы� �ерите в�лад�у Дополнительные параметры системы (Adv����d� и щел�ните на �н���е Переменные среды (��v��o�m��� V����b��s�.
Создание и использование пакетных файлов 519 y В W��dows V�s�� щел�ните на �н���е Пуск (S�����, вы�ерите �ун�т Панель управления (Co���o� P�����Учетные записи пользователей и семейная безопас- ность (Us�� A��ou��s ��d F�m��y S����y�Учетные записи пользователей (Us�� A��ou��s�. Зате� в ра�деле Задачи (T�sks� щел�ните на �н���е Изменение переменных среды (Ch��g� My ��v��o�m��� V����b��s�. y В W��dows XP щел�ните на �н���е Пуск (S�����, щел�ните �рав�й �н��� ��й �ыши на �ун�те Мой компьютер (My Compu���� и вы�ерите Свойства (P�op�����s�. Вы�ерите в�лад�у Дополнительно (Adv����d� и щел�ните на �н���е Переменные среды (��v��o�m��� V����b��s�. y Я ��наружил, чт� в лю��й и� этих вер�ий W��dows в�е�т� в�е�� эт��� �р�ще в�е�� на�рать в ��не ���андн�й �тр��и start sysdm.cpl, вы�рать в�лад�у Дополнительно (Adv����d� и щел�нуть на �н���е Переменные среды (��v��o�m��� V����b��s�. 2. Пр����трите ��и��� �ере�енных, ��ределенных в верхне� ра�деле ��д �а� ��л�в��� Переменные среды пользователя (Us�� V����b��s� дл� вашего имени пользователя. 3. Е�ли та� уже е�ть �а�и�ь �� и�ени PATH, вы�ерите ее и щел�ните на �н���е Из- менить (�d���. В начале ��л� Значение переменной (V����b�� V��u�� в�тавьте C:\ bat и д��авьте т�ч�у � �а��т�й, �тделив эт� и�� �т уже и�еющих�� та� и�ен. Ре�ультат д�лжен вы�л�деть �ри�ерн� та�, �а� ���а�ан� на ри�. 11 .1 . Рис. 11 .1 . При добавлении каталога в начало пути не забудьте поставить после нового имени каталога точку с запятой Е�ли та� еще нет �а�и�и �� и�ени PATH, щел�ните на �н���е Создать (N�w� и в �аче�тве и�ени �ере�енн�й введите PATH, а в �аче�тве ее �начени� введите C:\bat. 4. Трижды наж�ите OK, чт��ы �а�рыть три диал���вых ��на. За�р�йте ��н� ��� �андн�й �тр��и и �т�р�йте н�в�е та��е ��н�. На�ерите path и наж�ите Ввод. Вы д�лжны увидеть в начале �ути c:\bat. ▼) Если нужно сделать ваши пакетные файлы доступными всем пользователям вашего компью- тера, следует отредактировать раздел Системные переменные (System Variables). Проделайте предыдущие действия, за исключением того, что под Windows Vista в пункте 1 используйте инструкции, которые я дал для Windows 7. Под Windows XP нужно войти в систему под именем администратора компьютера. Вместо этого можно просто набрать start sysdm.cpl в привилегированном окне командной стро- ки. Привилегированные окна командной строки рассматривались в главе 10.
520 Глава 11. Пакетные файлы для пользы и развлечения П��ле т��� �а� c:\bat �удет д��авлен � ваше�у �ути, лю�ые �а�етные файлы, ���данные ва�и в эт�й �а��е, ���ут �а�у��ать�� �уте� на��ра их и�ен в ���андн�й �тр��е. Па�етны� файла� д�лжны �ыть даны ра�ширени� .cmd или .bat. (��д�йдет лю��е и� них�. Ра�ширение .bat и�еет ��лее традици�нный хара�тер, а ра�шире� ние .cmd ����н�ет, чт� �а�етный файл �ыл на�и�ан дл� н�в��� ���андн��� интер� �ретат�ра, �����ль�у DOS и W��dows 9x не ра����нают та�ие файлы в �аче�тве �а�етных. Дл� ���дани� уче�н��� �а�етн��� файла �т�р�йте ��н� ���андн�й �тр��и или в����ль�уйте�ь �дни� и� ранее �т�рытых. Введите ���анду notepad test.bat и щел�ните на �н���е Да (Y�s�, ���да �л��н�т ��р��ит: «С��дать н�вый файл � та� �и� и�ене�?» В �у�т�� ��не Бл��н�та на�ерите �ледующие �тр��и: @echo off cls echo Аргумент командной строки: %1 pause ��храните файл и на�ерите в ��не ���андн�й �тр��и �ледующую ���анду: test xxx О�н� д�лжн� �чи�тить��, и вы д�лжны увидеть �ледующее: Аргумент командной строки: xxx Для продолжения нажмите любую клавишу . . . Наж�ите Ввод, и ���андна� �тр��а д�лжна вернуть��. Эту �р�цедуру ��жн� и���ль��вать дл� ���дани� лю���� ��личе�тва �а�етных файл�в. Один и� �а�етных файл�в, ��т�рый ��жет ��над��ить�� ���дать �р��� �ейча�, д�лжен �ыть на�ван bat.bat, и в не� д�лжна �ыть �дна �тр��а: pushd c:\bat Он �тн��ит�� � у����нут��у ра�р�ду «не��льших, уд��ных» �а�етных файл�в. И�е� та��й файл, ��жн� �удет в лю��й ���андн�й �тр��е на�рать bat, и те�ущи� �атал���� �танет c:\bat, ���в�л�� реда�тир�вать или ���давать �а�етные файлы. Чт��ы вернуть�� � т��у �атал��у, ��т�рый и���ль��вал�� д� эт���, на�ерите popd. Ра�у�еет��, ��жн� на�рать pushd c:\bat не���ред�твенн� в ���андн�й �тр��е. М�жет ���а�ать�� нера�у�ны� ���давать �а�етный файл т�ль�� дл� т���, чт��ы �э��н��ить дев�ть нажатий на �лавиатуру, н� ���да ведет�� а�тивна� ра�ра��т�а �а�етных файл�в, вы �ы�тр� ��й�ете, чт� эт� в�е же ��ле�чает жи�нь. У �ен� е�ть ���л� де��т�а ��д��ных �а�етных файл�в, и���ль�уе�ых �аждый день дл� �ерех�да в �атал��и ��н�ретных �р�е�т�в. Дл� �р�е�т�в, и���ль�ующих ��ециальные �р��ра��ы ���андн�й �тр��и, у �а�етн��� файла е�ть вт�ра� �тр��а, ��т�ра� д��авл�ет �атал�� �р��ра��ы � началу �ути ��и��а, и���ль�у� ���анду ��д��ную эт�й: path c:\some\new\folder;%path% При ча�т�й ра��те � �р��ра��а�и ���андн�й �тр��и ва� �ах�чет�� ���дать «не��льшие, уд��ные» �а�етные файлы и дл� ваших �р�е�т�в.
Вывод информации в пакетных файлах 521 Программирование пакетных файлов В �ледующих ра�делах �удут ра����трены техн�л��ии �р��ра��ир�вани�, и���ль� �ующие �реи�уще�тва ра�ширенных ���анд, �ред��тавл�е�ых ���л�ч��й CMD. Наи��лее ��ле�ные ���анды, и���ль�уе�ые в �а�етных файлах, �ред�тавлены в та�л. 11.1. Таблица 11.1. Команды пакетного файла Команда Использование call Вы�ывает ��д�р��ра��у �а�етн��� файла echo Выв�дит те��т дл� ��ль��вател� setlocal/endlocal С�хран�ет�в���танавливает �ере�енные �реды ��ружени� exit Пре�ращает вы��лнение �а�етн��� файла for Пере�ирает файлы или �а��и goto И���ль�ует�� дл� у�равлени� ��р�д��� вы��лнени� �р��ра��ы if И���ль�ует�� дл� у�л�вн��� вы��лнени� ���анд pause П��в�л�ет ��ль��вателю читать ����щение pushd/popd С�хран�ет�в���танавливает те�ущий �атал�� rem И���ль�ует�� дл� ����ентариев и д��у�ентир�вани� set У�танавливает �начени� �ере�енных �реды, вы��лн�ет вычи�лени� и выв�дит ��ль��вателю �ри�лашение на вв�д данных shift С�анирует ар�у�енты ���андн�й �тр��и start За�у��ает �р��ра��у в дру��� ��не Синта��и� и �лючи дл� этих ���анд �ыли ра����трены в �лаве 10. Е�ли ва� �рих�дил��ь �и�ать �а�етные файлы дл� DOS, W��dows 9x и W��dows NT, вы ��й�ете, чт� ��льшин�тв� этих ���анд �ыли �уще�твенн� улучшены. Даже е�ли вы � ни�и �на���ы, �ледует и�учить их ��и�ани�, ��т�рые даны в �лаве 10. Вывод информации в пакетных файлах П� у��лчанию �а�етные файлы �� �ере �в�е�� вы��лнени� выв�д�т �аждую и�е� ющую�� в них �тр��у в ��н� ���андн�й �тр��и. Дл� �л�жных �а�етных файл�в эт� ��жет �рив�дить � не��равданн��у �твлечению вни�ани�, �����ль�у ���анды и ����щени� �удут �р��ручивать�� на э�ране �траница �а �траницей. П�эт��у �л�� жила�ь традици� �т�лючать ��вт�р на э�ране �тр�� файла, и���ль�у� �ледующий ��ерат�р @echo off в �а��� начале файла. К��анда echo off вы�лючает фун�цию выв�да ���анд, а �и�в�л @ в �а��� начале ���анды �ред�твращает выв�д на э�ран �а��й ���анды echo еще д� т���, �а� ее дей�твие в�ту�ит в �илу.
522 Глава 11. Пакетные файлы для пользы и развлечения ▼▼ При отладке пакетных файлов лучше оставить вывод команд включенным, чтобы видеть, какая команда выполняется. Для временного включения вывода команд нужно добавить команду rem, придав первой строке пакетного файла следующий вид: rem @echo off Команда rem превращает эту строку в комментарий. Позже, когда пакетный файл заработает должным образом, ее можно будет удалить. Те� не �енее не�л�х�, чт��ы �а�етные файлы ����щали � т��, чт� внутри них �р�и�х�дит — чт��ы вы �ыли в �ур�е ���ытий. К��анда echo ��дх�дит дл� эт��� �а� нель�� лучше — �на выв�дит лю��й те��т, ��т�рый �ледует �а �л�в�� echo, ��� �в�л�� ра��тавить �� в�е�у �а�етн��у файлу ��ле�ные ����ентарии: @echo off echo Начало сортировки файлов ... ... echo Отправка результатов на принтер ... ... echo Готово. ▼▼ Иногда полезно наблюдать за тем, как именно программа собирается запускаться с помощью пакетного файла, особенно когда командная строка запуска программы составляется по ходу выполнения пакетного файла с использованием переменных среды окружения и аргументов. Для этого непосредственно перед командной строкой запуска программы следует поставить команду @echo on, а сразу же после командной строки запуска программы поставить команду @echo off. Тогда оболочка CMD покажет фактическую командную строку, запускающую про- грамму. М�жн� та�же �а�тавить ���анды echo выв�дить �начени� �ере�енных �реды ��ружени� и ар�у�ент�в ���андн�й �тр��и, � ��т�ры�и ра��тает �р��ра��а. На� �ри�ер, echo Ваше имя пользователя — %username% За фра��й «Ваше и�� ��ль��вател� — » �ледует ��держи��е �ере�енн�й �ре� ды ��ружени� username. При�еры ��д��ных инф�р�аци�нных ����щений �удут в�тречать�� в данн�й �лаве еще не �дин ра�. Подстановка аргументов Ча�т� ��лучает�� та�, чт� в ��вт�р�ющих�� �адачах, � ��т�ры�и �рих�дит�� �тал�ивать��, и���ль�уют�� �дни и те же �р��ра��ы, н� в���ий ра� �ни ра��тают � ра�ны�и файла�и. В та��� �лучае ��жн� в����ль��вать�� ар�у�ента�и ���анд� н�й �тр��и, �на�див инф�р�ацией �а�етный файл �ри е�� �а�у��е на вы��лнение. К��да �а�етный файл �а�у��ает�� и� ���андн�й �тр��и ���анд�й, ��х�жей на эту batchname xxx yyy zzz лю�ые эле�енты ���ле и�ени �а�етн��� файла �тан�в�т�� д��ту�ны �р��ра��е эт��� файла в �аче�тве ар�у�ент�в. О���начени� %1, %2, %3 и та� далее �а�ен�ют�� ���твет�твующи�и ар�у�ента�и. В данн�� �ри�ере ве�де, �де в �а�етн�� файле
Подстановка аргументов 523 ���вл�ет�� ����начение %1, ���л�ч�а CMD �а�ен�ет е�� �тр���й xxx. Зате� ���� �начение %2 �а�ен�ет�� �тр���й yyy и т. д . П�д�тан�в�а ар�у�ент�в ���в�л�ет ���давать та�ие в�т �а�етные файлы: @echo off notepad %1.vbs cscript %1.vbs Эт�т �а�етный файл ���в�л�ет �треда�тир�вать, а �ате� �а�у�тить �р��ра��у W��dows S���p� Hos�. Е�ли на�вать �а�етный файл ws.bat, ��жн� �удет �треда�ти� р�вать и �р�верить в ра��те �ценарий, на�ванный, ��аже�, test.vbs, �р��т� на�рав: ws test В эт�� �лучае ���л�ч�а CMD �читает, чт� у �а�етн��� файла и�еет�� �ледую� щее ��держи��е: @echo off notepad test.vbs cscript test.vbs П�д��ные �а�етные файлы �����ут ва� �э��н��ить в �р�це��е ���дани� и �т� лад�и �ценари� �а��у вре�ени, �атрачивае���� на на��р те��та. Кр��е �тандартных ар�у�ент�в ���андн�й �тр��и %1, %2 и т. д ., �ледует �нать еще и � ��ециальн�й �а�ене ар�у�ент�в � ����щью ����начений %0 и %*. О���наче� ние %0 �а�ен�ет�� и�ене� �а�етн��� файла в т�� виде, в ��т�р�� �н� �ыл� на�ран� в ���андн�й �тр��е. О���начение %* �а�ен�ет�� в�е�и ар�у�ента�и ���андн�й �тр��и в т�� виде, в ��т�р�� �ни �ыли на�раны, � �авыч�а�и и в�е� ��тальны� нетр�нуты� ��держи�ы�. Е�ли у �ен� е�ть �а�етный файл �� и�ени test.bat, и�еющий �ледующее ��� держи��е: @echo off echo Имя команды — %0 echo Аргументы: %* т� вы��лнение ���анды test a b c �риведет � выв�ду �ледующе�� те��та: Имя команды — test Аргументы: a b c О���начение %0 �ри��дит�� в �лучае ��наружени� �а�етны� файл�� �а��й�ни� �удь �р��ле�ы � ар�у�ента�и ���андн�й �тр��и, введенны�и ��ль��вателе�, и не� ��х�ди���ти выв�да ����щени� «� ��р�д�е и���ль��вани�». Ра����три� �ри�ер: if"%1"==""( rem – Аргументы не указаны. Вывод информации о порядке использования echo Порядок использования: %0 [-v] [-a] имя_файла ... exit /b ) Е�ли �а�етный файл на�ван test.bat, ���ле на��ра ���анды test �удет выведен� �ледующее ����щение: Порядок использования: test [-v] [-a] имя_файла ... Преи�уще�тв� и���ль��вани� ����начени� %0 ���т�ит в т��, чт� �н� в�е�да �а�ен�ет�� �равильн�й инф�р�ацией, даже е�ли ���же вы �ереи�ен�вали �а�ет� ный файл и �а�ыли вне�ти и��енени� в нах�д�щие�� в не� �а�ечани� «� ��р�д�е и���ль��вани�».
524 Глава 11. Пакетные файлы для пользы и развлечения Редактирование аргументов О��л�ч�а CMD ���в�л�ет и��ен�ть вид ар�у�ент�в, дела� ��д�тан�в�и в ���анд� ную �тр��у. Дл� ��льшин�тва и��енений �ред��ла�ает��, чт� в �аче�тве ар�у�ента и���ль�ует�� и�� файла, и эти и��енени� ���в�л�ют и�вле�ать или �а��лн�ть ра�личные ча�ти эт��� и�ени. При в�люченн�� ра�ширении ���анд ���л�ч�а CMD ��жет в�тавить �треда�тир�ванные вер�ии ар�у�ент�в, е�ли ���ле �на�а % ���тавить �на� тильды (~� и не��т�рые д���лнительные �и�в�лы. Фун�ции реда�� тир�вани� ���в�л�ют �ани�улир�вать и�ена�и файл�в, �ереданны�и в �аче�тве ар�у�ент�в. В та�л. 11 .2 �еречи�лены варианты реда�тир�вани� � и���ль��вание� в �аче�тве �ри�ера ар�у�ента н��ер 1. Таблица 11.2. Выражения редактирования аргумента Выражение Результат выражения %~1 Удаление ��ружающих �авыче� («� %~f1 П�лн��тью у�а�анн�е �утев�е и�� %~d1 Т�ль�� �у�ва ди��а %~p1 Т�ль�� �уть %~n1 Т�ль�� и�� файла %~x1 Т�ль�� ра�ширение и�ени файла %~s1 К�р�т�а� DOS�ф�р�а �.3 дл� файла и �ути %~a1 Атри�уты %~t1 Дата и вре�� ���ледне�� и��енени� файла %~z1 Длина файла в �айтах %~$PATH:1 П�лн��тью у�а�анн�е и�� �ерв��� же ��дх�д�ще�� файла �ри ��и��е � и���ль��вание� �начени� �ере�енн�й PATH. Е�ли ни �дин файл не найден, ре�ультат�� �вл�ет�� �тр��а нулев�й длины. И�� файла д�лжн� в�лючать д��у�ти��е ра�ширение; �начение �ере�енн�й PATH�XT не и���ль�ует�� На�ри�ер, е�ли � �а�ущу �а�етный файл � ар�у�ент�� "under the hood.doc", т� ��лучу �ледующие ре�ультаты. Выражение Результат %~1 u�d�� �h� hood.do� %~f1 C:\book\�h11\u�d�� �h� hood.do� %~d1 C: %~p1 \book\�h11 %~n1 u�d�� �h� hood %~x1 .do�
Условная обработка с помощью команды if 525 Выражение Результат %~s1 C:\book\�h11\UND�RT~1 .DOC %~a1 ��������� %~t1 20.04.2002 12:42 %~z1 45323 %~$PATH:1 Эти �в�й�тва ���ут �ыть и���ль��ваны �ледующи� ��ра���: �ред��л�жи�, у �ен� е�ть р�д файл�в, ��т�рые нужн� �т��ртир�вать. Вх�дные файлы ���ут ��� �ту�ать и� лю��й �а��и, н� � х�чу ��хранить �т��ртир�ванные файлы в C:\sorted и дать и� ра�ширени� .TAB не�ави�и�� �т их и�х�дных ра�ширений. Дл� вы��лне� ни� эт�й �адачи � ���у на�и�ать �а�етный файл �� и�ени sortput.bat: @echo off sort <%1 >c:\sorted\%~n1.tab К��анда sort читает файл та�и�, �а� �н у�а�ан в ���андн�й �тр��е, н� в вы� х�дн�� файле и���ль�ует�� т�ль�� �а��ва� ча�ть и�ени вх�дн��� файла. Е�ли �а�у�тить ���анду sortput "c:\work files\input.txt" ���ле ��д�тан�в�и �на �удет и�еть вид sort <"c:\work files\input.txt" >c:\sorted\input.tab Условная обработка с помощью команды if Одн�й и� наи��лее важных в����жн��тей лю���� ��ы�а �р��ра��ир�вани� �в� л�ет�� в����жн��ть вы��ра и� не���ль�их ра�ных ��ерат�р�в на ��н�ве у�л�вий, �л�живших�� в �р�це��е вы��лнени� �р��ра��ы. Дл� эт�й цели в ��ы�е �а�етных файл�в и�еет�� ���анда if. Основная команда if В �в�ей �а��й ��щей ф�р�е ���анда if �р�в�дит �равнение двух �тр�� и вы��л� н�ет ���анду, е�ли �тр��и ��в�адают: if строка1 == строка2 команда Эта ���анда и���ль�ует�� в ��четании � �ере�енны�и ���андн�й �тр��и или � ��д�тан�в��й �ере�енных �реды ��ружени�, �а� ���а�ан� в �ледующе� �ри�ере: if "%1" == "ERASE" delete somefile.dat Т�ль�� в т�� �лучае, е�ли в �аче�тве �ерв��� ар�у�ента ���андн�й �тр��и и�� ��ль��вал��ь �л�в� ERASE, эта ���анда удал�ет файл some�le.dat. Наличие �авыче� в эт�й ���анде не �вл�ет�� �е�у�л�вны� тре��вание�. Е�ли �ни ��ущены и ���анда �а�и�ана в виде if %1 == ERASE delete somefile.dat
526 Глава 11. Пакетные файлы для пользы и развлечения �на ����режне�у �удет ра��тать, ���а �ри �а�у��е �а�етн��� файла �удет у�а�ы� вать�� �а��й�ни�удь ар�у�ент ���андн�й �тр��и. Н� е�ли �а�етный файл �а�у��а� ет�� �е� ар�у�ент�в, ����начение %1 ниче� не �а�ен�ет��, и ���анда �ри��ретает �ледующий вид: if == ERASE delete somefile.dat Эт� нед��у�ти�а� ���анда. О��л�ч�а CMD �жидает увидеть чт��ни�удь �еред ча�тью ���анды, начинающей�� � ==, и «ру�ает��», е�ли та� ниче�� нет. П�эт��у �л�жила�ь та�а� �ра�ти�а: �тавить в��ру� те�тируе���� эле�ента �а��й�ни�удь �и�в�л, неважн� �а��й и�енн�. Ра��тает даже �и�в�л $: if $%0$ == $ERASE$ delete somefile.dat Е�ли �р�вер�е�ые эле�енты идентичны, �ни ��танут�� идентичны�и, �удучи ��руженны�и д���лнительны�и �и�в�ла�и. Е�ли �ни �тличают�� или �вл�ют�� не�а��лненны�и, ���анда в�е равн� ��тает�� д��у�ти��й. К��анда if та�же ���в�л�ет и��ен�ть ��ы�л �р�вер�и на �р�тив���л�жный � ����щью варианта not: if not "%1" == "ERASE " then goto no_erase Проверка наличия файлов и папок Вариант exist ���в�л�ет ��ределить наличие ��н�ретн��� файла в те�уще� �а� тал��е: if exist input.dat goto process_it echo Файл input.dat не существует pause exit /b :process_it ▼▼ Проверка на наличие проходит, если указанное имя присутствует как имя файла или папки. Если нужно гарантировать работу проверки только при наличии такого имени у папки, ее нуж- но провести следующим образом: if exist c:\имя_папки\ команда чтобы определить наличие папки c:\имя_папки . Поставленный в конце обратный слэш не даст Windows сравнивать это имя с именем файла, но сам обратный слэш будет игнорироваться при проверке имени папки. Ра�у�еет��, е�ли эт� д��у�ти��, ��жн� у�а�ать ��лный �уть � файлу и ��жн� в����ль��вать�� �ере�енны�и �реды ��ружени� и ар�у�ента�и ����начени� % дл� ���тавлени� и�ени. Е�ли в и�ени файла е�ть �р��елы, е�� нужн� �а�лючить в �авыч�и. В варианте exist ��жет та�же и���ль��вать�� ��дифи�ат�р not, �а� в ���анде if not exist имя_файла... . Проверка успешности завершения программы К��да �р�и�х�дит вых�д и� �р��ра��ы ���андн�й �тр��и или даже и� �р��ра��ы W��dows, ��тает�� чи�л�, на�ывае��е статусом выхода или статусом ошибки. Эт� чи�л�, и���ль�уе��е �р��ра���й в �аче�тве �ри�на�а у��ешн���, на ее в��л�д, �а�
Условная обработка с помощью команды if 527 вершени� вы��лнени� �в�ей �адачи. Нулев�й �тату� вых�да ��начает �т�ут�твие �р��ле�; ��льшее чи�л� �видетель�твует � наличии �р��ле�ы. Пред��ределен� н��� ��ы�ла ни�а�ие ��н�ретные �начени� не и�еют. В д��у�ентации не��т�рых �р��ра�� ���ут �еречи�л�ть�� ��н�ретные �начени� �ши��� и давать�� их ин� тер�ретаци�, �начит, ваши �а�етные файлы ���ут и���ль��вать эти �начени� дл� вы��лнени� ���твет�твующих дей�твий. Ка�? С ����щью варианта errorlevel ���анды if. П��ле �а�у��а ���анды в �а�етн�� файле ��ерат�р if, и�еющий ф�р�у if errorlevel число команда вы��лн�ет команду, е�ли �тату� вых�да и� �редыдущей �р��ра��ы равен у�а�ан� н��у чи�лу или выше е��. На�ри�ер, ���анда net use в��вращает 0, е�ли �на в ��� �т��нии �т��ра�ить �у�ву ди��а на ��щую �а��у, и в��вращает ненулев�е чи�л�, е�ли �на не ��жет эт��� �делать. Па�етный файл ��жет в����ль��вать�� эти� �ледующи� ��ра���: @echo off net use f: \\bali\corpfiles if errorlevel 1 goto failed echo Копирование сетевых данных ... if not exist c:\corpfiles\nul mkdir c:\corpfiles copy f:\*.xls c:\corpfiles exit /b :failed echo Невозможно получить доступ к общей сетевой папке \\bali\corpfiles pause ▼) Команда net use рассмотрена в главе 13 «Утилиты командной строки».Она предназначена для отображения буквы диска на общую сетевую папку. С эт�й вер�ией ���анды if ��жн� та�же и���ль��вать ��дифи�ат�р not. В эт�� �лучае команда вы��лн�ет��, е�ли �тату� �ши��и меньше, че� у�а�анн�е чи�л�. Пр�вер�а на наличие �ши��и в �редыдуще� �ри�ере ��жет �ыть �ере�и�ана �ледующи� ��ра���: if not errorlevel 1 goto success echo Невозможно получить доступ к общей сетевой папке \\bali\corpfiles pause exit /b :success echo Копирование сетевых данных ... if not exist c:\corpfiles\nul mkdir c:\corpfiles copy f:\*.xls c:\corpfiles В данн�й вер�ии х�д вы��лнени� �а�етн��� файла не�н��� �р�ще �т�ледить. Н�, �а� вы увидите далее, даже эт� ��жет �ыть улучшен�. Выполнение после if нескольких команд Зача�тую, е�ли �а�ие�ли�� у�л�ви� �вл�ют�� и�тин�й, нужн� вы��лнить не���ль� �� ���анд. В �режние вре�ена, д� т��� �а� ���вила�ь ра�ширенна� ���л�ч�а CMD, дл� �ередачи у�равлени� дру��й ча�ти �а�етн��� файла �рих�дил��ь и���ль��вать
528 Глава 11. Пакетные файлы для пользы и развлечения ���анду goto, �а� в �ри�ере if exist, �риведенн�� в �редыдуще� ра�деле. Н� те�ерь, �ри и���ль��вании ра�ширенн�й вер�ии if, в эт�� нет не��х�ди���ти. Ра�ширенна� ���анда if ���в�л�ет ���ещать ���ле �е�� ��лее �дн��� ��ера� т�ра, �ру��иру� их � ����щью �ру�лых ������. На�ри�ер, вы ��жете ���е�тить в�е ���анды в �дн�й �тр��е: if not errorlevel 1 (echo Общий ресурс сети недоступен & exit /b) или ра��е�тить их на не���ль�их �тр��ах: if not errorlevel 1 ( echo Общий ресурс сети недоступен pause exit /b ) Ре���ендую и���ль��вать вт�рую вер�ию, ��т��у чт� �на ле�че читает��. П�� ���трите, на���ль�� ��н�тнее �тан�вит�� �ри�ер ���ир�вани� файл�в �� �ети, ���да в�е�т� goto и���ль�уют�� �ру�лые �����и: @echo off net use f: \\bali\corpfiles if errorlevel 1 ( echo Невозможно получить доступ к общей сетевой папке \\bali\corpfiles pause exit /b ) echo Копирование сетевых данных ... if not exist c:\corpfiles\nul mkdir c:\corpfiles copy f:\*.xls c:\corpfiles М�жн� та�же вы��лнить �дин на��р ���анд, е�ли �р�вер�а у�л�ви� if вы� чи�л�ет�� в true, и дру��й на��р ���анд, е�ли эта �р�вер�а вычи�л�ет�� в false, и���ль��вав дл� эт��� вариант else: if exist input.dat echo input.dat exists else echo input.dat does not exist М�жн� и���ль��вать else � �ру�лы�и �����а�и, н� в та��� �лучае нужн� ����ательн� ���тавить ���анду else в ту же �тр��у, в ��т�р�й нах�дит�� ���анда if, или в ту же �тр��у, в ��т�р�й нах�дит�� �а�рывающа� �����а ���ле if. Дл� �н����тр�чн�й ���анды if...else нужн� и���ль��вать т�чн� та��й же ф�р�ат, �а� в эт�� �ри�ере: if exist input.dat ( echo Сортировка input.txt... sort <input.txt >source.data )else( echo Input.txt не существует. Создание пустого файла данных ... echo. >source.data ) Расширенное тестирование Ра�ширенна� ���анда if ���в�л�ет вы��лн�ть �ри �равнении �тр�� ��лее ра�н�� ��ра�ные �р�вер�и, а та�же ��жет �равнивать ар�у�енты и �ере�енные �а� чи�ла. Ра�ширенные �равнени� �еречи�лены в та�л. 11 .3 .
Обработка нескольких аргументов 529 Таблица 11.3. Операторы сравнения, допустимые в команде if Вариант Сравнение if строка1 EQU строка2 А���лютн� равны if строка1 NEQ строка2 Не равны if строка1 LSS строка2 Меньше че� if строка1 LEQ строка2 Меньше че� или равн� if строка1 GTR строка2 Б�льше че� if строка1 GEQ строка2 Б�льше че� или равн� if /i (сравнение) Нечув�твительн��ть � ре�и�тру �и�в�л�в if defined имя True, е�ли эт� и�� �ере�енн�й �реды ��ружени� if cmdextversion число True, е�ли вер�и� ра�ширени� CMD равна числу или выше В �аче�тве д���лнительн��� ��ну�а, е�ли �равнивае�ые �тр��и ��держат т�ль�� цифры, ���л�ч�а CMD �р�в�дит чи�л�в�е �равнение. На�ри�ер, ��жн� �р�те�ти� р�вать ��н�ретный �тату� вых�да и� �р��ра��ы: некая программа if %errorlevel% equ 3 ( echo Программа вернула статус выхода 3, означающий, echo что сетевой принтер не подключен. ) Обработка нескольких аргументов К��да нужн� ��ра��тать �н�же�тв� файл�в, на��р ���анд вы��ва �дн��� и т��� же �а�етн��� файла: somebatch file1.dat somebatch file2.dat somebatch file3.dat ... ��жет ут��ить. М�жн� ���давать та�ие �а�етные файлы, ��т�рые в ���т��нии ��ра��тать лю��е ��личе�тв� ар�у�ент�в ���андн�й �тр��и. Дл� эт��� и���ль�ует�� та��й ин�тру� �ент, �а� ���анда shift, ��т�ра� удал�ет �аданный ар�у�ент ���андн�й �тр��и и �дви�ает�� в�е ��тальные ар�у�енты. И�еет�� в виду �ледующее: �ред��л�жи�, �а�етный файл �а�ущен и� ���андн�й �тр��и batchname xxx yyy zzz Д� и ���ле и���ль��вани� ���анды shift внутри �а�етн��� файла ���ут �ыть �ри�енены �ледующие ��д�тан�в�и ар�у�ент�в. До сдвига После сдвига %0 = b���h��m� %0=xxx %1=xxx %1=yyy %2=yyy %2=��� продолжение 
530 Глава 11. Пакетные файлы для пользы и развлечения До сдвига После сдвига %3=��� %3 = (�у�т�� %4 = (�у�т�� %4 = (�у�т�� Па�етн��у файлу ��тает�� т�ль�� �� не���ль�у ра� ��ра�атывать эле�ент �� и�ени %1 и �дви�ать ар�у�енты ���анд�й shift, ���а в %1 не �удет �у�т�е �начение. Эт�т �р�це�� �ри�ен�ет�� д�в�льн� ча�т�, ��эт��у е�� ��и�ание дан� в виде �хе�ы. ШАБЛОН Дл� ��ра��т�и �ере�енн��� ��личе�тва ар�у�ент�в ���андн�й �тр��и �ле� дует и���ль��вать ���анду shift дл� удалени� ар�у�ент�в д� тех ��р, ���а �ни в�е не ��нчат��, �а� ���а�ан� в �ледующе� �ри�ере: @rem Файл примера batch1201.bat @echo off if"%1"==""( rem если %1 пуст, значит, аргументов нет. Показ порядка использования rem данного пакетного файла echo Порядок использования: %0 имя_файла ... exit /b ) :again rem если %1 пуст, значит, работа закончена ifnot"%1"==""( echo Обработка файла %1... rem ... выполнение каких-нибудь действий с файлом %1 rem – сдвиг аргументов и повторная проверка %1 shift goto again ) М�жн� та�же в����ль��вать�� ���анд�й for, ��т�ра� еще ���вит�� в �хе�е в данн�й �лаве. Е�ли нужн� ��ра��тать файл �� у��лчанию в �т�ут�твие у�а�анных файл�в в ���андн�й �тр��е, ��жн� в����ль��вать�� �ледующи� вариант�� �хе�ы: @rem Файл примера batch1202.bat @echo off if"%1"==""( rem – никаких файлов не указано — обработка файла по умолчанию "test.for" call :process test.for )else( rem – обработка каждого названного файла :again rem если %1 пуст, значит, работа закончена ifnot"%1"==""( call :process %1 rem - сдвиг аргументов и повторная проверка %1 shift goto again ) )
Обработка нескольких аргументов 531 exit /b :process echo Обработка файла %1... ... В данн�й вер�ии, е�ли ар�у�енты в ���андн�й �тр��е не у�а�аны, �а�ет� ный файл ��ра�атывает файл �� у��лчанию — в данн�� �лучае эт� файл test. for. В �р�тивн�� �лучае ��ра�атывают�� в�е файлы, на�ванные в ���андн�й �тр��е. В эт�й вер�ии �хе�ы и���ль�уют�� ��д�р��ра��ы �а�етн��� файла, ра���атривае�ые далее в данн�й �лаве, в ра�деле «И���ль��вание ��д�р��ра�� �а�етных файл�в». Ра�ширенна� вер�и� ���анды shift, shift /n ���в�л�ет начинать �дви� � ар�у� �ента ��д н��ер�� n, ��тавл�� в ����е ар�у�енты � �еньши�и н��ера�и. В �ледую� щей та�лице ���а�ан�, чт� делает ���анда shift /2 в �а�етн�� файле, �а�ущенн�� � ����щью ���анды «b���h��m� xxx yyy ���». До сдвига После сдвига %0 = b���h��m� %0 = b���h��m� %1=xxx %1=xxx %2=yyy %2=��� %3=��� %3 = (�у�т�� %4 = (�у�т�� %4 = (�у�т�� В �ра�тиче���й ра��те эт� �в�й�тв� ��жн� и���ль��вать, е�ли не��х�ди�� и�еть и�� �а�етн��� файла (%0� д��ту�ны� �� в�е�у �а�етн��у файлу. В та��� �лучае ��жн� в����ль��вать�� ���анд�й shift /1 дл� �дви�а в�ех ��тавших�� ар� �у�ент�в, ��тавив в не�ри���н�венн��ти %0. М�жет та�же ��тре��вать�� на�и�ать �а�етные файлы, ��т�рые и���ль�уют ���андную �тр��у вида batchname выходной_файл входной_файл входной_файл ... �де �а и�ене� вых�дн��� файла �ледует �т �дн��� д� не���ль�их и�ен вх�дных файл�в. В эт�� �лучае ��жн� ��хран�ть в не�ри���н�венн��ти и�� вых�дн��� файла %1, ��уще�твл�� ци�личе��ий �ере��р вх�дных файл�в � ����щью ���анды shift /2, на�ри�ер: @rem Файл примера sortmerge.bat @echo off rem нужно убедиться, что задано хотя бы два аргумента if"%2"==""( echo Порядок использования: %0 выходной_файл входной_файл ... exit /b ) rem сбор всех входных файлов в SORT.TMP if exist sort.tmp del sort.tmp
532 Глава 11. Пакетные файлы для пользы и развлечения :again ifnot"%2"==""( echo ...Сбор данных из %2 type %2 >>sort.tmp shift /2 goto again ) rem сортировка SORT.TMP в первый файл, названный в командной строке echo ...Сортировка для создания %1 sort sort.tmp /O %1 del sort.tmp Работа с переменными среды окружения Х�т� �ере�енные �реды ��ружени� и�начальн� �ыли ���даны дл� хранени� инф�р� �ации � ��нфи�урации �и�те�ы, та��й �а� �уть ��и��а, �ни та�же �вл�ют�� «ра��� чи�и» �ере�енны�и �а�етных файл�в. Их ��жн� и���ль��вать дл� хранени� и�ен файл�в, на�тр�е� �лючей, ��ль��ватель����� вв�да ��л� �ри�лашений на вв�д или лю��й дру��й инф�р�ации, ��т�рую не��х�ди�� ��хранить в �а�етн�й �р��ра��е. Пере�енные �реды ��ружени� ра���атривали�ь в �лаве 10. При ра����трении в�� �р��а ��д�тан�в�и �начений �ере�енных �реды ��ружени� ���анда set �ыла �ред� �тавлена �а� ������ у�тан�в�и и и��енени� �начений �ере�енных �реды ��ружени�. Н� �ри эт�� нужн� �нать, чт� �� у��лчанию и��енени�, вне�енные в �ере�ен� ные �реды ��ружени� в �а�етн�� файле, �уще�твуют и ���ле �авершени� вы��л� нени� �а�етн��� файла, ��т��у чт� �ни «�ринадлежат» т�й ���ии ���л�ч�и CMD, ��т�ра� у�равл�ет ��н�� ���андн�й �тр��и и лю�ы�и �а�у��ае�ы�и в не� �а�ет� ны�и файла�и. Эт� �чень �ри��дит�� в т�� �лучае, ���да нужн� и���ль��вать �а� �етный файл дл� и��енени� �ути ��и��а, чт��ы ��жн� �ыл� �а�у��ать �р��ра��ы и� �а�����ни�удь не�тандартн��� �атал��а. Те� не �енее в��ни�ает реальна� �р�� �ле�а, е�ли ваш �а�етный файл �ред��ла�ает, чт� лю�ые и���ль�уе�ые и� �ере� �енные не ��ределены (�у�ты� д� е�� �а�у��а. В�т ��джидающа� ва� не�ри�тн��ть: @echo off set /p answer=Вы желаете в конце работы удалить входные файлы (Y/N)? if /i "%answer:~,1%" EQU "Y " set cleanup=YES ... здесь следуют другие команды ... а затем, в конце, if "%cleanup%" == "YES" ( rem выражено желание удалить входные файлы del c:\input\*.dat ) Е�ли на �ри�лашение �тветить Y, �ере�енна� �реды ��ружени� cleanup ��лучит �начение YES, и файлы �удут удалены. Н� �ри �ледующе� �а�у��е �а�етн��� файла �ере�енна� cleanup так и будет хранить �начение YES, и файлы �удут удалены не� �ави�и�� �т т���, �а�и� �удет ваш �твет. Ра�у�еет��, �р��ле�а ��жет �ыть решена д��авление� ��ерат�ра set cleanup=
Работа с переменными среды окружения 533 в начале �а�етн��� файла. На �а��� деле, и�х�д� и� ��ле�н��� ��ыта �р��ра�� �ир�вани�, та� нужн� делать в лю��� �лучае (нужн� в�е�да инициали�ир�вать �ере�енные �еред их и���ль��вание��, н� в��р�� �в�ей важн��ти не утрачивает: �ере�енные �реды ��ружени� ��ладают �в�й�тв�� «�рили�чив��ти». В те вре�ена, ���да в�в�ю и���ль��вала�ь DOS, �р��ра��а �а�етн��� файла ��ычн� д�лжна �ыла и�еть в ��нце эт��� файла д���лнительные ��ерат�ры set дл� удалени� в�ех �ере�енных �реды ��ружени�, и���ль�уе�ых �р��ра���й. А в�т ���л�ч�а CMD �ред��тавл�ет ��лее �р��т�й ������ их �чи�т�и. Е�ли �ланирует�� и���ль��вание �ере�енных �реды ��ружени� в �аче�тве ра� ��чих �ере�енных �а�етн��� файла, ��жн� дл� вне�ени� лю�ых «л��альных» �� �тн�шению � �а�етн��у файлу и��енений в �ере�енные в����ль��вать�� ���ан� д�й setlocal. В ��нце �а�етн��� файла или в т�� �лучае, е�ли �удет и���ль��вана ���анда endlocal, �реда ��ружени� в���танавливает�� д� �в�е�� и�х�дн��� ���т�� �ни� на ���ент �а�у��а ���анды setlocal. И�еет ��ы�л �тавить ���анду setlocal в начале лю���� �а�етн��� файла, �т ��т�р��� не тре�ует�� вн��ить в ��ружающую �реду и��енени�, �р�д�лжающие �уще�тв�вать �а �редела�и �а���� �а�етн��� файла. Редактирование переменных среды окружения Ка� и �ри ра��те �� �тар�й ���л�ч��й COMMAND.COM, в лю��й ���анде �тр��а вида %переменная% �а�ен�ет�� �начение� �ере�енн�й �реды ��ружени� �� и�ени переменная. Одн� и� ра�ширений ���л�ч�и CMD �а�лючает�� в �ред��тавлении в����жн��ти и��ен�ть и�вле�ае��е и� �ере�енн�й �реды ��ружени� ��держи��е. В т� вре�� �а� реда�тир�вание ар�у�ент�в ���андн�й �тр��и �ф��у�ир�ван� в�� �ру� �ани�ул�ций � и�ена�и файл�в, реда�тир�вание �ере�енных �реды ��руже� ни� ра�ра��тан� та�, чт��ы ���в�лить ва� и�вле�ать ��д�тр��и. М��ут и���ль��вать�� �ледующие виды выражений. Выражение Результат % имя:~n% Пр��у�� �ервых n �у�в и в��вращение в�е�� ��тальн��� % имя:~n,m% Пр��у�� n �у�в и в��вращение �ледующих m �у�в % имя:~,m% И�влечение �ервых (�а�ых левых� m �у�в % имя:~,-m% И�влечение ���ледних (�а�ых �равых� m �у�в В�т р�д �ри�ер�в реда�тир�вани� �ере�енн�й �реды ��ружени� var=ABCDEFG. Команда Вывод echo %var% A�CD�FG echo %var:~2% CD�FG echo %var:~2,3% CD� echo %var:~,3% A�C echo %var:~, -3% �FG
534 Глава 11. Пакетные файлы для пользы и развлечения Выражение вида %имя: стр1= стр2% �а�ен�ет лю��е ���вление �тр���в��� �начени� стр1 �тр���вы� �начение� стр2. Стр���в�е �начение str2 ��жет �ыть �у�т�й �тр���й, чт��ы удалить в�е ���влени� стр1. Стр���в�е �начение стр1 ��жн� начать �� �ве�д�ч�и (*�, ��т�ра� �а�тавл�ет CMD �а�ен�ть в�е �и�в�лы в�л�ть д� ��нца, в�люча� стр1. В�т р�д �ри�ер�в реда�тир�вани� �ере�енн�й �реды ��ружени� var=ABC; DEF;GHI. Команда Вывод echo %var:;= % A�C D�F GHI echo %var:;=% A�CD�FGHI echo %var:*DEF=123% 123;GHI Первый �риведенный �ри�ер ��жет �ыть ����енн� ��ле�ен, е�ли нужн� и�� ��ль��вать ��и���, хран�щий�� в �ере�енн�й PATH в ци�ле for. Дл� for нужн� видеть и�ена файл�в или �а���, ра�деленные �а��ты�и, а в PATH �ни ра�делены т�ч�а�и � �а��ты�и. Далее эт�т в��р�� �удет ра����трен ��лее ��др��н�. ➔ Чт��ы и�учить в��р�� ра��ты � �ере�енны�и �реды ��ружени� ��лее деталь� н�, �ледует ��ратить�� � ра�делу «У�тан�в�а �начений �ере�енных � ����щью ���анды s��» �лавы 10. Обработка нескольких элементов с помощью команды for Д�в�льн� ча�т� в��ни�ает ��тре�н��ть в на�и�ании �а�етн��� файла, ��ра�аты� вающе�� «в�е» файлы ��ределенн��� ти�а. Пр��ра��ы ���андн�й �тр��и ���ут ра��тать � �и�в�ла�и��а�е�тител��и в и�енах файл�в: на�ри�ер ��жн� на�рать delete *.dat дл� удалени� в�ех файл�в, чьи и�ена ��анчивают�� на .dat. В �а�ет� ных файлах �адачи та���� же р�да ��жн� вы��лн�ть � ����щью ци�ла for. ▼) Если у вас имеется опыт работы с системой Unix, потребности в специальных инструкциях для работы с символами-заместителями могут на первый взгляд вызвать удивление. В системах Unix и Linux командные оболочки еще до запуска команды расширяют все аргументы команд- ной строки, имеющие символы-заместители, в список имен, поэтому для команды эти аргумен- ты появляются в таком виде, как будто пользователь сам ввел все эти имена. Этот процесс на- зывается универсализацией файловых имен. В DOS и Windows оболочки этого не делают. Когда аргументы командной строки содержат символы-заместители, задача их расширения в список имен файлов возлагается на команду или на пакетный файл. Ба��ва� вер�и� ���анды for �р�в�дит ��анир�вание на��ра или ��и��а и�ен, �а�у��а� �дн��ратн� ���анду дл� �ажд��� и�ени. Дл� �а�етных файл�в и���ль� �ует�� �ледующий ф�р�ат: for %%x in (набор имен) do команда
Обработка нескольких элементов с помощью команды for 535 �де набор имен �вл�ет�� ��и���� �л�в, ра�деленных �р��ела�и. К��анда for вы� ��лн�ет ���анду �� �дн��у ра�у дл� �ажд��� найденн��� ею эле�ента на��ра. При �ажд�й итерации �ере�енна� x ��держит те�ущее и��, и лю��е ���вление %%x в ���анде �а�ен�ет�� те�ущи� �начение� �ере�енн�й x. Дл� и�ени �ере�енн�й ��жн� вы�рать лю�ую �у�ву алфавита. Та�же и�еет �начение вы�ранный дл� �у�вы ре�и�тр, верхний или нижний, т� е�ть дл� ���анды for �у�вы a и A �вл�ют�� ра�ны�и �у�ва�и. ▼) Когда команда for набирается непосредственно в окне командной строки, используется только один знак процента. В пакетном файле этот знак нужно продублировать. В противном случае оболочка CMD будет сбита с толку, потому что переменная команды будет похожа на аргумен- ты командной строки или подстановку значения переменной среды окружения. Эта история тянется со времен MS-DOS и с ней до сих пор приходится считаться. На�ри�ер, ���анда for%%xin(abcd)doecho%%x выведет три �тр��и: a, b, c и d. О���енн� ��ле�н�й ���анда for �тан�вит�� �ла��да� р� т��у, чт� в �лучае ��держани� в лю��� эле�енте на��ра �и�в�л�в��а�е�тителей ? или *, эта ���анда �ред��ла�ает, чт� эле�ент �вл�ет�� и�ене� файла и �а�ен�ет эле�ент лю�ы�и ��дх�д�щи�и и�ена�и файл�в. К��анда for %%x in (*.tmp *.out *.dbg) do delete %%x удал�ет и� те�уще�� �атал��а в�е ��в�тречавшие�� файлы � и�ена�и, ��анчива� ющи�и�� на .tmp, .out или .dbg. Е�ли та�их файл�в та� нет, ���анда �ри��ретает �ледующий вид for %%x in () do delete %%x чт� на� в��лне у�траивает, �����ль�у �на ниче�� не делает. Дл� ��лучени� та���� же «�е���лвн���» ре�ультата �ри у�а�ании �и�в�л�в��а�е�тителей не���ред�твен� н� в ���анде delete �ришл��ь �ы вве�ти if exist *.tmp delete *tmp if exist *.out delete *.out if exist *.dbg delete *.dbg �����ль�у ���анда delete выражает нед�в�ль�тв�, е�ли не ��жет найти �а�ие� ни�удь файлы дл� удалени�. Еще �дни� �ри�ер�� ��жет ���лужить ���анда for %%F in ("%ALLUSERSPROFILE%\Documents\[wrap] ➥My Faxes\Received Faxes\*.tif") do echo %%~nF: получен %%~tF ��т�ра� выв�дит ��и��� в�ех фа���в, ��лученных �т �луж�ы фа���в W��dows, и вре�� их ��лучени�. ▼) Если вы используете подстановку отредактированного значения переменной, выберите для своей переменной букву, которую не нужно использовать в качестве одной из букв редакти- рования. Команда for прекращает рассмотрение выражения редактирования, как только ей попадается буква ее переменной. Например, если нужно воспользоваться функцией редакти- рования ~f, для цикла for следует выбрать какую-нибудь другую букву переменной.
536 Глава 11. Пакетные файлы для пользы и развлечения Не���ль�� дру�их ф�р� ���анды for ра���атривают�� в �лаве 10, и ва� ����а� тельн� нужн� � ни�и ��на���ить��. Ра�ширенна� ���анда for ���в�л�ет ��ани� р�вать �атал��и, в ре�ур�ивн�� режи�е ��анир�вать их ��д�атал��и и ��вершать дру�ие ��ле�ные дей�тви�, ��т�рые нев����жн� вы��лнить ни�а�и�и дру�и�и ������а�и. Использование в цикле for нескольких команд О��л�ч�а CMD ���в�л�ет и���ль��вать ���ле ���анды ци�ла for �ра�у не� ���ль�� ���анд. Эт� �ревращает W��dows����анду for �� �равнению � ее DOS� �редше�твенницей в ��лее ��щн�е �ред�тв�. В тех �луча�х, ���да в �р�шл�� �рих�дил��ь вы�ывать ��д�р��ра��у �а�етн��� файла, те�ерь дл� вы��лнени� �л�жных дей�твий ��жн� в����ль��вать�� �ру�лы�и �����а�и. На�ри�ер, �ледующий �а�етный файл и��ледует �атал��, на��лненный файла� �и в ф�р�ате W��dows b��m�p (�MP�, и ��е��ечивает наличие в дру��� �атал��е ���твет�твующих и� файл�в в ф�р�ате GIF. Е�ли GIF�файл �т�ут�твует, �н и�� ��ль�ует дл� е�� ���дани� утилиту ��нвертации и���ражени�: @echo off setlocal echo Поиск новых .BMP файлов files... for %%F in (c:\incoming\*.bmp) do ( rem выходной файл использует имя входного файла с расширением .GIF set outfile=c:\outgoing\%%~nF.gif if not exist %outfile% ( echo ...Создание %outfile% imgcnv -gif %%F %outfile% ) ) Та�и� ��ра���, �ри �ажд�� �а�у��е эт��� �а�етн��� файла �н ��е��ечивает дл� �ажд��� �MP�файла в �а��е \incoming наличие ��нвертир�ванн��� GIF�файла в �а��е \outgoing. В эт�� уче�н�� �а�етн�� файле и���ль�ует�� не���ль�� техн�� л��ий, ра����тренных в данн�й �лаве: y y О�ерат�р setlocal не дает �ере�енны� �реды ��ружени�, и���ль�уе�ы� в �а� �етн�� файле, ��хран�ть �в�и �начени� ���ле �авершени� ра��ты � �а�етны� файл��. y y В ци�ле for и ���анде if дл� �ру��ир�в�и не���ль�их ��ерат�р�в и���ль�уют �ру�лые �����и. y y Пере�енна� �реды ��ружени� outfile и���ль�ует�� в �аче�тве «ра��чей» �ере� �енн�й. y y В �а�етн�� файле и���ль�ует�� ��ерат�р echo, чт��ы ���ве�тить ва� � т��, чт� делает�� в �р�це��е ра��ты. П�д��ный �а�етный файл ��жет у�р��тить ра��ту �� ���луживанию ��льш��� на��ра файл�в. Вы ��жете �лучайн� �р��л�деть н�вый файл, �ыта��ь �делать чт�� ли�� ��д��н�е вручную, н� �а�етный файл е�� ни���да не �р��л�дит.
Обработка нескольких элементов с помощью команды for 537 В �аче�тве �авершающе�� �ри�ера, �ледующий ве�ь�а уд��ный �а�етный файл ����щает � т��, �а��й и� файл�в реальн� и���ль�ует�� �ри на��ре и�ени ���анды. Я на�вал эту �р��ра��у which.bat, и ���да � х�чу у�нать, �а�а� �р��ра��а �а�у��а� ет��, ��аже�, ���анд�й ping, � на�ираю �ледующую ���андную �тр��у: which ping Па�етный файл ведет ��и�� в те�ущей �а��е, а �ате� в �ажд�й �а��е, �ере� чи�ленн�й в �ере�енн�й PATH. В �ажд�й �а��е �н ищет у�а�анный файл, е�ли � и�ене� ���анды на�ран� ��н�ретн�е ра�ширение, или же �н �ытает�� �ри�енить в�е ра�ширени�, �еречи�ленные в �ере�енн�й PATHEXT, ��т�ра� ��держит EXE, COM, BAT и дру�ие, ��ычн� ��дра�у�евае�ые ра�ширени�: @rem Файл примера which.bat @echo off if"%1"==""( echo Порядок использования: which команда echo Определение местоположения файла, запускаемого при наборе 'к ома нды' exit /b ) for %%d in (. %path%) do ( if "%~x1" == "" ( rem пользователь не набрал расширение, используется список PATHEXT for %%e in (%pathext%) do ( if exist %%d\%1%%e ( echo %%d\%1%%e exit /b ) ) )else( rem пользователь набрал конкретное расширение, поэтому поиск только с ним if exist %%d\%1 ( echo %%d\%1 exit /b ) ) ) echo Для команды %1 не найдено ни одного файла Ка� видите, ���анда for ���в�л�ет ���давать д�в�льн� ��щные и ��ле�ные �р��ра��ы, ������ные �э��н��ить ваше вре�� и у�еречь �т �ши���, а ее �инта��и� д��тат�чн� �а�ад�чен даже дл� т���, чт��ы ��рад�вать �р��ра��и�та, ра��тающе�� на ��ы�е P���. Отложенные расширения Пере�енные �реды ��ружени� и ар�у�енты ���андн�й �тр��и, ���еченные �и�� в�л�� %, ���ен�ют�� ���твет�твующи�и �начени��и, ���да CMD читает �аждую ���андную �тр��у. Н� �ри на�и�ании ци�л�в for и ���тавлении ��ерат�р�в if эт� ��жет �риве�ти � не��т�ры� не�жиданны� ре�ультата�.
538 Глава 11. Пакетные файлы для пользы и развлечения На�ри�ер, нужн� �а�у�тить вт�ричный �а�етный файл не���ль�� ра� � не� ���ль�и�и файла�и, и �ри эт�� � �ервы� файл��, ��ра��танны� ���дру���у, �а� в данн�� �ри�ере: call anotherbatch firstfile.txt FIRST call anotherbatch secondfile.txt MORE call anotherbatch xfiles.txt MORE При эт�� ��жет ��над��ить��, чт��ы �ервый вы��в �рив�дил � ���данию н�в��� файла выв�да, а ���ледующие вы��вы д��авл�ли данные в уже �уще�твующий файл. В эт�� �лучае ��жн� ��ддать�� и��ушению авт��ати�ир�вать эт�т �р�це�� � ����щью ���анды for, и���ль�у� �ледующие ���анды: set isfirst=FIRST for %%f in (*.txt) do ( call anotherbatch %%f %isfirst% set isfirst=MORE ) Иде� �де�ь ���т�ит в т��, чт� в �лучае ��ра��т�и �ерв��� файла вт�ры� ар� �у�ент�� дл� anotherbatch �удет FIRST, а дл� в�ех ���ледующих файл�в эти� ар�у�ент�� �удет MORE. Н� та��й ��д ра��тать не �удет. О��л�ч�а CMD �а�енит %isfirst% �в�и� ��ределение� FIRST �ри �ерв�й же в�трече � ��ерат�р�� for. К��да CMD �авершит ��ра��т�у �на��в %, ���анда �удет и�еть �ледующий вид: set isfirst=FIRST for %%f in (*.txt) do ( call anotherbatch %%f FIRST set isfirst=MORE ) П����ль�у ар�у�ент FIRST ��д�тавлен еще д� �а�у��а ци�ла for, �а�етный файл anotherbatch не видит и��енени� �начени� �ере�енн�й isfirst, и в ре�ультате вы��лн�ют�� вы��вы call anotherbatch firstfile.txt FIRST call anotherbatch secondfile.txt FIRST call anotherbatch xfiles.txt FIRST чт� не ���твет�твует ваше�у �а�ы�лу. Н� е�ть ������, ���в�л�ющий решить эту �р��ле�у: �тл�женн�е ра�ширение ���в�л�ет и���ль��вать дл� ����начени� �ере�енных �реды ��ружени� не �на�и �р�цента, а в���лицательные �на�и, чт� �удет �лужить инди�ат�р�� ��тре�н��ти в их ра�ширении т�ль�� ���да CMD дей�твительн� в��на�ерит�� вы��лнить ��� �анду. П����ль�у традици�нн� в���лицательный �на� (!� не вх�дил в �еречень ��ециальных �и�в�л�в, �� у��лчанию эт� �в�й�тв� �т�лючен�. Дл� в�лючени� �тл�женн��� ра�ширени� нужн� в ���андн�й �тр��е �а�у��а CMD у�а�ать �люч /V:ON или дл� в�лючени� эт��� �в�й�тва внутри �а�етн��� файла в����ль��вать�� ���анд�й SETLOCAL. О�ерат�ры setlocal enabledelayedexpansion set isfirst=FIRST for %%f in (*.txt) do ( call anotherbatch %%f !isfirst! set isfirst=MORE ) �удут ра��тать в ���твет�твии � �ерв�начальны� �а�ы�л��.
Использование подпрограмм пакетных файлов 539 Отл�женные ра�ширени� ���ут та�же �ри��дить�� дл� ���ра инф�р�ации в �ере�енн�й �реды ��ружени� внутри ци�ла for. В �аче�тве �ри�ера т���, �а� эт� ��жет ра��тать, �ледующий �а�етный файл д��авл�ет c:\mystuff и �аждую ��� держащую�� та� �а��у � �ере�енн�й �реды ��ружени� �� и�ени dirs: setlocal ENABLEDELAYEDEXPANSION set dirs= for /R c:\mystuff %%d in (.) do set dirs=!dirs!;%%d О�ерат�р for в ре�ур�ивн�� режи�е д��ирает�� д� �ажд�й �а��и, начина� � c:\ mystuff, а �ере�енна� %%d �� �череди �рини�ает в �аче�тве �начени� и�� �ажд�й �а��и. О�ерат�р set д��авл�ет и�� �ажд�й �а��и � ��нцу ��держи���� �ере�ен� н�й dirs. Использование подпрограмм пакетных файлов О��л�ч�а CMD ���в�л�ет ���давать ��д�р��ра��ы �а�етных файл�в, и���ль�у� дл� эт��� ���анду call. Х�т�, �� �равнению � �режни�и вре�ена�и, н�ва� в��� ��жн��ть, ���в�л�юща� �ру��ир�вать ��ерат�ры � ����щью �ру�лых ������, у�еньшила ��тре�н��ти в и���ль��вании ��д�р��ра��, эти ��д�р��ра��ы в�е еще �вл�ют�� важны� ин�тру�ент�� в �р��ра��ир�вании �а�етных файл�в. На�ри�ер, в �адаче, �реду��атривающей ��ра��т�у цел��� ��и��а файл�в, ��жн� на�и�ать ��д�р��ра��у �а�етн��� файла дл� вы��лнени� в�ех ша��в, не� ��х�ди�ых дл� ��ра��т�и �дн��� файла. Зате� ��жн� �удет вы�ывать эту ��д�р�� �ра��у �� �дн��у ра�у дл� �ажд��� ��ра�атывае���� файла. В� вре�ена COMMAND.COM ��д�р��ра��ы �а�етных файл�в д�лжны �ыли ра��ещать�� в �тдельных �AT�файлах. Та� ��жн� делать и �ейча�, н� �ри ра��те в ���л�ч�е CMD ��д�р��ра��ы ��жн� ���ещать в т�� же файле, в ��т�р�� на� х�дит�� ��н�вна� �р��ра��а �а�етн��� файла. Стру�тура вы�л�дит �ледующи� ��ра���: @rem Файл примера batch1203.bat @echo off rem ОСНОВНАЯ ПРОГРАММА ПАКЕТНОГО ФАЙЛА ------------------------ rem вызов подпрограммы "onefile" для каждого обрабатываемого файла: cd \input for %%f in (*.dat) do call :onefile %%f <---это вызов подпрограммы rem основная программа должна завершаться командой xit /b или goto :EOF exit /b rem ПОДПРОГРАММА "ONEFILE" --- --- --- --- --- --- --- --- --- :onefile echo Обработка файла %1... echo ... сюда помещаются команды ... exit /b За ���анд�й call �тавит�� дв�ет�чие и и�� �ет�и, �ред�и�ывающие CMD �р�д�лжить ра��ту � �ет�и. Лю�ые эле�енты, ���ещенные в ���анде call ���ле �ет�и, �вл�ют�� ар�у�ента�и, �ередавае�ы�и ��д�р��ра��е, ��т�ра� ��жет ��лу�
540 Глава 11. Пакетные файлы для пользы и развлечения чить � ни� д��ту� чере� �ере�енные %1, %2 и т. д . И�х�дные ар�у�енты ���андн�й �тр��и �а�етн��� файла �ри ра��те вы��ва ��д�р��ра��ы ��рывают��. О�ра��т�а �а�етн��� файла в��вращает�� � т�й ���анде, ��т�ра� �ледует �а ���анд�й call, ���да ��д�р��ра��а �т�л�нет�� � лю�ы� и� �ледующих у�л�вий: y y Д��тижение ��нца файла. y y Предна�еренный �ерех�д ��д�р��ра��ы в ��нец файла � ����щью ���анды goto :EOF. y y Вы��лнение ��д�р��ра���й ���анды exit /b. О�ычн� лю��е и� этих у�л�вий �видетель�твует � ��нце �а�етн��� файла, и ���л�ч�а CMD в��вращает у�равление ��ну ���андн�й �тр��и. Н� ���ле вы� ��лнени� ���анды call эти у�л�ви� �вл�ют�� �ри�на��� ��нца ��д�р��ра��ы, и вы��лнение �а�етн��� файла �р�д�лжает��. ▼o Нужно еще до начала кода первой подпрограммы обеспечить прекращение выполнения пакет- ного файла. В других языках сценариев, например в VBScript, завершение «основной програм- мы» является вполне очевидным, чего нельзя сказать о языке пакетных файлов. Перед меткой первой подпрограммы нужно использовать команду goto :EOF или exit /B, в противном случае CMD пойдет за эту метку и снова запустит команды подпрограммы. Приглашение на ввод данных Е�ли �а�етный файл д�лжен выве�ти ����щение, ��т�р�е ����ательн� д�лжен уви� деть ��ль��ватель, дл� �ри��тан�в�и вы��лнени� �а�етн��� файла, д� тех ��р ���а ��ль��ватель не �р�чтет ����щение и не ��дтвердит эт�, и���ль�ует�� ��ерат�р �ау�ы — pause. Ра����три� �ри�ер: echo Команда blatfizz потерпела неудачу. Значит, судя по всему, близится echo конец света, или нужно внести изменения в файл входных данных pause exit /b Е�ли нужн� ��р��ить ��ль��вател�, �а� �р�д�лжить ра��ту ���ле неудачи, или е�ли нужн�, чт��ы �а�етный файл �редл�жил вве�ти и�ена файл�в или дру�ие дан� ные, ��жн� в����ль��вать�� н�в�й ра�ширенн�й ���анд�й set /p. Эта ���анда �чи� тывает �твет ��ль��вател� в �ере�енную �реды ��ружени�, �де �н ��жет �ыть �р�� те�тир�ван или и���ль��ван в �аче�тве ар�у�ента ���анды. Ра����три� �ри�ер: :again echo Входной файл INPUT.DAT отсутствует set /p answer=Хотите его создать (Д/Н)? if /i "%answer:~,1%" EQU "Д" goto editit if /i "%answer:~,1%" EQU "Н" exit /b echo Пожалуйста, введите Д, если "Да", или Н, если "Нет" goto again Эта ���анда �р��ит ��ль��вател� вве�ти �твет, �р�вер�ет �а�ую левую �у�ву � ����щью выражени� %answer:,1% и �ред�рини�ает ���твет�твующее дей�твие т�ль�� в т�� �лучае, е�ли ��ль��ватель ввел �рие�ле�ый �твет. Был� �ы не�л�х� �а���нить эт� в �аче�тве �хе�ы.
Полезные технологии пакетных файлов 541 ШАБЛОН Дл� выв�да �ри�лашени� ��ль��вателю на вв�д �твета да�нет и���ль�ует�� р�д ���анд, �ридерживающих�� данн�й �хе�ы: :again echo Если вопрос слишком длинный или нуждается в пояснениях, echo для вывода текста перед вопросом используйте команды echo. set /p answer=Здесь нужно задать вопрос (Д/Н)? if /i "%answer:~,1%" EQU "Д" команды, выполняемые для "Да" if /i "%answer:~,1%" EQU "Н" команды, выполняемые для "Нет" echo Пожалуйста, введите Д, если "Да", или Н, если "Нет" goto again П��ле в��р��ительн��� �на�а в ���анде set /p нужн� ���тавить �динарный �р��ел. Е�ли эт�т ша�л�н и���ль�ует�� в �дн�� и т�� же �а�етн�� файле ��лее �дн��� ра�а, нужн� дл� �ажд��� э��е��л�ра и���ль��вать дру�ую �ет�у. В дан� н�й вер�ии � и���ль��вал �ет�у again, н� вы ��жете и���ль��вать в �аче�тве �ет�и лю��е �л�в�. Дл� ���дани� �еню эту �хе�у ��жн� ��дифицир�вать. М�жн� на�и�ать �ри�ерн� �ледующее �ри�лашение: echo Варианты: [Д]обавить, [У]далить, [Р]аспечатать, [В]ыйти, [С]правка set /p answer=Введите выбранный вами вариант: в данн�� �ри�ере в�е�т� �равнени� �твета � �у�ва�и Д и Н, е�� нужн� �равнить ��у�ва�иД,У,Р,ВиС. Полезные технологии пакетных файлов Ка� уже у���инал��ь в �лаве 9 «И���ль��вание �ценариев дл� у�равлени� ���� �ьютера�и и �ет��и», �не нравит�� ���давать уд��ные дл� ��ль��вател� �ценарии и ���андные файлы — не т�ль�� дл� т���, чт��ы дру�и� люд�� �ыл� �р�ще и�и ��ль��вать��. Я �наю, чт� ��у�т� три недели ���ле на�и�ани� �ценари� или файла, � �а�уду, �а� е�� и���ль��вать, че� �н �ани�ает�� и �а� ра��тает. В эт�� нет ниче�� удивительн���, ��т��у чт� � ча�т� л�влю �е�� на т��, чт� �т�ю �еред х�л�диль� ни���, �ыта��ь в����нить, а �аче� �, ����твенн�, е�� �т�рывал. Н�, даже е�ли � ва�и не �р�и�х�дит ниче�� ��д��н���, в�е же лучше �ридерживать�� �ледующе�� �ринци�а: че� �аче�твеннее �удет на�и�ан �а�етный файл, те� �р�ще ва� �удет ��т�� � ни� ��ращать��. Па��ту� �� эт��, в данн�� ра�деле �удет ра����трен р�д техн�л��ий и �рие��в, ��т�рые � и���ль�ую, чт��ы �делать �а�етные файлы ��лее уд��ны�и, ��ле�ны�и и надежны�и. Обработка ключей командной строки В����жн�, у ва� ���вит�� желание д��ить��, чт��ы ваши �а�етные файлы ра��тали �а� в�тр�енные ���анды W��dows, и �а�тавить их ра����навать �лючи, начинаю� щие�� � �и�в�ла / или - . Уд��н� �ыл� �ы и�еть �а�етный файл, ра����нающий �люч /? в �аче�тве �а�р��а на выв�д инф�р�ации � �а��й �р��ра��е.
542 Глава 11. Пакетные файлы для пользы и развлечения В данн�� �лучае �ри��дит�� ���анда shift. В начале �а�етн��� файла ��жн� �р�верить �ервый ар�у�ент (%1� на наличие в �а��� е�� начале �и�в�ла /. Е�ли та��й �и�в�л та� е�ть, �начит, эт� �люч. М�жн� у�танавливать �начение дл� �ере� �енн�й �реды ��ружени�, удал�� ар�у�енты � ����щью ���анды shift, а �ате� ��вт�р�� �р�це��, ���а не �удут удалены в�е �лючи. Был� �ы ��ле�н� реали��вать дл� ���анды �ледующие три �люча. Ключ Значение �? С�рав�а. Выв�д ��рав�и и вых�д �v Пр�вер�а. В�лючение выв�да �тлад�чн�й инф�р�ации �q М�лчание. От�лючение ��ычн��� выв�да инф�р�ации А в�т �а� � ��ра�атываю эти �лючи в начале �а�етн��� файла: @rem Файл примера batch1204.bat @echo off setlocal rem – инициализация ключей их значениями по умолчанию set verbose=NO set quiet=NO :again set arg=%1 if "%arg:,1%" == "/" ( if "/i" %arg% EQU "/v" ( set verbose=YES ) else if "/i" %arg% EQU "/q" ( set quiet=YES )else( :usage echo Порядок использования: %0 [/v ^| /q] имя_файла ... echo. echo Этот пакетный файл копирует каждый из файлов в echo сетевую папку. Далее следует полезная информация. exit /b ) shift /1 goto again ) Не��т�рые ���енты �р��ра��ир�вани� данн��� �ри�ера �т�ит �р�����ен� тир�вать: y y Дл� �р�вер�и �а���� лев��� �и�в�ла �ажд��� ар�у�ента �р��ра��а ���ирует е�� в �ере�енную �реды ��ружени� arg, а �ате� �р�вер�ет �ервый �и�в�л � ��� ��щью выражени� %arg:,1%. П����ль�у ар�у�ент ��жет �ыть �у�ты�, в �ерв�� ��ерат�ре if в��ру� �равнивае�ых �тр�� д�лжны �т��ть �авыч�и. y y П����ль�у д� ��тальных ���анд if �р��ра��а д��ирает�� т�ль�� е�ли arg на� чинает�� � /, �тал� �ыть, �люч не �у�т�й, и в��ру� дру�их те�тируе�ых �и�в�л�в �авыч�и не нужны. Н�, в лю��� �лучае, их и���ль��вание �читает�� ��ле�н�й �ривыч��й.
Полезные технологии пакетных файлов 543 y y П��ледн�� ���анда else выв�дит инф�р�ацию � ��р�д�е и���ль��вани�, е�ли ��ль��ватель ввел �люч /? или лю��й не�рие�ле�ый �люч. y y К��анда shift и���ль�ует ��дифи�ат�р /1, ��эт��у �ере�енна� %0 ��тает�� нетр�нут�й и в�е�да ��держит и�� �а�етн��� файла. Далее в �а�етн�� файле ��жн� в����ль��вать�� �начени��и �ере�енных �реды ��ружени� verbose и quiet дл� ��ределени� не��х�ди���ти выв�да ����щений. Д���лнительна� �тлад�чна� инф�р�аци� ��жет �ыть выведена �ледующи� ��� ра���: if "%verbose%" == "YES" echo В данной части программы папка будет очищена Анал��ичн� ��ычные ����щени�, на�ри�ер Обработка файла %1 и ���анды pause, ��танавливающие вы��лнение �а�етн��� файла, ���ут �ыть вы�лючены, е�ли у�а�ан �люч /Q: if not "%quiet%" == "YES " echo Обработка файла %1... Не ��в�е� ��ычна� �р�вер�а if not �де�ь и���ль��вана в �ред�хранительных �ерах. Е�ли �ере�енна� quiet �ыла �ы не ��ределена, эт� �ривел� �ы � ���влению вых�дн�й инф�р�ации. (Эт� важна� ���тавл�юща� �ридани� �р��ра��а� на� дежн��ти. П� в����жн��ти, нужн� ���давать �р��ра��ы, �редвид�щие �итуации, ��т�рые ни���да не д�лжны �р�и�х�дить, и �лучи�ь та�а� �итуаци�, ���ытать�� и�влечь и� нее наи��льшую ��ль�у.� ▼▼ Если нужно запускать пакетный файл в Диспетчере задач, лучше предоставить пользователю ключ «молчания». При включенном режиме молчания пакетный файл никогда не должен ста- новиться на паузу. П��ле т��� �а� �а�етный файл �читал и удалил в�е �лючи ���андн�й �тр��и, в �ере�енн�й %1 ��а�ывает�� �ерв�е и�� файла, или т�, чт� эт�т ар�у�ент ���анд� н�й �тр��и ��начает в ваше� �рил�жении. Е�ли �жидает��, �а� �ини�у�, �дин ар�у�ент, т� в �лучае е�� �т�ут�тви� ��жн� выве�ти инф�р�ацию � ��р�д�е и�� ��ль��вани� и �авершить ра��ту: if "%1" == "" goto usage Эта ���анда �т�ылает �р��ра��у �а�етн��� файла на�ад � �ет�е :usage, ��т�ра� нах�дит�� в т�й ча�ти �а�етн��� файла, ��т�ра� ��ра�атывает �лючи ���андн�й �тр��и. Зате�, е�ли ваш �а�етный файл ��ра�атывает �р�и�в�льн�е чи�л� вх�д�щих эле�ент�в, �аждый и� них нужн� ��ра�атывать �� �череди, и���ль�у� ��д�р�� �ра��у �а�етн��� файла: for each %%x in (%*) do call :process %%x exit /b В эт�� �ри�ере ����начение %* �а�ен�ет�� в�е�и ��тальны�и ар�у�ента�и ���андн�й �тр��и. Лю�ые �и�в�лы��а�е�тители в и�енах ра�шир�ют�� в ��д� х�д�щие и�ена файл�в, а ���анда for вы�ывает ��д�р��ра��у �а�етн��� файла process �� �череди дл� �ажд��� эле�ента.
544 Глава 11. Пакетные файлы для пользы и развлечения П�д�р��ра��а �а�етн��� файла process ��лучает эле�ент в виде ар�у�ента н��ер 1, ��эт��у ��ычн� �на начинает�� �� �ледующе�� ��да: :process if not "%quiet%" == "YES" echo Обработка %1... Управление сетевыми отображениями Е�ли в ваше� �а�етн�� файле и���ль�уют�� �етевые �а��и, ��жет ���вить�� же� лание �т��ра�ить на ��щие �а��и �дну или не���ль�� �у�в ди���в. Пр��ле�а в т��, чт� �у�ва ди��а, ��т�рую вы х�тите и���ль��вать, ��жет �ыть уже �адей�тв�вана. Чт��ы ��равить�� � данн�й �р��ле��й, нужен тв�рче��ий ��дх�д. У �ен� е�ть на эт�т �чет три �редл�жени�. Использование путевых имен в формате UNC В� �н��их �луча�х ��жн� в���ще и��ежать �т��ражени� на �у�ву ди��а. Б�ль� шин�тв� �р��ра�� ���андн�й �тр��и W��dows д��у��ают �ри�енение �етевых �утевых и�ен в ф�р�ате универ�альн��� ���лашени� �� и���ль��вании и�ен — U��v��s�� N�m��g Co�v����o� (UNC�, ��эт��у ф�р�ат \\сервер\общее_имя\... ��жн� и���ль��вать на�р��ую. На�ри�ер, дл� ��хранени� ре�ервных ���ий ��держи���� на дру��� ����ьютере �ри на�и�ании данн�й �ни�и � и���ль��вал �ледующий �а�етный файл: @echo off echo Резервное копирование файлов с главами xcopy c:\book\*.* \\bali\brian\bookbackup /S/Z/Y/M Эт�т ��д ���ирует файлы на �ервер \\bali, в ��дчиненную �а��у bookbackup ��щей �а��и brian. Использование pushd для назначения произвольной буквы диска К��анда pushd �ри у�а�ании �етев��� �ути на�начает �р�и�в�льную �у�ву ди��а. Е�ли вы ��жете на�и�ать �в�и ���анды �а�етн��� файла дл� и���ль��вани� те�у� ще�� �атал��а (эт� не тре�ует �нани� �у�вы ди��а�, эт� еще лучше. М�й �а�етный файл ре�ервн��� ���ир�вани� ��� �ы �ыть на�и�ан �ледующи� ��ра���: pushd \\bali\brian\bookbackup xcopy c:\book\*.* . /S/Z/Y/M popd М�жн� та�же ��ределить �у�ву ди��а, ���давае�ую ���анд�й pushd, и���ль� �у� �ере�енную �реды ��ружени� %cd%. Эта «виртуальна�» �ере�енна� в�е�да в��вращает �у�ву те�уще�� ди��а и �уть. П��ле ���анды pushd �на ��жет и�еть �начение Y:\. Па�етный файл нужн� ����ательн� �авершить ���анд�й popd, чт��ы ��в���дить �у�ву вре�енн��� ди��а. Следует та�же ���нить, чт� е�ли ваш �а�етный файл д�лжен �нать �у�ву ди��а, на ��т�рую �т��ражен �етев�й �уть, ее ��жн� и�влечь. П��ле ���анды pushd �ере� �енна� �реды ��ружени� %cd% вернет ��лный те�ущий �уть. Дл� ��лучени� �у�вы ди��а, на ��т�рую �т��ражен �уть, ��жн� и���ль��вать �ледующую ���анду: set drv=%cd:~,2% Эта ���анда ��жет у�тан�вить дл� �ере�енн�й �начение вида Y:.
Полезные технологии пакетных файлов 545 Удаление предыдущего отображения перед запуском Е�ли нужн� и���ль��вать фи��ир�ванные �у�вы �т��раженн��� �етев��� ди��а, дл� �т��ражени� нужн� �ри�енить �ил�в�й ��дх�д. Сначала нужн� удалить лю��е ранее �уще�тв�вавшее �т��ражение на нужную ва� �у�ву, а �ате� �т��ра�ить ее на нужную �етевую �а��у. П����ль�у на ���ент �а�у��а �а�етн��� файла �етев�й ди�� ��жет и�еть, а ��жет и не и�еть �т��ражение, дл� удалени� лю���� и�еюще���� �т��ражени� � �ред��читаю и���ль��вать ���анду net use. Е�ли �ерена�равить выв�д эт�й ��� �анды в файл nul, в�е ����щени� �� �ши��ах �р��т� и�че�нут. Эт� �ред�твратит выв�д и� �а�етн��� файла ����щени� �� �ши��е, е�ли �у�ва ди��а на ���ент е�� �а�у��а не �т��ражена. Ра����три� �ри�ер: rem – отображение буквы диска G на сетевую папку net use g: /del >nul 2>nul & rem – удаление предыдущего возможного отображения net use g: \\server\sharename & rem – создание нового отображения if errorlevel 1 ( echo Сетевая папка не доступна if not "%quiet%" == "YES" pause exit /b ) Проверка приемлемости аргументов Е�ли ваш �а�етный файл д��у��ает вв�д и�ен файл�в, в����жн�, чт� ��ль��ватель �а�етн��� файла на�ерет и�� не�равильн�. Лучше ��ределить эт� �а� ��жн� рань� ше, че� ���в�лить те� �р��ра��а�, ��т�рые �а�у��ает �а�етный файл, �т�л�нуть�� � неверны�и и�ена�и файл�в. Перед те� �а� вы��лнить в �тн�шении файл�в �а� �ие�ни�удь дру�ие дей�тви�, ��жн� �р�ве�ти �ы�трую �р�вер�у тех и�ен, ��т�рые ввел ��ль��ватель, � ����щью �ледующе�� ци�ла: for%%fin(%*)do( if not exist %%f echo Ошибка: файл %%f не существует & exit /b ) Ра�у�еет��, �де�ь �ред��ла�ает��, чт� в�е ар�у�енты ���андн�й �тр��и �вл�� ют�� и�ена�и файл�в, а ва� нужн� на�и�ать �р�цедуру �р�вер�и, �твечающую ваши� �а�р��а�. За�ы�ел �а�лючает�� в т��, чт� �еред ра��т�й � введенны�и данны�и �ни �ри лю��й в����жн��ти д�лжны ��двер�ать�� �р�вер�е. Ведение регистрационных журналов Е�ли �а�етные файлы ���дают�� дл� и���ль��вани� � �ланир�вщи��� �аданий, т� в �лучае в��ни�н�вени� �р��ле� � �р��ра���й ����щений �� �ши��ах вы увидеть ее не ���жете. Ка� уже у���инал��ь в �лаве 9, важн�, чт��ы авт��атиче��и вы� ��лн�е�ые �р��ра��ы �а�и�ывали �в�и дей�тви�, чт��ы у ва� �ыла в����жн��ть у�едить�� в их ��рре�тн�й ра��те, а в �лучае ���ев ��жн� �ыл� ��ределить, чт� ��шл� не та� �а� над�. При ���дании �а�етн��� файла, вы��лн�е���� в авт��атиче���� режи�е, � ��ычн� �а�тавл�ю е�� �ервы� дел�� ���дать ре�и�траци�нный журнал и ���
546 Глава 11. Пакетные файлы для пользы и развлечения хранить в е�� файле те�ущее вре�� и дату. Зате� � ра��тавл�ю �� в�е�у файлу ���анды echo дл� д��авлени� в ре�и�траци�нный журнал ра��че�� ����ентари�. Стру�тура та���� �а�етн��� файла и�еет �ледующий вид: @echo off set logfile=MYBATCH.LOG echo Командная строка пакетного файла: %0 %* >%logfile% echo Запущен %date% в %time% >>%logfile% echo ------------------------ >>%logfile% Дл� и�ени файла ре�и�траци�нн��� журнала � и���ль�ую �ере�енную �реды ��ружени�, ��эт��у е�ли не��х�ди�� ��енить е�� и��, �не нужн� лишь �треда�ти� р�вать ���анду set в начале файла. Д��авление даты и вре�ени ���в�л�ет �ы�тр� ��ределить, ���да �ыл �а�ущен �р�це�� вы��лнени� �а�етн��� файла. Зате� �� в�е�у �а�етн��у файлу ��жн� и���ль��вать ���анды echo, ��д��ные те�, чт� и���ль��вали�ь в начале, дл� д��авлени� инф�р�ации � ре�и�траци�нн��у журналу. Следует �а�и�ывать и�ена ��ра�атывае�ых файл�в, д��авл�ть ����ента� рий в начале �ажд�й важн�й �ру��ы ���анд и, �е�у�л�вн�, ве�ти �а�и�и, �а�ающи� е�� в��ни�ших �р��ле�. Лучше выв�дить ����щени� не т�ль�� в ре�и�траци�нный журнал, н� и на �тандартный выв�д: @rem Файл примера batch1205.bat set logfile = mappit.log echo Отображение сетевого диска... echo Отображение сетевого диска... >>%logfile% net use m: \\server\sharename if errorlevel 1 ( echo Невозможно использовать общую папку \\server\sharename echo Невозможно использовать общую папку \\server\sharename >>%logfile% echo Преждевременный выход! >>%logfile% exit /b ) Т��да вы ���жете �а�и увидеть выв�д �ри ручн�� �а�у��е �а�етн��� файла. И на��нец, не�л�х� �удет �делать �а�лючительную �а�и�ь �еред �а�ы� вых�� д�� и� �а�етн��� файла, ���вещающую � т��, чт� �н д�ра��тал д� ��нца. За�лю� чительные ���анды ра�дела ��н�вн�й �р��ра��ы �а�етн��� файла ���ут и�еть �ледующий вид: echo ------------------------ >>%logfile% echo Завершен %date% в %time% >>%logfile% М�жет ��над��ить�� �а�тавить �р��ра��у �ерейти на �а�лючительные ���анды даже ���ле в��ни�н�вени� �ерье�н�й �ши��и. В�е�т� и���ль��вани� �ри вычи�ле� нии �етев�й �ши��и ���анды exit /b, �, в����жн�, и���ль��вал �ы ���анду goto done и в ��нец �а�етн��� файла ���е�тил �ы �ледующие ���анды: :done echo ------------------------- >>%logfile% echo Завершен %date% в %time% >>%logfile%
Полезные технологии пакетных файлов 547 Т��да ре�и�траци�нный файл всегда �ы �авершал�� �ледующей �тр���й: --- --- --- --- --- --- --- --- Завершен 02.05.2010 23:54:12.90 Е�ли �авершающе�� ����щени� не �удет, � ��й�у, чт� �лучил��ь нечт� не�ред� виденн�е. ▼▼ Если используется множество запускаемых по расписанию пакетных файлов, могут пригодить- ся технологии, рассмотренные в главе 9. Они предназначены для создания «общих итогов управленческих действий», показывающих результаты работы каждого из пакетных файлов.
Среда окружения MS-DOS при работе под Windows В эт�й �лаве вы у�наете, чт� 32�ра�р�дна� вер�и� W��dows и�итирует �реду ��ру� жени� MS�DOS дл� �тарых �р��ра��. y y Зде�ь �удет ���а�ан�, чт� �тары� �р��ра��а� DOS ��жн� выдел�ть �т�ль�� �а��ти, ���ль�� и� ��тре�ует��. y y Вы увидите, чт� файлы AUTOEXEC.BAT и CONFIG.S�S в�е еще живы и �д�р�вы. y y Мы ���уди� ��в�е�ти���ть � DOS, ��т�ра� реали��вана х�р�ш�, н� не иде� альн�; ���ут в��ни�нуть �р��ле�ы � не��т�ры�и и�ра�и и �тары�и ��де�а�и и у�таревши� �етевы� �р��ра��ны� ��е��ечение�. Программы MS-DOS под управлением Windows Старые �р��ра��ы не у�ирают, их �р��т� �тан�вит�� �л�жнее ��ддерживать. Та��ва �тара� �р��ра��и�т��а� ����в�р�а, н� �на и�еет �рав� на жи�нь и в наши дни. В ее ��раведлив��ти ��жн� �удет у�едить��, е�ли �ридет�� и���ль��вать или ��ддерживать �р��ра��ы MS�DOS на ��вре�енных вер�и�х W��dows. Не��т�рые �р��ра��ы, ��н�ванные на эт�й и�х�дн�й 16�ра�р�дн�й, ра��тающей в �и�в�льн�� режи�е ��ераци�нн�й �и�те�е, ����режне�у в �тр�ю (�лавны� ��ра���, в �и�не�е�. В W��dows 95 и 9� и�еют �а�ущенную в их ��н�ве MS�DOS, на ����ьютерах, ра��� тающих ��д у�равление� W��dows 7, V�s��, XP, 2000 и NT, ��ераци�нн�й �и�те�ы MS�DOS нет и в ���ине. В�е�т� эт��� 32�ра�р�дные вер�ии этих ��ераци�нных �и�те�, ��н�ванных на W��dows NT, э�улируют DOS дл� �тарых �р��ра��, т� е�ть W��dows �ред��тавл�ет �р��ра��ную �реду ��ружени�, и�итирующую та�ие же ди���вые, �лавиатур� ные, �ринтерные и э�ранные фун�ции, �а�ие �ред��тавл�ла MS�DOS. Эта �реда на�ывает�� виртуальн�й DOS��ашин�й W��dows NT (W��dows NT V���u�� DOS M��h��� — NTVDM�. 12
Программы MS-DOS под управлением Windows 549 ▼) 64-разрядные версии Windows 7, Vista и XP по вполне понятным техническим причинам не предоставляют поддержку непосредственного запуска приложений MS-DOS. Если у вас работа- ет 64-разрядная версия Windows, вы все же можете запустить приложения MS-DOS внутри вир- туальной машины, путем запуска Windows XP или MS-DOS внутри Microsoft Virtual PC, VMWare или другой программы виртуальной машины (в Windows 7 — путем запуска средства Windows XP Mode, которое можно свободно загрузить). Для конфигурирования виртуализированной ко- пии 32-разрядной Windows можно воспользоваться технологиями, рассматриваемыми в данной главе. Виртуальная DOS-машина Пр��ра��ы MS�DOS в�аи��дей�тв�вали � ����ьютерны� ���руд�вание� на�р�� �ую; �ни ���ли не���ред�твенн� у�равл�ть ада�тер�� ди��ле� дл� и��енени� ра�� решени� э�рана, ���ли на�р��ую ��ращать�� � ���лед�вательны� и �араллельны� ��рта� ����ьютера дл� у�равлени� ��де�а�и и �ринтера�и, и в�аи��дей�твие � ��ераци�нн�й �и�те��й �ни ��уще�твл�ли ���ред�тв�� ��ециальных ин�тру�ций �р�це���ра, на�ывае�ых программными прерываниями. В ��вре�енных �р��ра��ах W��dows в�е эт� �а�рещен�. В�е ���руд�вание у�равл�ет�� и��лючительн� �др�� ��ераци�нн�й �и�те�ы и е�� драйвера�и у�тр�й�тв, ��эт��у эти ��ль��ватель��ие �р��ра��ы, не ���твет�твующие ��вре�енны� �тандарта�, не ���ут �ере�илить ��ераци�нную �и�те�у. (Ра�у�еет��, эт� ���ут �делать и делают не�тандартные драйверы у�тр�й�тв.� При ���ыт�е �а�у�тить на вы��лнение лю�ую �р��ра��у W��dows и��ледует ее, чт��ы ��ределить, �а��е ��ружение ��ераци�нн�й �и�те�ы ей тре�ует��. Пр�� �ра��ные файлы, и�ена ��т�рых ��анчивают�� на .COM, �вл�ют�� и��лючительн� �р��ра��а�и MS�DOS. Файлы, чьи и�ена ��анчивают�� на .EXE, ���ут �ыть �р�� �ра��а�и W��32, W��dows 3.1 или MS�DOS. В эт�� �лучае W��dows и��ледует �ервые не���ль�� �айт �р��ра��н��� файла, у�а�ывающих на ра�личие. К��да ��наружит��, чт� дан �а�р�� на �а�у�� �р��ра��ы MS�DOS, W��dows �а�у��ает �р��ра��у ��д на�вание� ntvdm.exe, ��т�ра�, в �в�ю �чередь, �читывает и интер�ретирует DOS��р��ра��у. NTVDM дей�твует в �аче�тве ���редни�а �ежду DOS��р��ра���й и W��dows и вы��лн�ет �ледующие фун�ции: y y Ра��редел�ет �а��ть, �р�ани��ванную в �тиле �тар�й PC�архите�туры: 640 К�айт �а��ти д��ту�н� дл� и�итации DOS���ружени� и дл� �ри�ладн�й �р��ра��ы, а та�же и�итируют�� интерфей�ы �т��ражае��й (�xp��d�d� и д�� ��лнительн�й (�x���d�d� �а��ти, ���в�л�ющие MS�DOS �ре�д�леть ру�еж в 1 М�айт. y y NTVDM ��ра�атывает лю�ые �р��ра��ные �рерывани�, выдавае�ые �р��ра�� ��й, и �ерев�дит �а�р��ы � �и�те�е MS�DOS в э�виваленты W��dows. y y NTVDM выдел�ет �а��ть, ��т�ра� �ред�тает �еред �р��ра���й MS�DOS в виде �а��ти ада�тера ди��ле�. NTVDM �т�леживает эту �а��ть и �ри и��енении ее ���т��ни� �т��ражает ���твет�твующие и��енени� в ��не ���андн�й �тр��и. y y Е�ли �р��ра��а выдает ин�тру�ции �� �ерев�ду ди��ле� в �рафиче��ий режи�, NTVDM �ерев�дит ��н� ���андн�й �тр��и в ��лн�э�ранный режи�. Зате�
550 Глава 12. Среда окружения MS-DOS при работе под Windows W��dows �ере�лючает ада�тер ди��ле� в �а�рашивае�ый �рафиче��ий режи� и �т�равл�ет лю�ые «�е���а�ные» а��аратные ин�тру�ции и� �р��ра�� MS� DOS на ада�тер ди��ле�. Н� в�е и��енени� �т�леживают��, и у�равление ��жет �ыть в��вращен� в лю��й ���ент. y y NTVDM т�чн� та� же �т�леживает д��ту� � ��рта� �ринтера и ���лед�ватель� ны� ��рта�. NTVDM �ерехватывает лю�ые �р�це���рные ин�тру�ции, �ыта� ющие�� у�равл�ть �ринтер�� или ���лед�вательны�и ��рта�и, ��редел�ет на�ерени� �р��ра��ы и и���ль�ует фун�ции W��dows дл� д��тижени� т��� же эффе�та. y y NTVDM �ред��тавл�ет ��ддерж�у �ыши чере� �тандартный DOS�драйвер �ыши. Эт�т драйвер в�тр�ен в NTVDM и е�� не над� �а�ружать �тдельн�. С��дает�� в��лне ��раведлив�е в�ечатление � ��льш�� ��ъе�е ра��ты. NTVDM и�еет ��ъе� ���л� 400 К�айт — ��льше, че� в�� �а��ть, ��т�ра� �ыла д��ту�на на �а�ых �ервых PC�����ьютерах. Х�р�ш� чт� т�ль�� 32 К�айт эт�й �а��ти ��а�ы� вает�� в 640���айтн�� �р��тран�тве �а��ти, ��т�р�е видит �р��ра��а MS�DOS. И�итируе�ые драйверы у�тр�й�тв и�еют ве�ь�а не��льш�й ра��ер, �����ль�у ��н�вна� ча�ть реальн�й ра��ты вы��лн�ет�� в ра�ных �е�тах �р��ра��ы NTVDM. ▼) Один из побочных эффектов схемы эмуляции заключается в том, что при запуске программы MS-DOS эта программа появляется в списке процессов Диспетчера задач как ntvdm.exe. К при- меру, если выполняется DOS WordPerfect, wp.exe в списке отсутствует. Этот вопрос еще будет рассмотрен в конце данной главы. К�тати, �� �а�р��у �ри�ладн�й �р��ра��ы, NTVDM �ред�тавл�ет�� �а� MS� DOS вер�ии 5.0 . П�че�у M���oso�� вы�рала DOS 5, а не DOS 6, � не �наю. В ��ль� шин�тве �лучаев DOS��р��ра��ы ра��тают �е� �а�их�ли�� �р��ле�. Н� NTVDM не �вл�ет�� а���лютн� ��вершенны� �ред�тв��. На�ри�ер, не �тличает�� ��вер� шен�тв�� э�ул�ци� NTVDM не��т�р��� ���руд�вани�. Кр��е эт���, NTVDM не ��дражает в� в�ех т�н���т�х �тары� �етевы� фун�ци�� MS�DOS, чт��ы вве�ти в �а�луждение а���лютн� в�е �р��ра��ы. Мне �рих�дил��ь �тал�ивать�� �� �ле� дующи�и ра�н�видн��т��и �р��ле�: y y Пр��ра��ы DOS, и���ль�ующие �етевые �ринтеры, на�ри�ер �тарые DOS� �р��ра��ы �а�ы данных FoxP�o, не в�е�да и�вле�ают �траницу ���ле ра��ечат� �и или же ��р�й и�вле�ают �лиш��� �н��� �траниц. y y М�де�н�е �р��ра��н�е ��е��ечение, ��д��н�е �р��ра��е C�os��Up ��mo��� �o���o� ����ании No��o��L�mb���, ра��тает не в��лне н�р�альн�. Между �р�� �ра���й и ��де��� на�людает�� ��тер� данных, �нижающа� ���р��ть �в��и, и даже ��двешивание ��де�а. y y И�ры, �ытающие�� и���ль��вать э�ул�цию �ву��в��� у�тр�й�тва Sou�d ���s���, реали��ванную в NTVDM, ���ут �енерир�вать �трашный ви�� или в���ще ��лн��тью �ави�нуть. К ��жалению, �ри в��ни�н�вении ��д��ных �р��ле� � ни�и �ра�тиче��и ни� че�� нель�� �делать.
Программы MS-DOS под управлением Windows 551 Кр��е NTVDM.�X� и COMMAND.COM, в� и�� ��в�е�ти���ти (вер��тн�, �р��т� �� �ричина� �енти�ентальн��� хара�тера� W��dows ���тавл�ет�� � не��� т�ры�и �тары�и утилита�и DOS 5.0 . Эт� �ри�инальные 16�ра�р�дные �р��ра��ы MS�DOS. Они ра��тают т�чн� та� же, �а� и в�е�да — ни�а�их у��вершен�тв�ваний в них не вн��ил��ь. В чи�л� этих ветеран�в вх�д�т: append fastopen* mem debug graftablnlsfunc setver edit graphics share* edlin loadfix exe2bin loadhigh Пр��ра��ы, ���еченные �ве�д�ч��й (*� ниче�� не делают, �����ль�у W��dows вы��лн�ет эти фун�ции авт��атиче��и. Они ���тавл�ют�� т�ль�� и� ����ражений ��в�е�ти���ти. П� в�ей види���ти, их �ри�ут�твие ��у�л�влен� у�ир�тв�рение� �тарых �рил�жений, �а�етных файл�в или �р��ра�� у�тан�в�и, ��т�рые тре�уют наличи� этих ��вершенн� ненужных в на�т��щее вре�� �р��ра��. Е�ть еще �дна д���лнительна� �р��ра��а ��е��ечени� ��в�е�ти���ти, �а�луживающа� ������� вни�ани� — �o���dos. forcedos При ���ыт�е �а�у��а лю��й �р��ра��ы W��dows и��ледует и���лн�е�ый файл эт�й �р��ра��ы, чт��ы ��ределить, � �а���у виду эта �р��ра��а �тн��ит��: � �р�� �ра��а� дл� 32�ра�р�дн�й W��dows, дл� 16�ра�р�дн�й W��dows, дл� OS�2, дл� DOS и т. д. О�ычн� W��dows не�л�х� ��равл�ет�� � ��ределение� тре�уе��й дл� �р��ра��ы �реды, н� ин��да �лучают�� �р�валы. Е�ли ��ажет��, чт� �на не ��ра� вила�ь � �равильны� ��ределение� �ринадлежн��ти �р��ра��ы � �р��ра��а� DOS, вы ��жете �а�тавить W��dows �а�у�тить �р��ра��у в �реде MS�DOS, д��авив в начал� ���андн�й �тр��и ���анду forcedos. Ее �инта��и� и�еет �ледующий вид: forcedos [/d папка] программа аргументы...] MS-DOS и COMMAND.COM Ка� уже у���инал��ь в �лаве 10 «К��андна� �тр��а CMD» и в �лаве 11 «Па�ет� ные файлы дл� ��ль�ы и ра�влечени�», в W��dows и���ль�ует�� н�ва� �р��ра��а ���л�ч�и ���андн�й �тр��и �� и�ени CMD.�X�. Ка� ��а�ал��ь, дл� ��е��ече� ни� �а��и�альн�й ��в�е�ти���ти �� �тары�и �р��ра��а�и MS�DOS и �тары�и �а�етны�и файла�и ����режне�у д��ту�на и и�х�дна� �р��ра��а ���л�ч�и COMMAND.COM. П���режне�у на �е�те и ее �р����д�а�, �тара� вер�и� ��ы�а �а�етных файл�в, ��т�рую �ы в�е �нали и «лю�или». Ра��тает �на �ледующи� ��ра���: е�ли в ��не ���андн�й �тр��и �а�ущена �р��ра��а MS�DOS, ���л�ч�а CMD �ред��ла�ает, чт� вы на вре�� ���ираете�ь ра� ��тать в 16�ра�р�дн�� �ире. К��да ра��та DOS��р��ра��ы �авершает��, ��н� �ере� �лючает�� на ���л�ч�у COMMAND.COM. При эт�� �а�етны не��т�рые �тличи�: y y И�� те�уще�� �атал��а ���ен�ет�� на е�� �тар���дный э�вивалент ф�р�ата «�.3». На�ри�ер, е�ли те�ущи� �ыл �атал�� C:\program �les, т� �� вых�ду и� DOS��р��ра��ы �атал�� �удет �т��ражать�� �а� C:\PROGRA~1.
552 Глава 12. Среда окружения MS-DOS при работе под Windows y y И�ена �ере�енных �реды ��ружени� и��ен�т�� на та�ие же, н� ���т��щие т�ль�� и� �у�в верхне�� ре�и�тра, �а и��лючение� �ере�енн�й windir, ��т�ра� не �удет �ред�тавлена. y y Станут нед��ту�ны ра�ширенные вер�ии в�тр�енных ���анд. В�е ���анды, на ��т�рые эт� ��вли�ет, �еречи�лены в та�л. 11 .4 . y y Е�ли вы �а�у�тили COMMAND.COM в �вн�� виде, �а�рыть ��н� щелч��� на е�� �н���е �а�рыти� �танет нев����жн� — COMMAND.COM не ��лучает ��� ��щени� на �а�рытие. Чт��ы �а�рыть ��н�, нужн� на�рать ���анду exit. Эти и��енени� ��вышают шан�ы на �а�у�� �тарых �р��ра�� и �а�етных файл�в. Н�, е�ли нужн�, ��жн� ��тавить CMD.�X� в �аче�тве вашей ���л�ч�и ���андн�й �тр��и, даже �ри и���ль��вании �р��ра�� MS�DOS, �уте� на�тр�й�и �реды MS�DOS. Эт�т в��р�� �удет ра����трен в �ледующе� ра�деле. Конфигурация среды MS-DOS Дл� ��ддерж�и ��в�е�ти���ти � �а��и�альн� в����жны� ��личе�тв�� �тарых DOS��р��ра�� ��жн� на�тр�ить NTVDM не���ль�и�и ������а�и, чт��ы ��д� �тр�ить�� ��д ��лее �тарую �реду ��ружени�. Чере� диал���в�е ��н� �в�й�тв ��жн� и��енить на�тр�й�и �а��ти и ��на NTVDM, а �а�у �реду виртуальн�й DOS ��жн� на�тр�ить чере� ��нфи�ураци�нные файлы, ��дражающие �тары� файла� CONFIG.SYS и AUTO�X�C.�AT. К�нфи�ураци� �� у��лчанию ра��тает �ледующи� ��ра���: y y П� у��лчанию NTVDM дает MS�DOS��р��ра��е �т�ль�� ��ычн�й и DOS P�o�����d Mod� I�������� (DMPI� �а��ти, ���ль�� �на �а�р��ит. П��а не �удут и��енены на�тр�й�и, ни�а�а� д���лнительна� — �x���d�d (XMS� — или �т� � �ражае�а� — �xp��d�d (�MS� — �а��ть не �удет д��ту�на, е�ли т�ль�� вы не и��енили у�тан�в�и. y y Перед те� �а� �а�у�тить �р��ра��у, NTVDM �читывает варианты ��нфи�ура� ции и� файла \windows\system32\con�g.nt и вы��лн�ет �а�етный файл \windows\ system32\autoexec.nt. Эти файлы у�танавливают�� в�е�те � W��dows и ��держат важные и�х�дные на�тр�й�и, ���в�л�ющие и���ль��вать верхнюю ��ла�ть �а� ��ти, ра��ту в �ети и э�улир�вать �ву��в�е ���руд�вание Sou�d ���s���. Эти на�тр�й�и д�лжны ра��тать дл� ��льшин�тва �р��ра�� MS�DOS. Н�, е�ли нужна ����а� на�тр�й�а DOS��реды дл� ��н�ретных �рил�жений, ��жет ��над�� �ить�� на�тр�ить дл� них �рлы�и W��dows или, �� �райней �ере, ���дать �рлы�и, �т�рывающие ��ециальн� на�тр�енные ��на ���андн�й �тр��и. Дл� ���дани� ��ециальн� на�тр�енн�й �реды MS�DOS нужн� щел�нуть �рав�й �н����й �ыши на и�ени �р��ра��ы MS�DOS, ��т�рую нужн� �а�у�тить, и вы� �рать �ун�т Свойства (P�op�����s�. Е�ли и��енить �а�ие�ни�удь и�х�дные �в�й�тва и ��хранить на�тр�й�и, W��dows ���дает файл � та�и� же и�ене�, �а� у файла �р��ра��ы, н� � ра�ширение� .PIF . В эт�� PIF�файле хран�т�� ��ециальные на� �тр�й�и. В �xp�o��� �н ����начает�� �а� «Ярлы� � �р��ра��е MS�DOS» («Sho���u� �o MS�DOS P�og��m»�. Дл� �а�у��а �р��ра��ы �ледует и���ль��вать эт�т �рлы�.
Конфигурация среды MS-DOS 553 Е�ли нужн� �еред �а�у���� �р��ра��ы �а�у�тить �а�етный файл, �ледует �р�де� лать т�чн� та�ую же �р�цедуру, н� ���дать �рлы� не дл� �р��ра��ы, а дл� �а�ет� н��� файла. Эт�т в��р�� �удет ра����трен в �ледующе� ра�деле. ▼) Чтобы воспользоваться всеми внесенными вами изменениями, нужно создать ярлык для запу- ска программы MS-DOS. Если запустить EXE-файл напрямую, Windows не обратит на PIF-файл (ярлык) никакого внимания. Параметры окна и памяти Диал���в�е ��н� �в�й�тв дл� �рлы�а �рил�жений MS�DOS (PIF�файл� ���в�л�ет на�тр�ить �в�й�тва �а��ти, ди��ле� и �ыши �реды виртуальн�й MS�DOS. Дл� на�тр�й�и этих �в�й�тв нужн� щел�нуть �рав�й �н����й �ыши на �а��� файле �рил�жени� MS�DOS или, е�ли ��ециальна� на�тр�й�а �в�й�тв уже �р�и�в�ди� ла�ь, ��жн� щел�нуть �рав�й �н����й на �нач�е �рлы�а �рил�жени� MS�DOS, а �ате� вы�рать �ун�т Свойства (P�op�����s�. Чаще в�е�� и��енени�� ��двер�ают�� �ледующие на�тр�й�и: y y Ра��ча� �а��а в�лад�и Программа (P�og��m�. y y Пара�етры Дополнительная память (�x���d�d M�mo�y� и Переменные среды (I������ ��v��o�m���� в�лад�и Память (M�mo�y�. y y Пара�етр Полная приостановка (A�w�ys Susp��d� в�лад�и Разное (M�s��. В �ледующих не���ль�их ра�делах �удут даны ��лее ��др��ные ��и�ани� в�ех в�лад�� �в�й�тв, чт��ы вы ����ли ��н�ть, �а�ие �ара�етры ��нфи�урации д��ту�� ны. В�лад�и Общие (G�������, Безопасность (S��u���y�, Общие (Summ��y� и Архивация (���kup� ��в�адают � та�и�и же дл� лю�ых дру�их файл�в W��dows (е�ли �ни ���вл�ют�� в вашей �и�те�е�, ��эт��у �де�ь �ни ра���атривать�� не �удут. Настройки программы В� в�лад�е Программа (P�og��m� выв�дит�� ��ычна� �траница �в�й�тв �рлы�а и д��у��ают�� �ледующие на�тр�й�и (��. ри�. 12 .1�: y y Команда (Cmd Line) — �уть � файлу �р��ра��ы MS�DOS или � �а�етн��у файлу и лю�ые, не��х�ди�ые ва� д���лнительные ар�у�енты ���андн�й �тр�� �и. Е�ли в ��ле ���анды вве�ти в��р��ительный �на� (?�, W��dows �ри �а�у��е ваше�� �рлы�а выведет �ри�лашение на вв�д ар�у�ент�в ���андн�й �тр��и. В�е, чт� �удет на�ран�, �удет и���ль��ван� в�е�т� �и�в�ла ?. y y Рабочая папка (Working) — ди�� и �а��а, и���ль�уе�ые в �аче�тве и�х�дн��� ра��че�� �атал��а дл� �р��ра��ы. Е�ли ��тавить эт� ��ле �у�ты�, и�х�дны� �удет т�т �атал��, в ��т�р�� нах�дит�� �р��ра��а MS�DOS. Е�ли �рлы� и�� ��ль�ует�� не���ль�и�и людь�и, ��жет ��тре��вать�� начать �уть �� �тр��и %userprofile% дл� �ред��тавлени� �ути � �а��е �р�фил� те�уще�� ��ль��ва� тел� и у�а�ани� ��тальн��� �ути �тн��ительн� ее. y y Пакетный файл (Batch File) — �чевидн�, и�� �а�етн��� файла, �а�у��ае���� �еред начал�� вы��лнени� �р��ра��ы. На���ль�� � ���у �удить, эт� �в�й�тв� дей�твительн� ра��тает.
554 Глава 12. Среда окружения MS-DOS при работе под Windows y y Быстрый вызов (Shortcut Key) — д���лнительн�е �в�й�тв�. О�редел�ет «��� р�чую» �лавишу, ��т�ра� д�лжна �а�у�тить �р��ра��у. П�х�же, эт� �в�й�тв� не ра��тает. y y Окно (Run) — вы��р начальн��� ра��ера ��на: ��ычный, ра�вернутый или �вернутый (в �нач���. Отличает�� �т на�тр�й�и на ��лный э�ран (��. ра�дел на�тр�е� э�рана�. y y Закрывать окно по завершении работы (Close on Exit) — е�ли эт�т флаж�� у�тан�влен, �� вых�ду и� �р��ра��ы ��н� �а�рывает��. Е�ли эт�т флаж�� �н�т, ��н� ��тает�� �т�рыты�, н� неа�тивны�, чт� �тражает�� ���твет�твующи� �л�в�� в �а��л�в�е. В ��льшин�тве �лучаев флаж�� нужн� ��тавл�ть у�тан�в� ленны�. Рис. 12 .1 . Вкладка Программа (Program) ярлыка MS-DOS. Кнопка Дополнительно (Advanced) позволяет указать настроечный файл con�g.nt или autoexec.nt ▼▼ Если DOS-программа сбоит в работе, снимите этот флажок и попробуйте запустить ее еще раз. Тогда у вас будет время прочитать сообщения об ошибках, которые появляются в окне. В�лад�а Программа (P�og��m� та�же ���в�л�ет у�а�ать альтернативную ��нфи� �урацию и �у���вые �а�етные файлы, и���ль�уе�ые в�е�т� CONFIG.NT и AUTOEXEC. NT. Дл� и��енени� ��нфи�ураци�нных файл�в, �в��анных � �рлы���, нужн� щел�нуть на �н���е Дополнительно (Adv����d� и вве�ти �ути и и�ена нужных файл�в. П� у��лчанию и���ль�уют�� �начени� %SystemRoot%\S�STEM32\CONFIG. NT и %SystemRoot%\S�STEM32\AUTOEXEC.NT . На�тр�й�и, и�еющие�� в этих файлах, �удут ра����трены далее.
Конфигурация среды MS-DOS 555 ▼▼ Если у программы MS-DOS имеются проблемы, связанные с синхронизацией или скоростью, то, возможно, она рассчитывала на изменение настроек микросхем PC-таймера. Если щелкнуть на кнопке Дополнительно (Advanced) на вкладке Программа (Program) и установить флажок Эмуляция совместимого аппаратного таймера (Compatible Timer Hardware Emulation), проблема может быть решена. Настройки шрифта В�лад�а Шрифт (Fo��� ���в�л�ет вы�рать шрифт, и���ль�уе�ый �ри вы��лнении �р��ра��ы в ��не. И�х�дна� на�тр�й�а Авто (Au�o� ���в�л�ет W��dows �ен�ть ра��ер шрифта �ри и��енении ра��ера ��на, н� вы ��жете у�а�ать фи��ир�ванный шрифт. Е�ли е�� у�а�ать, ��н� ��тер�ет в����жн��ть и��енени� ра��ера. ▼▼ Если нужно переключиться на фиксированный размер шрифта, это можно сделать в процессе работы программы. Щелкните правой кнопкой в верхнем левом углу окна программы, выбе- рите пункт Свойства (Properties) и откройте вкладку Шрифт (Font). Внесите все необходимые изменения, а затем выберите пункт Save Properties for Future Windows with the Same Title when Windows offers you this option. Настройки памяти В�лад�а Память (M�mo�y�, ���а�анна� на ри�. 12 .2, ���в�л�ет у�а�ать ти� и ��ъе� �а��ти, д��ту�н�й �р��ра��е MS�DOS. Мн�����ра�ие ти��в �а��ти ���вил��ь �ла��дар� ра�личны� ������а�, ���в�л�ющи� ��равить�� � ��раниченны�и в��� ��жн��т��и у�тр�й�тв �а��ти �ри�инальн��� PC. Не��т�рые �р��ра��ы ���ут и���ль��вать лю��й ти� �а��ти, н� е�ть и та�ие �р��ра��ы, ��т�ры� тре�ует�� ��н�ретный д��ту� � XMS� или �MS��а��ти . В эт�й в�лад�е д��ту�ен �ледующий �еречень на�тр�е�: y y Обычная память, всего (Conventional Memory, Total) — ��ъе� �а��ти в диа� �а��не �т 0 д� 640 К�айт. На�тр�й�а Авто (Au�o� �ред��тавл�ет д� 640 К�айт. И��ен�ть эту на�тр�й�у вр�д ли ���да�ни�удь ��над��ит��. y y Переменные среды (Initial Environment) — ��личе�тв� �айт, выдел�е�ых ��д �ере�енные �реды ��ружени�. На�тр�й�а Авто (Au�o� �ред�и�ывает NTVDM и���ль��вать ��ъе�, у�а�анный в на�тр�й�ах �ере�енн�й SHELL в файле CONFIG. NT. Е�ли и���ль�уют�� �л�жные �а�етные файлы, эт�т ��ъе� ��жет ��над�� �ить�� увеличить д� 2000 �айт и ��лее. y y Защищенный режим (Protected) — е�ли у�тан�влен флаж��, эта на�тр�й�а не ���в�л�ет �р��ра��е �ен�ть ��держи��е �а��ти в диа�а��не, �ан�т�� и�итиру� е�ы�и �и�те�ны�и �����нента�и MS�DOS. Эт�т флаж�� �ледует у�тан�вить т�ль�� в т�� �лучае, е�ли �р�и�х�д�т не��ъ��ни�ые ���и в ра��те. y y Отображаемая (EMS) память (EMS Memory) — е�ли ваша �р��ра��а тре�ует �MS (ра��итую на �траницы� �а��ть, у�тан�вите �начение Авто (Au�o� или у�ажите фи��ир�ванн�е чи�л�.
556 Глава 12. Среда окружения MS-DOS при работе под Windows Рис. 12 .2 . Вкладка Память позволяет настроить форматы памяти, доступной DOS-программе y y Дополнительная (XMS) память (XMS Memory) — е�ли ваша �р��ра��а ��жет и���ль��вать д���лнительную XMS��а��ть, у�тан�вите �начение Авто (Au�o� или у�ажите фи��ир�ванн�е чи�л�. y y Использовать HMA (Uses HMA) — ��ычн� эта на�тр�й�а не дает ни�а���� эф� фе�та, ��т��у чт� верхн�� ��ла�ть �а��ти — H�gh M�mo�y A��� — и���ль�ует�� дл� и�итации �р��ра��ы MS�DOS. y y Память DPMI (DPMI Memory) — �� у��лчанию эта на�тр�й�а у�тан�влена в Авто (Au�o�. Е�ли нужн�, ��жн� �т�лючить или ра�решить фи��ир�ванный ��ъе� �а��ти DPMI. Настройки экрана На�тр�й�и э�рана ���в�л�ют ��ределить, �удет ли �р��ра��а �ри �а�у��е и�еть «не���ред�твенный» д��ту� �� в�е�у э�рану. В чи�л� на�тр�е� вх�д�т �ледующие эле�енты: y y Режим (Usage) — ���в�л�ет вы�рать в �аче�тве начальн��� режи�а ди��ле� ли�� ��лный э�ран, ли�� ��н�. В ��лн�э�ранн�� режи�е �р��ра��а MS�DOS �ани�ает ве�ь ��н�вн�й ди��лей и ��жет �т��ражать �рафи�у. y y Восстанавливать параметры при запуске (Restore Settings at Startup) — е�ли эт�т флаж�� у�тан�влен, т� �ри �ледующе� �а�у��е �р��ра��ы �н�ва и�� ��ль�уют�� �а�ые ���ледние на�тр�й�и ра��ер�в ��на и шрифта. Е�ли нужн� �ред��тавить ���т��нную �реду ��ружени� дл� не���ль�их ��ль��вателей, �ни�ите эт�т флаж��, у�тан�вите ���твет�твующие и�х�дные на�тр�й�и, а �а�
Конфигурация среды MS-DOS 557 те�, и���ль�у� на�тр�й�и �е���а�н��ти, �делайте PIF�файл нед��ту�ны� �� �а�и�и дл� дру�их ��ль��вателей. y y Эмуляция функции ПЗУ (Fast ROM Emulation) — ���да у�тан�влен эт�т флаж��, виртуальна� DOS��ашина э�улирует �рафиче��ие фун�ции, ��т�рые ��ычн� �ред��тавл�ют�� в�тр�енн�й (в ПЗУ� �IOS��р��ра���й ада�тера ди�� �ле�. y y Динамическое выделение памяти (Dynamic Memory Allocation) — ���да у�тан�влен эт�т флаж��, W��dows ��в���ждает �а��ть, �редна�наченную дл� виртуальн��� �рафиче����� ди��ле�, ���да �р��ра��а �ере�лючает�� � �рафи� че����� на те��т�вый ди��лей. Е�ли �ри ��ратн�� �ере�лючении ��лучает�� �у�т�й э�ран, ���р��уйте �н�ть эт�т флаж��. К��да в �р�це��е вы��лнени� �р��ра��ы MS�DOS �на �ытает�� �ере�лючить ди��лей � те��та на �рафи�у, W��dows авт��атиче��и �ере�лючает�� в ��лн�э�ран� ный режи�. Нажи�а� ����инацию �лавиш Alt+Enter, ��жн� �ере�лючать�� �ежду режи�а�и в ���их на�равлени�х вручную. Е�ли �р��ра��а и���ль�ует те��т�вый ди��лей, ��жн� �р�д�лжить ее и���ль��вание в режи�е ��на. Н� е�ли �на выв�� дит �рафи�у, �р��ра��а �ри��танавливает�� (�а�тывает� и �ини�и�ирует�� д� тех ��р, ���а не ��ажет�� в ��лн�э�ранн�� режи�е. К ��жалению, W��dows не ��жет �т��ражать вер�ию �рафиче����� ди��ле� DOS в ��нах не��льш��� ра��ера. Смешанные настройки На в�лад�е Разное (M�s�������ous S�����gs� ��редел�ет��, �а� �р��ра��а ведет �е�� �ри �а�у��е в ��не. На�начение ��льшин�тва на�тр�е� ��н�тн� �е� лишних ��ъ� ��нений. В�лад�а ���а�ана на ри�. 12 .3 . К наи�енее �чевидны� на�тр�й�а� ��жн� �тне�ти �ледующие: y y Полная приостановка (Always Suspend) — е�ли флаж�� у�тан�влен, �р��ра�� �а MS�DOS �а�тывает, ���да ��н� тер�ет а�тивн��ть. П����ль�у �р��ра��ы MS�DOS не д��у��ают �н����адачн��ти, �ни �тре��т�� тратить на �е�� уй�у вре�ени центральн��� �р�це���ра даже �ри �р��т�е. При��тан�в�а �р��ра��ы на т� вре��, ���а �на не и���ль�ует��, делает �и�те�у ��лее ра�т�р��н�й. Н� е�ли вы �а�у��аете ����уни�аци�нные �р��ра��ы или �р��ра��ы у�равлени� �а�а�и данных, ��т�рые д�лжны ра��тать, даже е�ли вы �ани�аете�ь дру�и�и дела�и, эт�т флаж�� нужн� �н�ть. y y Приоритет при ожидании (Idle Sensitivity) — эта на�тр�й�а та�же �тн��ит�� � �р��ле�е �р��т�� центральн��� �р�це���ра. W��dows �ытает�� у�адать, ���да DOS��р��ра��а �р��т� �рутит�� в�у�тую, и �нижает ей ур�вень �ри�ритета, е�ли ��ла�ает, чт� та��й ���ент на�тал. Вы���а� реа�ци� на �р��т�й ��начает, чт� W��dows чаще ��л�н�ет�� � �ы�ли, чт� �р��ра��а нах�дит�� в �р��т�е, ��выша� �р�и�в�дительн��ть дру�их �рил�жений. У�тан�в�а ни���й реа�ции на �р��т�й �а�тавл�ет W��dows выдел�ть DOS��рил�жению ��льше вре�ени. Прил�жени� DOS ��льше ��л�нны � ф�н�в�й (неитера�тивн�й� ��ра��т�е данных, �нижа� те� �а�ы� �ы�тр�дей�твие ваших W��dows��рил�жений. Е�ли ваша DOS��р��ра��а вы�ывает �а�едление в�ей ��тальн�й ра��ты, ур�вень
558 Глава 12. Среда окружения MS-DOS при работе под Windows �ри�ритета �ри �жидании �ледует ��вы�ить, а е�ли ваша DOS��р��ра��а не ��жет ��равить�� �� �в�ей �адачей, е�� �ледует �ни�ить. В ���ледне� �лучае нужн� та�же �н�ть флаж�� Полная приостановка (A�w�ys Susp��d�. Рис. 12 .3 . Вкладка Разное (Miscellaneous Settings) позволяет управлять тем, как программа использует мышь и клавиатуру y y Монопольное использование мыши (Exclusive Mode) — выдел�ет �ышь DOS� �р��ра��е. y y Быстрая вставка (Fast Pasting) — ��редел�ет ���р��ть и�итации ���руд�вани� е� W��dows нажатий �лавиш в �р��ра��ах MS�DOS, ���да те��т в�тавл�ет�� и� �уфера ���ена W��dows � и���ль��вание� �лавиши Alt+пробел и �ун�т�в Изменить (�d���, Вставить (P�s���. Е�ли �и�в�лы тер�ют�� �ри в�тав�е, эт�т флаж�� �ледует �н�ть. y y Сочетания клавиш, отведенные для системы (Windows Short Keys) — эти флаж�и ���в�л�ют ��ределить, �а�ие нажати� ��ециальных �лавиш �удут �ере� давать�� не �р��ра��а� MS�DOS, а W��dows. Е�ли ваша �р��ра��а MS�DOS нуждает�� в та�их ����инаци�х, �а� Alt+Tab и Alt+Enter, ���твет�твующие флаж� �и на эт�й �транице нужн� �н�ть. Зате� DOS��р��ра��а �удет реа�ир�вать на нажатие этих �лавиш в ��лн�э�ранн�� режи�е или �ри а�тивн��ти ее ��на, ��эт��у �удьте ��т�вы � утрате ���твет�твующих �ы�трых вы��в�в в W��dows. О���енн� �л�жн� �удет ���ле �н�ти� флаж�а Alt+Enter и �ерех�да в ��лн�� э�ранный режи�. Е�ли нужн� �удет д� вых�да и� �р��ра��ы ���ть �ере� �лючить�� на ра��чий �т�л W��dows, �ридет�� нажать ��четание �лавиш Ctrl+Alt+Del, чт��ы ���а�ть в Ди��етчер �адач.
Конфигурация среды MS-DOS 559 Настройки совместимости На�тр�й�и ��в�е�ти���ти W��dows ���в�л�ют ��раничить в����жн��ти ада�те� ра виртуальн��� ди��ле�, види�ые �р��ра��е MS�DOS. Важны�и на�тр�й�а�и �вл�ют�� флаж�и Использовать 256 цветов (Ru� �� 256 Co�o�s� и Использовать раз- решение экрана 640 × 480 (Ru� �� 640 × 4�0 S����� R�so�u��o��. Е�ли у �р��ра��ы MS�DOS в��ни�ают �р��ле�ы � �т��ражение� �рафиче����� э�рана, ���р��уйте у�тан�вить эти флаж�и. CONFIG.NT Т�чн� та� же �а� MS�DOS дл� и�х�дн��� ра��ределени� �а��ти и дл� �а�ру��и драйвер�в у�тр�й�тв и���ль�ует CONFIG.S�S, NTVDM дл� ��нфи�урации �реды ��ружени� виртуальн�й DOS и���ль�ует CONFIG.NT . И�х�дный файл CONFIG.NT, ���вл�ющий�� �ри у�тан�в�е W��dows, нах�дит�� в �атал��е \windows\system32 и ��держит не���ль�� �траниц те��та ����ентариев, ��т�рый ��жет ��над��ить�� �р�читать. И�х�дные на�тр�й�и эт��� файла и�еют �ледующий вид: dos=high,umbdevice=%systemroot%\system32\himem.sys files=40 Файл CONFIG.NT ��жн� реда�тир�вать, чт��ы и��енить и�х�дные у�тан�в�и дл� в�ех �рил�жений MS�DOS, или же ��жн� ���дать альтернативные файлы, и�� ��ль�у� дл� ��н�ретных �рил�жений дру��е и��. В ���ледне� �лучае дл� вв�да альтернативн��� и�ени нужн� в����ль��вать�� �н����й Дополнительно (Adv����d� в� в�лад�е Программа (P�og��m� ��на �в�й�тв �рлы�а �р��ра��ы. Далее дл� ��ыл�и на лю��й ��нфи�ураци�нный файл �удет и���ль��вать�� и�� CONFIG.NT . ▼) Если в качестве приложения MS-DOS используются базы данных, то настройку FILES= в CONFIG. NT придется, наверное, увеличить до 100 и более. Может также понадобиться добавить ANSI- модуль управления курсором, воспользовавшись для этого следующей строкой device = %systemroot%\system32\ansi.sys В остальных случаях изменять эти настройки вряд ли понадобится. П�лный �еречень на�тр�е�, �адавае�ых в файле CONFIG.NT, �ред�тавлен в ��рав� �е 12.1 . СПРАВКА 12.1. НАСТРОЙКИ, ЗАДАВАЕМЫЕ В CONFIG.NT COUNTRY=xxx[,[yyy][, [путь]]имя_файла] Принуждение MS�DOS � и���ль��ванию альтернативн��� на��ра �и�� в�л�в и ф�р�ата даты�вре�ени. Эле�ент xxx �вл�ет�� ��д�� �траны (ре�и�� на�, эле�ент yyy �вл�ет�� не����ательны� ����начение� ��д�в�й �траницы, а имя_файла ��редел�ет д���лнительный драйвер, ��редел�ющий инф�р�ацию � ��де �траны. Е�ли �реда ��ружени� виртуальн�й MS�DOS и���ль�ует�� �а �редела�и США, ��ратите�ь � Центру ��рав�и и ��ддерж�и и вы��лните ��� и�� дл� �траны.
560 Глава 12. Среда окружения MS-DOS при работе под Windows DEVICE=[путь\]имя_файла [аргументы] Принуждение � �а�ру��е драйвера у�тр�й�тва. А��аратные драйверы у�тр�й�тв в W��dows �ра�тиче��и не работают, че�� нель�� ��а�ать �� ��ре� деленных �р��ра��ных �луж�ах, реали��ванных в виде драйвер�в. В �аче�тве �ри�ера ��жн� �риве�ти himem.sys, ��т�рый нужен, чт��ы ра�решить �р�� �ра��а� MS�DOS д��ту� � �а��ти выше 640 К�айт, и ansi.sys, ��т�рый интер� �ретирует ���лед�вательн��ти �и�в�л�в, и���ль�уе�ые не��т�ры�и DOS� �р��ра��а�и дл� у�равлени� �ур��р��. Эти драйверы нах�д�т�� в �а��е %systemroot%\system32. DEVICEHIGH=[путь\]имя_файла [аргументы] или DEVICEHIGH [SIZE=xx][путь\]имя_файла [аргументы] П�х�же на device, н� � ���ыт��й �а�ру�ить драйвер у�тр�й�тва в верхние �л��и �а��ти, ��тавл�� ��льше ��ычн�й �а��ти дл� �рил�жений MS�DOS. Е�ли в верхней �а��ти нед��тат�чн� �а��ти, или е�ли не �ыл �а�ружен himem. sys, драйвер �а�ружает�� в ��ычную �а��ть. Альтернативный ф�р�ат size=xx ���в�л�ет у�а�ать ��личе�тв� �айт�в верхней �а��ти, ��т�р�е д�лжн� �ыть �в���дн�; чи�л� xx д�лжн� �ыть ше�тнадцатеричны�. DOS=[HIGH|LOW][, UMB|NOUMB] DOS=HIGH у�а�ывает на т�, чт� MS�DOS д�лжна ча�тичн� �ере�е�тить�� в ��ла�ть верхней �а��ти (�ервые 64 К�айт ���ле 1 М�айт�. П� у��лчанию и�� ��ль�ует�� �ара�етр LOW, �ри ��т�р�� DOS ��лн��тью ра��ещает�� в ��ычн�й �а��ти. Не����ательн�е �лючев�е �л�в� UMB ���а�ывает, чт� DOS д�лжна �де� лать �л��и верхней ��ла�ти �а��ти (�а��ти �а �редела�и 1 М�айт + 64 К�айт� д��ту�ны�и дл� DOS�у�тр�й�тв и �р��ра��. DOSONLY Е�ли эт� �лючев�е �л�в� �ри�ут�твует в CONFIG.NT, �а�у��ать �р��ра��ы MS�DOS ра�решает�� т�ль�� COMMAND.COM. О�ычн�, е�ли и�� W��dows� �р��ра��ы вв�дит�� в ее ��не ���андн�й �тр��и или в �а�етн�� файле, �на �а� �у��ает�� в �тдельн�й �реде ��ружени�. Эт� ��жет нарушить ра��ту не��т�рых ре�идентных �р��ра�� DOS, ��эт��у ���анда DOSONLY ���в�л�ет �ред�твратить та��е ра�витие ���ытий. ECHOCONFIG Е�ли в CONFIG.NT �ри�ут�твует ���анда ECHOCONFIG, в�е ���анды, �ри� �ут�твующие в эт�� файле �ри инициали�ации NTVDM, выв�д�т�� в ��н� ���андн�й �тр��и. П� у��лчанию ���анды не выв�д�т��. FCBS=n Бл��и у�равлени� файла�и — F��� Co���o� ��o�ks (FC�� �вл�ют�� у�та� ревшей �тру�тур�й, ��т�ра� и���ль��вала�ь �р��ра��а�и DOS вер�ии 1.0 дл� у�равлени� файла�и. Не �наю, живы ли еще те �р��ра��ы MS�DOS, ��т�ры� тре�уют�� FC���л��и, н� е�ли у ва� е�ть та�а� �р��ра��а, нужн� в����ль��� вать�� ���анд�й FC�S, чт��ы �а�тавить NTVDM ра��ределить �р��тран�тв�
Конфигурация среды MS-DOS 561 дл� n та�их �л���в. (В наши дни � ��тре�н��ти в них и�ве�тн� �аранее, ��� ���ль�у � ни�и �рих�дил��ь и�еть дел� на �ажд�й �редыдущей вер�ии DOS или W��dows.� FILES=n Эта ���анда у�танавливает �а��и�альн�е ��личе�тв� �дн�вре�енн� �т�ры� тых файл�в, д��ту�ных �рил�жени�� MS�DOS. П� у��лчанию �н� равн� 20. При ра��те � �рил�жени��и �а� данных MS�DOS, на�ри�ер � FoxP�o, эт� ��� личе�тв� ��жет ��тре��вать�� увеличить д� 100 и ��лее. INSTALL=[путь\]имя_файла [аргументы] Эта ���анда �рив�дит � �а�ру��е ре�идентных �р��ра�� в �а��ть еще д� �а�у��а AUTOEXEC.NT . Одн�й и� та�их �р��ра��, у�тан�в�а ��т�р�й ��жет �ри��дить��, �вл�ет�� setver.exe. Эта �р��ра��а �ерехватывает �а�р��ы �р��ра�� на ��ределение вер�ии �а�ущенн�й DOS и ���анывает их. Ее цель — ���в�лить ва� �а�у��ать �р��ра��ы, ��т�рые �удут �читать не�рие�ле�ы� �а�у�� ��д у�равление� DOS вер�ии 5.0, � наличии ��т�р�й и� �удет ����щать NTVDM. Е�ли ваше �рил�жение MS�DOS в��ражает �р�тив н��ера вер�ии DOS, �т�р�йте Центр ��рав�и и ��ддерж�и и �р�ведите ��и�� �� �лючев��у �л�ву «s��v��». NTCMDPROMPT П� у��лчанию, ���да �р��ра��а MS�DOS �а�у��ает�� и� ���андн�й �тр��и или и� �а�етн��� файла и �авершает �в�ю ра��ту, CMD �а�у��ает дл� ��ра��т�и в�ех ���ледующих ���анд COMMAND.COM. Эт� ���в�л�ет �а�у��ать �тарые �а�етные файлы MS�DOS. Е�ли в CONFIG.NT у�а�ать ���анду NTCMDPROMPT, CMD не �а�у��ает COMMAND.COM, а ��тает�� у�равл�ть �р��ра��а�и MS�DOS. Эт� ���в�л�ет ва� ���давать ��вре�енные �а�етные файлы дл� и���ль��вани� � �р��ра��а�и MS�DOS. SHELL=[путь\]имя_файла [аргументы] Эта ���анда у�а�ывает на альтернативную �р��ра��у ���л�ч�и, ��т�р�й нужн� в����ль��вать��, е�ли вы не х�тите и���ль��вать в �аче�тве ���л�ч�и MS�DOS �р��ра��у COMMAND.COM. Эту ���анду ��жн� та�же и���ль��� вать дл� у�а�ани� COMMAND.COM � ар�у�ента�и �а�у��а. На�ри�ер, �а�и�ь shell=%systemroot%\system32\command.com /E:2048/P �а�рашивает 204� �айт дл� �ере�енных �реды ��ружени�. Ключ /P тре�ует�� дл� �ред�твращени� �авершени� ра��ты COMMAND.COM ���ле ��ра��т�и �дн�й ���анды. STACKS=n,s К��да �р�и�х�дит а��аратн�е �рерывание, NTVDM нуждает�� в �р��тран� �тве «�те�а �а��ти» дл� вре�енн��� хранени� инф�р�ации дл� ��ра��тчи�а �рерывани�. К��анда stacks ���в�л�ет ��тре��вать �т NTVDM выделени� �тдельн��� �р��тран�тва �те�а дл� ��ра��тчи��в �рерывани�. Чи�ла n и s тре� �уют �т NTVDM выделить n �л���в �� s �айт�в в �ажд��. Чи�л� n ��жет �ыть равн� 0 или �т � д� 64. Чи�л� s ��жет �ыть равн� 0 или �т 32 д� 512. Значени� ��
562 Глава 12. Среда окружения MS-DOS при работе под Windows у��лчанию равны ���твет�твенн� 9 и 12�. Е�ли нужн�, вы ��жете �э��н��ить �а��ть дл� �р��ра��ы, у�а�ав stacks=0,0; эт� ��жет �риве�ти, а ��жет и не �риве�ти � ���ю ра��ты �р��ра��ы. Е�ли е�ть ��д��рени�, чт� эти ��ра��тчи�и �рерывани� вы�ывают ���и DOS, ��жн� у�а�ать stacks=8,512, чт��ы выделить д��тат�чн�е ��личе�тв� �р��тран�тва �те�а. SWITCHES=/K За�тавл�ет �р��ра��ы MS�DOS �рини�ать �лавиатуру �а «��ы�н�венную» 96��лавишную �лавиатуру, даже е�ли в ней и���ль�ует�� ра�ширенна� ра�� �лад�а, и�еюща� 102 и ��лее �лавиш. При и���ль��вании эт��� �ере�лючател� и �ри �а�ру��е ansi.sys нужн� ���ле вы��ва ansi.sys у�а�ать �люч /k. Дл� ��хранени� ��в�е�ти���ти � и�т�риче��и �л�живши�и�� на�тр�й�а�и CONFIG.SYS в CONFIG.NT д��у��ает�� и���ль��вание �ледующих эле�ент�в, не и�еющих, �равда, ни�а���� эффе�та в W��dows: y y �u����s; y y D��v�p��m; y y ��s�d��v� (��s�d��v� в�е�да Z� AUTOEXEC.NT AUTO�X�C.NT �лужит те� же цел��, чт� и AUTO�X�C.�AT в �и�те�ах MS� DOS: эт� �а�етный файл, ���в�л�ющий �а�у��ать �р��ра��ы, у�танавливающие ���андную �реду ��ружени� �еред начал�� ра��ты. И�х�дна� вер�и� AUTO�X�C. NT ���вл�юща��� �ри у�тан�в�е W��dows, нах�дит�� в �атал��е \windows\system32 и ��держит �ледующие ���анды: lh %SystemRoot%\system32\mscdexnt.exe lh %SystemRoot%\system32\redir lh %SystemRoot%\system32\dosx SET BLASTER=A220 I5 D1 P330 T3 Пр��ра��а MSCD�XNT ��е��ечивает ��ддерж�у �рив�д�в ����а�т�ди���в, �р��ра��а R�DIR �вл�ет�� �етевы� интерфей���, �р��ра��а DOSX �ред�� �тавл�ет ��ддерж�у д��ту�а � верхней �а��ти (�на �лужит те� же цел��, чт� и �MM3�6.�X� в MS�DOS�, а ���анда SET �на�жает �р��ра��ы DOS инф�р� �ацией �� и�итируе��� �ву��в�� ���руд�вании Sou�d ���s���. Не�ави�и�� �т и�еющей�� на ваше� ����ьютере �ву��в�й �и�те�ы, �р��ра��ы MS�DOS «вид�т» ��в�е�ти�ую � Sou�d ���s��� �ву��вую �арту (х�т� ее э�ул�ци� не �тличает�� ��� вершен�тв���. Кр��е т���, е�ли вы у�тан�вили �лиента дл� �етей Nov���, AUTOEXEC.NT та�же �а� �у��ает �р��ра��ы nw16.exe и vwipxspx.exe, ��т�рые �т�рывают �рил�жени�� DOS д��ту� � интерфей�у �р��ра��ир�вани� Nov�����рил�жений — Nov��� �pp������o� p�og��mm��g ��������� (API�. В AUTOEXEC.NT ��жн� та�же �а�ру�ить дру�ие �р��ра��ы и у�тан�вить �начени� �ере�енных �реды ��ружени�, н� �ри эт�� �ледует ���нить, чт� �ни �удут �а�ру� жать�� �ри �ажд�� �а�у��е �р��ра��ы MS�DOS. Е�ли �а�а��ни�удь ��н�ретна�
MS-DOS и работа в сети 563 ре�идентна� �р��ра��а нужна т�ль�� дл� не��т�рых �рил�жений MS�DOS, нужн� на�тр�ить �тдельный файл AUTO�X�C, �ри�ен�ющий�� т�ль�� дл� та�их �ри� л�жений. ▼▼ Если вам приходилось пользоваться DOSKE� при работе под MS-DOS, вам будет, наверное, приятно узнать, что DOSKE� поставляется и вместе с Windows. Но данная версия работает только с cmd.exe и не работает в среде эмуляции DOS, поэтому добавлять ее в AUTOEXEC.NT бесполезно. Переменные среды окружения MS-DOS В MS�DOS �а��ть �вл�ет�� ��раниченны� ре�ур���, ��эт��у MS�DOS ����енн� ��у�а на �р��тран�тв� дл� �ере�енных �реды ��ружени�. Е�ли ��личе�тв� не��� х�ди�ых �ере�енных �реды ��ружени� в лю��� �а�етн�� файле �тил� MS�DOS �ревышает де��т��, в��ни�ает ��тре�н��ть ра�ширить �р��тран�тв�, выделенн�е �ере�енны� �реды ��ружени� ли�� в диал���в�� ��не Свойства (P�op�����s� ���т� вет�твующе�� �рлы�а, ли�� в ���анде shell= файла CONFIG.NT. Эти техн�л��ии уже �ыли ра����трены в данн�й �лаве. При �ерв�� �а�у��е �р��ра��ы MS�DOS или COMMAND.COM, NTVDM на� �ледует �ере�енные �реды ��ружени� W��dows, и���ль�уе�ые �� у��лчанию, н� �� �ледующи�и и��енени��и: y y в�е �и�в�лы и�ен �ере�енных �ерев�д�т�� в верхний ре�и�тр. Пр��ра��ы MS� DOS не �ред��ла�ают наличи� �у�в нижне�� ре�и�тра в и�енах �ере�енных �реды ��ружени�; y y д��авл�ет�� �ере�енна� COMSP�C, в ��т�р�й ��держит�� �уть и и�� файла ���андн�й ���л�ч�и (��ычн� эт� COMMAND.COM�; y y �ере�енные T�MP и TMP �ере�лючают�� на �начени�, и���ль�уе�ые в �и�те�е �� у��лчанию, а не на у�тан�в�и, ��ределенные ��ль��вателе�; y y и�ена, и���ль�уе�ые в �ути в� в�ех �ере�енных �реды ��ружени�, и��ен�ют�� � целью и���ль��вани� ��в�е�ти�ых � DOS и�ена�и в ф�р�ате «�.3». MS-DOS и работа в сети В� вре�ена MS�DOS ра��та в �ети �ыла ве�ь�а д�р���й и д�в�льн� ред��й в����ж� н��тью. Сетев�е �р��ра��н�е ��е��ечение дл� DOS �ыл� ��ъе�ны�, �а�ри�ны� и д�л�� �а�ружающи���. Сетевые �р�ду�ты ����ании M���oso�� тре��вали �а�ру�� �и драйвер�в у�тр�й�тв, �редна�наченных дл� ��н�ретн��� ���руд�вани�, а та�же �р��ра��, у�равл�ющих �етевы�и �р�т���ла�и, и, в �авершение, �р��ра��н��� ур�вн�, �ред��тавл�юще�� DOS �луж�ы дл� ра��ты � файла�и. П�л�жительны� �ыл т�т ���ент, чт� �ри�ладные �р��ра��ы MS�DOS ни���� да не ра��тали � �етевы� ���руд�вание� на�р��ую, в�е т�н���ти в��ла�али�ь на DOS и �а��вые �етевые ур�вни. Среда NTVDM �ред��тавл�ет та�ие же �луж�ы ���ред�тв�� �р��ра��ы redir.exe, �а�ружае��й �� ���анде и� AUTOEXEC.NT, ��эт��у �р��ра��ы MS�DOS ���ут и���ль��вать ��вре�енные �ы�трые и нед�р��ие �ети.
564 Глава 12. Среда окружения MS-DOS при работе под Windows ▼) Если вы создаете файлы AUTOEXEC самостоятельно и хотите, чтобы ваши приложения DOS работали в сети, в созданных вами файлах нужно включить команду на загрузку redire.exe, аналогичную той, которая используется в AUTOEXEC.NT. Н� �р��ра��ы DOS ��ычн� не �редна�начены дл� ра��ты � �етевы� ф�р�ат�� и�ен U��v��s�� N�m��g Co�v����o� (UNC� т� е�ть � та�и�и и�ена�и файл�в, �а� \\myserver\officefiles\march\plans.doc. Е�ли нужн� ��лучить д��ту� � �етевы� файла� и� �рил�жений MS�DOS, �ридет�� �т��ра�ить �у�ву ди��а, чт��ы ��д� �лючить�� � �етев�й �а��е, а �ате� �а�тавить �р��ра��у MS�DOS и���ль��вать эту �у�ву ди��а дл� ��ращени� � файлу. От��ражение �у�в ди��а ��жн� ���дать � ����щью W��dows �xp�o���, в����ль� ��вавши�ь �ун�та�и �еню Сервис (Too�s�Подключить сетевой диск (M�p N��wo�k D��v��, или же ��жн� �т��ра�ить �у�вы ди��а и� ���андн�й �тр��и, в����ль��� вавши�ь ���анд�й net use. Эта ���анда ра���атривает�� в �лаве 13 «Утилиты ���андн�й �тр��и». ▼) Приложения DOS не ожидают увидеть имена компьютеров или общих папок и принтеров, со- стоящие более чем из восьми букв. Чтобы сетевые приложения MS-DOS видели общие ресурсы, при конфигурации сети нужно обязательно использовать короткие имена. Вывод на печать из MS-DOS Прил�жени� MS�DOS ра��тали в �реде, не �навшей ��н�уренции �а и���ль��вание ����ьютерн��� ���руд�вани�. В ��н�ретный ���ент вре�ени ра��тала т�ль�� �дна �р��ра��а, ��эт��у дл� нее �ыл� в��лне д��у�ти�� �т�равл�ть данные не� ���ред�твенн� на �ринтерн�е ���руд�вание. В W��dows, и���а в����жн��ти �дн�� вре�енн�й ра��ты �ра�у не���ль�их �р��ра��, ��ераци�нна� �и�те�а д�лжна �ыть ���редни��� �ежду �р��ра��а�и и ре�ур�а�и. NTVDM �ерет на �е�� в�е эти ра�личи�, �ред��тавл�� �рил�жени�� MS�DOS «виртуальные» �ринтерные LPT���рты. К��да �рил�жение MS�DOS выдает ин� �тру�ции, ��т�рые д�лжны �т�равл�ть данные на �ринтер, NTVDM �ерехватывает ин�тру�ции и в�е�т� эт��� �т�равл�ет данные в ��улер �ечати W��dows, чт��ы выв�д и� �р��ра��ы MS�DOS и и� дру�их �араллельн� вы��лн�е�ых �рил�жений W��dows не �ыл �ере�ешан. Е�ли �����треть на �чередь �ринтера на �ечать �ри выв�де данных и� �рил�жени� DOS, ��жн� увидеть, чт� эт� �адание на �ечать ��� �ечен� �а� удаленный д��у�ент нижне�� ур�вн� (R�mo�� Dow���v�� Do�um����. П����ль�у �р��ра��ы DOS в�ецел� �твечали �а у�равление ��д�люченны�и �ринтера�и, W��dows ��д�ачивает выв�д и� MS�DOS в «не��ра��танн��» виде, чт� ��начает �т�рав�у выв�да на �ринтер �е� �а�их�ли�� и��енений. Эт�т выв�д ��жет в�лючать те��т, у�равл�ющие ���лед�вательн��ти и �рафиче��ие ���анды. Е�ли �ринтер MS�DOS и���ль�ует у�равл�ющие ���лед�вательн��ти дл� дру��й ��дели �ринтера, вы ��лучите д�в�льн� �транные ра��ечат�и. Н� та��вы неи�� �ежные и�держ�и в��врата в �р�шл�е.
Вывод на печать из MS-DOS 565 В �лучае ��д�лючени� л��альных �ринтер�в � фи�иче��и� ��рта� LPT1, LPT2 или LPT3, ��жн� �а�тавить вашу �р��ра��у MS�DOS и���ль��вать эт�т ��рт на� �р��ую. Перенаправление печати Е�ли тре�ует�� в����ль��вать�� �етевы�и �ринтера�и или �ринтера�и, ��д�лючен� ны�и � ��рта� US� po��s, нужны дру�ие решени�. Пр��ра��ы MS�DOS в���ще не �нают � �уще�тв�вании US�, �а ред�и� и��лючение� (�дн� и� них — Wo�dP�������, в них та�же не �реду��атривает�� �вн�е ��д�лючение � удаленны� �ринтера�. Н� ��жн� найти ��х�дн�й вариант, �т��ра�ив LPT���рты на ��щие �ринтеры, и���ль�у� ���анду net use. Принтерные ��рты ��жн� �т��ра�ить на ��щие �ринте� ры т�чн� та� же, �а� �у�вы ди��а ��жн� �т��ра�ить на ��щие �а��и. Б�лее ��др��� н� ���анда net use ра���атривает�� в �лаве 13, а �де�ь �удут даны ��н�ретные ��ве� ты �� и���ль��ванию эт�й ���анды дл� на�тр�й�и �ечати и� �рил�жений MS�DOS: y y Нет та���� �а��на, ��т�рый �ы утверждал, чт� ��жн� и���ль��вать т�ль�� �ринтеры, ��ъ�вленные ��щи�и на других ����ьютерах. Е�ли нужн� и���ль��� вать �ринтер, ��д�люченный � ��рту US� на ваше� ����твенн�� ����ьютере, е�� ��жн� �делать ��щи� и в����ль��вать�� ���анд�й net use дл� �т��ражени� е�� на виртуальный LPT���рт. Т��да ваши �рил�жени� MS�DOS ����ут �т� �равл�ть инф�р�ацию на �ринтер. y y О�щие �ринтеры нужн� �т��ра�ить на LPT���рты, ��т�рые не и���ль�уют�� на ваше� ����ьютере. На�ри�ер, е�ли у ва� е�ть �ринтер, ��д�люченный � LPT1, �т��ра�ить �етев�й �ринтер на LPT1 нев����жн�. y y Ваш вы��р не ��раничен ��рта�и LPT1, LPT2 и LPT3. О�щие �ринтеры ��жн� �т��ра�ить на у�тр�й�тва �т LPT1 и д� LPT9. Правда, �ри�енение �ольших н��е� р�в д��у��ает�� не в�е�и �р��ра��а�и MS�DOS. Нужн� ��э���ери�ентир�вать. О�н�вн�й �инта��и� ���анды net use дл� �т��ражени� �ринтера и�еет �леду� ющий вид: net use lpt3: \\сервер\имя_принтера От�енить �т��ражение ��жн� � ����щью �ледующей ���анды: net use lpt3: /d П�др��н��ти ��жн� найти в �лаве 13. Распечатка содержимого экрана В W��dows фун�ци� �ечати э�рана ра��тает не та�, �а� в на�т��щей MS�DOS. К��да �р��ра��а MS�DOS ра��тает в режи�е ��на, �лавиша Prt Scr ра��тает та�, �а� �на ��ычн� ра��тает в W��dows, �на ���ирует �ит�вую �артин�у э�рана или те�уще�� ��на в �уфер ���ена. В ��лн�э�ранн�� режи�е �лавиша Prt Scr не �т� �равл�ет ��держи��е э�рана на �ринтер. В�е�т� эт��� �на ���ирует текст э�рана в �уфер ���ена. Дл� е�� ра��ечат�и нужн� �тдельны� дей�твие� в�тавить те��т или �ит�вую �артин�у в д��у�ент.
566 Глава 12. Среда окружения MS-DOS при работе под Windows Конфигурирование последовательной передачи данных при использовании MS-DOS Среда NTVDM �ытает�� �делать ����ьютерные COM���рты д��ту�ны�и дл� �р��ра�� MS�DOS � ����щью р�да виртуальных а��аратных хитр��тей. NTVDM �тлавливает ���ыт�и �р��ра��ы DOS выдать ин�тру�ции ���руд�ванию ��� �лед�вательн��� ��рта, и, и���ль�у� ша�л�ны ���анд, ��редел�ет, чт� и�енн� �ытает�� �делать �р��ра��а. Зате� эти дей�тви� вы��лн�ют�� чере� �р��ра��ный интерфей� W��dows. Пр��ра��н�е ��е��ечение DOS дл� ���лед�вательн�й �ередачи данных и�� ��ль�ует не���ред�твенные драйверы у�равлени� ���руд�вание� и ��ра��т�и �рерываний, ��т�рые ��лучают инф�р�ацию не���ред�твенн� �т ���руд�вани�, ���да �на ���ту�ает �т ��де�а или дру�их удаленных ���лед�вательных у�тр�й�тв. NTVDM и�итирует эти а��аратные �рерывани� у��ешн� — до некоторой степени. П�эт��у ��д у�равление� W��dows ра��тают не в�е DOS��р��ра��ы, �редна�на� ченные дл� ���лед�вательн�й �ередачи данных. Эт� ��жет ���дать �л�жн��ти дл� ����аний, ��н�вл�ющих �и�те�ы �ередачи данных, �ред��тавл�ющих удаленный д��ту� и удаленную ��ддерж�у �и�те� и� DOS и у�таревших вер�ий W��dows. Е�ли ваше �р��ра��н�е ��е��ечение не ра��� тает ��д W��dows, и��равить �итуацию, � ��жалению, не уда�т��. Е�ли ваши �тарые �рил�жени� не ���ут ра��тать �равильн�, �ридет�� �ере�ружать ваш ����ьютер �ежду W��dows и DOS, в��вращать�� � W��dows M� или 9� или ра�ра�атывать н�в�е �р��ра��н�е ��е��ечение. Использование специализированных устройств для MS-DOS NTVDM �ред��тавл�ет ��раниченную ��ддерж�у ���руд�вани� дл� �рил�же� ний MS�DOS. Ка� уже у���инал��ь, эта виртуальна� �ашина �ерехватывает и и�итирует в�аи��дей�твие � �араллельны�и ��рта�и LPT, ���лед�ватель� ны�и COM���рта�и, �лавиатур�й и виде�ди��лее�. Она �ред��тавл�ет DOS� ����ред�ванные �еть и д��ту� � файла�, а та�же �ред��тавл�ет драйвер �ыши и �а�тавл�ет �р��ра��ы MS�DOS �читать, чт� в их ра���р�жении е�ть �ву��в�е ���руд�вание, ��в�е�ти��е � Sou�d ���s���, е�ли на вашей �и�те�е е�ть �а�а��ли�� ��ддерж�а �ву��в��� выв�да. Н� на эт�� виртуальна� ��ддерж�а ���руд�вани� �а�анчивает��. Е�ли е�ть �ави�и���ть �т д��ту�а � ��ециали�ир�ванн��у ���руд�ванию ли�� чере� не���ред�твенн�е у�равление, ли�� чере� драйверы у�тр�й�тв, т� ва�, ���� рее в�е��, не ��ве�л�. При ���ыт�е вашей �р��ра��ы ��ратить�� � лю�ы� дру�и� а��аратны� у�тр�й�тва�, NTVDM ли�� ��лн��тью ��танавливает �р��ра��у, �т�лежива� ее дей�тви�, ли��, в лучше� �лучае, �ред�твращает д��ту� � ���ру� д�ванию.
Управление программами MS-DOS 567 Е�ли в�е �ави�ит �т ра��ты � �а�а�ны� ���руд�вание� и вы не в ���т��нии ра�� ра��тать дл� не�� ��дх�д�щий драйвер у�тр�й�тва дл� ра��ты ��д W��dows, ��жн� ���ытать�� �ри�енить �дн� �ред�тв�. Я не даю ни�а�их �арантий и д�лжен �ре� ду�редить, чт� эт� ��жет �ерье�н� ��вредить цел��тн��ти вашей �и�те�ы W��dows. М�и юри�ты на�таивают на т��, чт� � д�лжен �реду�редить ва�, чт� в�е эт� на ваш страх и риск: Е�ть ������ �т�рыть «��н�» в W��dows, ��т�р�е ���лужит �арьер�� �ежду �р��ра��а�и ��ль��вател� и �и�те�ны� ���руд�вание�. Он� ���в�л�ет ва� выдавать ��ерат�ры INP и OUT в �тн�шении диа�а��на фи�иче��их ��рт�в вв�да�выв�да. Пр��ра��н�е ��е��ечение дл� этих целей ��жн� найти �� адре�у www.beyondlogic.org/porttalk/porttalk.htm. К��да �танут д��ту�ны фи�иче��ие ��рты у�тр�й�тва, � ни� ��жн� �удет �р�ани��вать ���ен данны�и. Н�, �рерывани� и DMA не ра��тают, и эта техн�л��и� ра��тает т�ль�� на 32�ра�р�дных �и�те�ах W��dows. П�вт�рю�ь, чт� эт� ��жн� делать т�ль�� в �райних �луча�х. Лучше в�е� та�и выделить �ред�тва на ра�ра��т�у на�т��ще�� драйвера у�тр�й�тва дл� ра��ты ��д W��dows. Управление программами MS-DOS Прил�жени��и MS�DOS ��жн� ��ль��вать�� ��ычны� ��р�д���. Н� нар�ду � те�, чт� �тарые �р��ра��ы �читают �е�� вернувши�и�� на�ад в 19�5 ��д, вы, в �тличие �т них, та� не �читаете и ��эт��у д�лжны ���нить � �ледующих ���т�� �тель�твах: y y Пр��ра��ы MS�DOS не ���ут ра��тать � длинны�и и�ена�и файл�в и �а���. Ва� �ридет�� и���ль��вать та� на�ывае�ые и�ена ф�р�ата «�.3», �ред��тавл�� е�ые W��dows и��лючительн� дл� эт�й цели. Ва� эти у�еченные и�ена ���ли ���адать�� на �ла�а. Они и�еют �ледующий вид: C:\PROGRA~1\MICROS~1. Дл� файл�в, ��т�рые и���ль�уют�� только � �рил�жени��и DOS, нужн� �ри�ен�ть т�ль�� ��р�т�ие и�ена файл�в и �а���, ��т�рые не нужн� у�е�ать. На�ри�ер, ��жн� ���дать та�ие �а��и, �а� C:\offdocs, в�е�т� C:\of�ce documents и та�ие и�ена файл�в, �а� feblist.doc, в�е�т� february resource lists.doc. y y Е�ли нужн� найти у�еченн�е и�� �уще�твующе�� файла или �а��и, и���ль�уйте ���анду ���андн�й �тр��и dir � �люч�� /x. Она нар�ду � ��лны� и�ене� вы� ведет и у�еченную вер�ию. y y Е�ли в �р��ра��е �реду���трена ра��та �ыши, �ышь д�лжна ра��тать. Е�ли ваша �ышь �р��т� выдел�ет �л��и те��та на э�ране, в�е�т� т��� чт��ы у�рав� л�ть �рил�жение�, щел�ните �рав�й �н����й на �а��л�в�е ��на, вы�ерите �ун�т Свойства (P�op�����s�, в�лад�у Общие (Op��o�s� и �н�ть флаж�� Выделение мышью (Qu��k �d���. y y Дл� �р��ра��, ��т�рые не ра��читаны на и���ль��вание �ыши, вы ��жете в��� ��ль��вать�� �в�й�тв�� Выделение мышью (Qu��k �d��� дл� ���ир�вани� те��та � э�рана и ��жете в�тавить те��т в �рил�жение DOS � ����щью �лавишн��� ���ращени� Alt+пробел, И, А (E, P�.
568 Глава 12. Среда окружения MS-DOS при работе под Windows Если что-то пойдет не так Ка� уже ранее у���инал��ь, �ри �а�у��е �р��ра�� MS�DOS ��д W��dows �а�а �и�те�а W��dows �твечает �а ра��ту реальн� и���ль�уе���� �рил�жени� �� и�ени ntvdm.exe. Даже е�ли �рил�жение �а�ущен� в и�итируе��� �ире MS�DOS, вирту� альна� �ашина NTVDM �ерехватывает ��ычные �лавишные ����инации W��dows, у�равл�ющие ее ��ведение�: Alt+пробел �т�рывает �и�те�н�е �еню и т. д. Кр��е эт���, Ctrl+C или Ctrl+Break ��ычн� �ре�ращают ра��ту �рил�жени� DOS, х�т� у не� ��т�рых �р��ра�� и�еют�� ��ециальные �лавишные ���лед�вательн��ти вых�да. Та�же ранее уже у���инал��ь, чт� е�ли эти �лавишные ����инации нужны �ри� л�жению DOS, фун�ции �лавиатуры W��dows ��жн� �т�лючить. В та��� �лучае �ри у�равлении ��н�� �рил�жени� ва� �ридет�� ��льше ��ла�ать�� на �ышь, н� эта цена, ��т�рую �ридет�� �а�латить, не та� уж вели�а. Е�ли нужн� �ре�ратить ра��ту неу�равл�е���� �рил�жени� MS�DOS, �ри� �тн�й не�жиданн��тью дл� ва� �танет т�, чт� ��ль��вать�� �н����й �ере�а�у��а дл� эт���, ���рее в�е��, не �ридет��. В ��льшин�тве �лучаев ��жн� щел�нуть на �н���е �а�рыти� ��на �рил�жени�. Чере� не���ль�� �е�унд W��dows ��р��ит, х�� тите ли вы �рервать ра��ту �рил�жени�. Е�ли вы щел�нете на �н���е Да (Y�s�, �на �ри�ет ваше �рат��е ���лание, и �р��ле�а �удет решена. (Ра�у�еет��, е�ли вы не ��хранили данные, �ни �удут ��тер�ны, и е�ть вер��тн��ть т���, чт� ��вреждению ��двер�нет�� �дин или не���ль�� файл�в данных �рил�жени�, н� в�е эт� та�же �р�и��йдет и ��д у�равление� MS�DOS.� Дл� удалени� неу�равл�е�ых DOS��рил�жений ��жн� та�же в����ль��вать�� Ди��етчер�� �адач W��dows. Та��й �рие� ��жет ��над��ить�� �ри �а�у��е DOS� �рил�жени� в ��лн�э�ранн�� режи�е и нев����жн��ти вернуть�� на ра��чий �т�л W��dows � ����щью ����инации �лавиш Alt+Enter. В эт�� �лучае нужн� �делать т� же �а��е, чт� ранее �рих�дил��ь делать �ри ра��те ��д MS�DOS: нажать ���� �инацию Ctrl+Alt+Del. Н� в данн�� �лучае эта ����инаци� вы��вет не �ере�а�у�� ����ьютера, а вых�д и� ��лн�э�ранн��� режи�а и выв�д ��на Ди��етчера �адач W��dows. Е�ли ва� в��лне у�траивает �р�д�лжение ра��ты DOS��р��ра��ы, ��жн� на� жать �лавишу Esc, и ��н� Ди��етчера �адач и�че�нет. Е�ли нужн� �ре�ратить ра��ту �рил�жени� DOS, ��жн� в����ль��вать�� дву�� варианта�и. Е�ли �адача �дн��начн� ��редел�ет�� в� в�лад�е Приложения (App������o�s�, ��жн� вы�рать и�� �адачи и щел�нуть на �н���е Снять задачу (��d T�sk�. Чере� не���ль�� �е�унд �р��ра��а �авершит �в�ю ра��ту. Н� �а��л�в�� ��на ��жет ниче�� не ��в�рить �� и�ени те�уще�� �рил�жени� DOS. Он в��лне ��жет и�еть вид «К��андна� �тр��а — ���анда» или �р��т� «К��андна� �тр��а». Е�ли �т�рыт� �ра�у не���ль�� �рил�жений MS�DOS, ��и�� �рил�жени�, тре�ующе�� �ре�ращени� ра��ты, ��жет ��л�жнить��. Чт��ы �у�ить �адачу вы��ра, � �редла�аю в та��� �лучае �а�рывать �рил�жени�, ��т�рые еще ре� а�ируют на ���анды. М�жн� та�же в����ль��вать�� в�лад��й Процессы (P�o��ss�s�, найти та� ntvdm.exe и �авершить эт�т �р�це��.
Утилиты командной строки В эт�й �лаве вы у�наете, чт� � W��dows 7 ���тавл�ет�� ��лее 250 �р��ра�� ���анд� н�й �тр��и, а � W��dows XP та�их �р��ра�� �ыл� ���л� 150. y y П� �равнению � �р��ра��а�и, и�еющи�и �рафиче��ий интерфей� ��ль��вател� (G��ph���� Us�� I��������, GUI�, утилиты ���андн�й �тр��и ���в�л�ют у���рить вы��лнение не��т�рых �аданий. y y Будут ра����трены наи��лее важные �р��ра��ы ���андн�й �тр��и, � ��р�д�е и���ль��вани� ��т�рых дей�твительн� �т�ит у�нать. y y Мы ����в�ри� � т��, чт� в W��dows, е�ли �нать �де и��ать, ��жн� найти �ред� �тв�, ���в�л�ющее ���давать �р��тые �р��ра��ы у�тан�в�и дл� ра��р��тране� ни� ваших ����твенных �р��ра�� и �ценариев. Программы командной строки Windows В�е�те � W��dows у�танавливают�� ��тни и���лн�е�ых �р��ра��, ча�ть и� них — эт� шир��� и�ве�тные, �тандартные �р��ра��ы W��dows, на�ри�ер Бл��н�т, Пр�и�рывательW��dows M�d��, Па�ь�н� и I������� �xp�o���. Мн��ие и� �р��ра�� �тн���т�� � �и�те�ны� �луж�а�, � ��т�ры�и ни���да не �рих�дит�� ра��тать на� �р��ую. Н�, вы, наверн�е, та� же �а� и � в �в�е вре��, удивите�ь, у�нав, чт� ��лее трети и� них �вл�ют�� �р��ра��а�и ���андн�й �тр��и. О�ераци�нна� �и�те�а на�ывает�� W��dows (��на�, а не P�omp�s (�ри�лашени��, ��эт��у интере�н�, чт� ����й �ред�тавл�ют в�е эти �р��ра��ы ���андн�й �тр��и? О�а�ывает��, �р��ра��ы ���андн�й �тр��и ��жн� ра��ить на три ��н�вные �ате��рии: y y Программы обслуживания и администрирования — у них и�еют�� анал��и, и�еющие �рафиче��ий интерфей�. Вер�ии, и���ль�ующие ���андную �тр��у, ���в�л�ют вы��лн�ть ���луживающие ��ерации � ����щью �а�етных файл�в и �ценариев. К т��у же ин��да �р�ще на�рать ���андную �тр��у � и�ена�и фай� л�в и �и�в�ла�и��а�е�тител��и, че� у�а�ывать �тдельные файлы в �xp�o���. y y Инструментарий пакетных файлов и командной строки — в чи�л� та�их �р��ра�� вх�д�т cmd, more и findstr, ��т�рые �ри�ен�ют�� �ри ���дании 13
570 Глава 13. Утилиты командной строки и и���ль��вании �а�етных файл�в, �ри ра��те � те��т�вы�и файла�и и �ри �ере�ещении �� �реде ���андн�й �тр��и. y y Сетевые инструменты и утилиты TCP/IP — эти �р��ра��ы в ��льшин�тве �в�е� уна�лед�ваны �т ��ераци�нн�й �и�те�ы U��x, � ��т�р�й р�� ��вре�енный Интернет. Эти утилиты и���ль�уют�� дл� у�равлени� ра��т�й в �ети W��dows и дл� в�аи��дей�тви� � U��x��и�те�а�и. В�е �р��ра��ы ���андн�й �тр��и �еречи�лены в �рил�жении Г, «С�рав�чни� �� �р��ра��а� ���андн�й �тр��и». М�жн� �р����треть эт�т �еречень, чт��ы ��лучить �ред�тавление � ти�е д��ту�ных �р��ра��. Ка� же и���ль�уют�� эти �р��ра��ы? Ка� уже ранее у���инал��ь, �н��ие �р�� �ра��ы ���андн�й �тр��и ��держат �в�е ����твенн�е ��и�ание. Чт��ы �����треть эт� ��и�ание, �инта��и� и �ри�еры и���ль��вани�, ��жн� на�рать и�� ���анды и ���тавить ���ле не�� �люч /? или на�рать в ��не ���андн�й �тр��и ���анду help имя_команды. Мн��� инф�р�ации та�же ��жн� найти в Центре ��рав�и и ��ддерж�и W��dows. П�эт��у � не вижу ��льш��� ��ы�ла ��вт�р�ть в�ю эту инф�р�ацию в данн�й �ни�е. В�е�т� эт��� � х�чу ���нцентрир�вать�� на ��и�ании важнейших, �� ��е�у �нению, �р��ра�� ���андн�й �тр��и — тех, ��т�рые дают ва� наивы�ший �рир��т �р�и�в�дительн��ти и ��щн��ти �ри и���ль��вании W��dows и у�равлении ею. Самые ценные программы командной строки Кр��е в�тр�енных ���анд, �вл�ющих�� ча�тью ���л�ч�и CMD (ра����тренн�й в �лаве 10 «К��андна� �тр��а CMD»�, е�ть еще ���л� 20 �р��ра�� ���андн�й �тр��и, �ри��дных дл� ежедневн��� и���ль��вани�. Их ��жн� ра��ить на ��ть �ате��рий: y y Быстрый вызов GUI — �тандартные �р��ра��ы W��dows, ��т�рые ��жн� а�тивир�вать �р��ты� на��р�� их и�ен: calc, control, mmc, notepad и regedit. Та�же ��ле�на ���анда start. y y Универсальные программы оболочки — утилиты, у�р�щающие ра��ту в ��� �андн�й �тр��е: findstr, more, tree и xcopy. y y Средства управления файлами — �р��ра��ы, у�равл�ющие �рава�и д��ту�а � файла�: attrib и cacls. (К�тати, cacls �вл�ет�� един�твенны� �ред�тв��, ���в�л�ющи� у�равл�ть �рава�и д��ту�а � файла� в файл�в�й �и�те�е на ди��ах, и�еющих NTFS�ф�р�ат ��д у�равление� W��dows XP Hom� �d���o� �е� �ере�а�ру��и ее в �е���а�н�� режи�е.� y y Эффективные средства управления — �р��ра��ы, у�равл�ющие W��dows и ее �луж�а�и и �рил�жени��и: driverquery, runas, sc, tasklist и taskkill. y y Утилиты для работы с сетью — �ред�тва дл� и���ль��вани� и у�равлени� �ет��и W��dows в цел��, а та�же �ет��и TCP�IP в ча�тн��ти: ipconfig, net, netstat, nslookup, ping и tracert. В�е эти �р��ра��ы �удут ра����трены в данн�й �лаве.
Быстрый вызов GUI 571 Быстрый вызов GUI Пр��ра��ы и� �ерв��� на��ра в дей�твительн��ти �р��ра��а�и ���андн�й �тр��и в���ще не �вл�ют�� — эт� �тандартные �р��ра��ы W��dows GUI. Н� � д��авил их в данный �еречень, чт��ы �р�иллю�трир�вать �дн� важн�е ���т��тель�тв�: е�ли вве�ти и�� файла GUI��р��ра��ы в ���андную �тр��у, W��dows �а�у��ает �р��ра��у в ��ычн�� режи�е. П�эт��у �ри ра��те � ��н�� ���андн�й �тр��и, е�ли GUI��р��ра��а и�ве�тна �� и�ени, ��жн� ���йти�ь �е� �н���чи�ленных �ерех�д�в �� �еню Пуск (S����� или �� Панели управления. П�ле�н� �удет �а���нить �ледующие �е�ь ���анд: y y calc — �а�у�� �аль�ул�т�ра W��dows. y y control — �т�рытие Панели управления. Б�лее ��др��н�е ра����трение эт�й ���анды еще в�ереди. y y mmc — �т�рытие Консоли управления (MMC�. В �еню MMC ��жн� д��авить лю��е нужн�е �ред�тв� эт�й ��н��ли, щел�нув на �ун�те Файл (F����Добавить или удалить оснастку (Add�R�mov� S��p�I��. В W��dows 7 и V�s�� в �аче�тве ���анды ��жн� на�рать и�� MMC���дул�, и �н �т�р�ет��. На�ри�ер, дл� �т�рыти� ��н��ли Управление компьютером �леду� ет на�рать compmgmt. На XP нужн� на�рать ���анду start модуль.msc, на�ри�ер start compmgmt.msc . y y notepad — �а�у�� Бл��н�та W��dows. Дл� реда�тир�вани� ��н�ретн��� файла ���ле notepad �ледует на�рать и�� файла. y y regedit — �а�у�� Реда�т�ра рее�тра, ��т�рый ��ычн� �т�ут�твует в �еню Пуск (S�����. y y start — е�ли �а эт�й ���анд�й �ледует и�� файла, �р�и�х�дит �а�у�� ���твет� �твующе�� �рил�жени� или файла. На�ри�ер, start somefile.xls �а�у��ает M���oso�� �x��� и �т�рывает файл some�le.xls. Дл� �н��их �аре�и�трир�ванных �р��ра�� ���анда start имя_программы �а�у��ает �р��ра��у, даже е�ли файл �р��ра��ы не нах�дит�� в �ути ��и��а. На�ри�ер, ���анды start excel и start winword �т�рывают ���твет�твенн� �x��� и Wo�d. Е�ли в и�ени �т�рывае���� файла ��держит�� �р��ел, в�тавьте "" �еред и�ене� и ���е�тите и�� в �авыч�и. На�ри�ер, start "" "some file.doc". При ра��те в режи�е ���андн�й �тр��и ��жет в��ни�ать ча�та� ��тре�н��ть в �а�у��е дру�их GUI��р��ра��. Е�ли не х�чет�� у�ирать ру�и � �лавиатуры и и�� ��ль��вать �ышь, нужн� найти и�� �р��ра��ы и �а�у�тить ее на�р��ую. ▼▼ Для поиска имени файла программы Windows нужно щелкнуть правой кнопкой мыши на пун- кте меню, относящемся к программе, или на ярлыке. Затем нужно выбрать пункт Свойства (Properties) и посмотреть на поле Объект (Target) вкладки Ярлык (Shortcut). Панель управления в дей�твительн��ти �вл�ет�� �р��ра���й�«���л�ч��й», в� �н���� ��х�жей на MMC. Ее фа�тиче��а� ра��та ��уще�твл�ет�� чере� �р��ра�� �ы���дули, или апплеты, на�ывае�ые CPL�файла�и. Е�ли и�ве�тн� и�� ��дул�,
572 Глава 13. Утилиты командной строки е�� ��жн� вве�ти ���ле ���анды control и �ерейти не���ред�твенн� � нужн��у а��лету Панели управления. Е�ли нужн� ��лучить д��ту� � Панели управления и� ���андн�й �тр��и, д��тат�чн� на�рать control и �ра�у же в����ль��вать�� GUI. Н� е�ли х�тите �а�у�тить ��н�ретный а��лет у�равлени� и� �а�етн��� файла, �це� нари� или �рлы�а, эт� �удет �тличны� �������� у�р��тить ра��ту ��ль��вател�. Стандартные а��леты Панели управления �еречи�лены в та�л. 13.1. В не��т�рых CPL�файлах ��держит�� ��лее �дн��� а��лета. В та�их �луча�х ��жн� у�а�ать, �а��й и� них �а�у�тить, д��авив ���ле и�ени CPL�файла д���лнительные �л�ва. Таблица 13.1. Апплеты Панели управления Аргументы команды Отображаемый апплет Панели управления ����ss.�p� С�ециальные в����жн��ти (A���ss�b����y Op��o�s� — т�ль�� в XP �ppw��.�p� Пр��ра��ы и �����ненты (Add�R�mov� P�og��ms� �o���b.�p� С��едние ��ль��ватели (P�op�� N��� M�� — т�ль�� в W��7�V�s�� d�sk.�p� Ра�решение э�рана (D�sp��y P�op�����s� ����w���.�p� Бранд�ауэр W��dows (W��dows F���w���� �o��s Шрифты (Fo��s Fo�d��� hdww��.�p� Ди��етчер у�тр�й�тв (Add H��dw��� W����d� �����p�.�p� Св�й�тва: Интернет (I������� P�op�����s� — и���ль�ует�� в I������� �xp�o��� и Ou��ook �xp��ss I���.�p� Я�ы� и ре�и�нальные �тандарты (R�g�o��� ��d L��gu�g� Op��o�s� Joy.�p� И�р�вые у�тр�й�тва (G�m� Co���o����s� m���.�p� Св�й�тва: Мышь (Mous� P�op�����s� m���.�p� k�ybo��d Св�й�тва: Клавиатура (��ybo��d P�op�����s� m���.�p� p� ���d Св�й�тва: Карта PCMCIA (PCMCIA C��d P�op�����s� — т�ль�� в XP mmsys.�p� Зву� (Sou�ds ��d Aud�o D�v���s� ��p�.�p� Сетевые ��д�лючени� (N��wo�k Co������o�s� �us�mg�.�p� Учетные �а�и�и ��ль��вателей (Us�� A��ou��s� odb��p32.�p� Ад�ини�трат�р и�т�чни��в данных OD�C (OD�C D��� Sou��� Adm���s����o�� pow����g.�p� Эле�тр��итание (Pow�� Op��o�s� sysdm.�p� Св�й�тва �и�те�ы (Sys��m P�op�����s� ��b���p�.�p� Пер� и �ен��рн�е у�тр�й�тв� (P�� ��d Tou�h� ����pho�.�p� Телеф�н и ��де� (Pho�� ��d Mod�m Op��o�s� ��m�d���.�p� Дата и вре�� (D��� ��d T�m� P�op�����s� ws�u�.�p� Центр ��е��ечени� �е���а�н��ти W��dows (A���o� C������ — т�ль�� в W��dows 7 и V�s��
Универсальные программы оболочки 573 На�ри�ер, �анель у�равлени� «Сетевые ��д�лючени�» ��жн� �т�рыть на� �р��ую, на�рав ���анду control ncpa.cpl в ���андн�й �тр��е, в �рлы�е, в ��не Выполнить (Ru�� в �еню Пуск (S����� или в �а�етн�� файле. ▼) Чтобы изменять настройки, являющиеся прерогативой администраторов компьютера, команды нужно выдавать из окна командной строки, открытого с расширенными привилегиями. Допол- нительную информацию можно найти в главе 10, в разделе «Открытие окна командной строки с правами администратора». Кроме этого, в Windows XP команда control не работает для панели управления Сетевые под- ключения ncpa.cpl и других апплетов, основанных на Windows Explorer, пока сначала не бу- дет использован отдельный экземпляр explorer.exe для каждого окна Explorer. Для этого нуж- но открыть Windows Explorer, щелкнуть на пунктах Сервис (Tools)Параметры папок (Folder Options)Вид (View) и установить флажок Запускать окна с папками в отдельном процессе (Launch Folder Windows in Separate Processes). Если ваша учетная запись пользователя не явля- ется записью администратора компьютера и нужно использовать команду runas, чтобы открыть окно командной строки с правами администратора, то эти изменения в настройках, требующие запуска отдельного процесса, нужно выполнить после входа в систему под учетной записью администратора. ▼▼ Для запуска программы командной строки не нужно открывать окно командной строки. Нуж- но просто нажать комбинацию [клавиша window]+R, и появится диалоговое окно Выполнить (Run). Затем нужно будет набрать вашу командную строку и нажать Ввод. Но если команда требует расширенных привилегий, придется сначала открыть окно командной строки с расши- ренными привилегиями, как описано в главе 10, в разделе «Открытие окна командной строки с правами администратора». Универсальные программы оболочки При ра��те � ���андн�й �тр���й ча�т� и���ль�уют�� �ледующие в�тр�енные ��� �анды: pushd, cd и dir. Нужн� та�же �нать � �уще�тв�вании еще четырех ���анд: findstr, more, tree и xcopy. Они �ри��д�т�� в� �н��их �итуаци�х — дл� и��лед�ва� ни� ��держи���� те��та, �ценари� и �а�етных файл�в, дл� и��лед�вани� �атал���в и дл� ���ир�вани� файл�в. �ndstr Пр��ра��а findstr �вл�ет�� ра�ширенн�й вер�ией �тар�й �р��ра��ы ��и��а в те��те find. В �в�ей и�х�дн�й ф�р�е �р��ра��а findstr ��анирует �дин или не���ль�� файл�в или �тандартный вв�д в ��и��е те��т�вых �тр���вых �начений и выв�дит те �тр��и, ��т�рые ��держат нужн�е �тр���в�е �начение. Она �ри��� дит��, е�ли и�ве�тн�, чт� и�енн� нужн� найти, н� трудн� в����нить, в �а��� и� файл�в эт� нах�дит��, или же е�ли нужн� и�влечь и� файл�в и ���рать в�един� ��ределенную инф�р�ацию. О���енн� ��ле�на �на �удет в �а�етных файлах, ���и�
574 Глава 13. Утилиты командной строки рающих инф�р�ацию и� �р��ра��, ��т�рые �енерируют ��льше те��та, че� ва� эт� нужн�, — �р��ра��а findstr ��жет ����чь �т��рать инф�р�ацию авт��атиче��и. В �в�е� �а��� ��н�вн�� и���ль��вании �р��ра��а findstr выв�дит лю�ые �тр��и, ��т�рые ��держат �тр���в�е �начение или �начени�, у�а�анные в ее ��� �андн�й �тр��е. На�ри�ер, �ред�тави�, чт� е�ть файл �� и�ени afile, ��держащий �ледующий те��т: Now is the time for all good men to come to the aid of their party. The rain in Spain falls mainly in the plain. К��анда findstr "to all" afile выв�дит �ледующий те��т: all good men to come to the aid of their party. Она нашла и to, и all в �ерв�й �тр��е и to в� вт�р�й. Сл�ва в ���андн�й �тр�� �е ���ут у�а�ывать�� в лю��� ��р�д�е, и �ни не д�лжны �ыть ��лны�и �л�ва�и: findstr "a" и�вле�ает лю�ые �тр��и на вх�де, ��держащие �у�ву a. Чт��ы найти �тр���в�е �начение, ��держащее �р��елы, нужн� и���ль��вать �люч /c и ���е�тить эт� �начение в �авыч�и, �а� в эт�й ���анде: findstr /c:"in Spain". Дл� ведени� ��и��а �е� учета ре�и�тра �и�в�л�в ��жет та�же ��над��ить�� д��авление �люча /i. М�жн� ве�ти ��и�� �ра�у в не���ль�их файлах, у�а�ав их в ��нце ���андн�й �тр��и. На�ри�ер: findstr "to all" afile *.txt d:\input\*.txt К��анда findstr �вл�ет�� фильтр��, �лед�вательн�, е�ли в ее ���андн�й �тр��е не у�а�ать ни �дн��� файла, �на читает инф�р�ацию и� �тандартн��� вв�да и в�е�да �а�и�ывает �в�и ре�ультаты в �тандартный выв�д. К��анду findstr ��жн� и���ль� ��вать дл� ��и��а лю�ых файл�в � �у�ва�и верхне�� ре�и�тра FOR в их и�енах, и���ль�у� ��ерат�р �ледующе�� вида: dir | findstr "FOR " М�жн� та�же на�равить выв�д ���анды findstr в файл или в дру�ую �р��ра�� �у, и���ль�у� �и�в�л > или �и�в�л |. ▼▼ В пакетных файлах команда �ndstr может быть особенно полезна с расширенной командой for /f, которая может провести разбор вывода команды, как описано в главе 10. Например, можно написать следующую команду: for /f "usebackq" %%n in (' someprogram | findstr "text" ') do ( somecommand %%n ) Эта команда запускает программу по имени someprogram и фильтрует вывод через �ndstr. Про- грамме somecommand передается первая лексема из каждой строки вывода. У ���анды findstr �н�же�тв� �лючей, ��т�рые ��жн� �р����треть, на�рав в ���андн�й �тр��е findstr /?. В�е �лючи �еречи�л�ть�� не �удут, н� не��т�рые наи��лее ��ле�ные �удут ра����трены.
Универсальные программы оболочки 575 Поиск без учета регистра символов Чт��ы �ри �равнении �тр���вых �начени� ���анда findstr и�н�рир�вала ре�и�тр �и�в�л�в, ��жн� �еред ша�л�н�� ��и��а у�а�ать �люч /I. П�тре�н��ть в �ри�е� нении эт��� �люча ��жет в��ни�ать д�в�льн� ча�т�. На�ри�ер, ���анда dir | findstr /i "for" выв�дит и�� лю���� файла, в ��т�р�� ��держат�� for, FOR или foR, или лю�ые дру�ие ����инации этих �и�в�л�в в верхне� и нижне� ре�и�трах. Буквальное совпадение строк Ка� уже ранее у���инал��ь, е�ли в ���андн�й �тр��е findstr у�а�ать не���ль�� �л�в, �на ведет ��и�� лю���� и� этих �л�в. И���ль�у� �люч /С, ���анду findstr ��жн� �а�тавить ве�ти ��и�� т�чн��� ���твет�тви� �тр���в��у �начению, в�люча� �р��елы. При и���ль��вании уче�н��� вх�д�ще�� файла afile, ли�тин� ��т�р�� �ыл �риведен ранее, ���анда find str /i /C: "the rain" afile выведет т�ль�� �дну �тр��у, "The rain in Spain falls". Позиционный поиск Ключи /B и /E �а�тавл�ют findstr и��ать нужный те��т ���твет�твенн� т�ль�� в �а��� начале или в �а��� ��нце те��т�в�й �тр��и. Поиск в нескольких файлах Дл� ведени� ��и��а в ��лее че� �дн�� файле нужн� у�а�ать ��лее �дн��� и�ени файла в ���андн�й �тр��е findstr. В эт�� �лучае, ���да findstr нах�дит ��дх�� д�щую те��т�вую �тр��у, �на �редвар�ет �аждую �тр��у выв�да и�ене� файла, в ��т�р�� найден те��т. К��да в�е эт� выв�дит�� не���ред�твенн� в ��н� ��� �андн�й �тр��и, и�� файла выдел�ет�� ��лее �р�и� цвет��. Выв�д ��жет и�еть �ледующий вид: C:\book\14>findstr "text" * .txt a.txt:this is more text b.txt:this is a text file c.txt:when entering text Д��авив �люч /S, ��жн� �а�тавить findstr ве�ти ��и�� в у�а�анных файлах и в� в�ех ��д�атал��ах у�а�анных �утей. На�ри�ер: findstr /s "text" c:\book\*.txt И���ль�у� �люч /G:имя_файла, ��жн� та�же �а�тавить findstr �р���атривать в файле ��и��� файл�в, в ��т�рых нужн� ве�ти ��и��. На�ри�ер, ���анда findstr /I /F:filelist "computer" �т�рывает файл �� и�ени filelist. Пред��ла�ает��, чт� �ажда� �тр��а эт��� файла �вл�ет�� и�ене� файла, в ��т�р�� д�лжен ве�ти�ь ��и��. К��анда findstr ведет ��и�� �л�ва "computer" в �ажд�� их этих файл�в. Кр��е эт���, �люч /F:/ �а�тавл�ет filelist читать ��и��� файл�в и� �тандартн��� вв�да. На�ри�ер, ���анда dir /od /b *.log | findstr /F:/ "Administrator"
576 Глава 13. Утилиты командной строки и���ль�ует ���анду dir дл� ���дани� ��и��а и�ен файл�в � ра�ширение� .log в ��р�д�е в��ра�тани� даты их ���ледне�� и��енени�. Зате� ���анда findstr ищет в этих файлах �л�в� Administrator. Получение дополнительной информации Не��т�рые �лючи ���анды findstr д��авл�ют инф�р�ацию в �тр��у выв�да или удал�ют ее и� эт�й �тр��и. Эти �лючи �еречи�лены в �ледующей та�лице. Ключ Вывод /V Выв�дит не ���твет�твующие �тр��и /N Выв�дит �еред �ажд�й �тр���й ее ��р�д��вый н��ер /M Выв�дит т�ль�� и�ена файл�в, ��держащих ��в�адени� /O Выв�дит ��ещение в �и�в�лах � �ажд�й ���твет�твующей �тр��е /P Пр��у��ает файлы � невыв�ди�ы�и на �ечать (дв�ичны�и� �и�в�ла�и Соответствие тексту с символами-заместителями Наи��лее эффе�тивны� �в�й�тв�� ���анды findstr �вл�ет�� ее ������н��ть и��ать ���твет�твие те��ту, в ��т�р�� и���ль�уют�� �и�в�лы��а�е�тители, или, т�чнее, ре�ул�рные выражени�, ���в�л�ющие у�а�ать, �а� и��ать ���твет�твие в �тр��ах, ��держащих ра�личную инф�р�ацию. Ре�ул�рные выражени� ���т��т и� �и�в�л�в, ��т�рые д�лжны ��в�а�ть, и и� ��ециальных эле�ент�в, ��и�ывающих в����жн��ти и��енени� ��в�адающих �тр��. С�ециальные эле�енты ре�ул�рн��� выражени� �еречи�лены в та�л. 13.2 . Таблица 13.2. Специальные элементы для регулярных выражений Элемент Чему соответствует . (т�ч�а� Лю���у �дн��у �и�в�лу * Нулев��у или ��льше�у ��личе�тву ���влений �редыдуще�� эле�ента ^ Началу �тр��и $ К�нцу �тр��и [xyz] Лю���у и� �и�в�л�в внутри �вадратных ������. С�и��� ��жет ��держать �тдельные �у�вы и (или� диа�а��ны �у�в. На�ри�ер, [A-Za-z] ���твет�твует �у�ва��тAд�Zи�тaд�z [^xyz] Лю�ы� �и�в�ла�, �р��е �еречи�ленны� в на��ре xyz \< Началу �л�ва \> К�нцу �л�ва \x Бу�вальн� �и�в�лу x, ��ычн� и���ль�ует�� в�е�те � *, . и т. д Е�ли �режде ва� не �рих�дил��ь �тал�ивать�� � ре�ул�рны�и выражени��и, � ни� �ледует �ривы�нуть. Дл� начала �а�удьте � �ве�д�ч�е (*�, ��т�рую вы ����
Универсальные программы оболочки 577 нили �� ее и���ль��ванию в �аче�тве �и�в�ла��а�е�тител� в DOS, �а� в ���анде del *.txt. В ре�ул�рных выражени�х �и�в�л * ���а�ывает, чт� и����ый �и�в�л или выражение, ��т�р�е �ледует до нее, �вл�ет�� не����ательны� и ��жет �ыть ��вт�р�ющи���. На�ри�ер, ab*c ���твет�твует ac, abc, abbc, abbbc и т. д., н� не ���твет�твует abxyzc, �����ль�у эт�т ша�л�н ��и��а и���ль�ует��, чт��ы найти �и�в�л a, �а ��т�ры� �ледует нулев�е или �ревышающее нуль ��личе�тв� �и�в�л�в b, �а ��т�ры� �ледует �и�в�л c. В ре�ул�рных выражени�х т�ч�а (.� �вл�ет�� �и�в�л����а�е�тителе� . Оди� н�чна� т�ч�а ���твет�твует т�ль�� �дн��у, лю���у �и�в�лу. На�ри�ер, a.c ��� �твет�вует axc, a-c и a c — даже �р��ел �читает�� �и�в�л��. Е�ли ��ъединить . � *, ��лучит�� �и�в�л��а�е�титель DOS�ти�а: a.*c ���твет�твует ac, axc, a123c и т. д ., — в�е�у, чт� начинает�� на a и �а�анчивает�� на c. ▼) По умолчанию команда �ndstr в качестве операторов регулярных выражений интерпретирует следующие специальные символы: . *^$[]\ Если нужно найти строку с этими символами, но при этом не использовать регулярные выраже- ния, нужно либо предварять специальные символы обратным слэшем (\*, \^, \\ и т. д .), либо использовать ключ /L, чтобы заставить �ndstr работать «буквально». В �аче�тве �ри�ера в����жн�й эффе�тивн��ти ре�ул�рных выражений �ред� �тави�, чт� нужн� и�влечь и� файла (или и� выв�да �р��ра��ы� в�е �тр��и, на� чинающие�� � даты. Дл� эт��� ��жн� в����ль��вать�� �ледующи� ��и����: findstr "^[0-9][0-9]/[0-9][0-9]/[0-9][0-9]*" имя_файла Первый �и�в�л, ^, �рив��ывает ��и�� � началу �ажд�й вх�д�щей �тр��и; даты, не начинающие�� � �ерв��� �т�л�ца, не ��двер�ают�� �равнению. Зате� ша�л�н ���твет�твует �тр��а�, начинающи��� � та�их дат, �а� 12�03�02, а та�же � та�их дат, �а� 12�03�2002. В �аче�тве еще �дн��� �ри�ера �ред��л�жи�, чт� вы ра��адываете утренний �р���в�рд и х�тите найти в�е ��ти�у�венные �л�ва, начинающие�� на A и �а�ан� чивающие�� на E. Дл� эт��� ��жн� в����ль��вать�� �ледующей ���анд�й: findstr /i "\<a[a-z][a-z][a-z]e\>" dictionary.txt Е�ли е�ть уверенн��ть в т��, чт� файл не ��держит �р��ел�в, ��жн� ���тавить �ледующую ���анду: findstr /i "a.. .e" dictionary.txt Н� �ри наличии в� вх�дн�� файле �р��ел�в эт�т ша�л�н ��жет ���твет�тв�вать �а��й�ни�удь �тр��е вр�де «�h� ���� I ������d», чт� не ���твет�твует цели ��и��а. ▼) Регулярные выражения являются очень эффективным средством поиска соответствий шабло- ну. Если вам еще не приходилось сталкиваться с ними, поищите на www.google.com материал на тему «regular expressions» («регулярные выражения»). Но будьте осторожны: у них много разновидностей. Версия, используемая в �ndstr, — весьма ограниченный вариант, в котором отсутствуют ?, +, ( ) и другие операторы, к которым привыкли пользователи Unix.
578 Глава 13. Утилиты командной строки more К��анда в�ратце уже у���инала�ь в �лаве 10, н� у нее е�ть р�д д���лнительных �лючей и фун�ций, ��т�рые � х�чу ра����треть ��лее ��др��н�. П�лный на��р ее �лючей ���андн�й �тр��и вы�л�дит �ледующи� ��ра���: more [/E [/C] [/P] [/S] [/Tn] [+n]] [имя_файла...] Бе� д���лнительных ар�у�ент�в ���анда more �т��ражает �тандартный вв�д или у�а�анные файлы в ���траничн�� режи�е. Е�ли и���ль�ует�� �люч /E, ���ан� да more ��лучает р�д д���лнительных в����жн��тей, ��т�ры�и ��жн� в����ль��� вать��. П��ле �люча /E ��жн� д��авить лю��й и� �ледующих �лючей. Ключ Описание /C Прив�дит � �чи�т�е э�рана �еред �т��ражение� те��та /P Прив�дит � ра�ширению �и�в�л�в �ерев�да �траницы в �у�тые �тр��и /S Прив�дит � �жатию не���ль�их �у�тых �тр�� в �дну �тр��у /Tn Прив�дит � ��тан�в�е та�ул�ции чере� �аждые n �р��ел�в. П� у��лчанию эт� чи�л� равн� � +n Прив�дит � т��у, чт� файл начинает �т��ражать�� �� �тр��и н��ер n, � �р�� �у���� �тр�� � 1 �� n–1 Е�ли не��т�рые и� них �танут и���ль��вать�� ���т��нн�, их ��жн� ���е�тить в �ере�енную �реды ��ружени� �� и�ени MORE, �ревратив в на�тр�й�и �� у��л� чанию. На�ри�ер, set MORE=/E /C /P /S в ваше� �ценарии вх�да в �и�те�у или анал��ичные у�тан�в�и, �деланные в диа� л���в�� ��не Переменные среды (��v��o�m��� V����b��s� а��лета Свойства системы (Sys��m P�op�����s�, �ревращают �лючи /E, /C, /P и /S в дей�твующие �� у��л� чанию. При в�е� �в�е� ��вершен�тве ���анда more не ��жет ��уще�твл�ть ��ратную �р��рут�у �� те��ту файла. П�эт��у, ��р�й, Бл��н�т �вл�ет�� ��лее уд��ны� �ред�тв�� дл� �р����тра те��та. Дл� �ревращени� Бл��н�та в фильтр ���андн�й �тр��и � на�и�ал �ледующий �а�етный файл �� и�ени view.bat, ра���л�женный в �а��е, вх�д�щей в ��й �тандартный �уть ��и��а: @rem Файл примера view.bat @echo off if"%1"==""( rem --- сохранение стандартного ввода во временном файле и его отображение more >C:\temp\view.tmp notepad C:\temp\view.tmp del C:\temp\view.tmp )else( rem --- открытие файла (файлов) с помощью Блокнота for %%f in (%*) do start notepad %%f ) ➔ Д���лнительные �ведени� � �ути ��и��а д��ту�ны в �лаве 11, в ра�деле «С��� дание и и���ль��вание �а�етных файл�в».
Универсальные программы оболочки 579 Е�ли в ���андн�й �тр��е эт��� �а�етн��� файла у�а�ать и�� �дн��� или не� ���ль�их файл�в, �н ���а�ывает файлы в Бл��н�те. В �р�тивн�� �лучае �н ра��� тает �а� фильтр — и���ль�ует ���анду more дл� ��хранени� �тандартн��� вв�да в� вре�енн�� файле, а �ате� �т��ражает ��держи��е вре�енн��� файла � ����щью Бл��н�та. Эт� ���в�л�ет вве�ти �ледующую ���андную �тр��у: dir c:\windows\system32 | view Эт� не�л�х�е ��четание �ира GUI и �ира ���андн�й �тр��и. (Та��е и���ль��вание ���анды more ��жет ���а�ать�� не�н��� �транны�. К��да ее выв�д на�равл�ет�� в файл, а не в ��н� ��н��ли, �на не вы��лн�ет �в�их ����анн��тей ���траничн��� выв�да, а в�е�т� эт��� �р��т� ���ирует �тандартный вв�д не���ред�твенн� в �тандартный выв�д. На эт� ������на т�ль�� �тандартна� утилита W��dows, ��эт��у данный ������ �вл�ет�� един�твенны� �ред�тв�� ���� дани� фильтра �а�етн��� файла.� tree К��анда tree �вл�ет�� д�в�льн� в�ечатл�ющи� и �р��ты� ин�тру�ент�� ��� �андн�й �тр��и, �твечающи� на в��р��: «Ка�ие ��д�атал��и нах�д�т�� в данн�й �а��е?» Она ча�т� вы�ывает удивление у тех, �т� ра��ирает�� �� �ред�й ���андн�й �тр��и. Е�ли на�рать в ��не ���андн�й �тр��и ���анду tree, выв�д �удет и�еть �ри� �ерн� �ледующий вид. С и���ль��вание� те��т�в�й ��евд��рафи�и эта ���анда ���а�ывает, чт� у те�у� ще�� �атал��а е�ть четыре ��д�атал��а: batch �les, �gures, review и scripts. У �атал��а �gures и�еет�� та�же два ����твенных ��д�атал��а (line и screen�. Е�ли нужн� �р����треть дру��й �атал��, в ���андн�й �тр��е ��жн� у�а�ать �тарт�вый ди�� и �уть, та�же ��жн� д��авить �люч /F, �а�тавл�ющий ���анду tree выв�дить и�ена файл�в и �а���. ▼▼ При указании каталогов с большим числом подкаталогов вывод команды tree может сбить с толку и быть прокрученным за пределы экрана. На этот случай у меня для вас есть еще один полезный пакетный файл, состоящий всего из двух строк: @rem Файл примера file e.bat @echo off if "%1" == "" (explorer /e,.) else explorer /e, " %1" Этот пакетный файл активизирует Windows Explorer с текущим каталогом, выбранном в окне просмотра папки. Если вы потеряетесь в окне командной строки, для получения GUI-просмотра просто наберите e и нажмите Ввод. Проблема решена всего двумя нажатиями клавиш! (Как вы уже, наверное, догадались, я немного нетерпелив.)
580 Глава 13. Утилиты командной строки xcopy Е�ли нужн� ����ир�вать ��льшую �ру��у файл�в, �ледует ��тан�вить �в�й вы� ��р на ���анде xcopy. Правда, вы ��жете щел�нуть на файлах и �а��ах в W��dows �xp�o��� и �еретащить их в лю��е �е�т� э�рана, и эт�т �р�це�� в��лне ��дх�дит дл� �дн��ратн� вы��лн�е���� дей�тви�, н�, ��р�й, �ред��чтительнее �ывает �ет�д, и���ль�ующий ���андную �тр��у. В�т р�д �ри�ер�в: y y Е�ли нужн� �н����ратн� ����ир�вать �дин и т�т же на��р файл�в или �делать ���ию �� ра��и�анию, ���дание �а�етн��� файла, и���ль�ующе�� ���анду xcopy, ���в�л�ет �дн��ратн� на�тр�ить �р�це�� и ��ль��вать�� и� �н����ратн� �� �ере не��х�ди���ти. y y Е�ли нужн� ��е��ечивать ре�ервн�е ���ир�вание файл�в и �а��� наи��лее эффе�тивны� ��������, xcopy ��жет авт��атиче��и ����ир�вать т�ль�� и�� �енившие�� файлы, чт��ы �ве�ти � �ини�у�у не��х�ди��е дл� ���ир�вани� вре�� и ��ъе� �ере�ещае�ых данных. К��анда xcopy ��х�жа на �в�ю ��лее �р��тую дв�юр�дную �е�тру copy. В �в�е� наи��лее ��ще� варианте и���ль��вани� вв�дит�� ���анда xcopy откуда куда, �де откуда — эт� и�� ���ируе���� файла или �а��и, а куда — эт� �е�т�, в ��т�р�е нужн� �р�и�ве�ти ���ир�вание. Н� у ���анды xcopy и�еет�� �р��адн�е ��личе�тв� �лючей ���андн�й �тр��и — в�е�� 27, — ��т�рые ���ут �а�тавить ее ��вершать р�д ��лее интере�ных дей�твий. Я ��раничу�ь ��и�ание� не���ль�их наи��лее ��ле�ных �ри�енений ���анды xcopy. П�лный �еречень �лючей ��жн� увидеть, на�рав в ���андн�й �тр��е ���анду xcopy /? | more или �т�рыв Центр ��рав�и и ��ддерж�и и �р�вед� ��и�� �� �л�ву «x�opy». Копирование подкаталогов Е�ли д��авить �люч /S, ���анда xcopy ре�ур�ивн� ���ирует в�е ��д�атал��и, �а и�� �лючение� �у�тых. При и���ль��вании �люча /E ���ируют�� даже �у�тые �а��и, ��хран�� те� �а�ы� т�чную �тру�туру �атал���в �ри�инала. При и���ль��вании лю���� и� этих �лючей нужн� та�же и���ль��вать �люч /I, чт��ы ���а�ать, чт� целев�е и�� �тн��ит�� � �а��е, а не � и�ени файла. На�ри�ер, ���анда xcopy c:\book e:\book /E /I ���ирует на ди�� E: �атал�� C:\book и в�е нах�д�щие�� в не� файлы и �а��и. Создание резервных копий К��анду xcopy ��жн� и���ль��вать дл� ���дани� ре�ервных ���ий файл�в и �а� ��� в дру�ую �а��у, на дру��� ди��е или на �ере�а�и�ывае��� ����а�т�ди��е или в ��щую �етевую �а��у. При ���дании ре�ервных ���ий нужн� д��авить �люч /K, чт��ы ���анда xcopy ��хран�ла в ���и�х та�ие атри�уты файл�в, �а� «Си�те�� ный» и «Т�ль�� чтение». Кр��е эт���, �ри ���ир�вании в �етевую �а��у нужн� д��авл�ть �люч /Z, чт��ы ���анда xcopy ���ла �р�д�лжить ���ир�вание ���ле �рат��вре�енных �т�лючений �ети. На�ри�ер: xcopy c:\book \\bali\bookfiles /K /E /I /Z
Универсальные программы оболочки 581 М�жн� �е� ������� труда ���дать ре�ервную ���ию вашей личн�й �а��и Доку- менты (Do�um���s�. Пр�ще в�е�� дл� у�а�ани� �ути в����ль��вать�� �ере�енн�й �реды ��ружени� userprofile: xcopy "%userprofile%\Documents" e:\backup /K /E /I Н� эта ���анда не ����ирует ��рытые файлы, а та�же не ���да�т ре�ервную ���ию ваших �ер��нальных на�тр�е� и ра�дел�в рее�тра. Эт��� нель�� �делать � ��� ��щью ���анды xcopy, ���а вы �аре�и�трир�ваны в �и�те�е, �����ль�у ��рытый файл рее�тра NTUSER.DAT не ��жет �ыть �т�рыт дл� ���ир�вани�, ���а ��ль��ва� тель ра��тает ��д данн�й учетн�й �а�и�ью. Н� е�ли у ва� е�ть �рава ад�ини�тра� т�ра, вы ���жете ����ир�вать ве�ь �р�филь дру���� ��ль��вател�, у�а�ав �люч /H дл� ���ир�вани� даже ��рытых файл�в � ����щью ���анды �ледующе�� вида: xcopy "C:\Users\имя_пользователя" e:\backup /H /K /E /I Зде�ь имя_пользователя �вл�ет�� и�ене� �дн�й и� ��ль��ватель��их учетных �а�и�ей, и�еющих�� на ����ьютере. (В данн�� �лучае и���ль��вать �ере�енную �реды ��ружени� userprofile не ��лучит��, ��т��у чт� �на у�ажет на �а��у учет� н�й �а�и�и ад�ини�трат�ра, а не нужн��� на� ��ль��вател�.� Дл� ре�ервн��� ���ир�вани� в�ех �р�филей, и�еющих�� на ����ьютере, ��жн� в����ль��вать�� �ледующей ���анд�й: xcopy "C:\Users" e:\backup /H /K /E /I или дл� W��dows XP: xcopy "C:\documents and settings" e:\backup /H /K /E /I н� дл� эт��� ��над���т�� �рава ад�ини�трат�ра, �����ль�у эта ���анда ��тре�ует �т xcopy чтени� файл�в дру�их ��ль��вателей. Копирование только обновленных файлов Е�ли ���анда xcopy и���ль�ует�� дл� ре�ервн��� ���ир�вани� на��ра файл�в и �а���, ее �ридет�� ре�ул�рн� �а�у��ать дл� ��ддержани� а�туальн��� ���т��ни� ре�ервн�й ���ии. В та��� �лучае вр�д ли �ах�чет�� ���ир�вать те файлы, ��т�рые не �ыли и��енены. Чт��ы �а�тавить xcopy ���ир�вать т�ль�� те файлы, ��т�рые н�вее ре�ервн�й ���ии, �ледует в����ль��вать�� �люч�� /D. Те� �а�ы� �удет �э��н��лен� и вре��, и �етев�й трафи�. Нужн� �удет та�же д��авить �люч /R, чт��ы xcopy ����ла ве�ти �а�и�ь ��верх �тарых ���ий файл�в � атри�ут�� «Т�ль�� чтение». Ключ /Y ���в�л�ет xcopy ве�ти �а�и�ь ��верх �тарых файл�в �е� выв�да �ри�лашени� на ��дтверждение. Те�ерь xcopy ��жн� увидеть в ее ��лн�� алфа� витн�� вели��ле�ии. К��анда xcopy "%userprofile%\Documents" e:\backup /H /K /R /E /D /I /Y или на W��dows XP xcopy "%userprofile%\My Documents" e:\backup /H /K /R /E /D /I /Y ���ирует �а��у ваших д��у�ент�в и в�е ее ��дчиненные �а��и, н� �ри эт�� ре� альн� ���ируют�� т�ль�� те файлы, ��т�рые ��а�али�ь н�вее уже ����ир�ванных в �а��у e:\backup. Кр��е эт��� ��хран�ют�� в�е атри�уты файл�в. Ключ /D вы��лн�ет дв�йную фун�цию — е�� ��жн� та�же и���ль��вать дл� у�а�ани� даты, и xcopy ����ирует т�ль�� те файлы, ��т�рые �ыли ���даны или и��
582 Глава 13. Утилиты командной строки �енены в у�а�анный день или ���же. Д���лнительную инф�р�ацию �� данн��у в��р��у ��жн� найти в интера�тивн�й ��рав�е. Автоматическое резервное копирование К��анда xcopy не ��жет ����ир�вать файлы, ��т�рые и���ль�уют�� �ри�ладны�и �р��ра��а�и, �на не ��жет та�же ����ир�вать �ер��нальную инф�р�ацию рее�тра, �ринадлежащую т��у ��ль��вателю, ��т�рый в�шел в �и�те�у. Целе����ра�нее дл� �р�ведени� ре�ервн��� ���ир�вани� ���е�тить ���анды xcopy в �а�етный файл, �а�у��ае�ый и� Планир�вщи�а �аданий в т� вре��, ���да вер��тн��ть нах�ждени� ��ль��вателей в �и�те�е ниже в�е��. При эт�� нужн� в����ль��вать�� �люч�� /C, чт��ы �а�тавить xcopy �р�д�лжать ра��ту даже в �лучае в��ни�н�вени� �ши���. Е�ли �т��т� �ри���днил�� и, � �ри�еру, держит �т�рыты� файл д��у�ента, �люч /C ���в�л�ет xcopy �р�д�лжить ���ир�вание дру�их файл�в и �а���. На�ри�ер, вы ��жете на�и�ать �а�етный файл дл� ���ир�вани� в�ех ��ль��� ватель��их �а��� Документы (Do�um���s� в �етевую �а��у � ����щью �ледующей ���анды: pushd %userprofile%\.. for/D%%din(*.*)do( xcopy "%%d\Documents" "\\server\backups\%%d" /H/K/R/E/C/D/I/Z/Y ) ��т�ра� ра��тает в W��dows 7 и V�s��. К��анда pushd делает ра��чи� �атал��, ��т�р��у ��дчинена �а��а �р�фил� те�уще�� ��ль��вател� и в ��т�р�� ��дер� жат�� �р�фили в�ех ��ль��вателей. Зате� ци�л for ��анирует ��держи��е �а��� �р�филей �ажд��� ��ль��вател�. Э�вивалентна� вер�и� дл� W��dows XP и�еет �ледующий вид: pushd %userprofile%\.. for/D%%din(*.*)do( xcopy "%%d\My Documents" "\\server\backups\%%d" /H/K/R/E/C/D/I/Z/Y ) Перед �а�у���� �а�етн��� файла нужн� ��е��ечить на�тр�й�у ��щей �етев�й �а��и, �редна�наченн�й дл� вы��лнени� эт�й �адачи, и ��ратить вни�ание на и�� ��ль��вание в ���анде xcopy �равильн��� и�ени �ервера и ��щей �а��и. ▼) Другими полезными универсальными программами, которыми можно самостоятельно поинте- ресоваться, являются программы sort и �nd. Программа �nd является упрощенной версией программы �ndstr, а программа sort позволяет проводить алфавитную сортировку текстовых файлов. Средства управления файлами W��dows �ред��тавл�ет ��ль��вател�� �ри ф�р�атир�вании их же�т�их ди���в в����жн��ть вы��ра и� двух �тру�тур файл�вых �и�те�: F��� A��o����o� T�b�� (FAT� и NTFS. О�е �и�те�ы �ред��тавл�ют ������ы �ридани� файла� �в�й�тв невиди���ти (��рытн��ти� и неи��ен�е���ти (т�ль�� чтени��. Кр��е эт���, NTFS �ред��тавл�ет �хе�у �е���а�н��ти дл� ��ль��вател� и �ру��ы, ���в�л�ющую ��ль�
Средства управления файлами 583 ��вателю ��н�ретн� ��ределить, �т� ��жет �р���атривать, ���давать, и��ен�ть и удал�ть файлы и целые �а��и. Х�т� ���твет�твующи�и атри�ута�и файл�в ��ж� н� у�равл�ть и� �рафиче����� интерфей�а W��dows �xp�o���, ����ани� M���oso�� �ред��тавила дл� у�равлени� атри�ута�и файл�в и �ред�тва ���андн�й �тр��и. ▼) В Windows 7 и Vista диск, на котором находится сама система Windows, должен иметь формат NTFS, но другие диски могут быть отформатированы любой из систем. Windows XP может быть установлена на FAT-диск, хотя это очень рискованно с точки зрения безопасности. Эти утилиты ���ут и���ль��вать�� в �а�етных файлах дл� на�тр�е� и ���лу� живани� ��ль��ватель��их �а���. На�ри�ер, ��жн� на�и�ать �а�етный файл, ���дающий �а��у на файл�в�� �ервере дл� �ажд��� т�ль�� чт� д��авленн��� ��ль��вател�, а �ате� д��авить ���твет�твующие NTFS�ра�решени�, чт��ы ��е� ���а�ить эту �а��у. Кр��е эт���, W��dows XP Hom� �d���o� в�в�ю �тарает�� ��лн��тью ��рыть �а�� �уще�тв�вание NTFS�ра�решений �� д��ту�у � файла�. В �рафиче���� интерфей�е �xp�o��� нет ни�а�их �ред�тв �р����тра или и��енени� ра�решений, х�т� �ни ����режне�у �уще�твуют и ��а�ывают вли�ние на �рава д��ту�а ��ль� ��вател� � файл�в�й �и�те�е. К��анда cacls ���в�л�ет �р���атривать и и��ен�ть NTFS�ра�решени� на W��dows XP Hom� �d���o�, ли�� дл� ���дани� �а��� � ��ра� ниченны� д��ту��� вне �а��� ��ычн��� �р�фил� ��ль��вател�, ли�� дл� решени� �р��ле� в���тан�влени� ра�решений. ▼) Пользователи XP Home Edition могут получить доступ к вкладке свойств безопасности NTFS в Windows GUI, загрузив систему в безопасном режиме и войдя в нее с учетной записью адми- нистратора. attrib И���ль�уе�ые ��ераци�нны�и �и�те�а�и ����ании M���oso�� файл�вые �и�те�ы FAT и NTFS ��ддерживают на��р эле�ентарных файл�вых атри�ут�в, ��т�рые ���ут и���ль��вать�� дл� ��лучени� ��ециальн��� режи�а. На�ри�ер, атри�ут «Т�ль�� чтение» не ���в�л�ет W��dows или DOS �а�и�ывать данные в файл или удал�ть эт�т файл. Эти атри�уты не �редла�ают �т�ль же ��щн�й �ащиты, �а� �и�те�а �е���а�н��ти на ур�вне ��ль��вател�, и���ль�уе�а� на ди��ах ф�р�ата NTFS, н� �ни �����ают и��ежать �лучайных ��л�жнений. К��анда attrib выв�дит и и��ен�ет ��н�вные атри�уты файла, �еречи�ленные в �ледующей та�лице. Код Атрибут Описание R Т�ль�� чтение Файл ��жет �ыть �р�читан, н� не �а�и�ан A Архивный Файл �ыл и��енен � ���ента ���ледне�� ре�ервн��� ���ир�� вани�. Атри�ут Архивный и���ль�ует�� �райне ред�� S Си�те�ный Файл и�еет �тн�шение � ��ераци�нн�й �и�те�е H С�рытый Файл не ���а�ывает�� ���анд�й dir и ��льшин�тв�� дру�их ���анд
584 Глава 13. Утилиты командной строки Эти атри�уты ���ут �ыть �р����трены и и��енены в W��dows �xp�o���, н� ��жет �ри��дить�� и их �т�леживание и� ���андн�й �тр��и. Дл� ���анды attrib и���ль�ует�� �ледующий �инта��и�: attrib [+|-x .. .] имя_файла [/S [/D]] �де x — эт� �дна и� �у�в ��д�в атри�ут�в R, A, S или H. Имя_файла ��жет ��держать �и�в�лы��а�е�тители . У�а�ание +x �рив�дит � у�тан�в�е атри�ута, а –x — � е�� �н�тию. Е�ли не у�а�ан� ни �дн��� �люча + или -, ���анда attrib выв�дит ��и��� те�ущих у�тан�в�� атри�ут�в у�а�анн��� файла. Ключ /S �а�тавл�ет ���анду attrib �ри�ен�ть �е�� � файла� в� в�ех ��дчинен� ных �а��ах у�а�анн�й или те�ущей �а��и, а �люч /D �а�тавл�ет attrib �ри�ен�ть атри�уты � �а��а� и файла�. Обнаружение скрытых файлов К��анда attrib в �т�ут�твие ар�у�ент�в выв�дит ��и��� в�ех файл�в те�уще�� �атал��а, в�люча� ��рытые. Эт� у�р�щает ��наружение ��рытых файл�в. Ра�� ���три� ти��в�й ли�тин�: A C:\Users\bknittel\book.txt ASH C:\Users\bknittel\NTUSER.DAT ASH C:\Users\bknittel\ntuser.dat.LOG ASH C:\Users\bknittel\ntuser.ini A C:\Users\bknittel\test.bat У в�ех этих файл�в у�тан�влен атри�ут Архивный. Три файла �вл�ют�� С�ры� ты�и, а NTUSER.INI ���ечен �а� Си�те�ный и С�рытый. Фалы � атри�ута�и SH на�ывают�� та�же �у�ер��рыты�и, �����ль�у �ни не �удут видны ни �дн�й �р�� �ра��е, ���а не �удут �н�ты атри�уты S и H. К��анда dir /ah та�же выв�дит в ��и��е ��рытые файлы, н� не ���а�ывает, �а�ие файлы �вл�ют�� ��рыты�и, а �а�ие нет. Установка и снятие атрибутов К��анда attrib ���в�л�ет у�танавливать и �ни�ать атри�уты. Чт��ы �н�ть атри� �ут «Т�ль�� чтение» �� в�ех файл�в в те�ущей �а��е, нужн� на�рать �ледующую ���анду: attrib -r *.* И на���р�т, дл� у�тан�в�и дл� в�ех файл�в атри�ута «Т�ль�� чтение», нужн� в����ль��вать�� �ледующей ���анд�й: attrib +r *.* Дл� реда�тир�вани� «�у�ер��рытых и т�ль�� дл� чтени�» файл�в, на�ри�ер файла ��нфи�урации �а�ру��и W��dows XP C:\BOOT.INI, ��жн� в����ль��вать�� диал���вы� ��н�� �в�й�тв �и�те�ы или ��жн� удалить атри�уты S, R и H вручную, �а� ���а�ан� в �ледующе� �ри�ере: attrib -s -h -r boot.ini notepad boot.ini attrib +s +h +r boot.ini
Средства управления файлами 585 П��ле реда�тир�вани� та���� файла, �а� boot.ini, не�л�х� �удет вве�ти в ��� �т��нную �ра�ти�у в���тан�вление и�х�дных атри�ут�в файла, �а� ���а�ан� в данн�� �ри�ере. Ключ ре�ур�ивн�й ��ра��т�и /S ���в�л�ет и��ен�ть атри�уты в ��д�атал��ах. На�ри�ер, е�ли на��р MP3�файл�в �ыл ����ир�ван � ����а�т�ди��а на ваш же�т� �ий ди��, в�е файлы �удут и�еть у�тан�вленный атри�ут Т�ль�� чтение. И��равить эту �итуацию ���ут �ледующие ���анды: cd \music attrib -r *.mp3 /s Сравните ради интере�а эти ���анды � уче�ны� �ценарие� script0407.vbs в �ла� ве 4 «Д��ту� � файла� и рее�тру». cacls На ди��ах, и�еющих ф�р�ат файл�в�й �и�те�ы NTFS, в д���лнение � атри�ута� «Т�ль�� чтение», «С�рытый», «Си�те�ный» и «Архивный», у �а��� и файл�в ��� �ут та�же �ыть атри�уты �е���а�н��ти на ур�вне ��ль��вател�. Бе���а�н��ть на ур�вне ��ль��вател� ���в�л�ет ��ль��вател�� и ад�ини�трат�ра� ��нтр�лир�вать ���т�р�нний д��ту� � файла� и �а��а� и ��н�ретн� ��редел�ть, чт� ���ут делать ���т�р�нние ��ль��ватели. Отдельные атри�уты ��редел�ют, ��жн� ли ���дать, удалить, �р�читать, �а�и�ать, �а�у�тить на вы��лнение �аждый файл или �а��у, и ��жн� ли у�равл�ть и�и. В� в�ех реда�ци�х W��dows 7 и V�s�� в ��льшин�тве �луча�х наи��лее эффе�� тивн� ��жн� у�равл�ть эти�и �в�й�тва�и в диал���в�� ��не Свойства (P�op�����s� в W��dows �xp�o���. Н� в р�де �итуаций важн�й альтернатив�й �вл�ет�� ���андна� �тр��а: y y В W��dows XP, ���да вы�лючен �р��т�й ��щий д��ту� � файла� (S�mp�� F��� Sh����g�, W��dows ��рывает �рафиче��ий интерфей� дл� ра�решений д��ту�а � файла� и в�е�т� эт��� у�равл�ет в�е�и на�тр�й�а�и ра�решений д��ту�а � файла� в авт��атиче���� режи�е. y y В W��dows XP Hom� �d���o� �р��т�й ��щий д��ту� � файла� не ��жет �ыть �т�лючен. Кр��е �ере�а�у��а W��dows в �е���а�н�� режи�е не �уще�твует �р�� �т��� ������а ��лучени� GUI�д��ту�а � у�тан�в�е ра�решений д��ту�а � фай� ла� и �а��а�, даже е�ли �ни �ри�ен�ют�� на ди��ах, и�еющих ф�р�ат NTFS. y y Сетевые и �и�те�ные ад�ини�трат�ры ���ут �ах�теть вне�ти и��енени� в ра�� решени� д��ту�а � файла� � ����щью �а�етных файл�в, чт��ы �адача ���ла �ыть авт��ати�ир�вана и �ад��у�ентир�вана. ПРОБЛЕМА С ПАПКАМИ ПОЛЬЗОВАТЕЛЕЙ Е�ли файл ���дан в личн�� �атал��е ��ль��вател�, � не�у е�ть в�е �рава д��ту�а �� �т�р�ны владельца, н� нет ра�решений д��ту�а �� �т�р�ны лю���� дру���� ��ль��вател�. Та�и� ��ра��� W��dows �ревращает та�ие файлы в «�а�ры�
586 Глава 13. Утилиты командной строки тые». При �ерета��ивании файл�в и� �дн�й �а��и в дру�ую � и���ль��вание� W��dows �xp�o���, �xp�o��� в W��dows 7 и V�s�� (��ычн�� ��н�вл�ет у�тан�в�и �е���а�н��ти файла, чт��ы �ни ���твет�тв�вали у�тан�в�а� �а��и на�начени�. Та�и� ��ра���, файл е�ли �ерета��ивает�� и� �а�рыт�й �а��и в �т�рытую, �н �тан�вит�� д��ту�ны� �� чтению дл� лю���� ��ль��вател� (че�� вы ��ычн� и д��иваете�ь�. В W��dows XP �ри вы�люченн�� �р��т�� ��ще� д��ту�е � файла� эт��� не �р�и�х�дит, и файл виден, н� нед��ту�ен дру�и� ��ль��вател�� ����ью� тера или �ети. В� в�ех вер�и�х W��dows �ри �ере�ещении файл�в � ����щью �р��ра��ы ���андн�й �тр��и move у�тан�в�и ра�решений д��ту�а � файлу не и��ен�ют��. Ра�у�еет��, вы ��жете и��енить ра�решени� д��ту�а � файлу, и���ль�у� W��dows GUI на в�ех вер�и�х W��dows (�а и��лючение� XP Hom� �d���o��. Пр�ще в�е�� и��равить ��л�жение �уте� и��енени� �в�й�тв �а��и, в ��т�р�й ��держит�� файл. Дл� эт��� нужн� вы�рать в�лад�у Безопасность (S��u���y�, щел�нуть на �н���е Дополнительно (Adv����d� и у�тан�вить флаж�� Добавить разрешения, наследуемые от родительских объектов (R�p���� A�� Ch��d P��m�ss�o�s W��h I�h�����b�� P��m�ss�o�s F�om Th�s Obj����. Эт� да�т в�е� фай� ла� в �а��е та�ие же ра�решени�, �а� и у �а��й �а��и. Н� ин��да ��жет �ыть �р�ще �делать эт� и� ��на ���андн�й �тр��и. Введите ���анду cacls, ��т�ра� ��жет и��енить ра�решени� на д��ту� � файлу и� ��� �андн�й �тр��и. Е�ли вы �вл�ете�ь �и�те�ны� ад�ини�трат�р�� или ��ытны� ��ль��вателе� (pow�� us��� W��dows XP, ва� нужн� �а���нить эти ���анды на �лучай, е�ли ���да�ни�удь �ридет�� �т�л�нуть�� � файла�и, и�еющи�и не��� �твет�твующие ра�решени� на д��ту�. П�ль��ватели XP Hom� �d���o� ���ут та�же �ере�а�ру�ить �и�те�у в �е���а�н�� режи�е и в�йти в нее � �рава�и ад� �ини�трат�ра, чт��ы ��лучить д��ту� � �транице �в�й�тв �е���а�н��ти файла в �рафиче���� интерфей�е �р��ра��ы �xp�o���. К��анда cacls и��ен�ет ��и��� ��нтр�л� д��ту�а — A���ss Co���o� L�s� (ACL�, �ри�ре�ленный � �ажд��у файлу на ди��е NTFS. В ��и��ах ACL �еречи�л�ют�� ��ль��ватели и ��ль��ватель��ие �ру��ы, а та�же �в��анные � ни�и ра�решени� на чтение, �а�и�ь, вы��лнение и и��енение файл�в. Файлы и �а��и ���ут та�же на�лед�вать ра�решени� �т �а��и, в ��т�р�й �ни ��держат��. Дл� ���анды cacls и���ль�ует�� �ледующий �инта��и�: cacls имя_файла [/T][/E][/C][/G пользователь:разрешение ...] [/R пользователь ...] [/P пользователь: разрешение ...] [/D пользователь ...] �де имя_файла — эт� и�� файла или �а��и, ра�решени� на д��ту� � ��т�р�й нужн� и��енить. В эт�� и�ени ��жн� у�а�ать �и�в�лы��а�е�тители. Бе� в�ех ��тальных �лючей ���анда cacls выв�дит ��и��� те�ущих на�тр�е� ра�решений на д��ту� � файлу или �а��е. Эт�т ��и��� в�лючает и�ена ��ль��ва� телей и �ру�� � ра�решени��и на д��ту� � файлу или �а��е, �а ��т�ры�и �ледуют �у�вы ��д�в, ���а�ывающие те �рава, ��т�рые и�еют�� у ��ль��вател� или �ру��ы. К�ды ра�решений ���ут и�еть �дн� и� �ледующих �начений.
Средства управления файлами 587 Код Смысл R Чтение ��держи���� �уще�твующе�� файла или �а��и W За�и�ь (���дание н�в��� файла� C Чтение, �а�и�ь и и��енение �уще�твующе�� файла F В�е выше�еречи�ленн�е, �лю� и��енение ра�решений В не��т�рых �луча�х, ���да � файлу �ри�ен�ют�� не��ычные ����инации ра�ширений (на�ри�ер, Чтение и �а�и�ь, н� не И��енение�, �р��ра��а cacls ��жет выве�ти ��лее ��др��ный ��и��� ����ых ра�решений. Пр��ра��а cacls ��жет выве�ти ��и���, н� не ��жет и��енить эти ��ециальные ����инации ра�� решений. При выв�де ��и��а ра�решений дл� �а��и cacls ��жет та�же выве�ти д���л� нительные ��ды (OI�, (CI� и (IO�, ��т�рые и�еют �ледующие �начени�. Код Значение CI На�лед�вание ��нтейнера�и. При�ен�ет�� � ��дчиненны� �а��а� данн�й �а��и OI На�лед�вание ��ъе�та�и. При�ен�ет�� � файла� данн�й �а��и IO Т�ль�� на�лед�вание. При�ен�ет�� � ��дчиненны� �а��а� и файла�, н� не � �а��й �а��е Дл� ти�ичн��� �а�рыт��� файла ли�тин� �р��ра��ы cacls ��жет и�еть �ле� дующий вид: C:\plans\strita.xls JAVA\bknittel:F NT AUTHORITY\SYSTEM:F BUILTIN\Administrators:F В не� ���а�ан�, чт� П�лный д��ту� (Fu�� p��m�ss�o�s� � эт��у файлу и�еет�� у трех ��ъе�т�в: y y JAVA\bknittel — у �тандартн�й л��альн�й учетн�й �а�и�и ��ль��вател�. И�ена л��альных учетных �а�и�ей начинают�� � и�ени ����ьютера. y y NT AUTHORITY\SYSTEM — у �а��й ��ераци�нн�й �и�те�ы W��dows. SYSTEM ��ычн� ��лучает �рава на в�е файлы. y y BUILTIN\Administrators — у л��альн�й �ру��ы «Ад�ини�трат�ры». В эту �ру��у вх�дит учетна� �а�и�ь Ад�ини�трат�р и лю�ые дру�ие ��ль��ватели� ад�ини�трат�ры ����ьютера. Эт� ��ычные у�тан�в�и дл� �а�рытых файл�в. Дл� �т�рытых файл�в д���лни� тельна� �а�и�ь ли�� Пользователи:R, ли�� Пользователи:RWC дает в�е� ��ль��вате� л�� в����жн��ть чтени� или чтени� и и��енени� файла. При и���ль��вании ар�у�ент�в ���андн�й �тр��и cacls и��ен�ет ра�решени� д��ту�а � файлу. О�и�ание этих ар�у�ент�в дан� в та�л. 13.3 .
588 Глава 13. Утилиты командной строки Таблица 13.3. Ключи для команды cacls Ключ Описание /T Вы�ывает ре�ур�ивную ��ра��т�у в�ех ��д�атал���в в ��и��е у�а�ан� н��� и�ени или и�ен. Е�ли и�� файла у�а�ан� �а� *.*, эт�т �люч �ри� в�дит � ��ра��т�е в�ех файл�в в� в�ех ��д�атал��ах /E Вы�ывает реда�тир�вание ACL���и��а файла или �а��и. Ра�решени� в ���андн�й �тр��е д��авл�ют�� � лю�ы� �уще�твующи� ра�решени� ��. Бе� �люча /E ACL���и��� файла удал�ет��, а в�е�т� не�� у�танав� ливают�� ра�решени�, у�а�анные в ���андн�й �тр��е /C К��да и�� файла у�а�ан� � и���ль��вание� �и�в�л�в��а�е�тителей, �люч /C �а�тавл�ет cacls ���ле в��ни�н�вени� �ши��и �р�д�лжить ра��ту � дру�и�и файла�и. Оши��а ��жет �р�и��йти �ри �т�ут�твии ра�решени� на �а�и�ь атри�ут�в файла, или е�ли файл и���ль�ует�� /G пользователь: разрешения Вы�ывает �ред��тавление (д��авление� �еречи�ленных ра�решений дл� у�а�анн��� пользователя или �ру��ы ��ль��вателей. Разрешение ��жет �ыть лю��й �у�в�й или в�е�и �у�ва�и R (Чтение�, W (За�и�ь�, C (И��енение� и F (П�лный д��ту��. Чт��ы д��авить ра�решени� дл� не���ль�их ��ль��вателей или �ру��, ��жн� �еречи�лить ��лее �дн�й �а�и�и пользователь:разрешения /R пользователь Вы�ывает удаление в�ех ра�решений дл� у�а�анн��� пользователя или �ру��ы. Эт�т �люч �ри�ени� т�ль�� в�е�те � �люч�� /E /P пользователь: разрешения Вы�ывает �а�ену ра�решений дл� у�а�анн��� пользователя или �ру��ы ра�решени��и, ��ды ��т�рых �еречи�лены. Вд��ав�� � четыре� ��да�, �еречи�ленны� в ��и�ании �люча /G, ��жн� у�а�ать /P пользователь:N, чт� ��начает �т�ут�вие ра�решений. Эт� да�т т�т же эффе�т, чт� и у�а� �ание �люча /R /D пользователь Вы�ывает лишение д��ту�а �� �т�р�ны у�а�анн��� пользователя. Ключ /D нужн� �ри�ен�ть � �����й ��т�р�жн��тью, ��т��у чт� �н «�ере�и� вает» в�е ра�решени� на д��ту� � файлу Проверка разрешений Е�ли у ��ль��вателей в��ни�ают трудн��ти � д��ту��� � файлу, �р�ще в�е�� вы��� нить �ричину �р��ле�ы �уте� �р����тра �в�й�тв файла в W��dows �xp�o���. Вы�е� рите в�лад�у Безопасность (S��u���y� и �р����трите у�тан�в�и дл� �ажд�й �а�и�и. Е�ли в�лад�а Безопасность (S��u���y� не ���вл�ет�� в W��dows XP P�o��ss�o���, дл� ее ���влени� ��жн� вре�енн� вы�лючить �р��т�й ��щий д��ту� � файла�. Щел�ните на �ун�те �еню Сервис (Too�s�Параметры папок (Fo�d�� Op��o�s�Вид (V��w� и �ни�ите флаж�� Простой общий доступ к файлам (S�mp�� F��� Sh����g� в ��нце ��и��а Дополнительные настройки (Adv����d S�����gs�. Е�ли ва� не х�чет�� эт��� делать или е�ли вы ра��таете � W��dows XP Hom� �d���o�, в�йдите в �и�те�у �а� ад�ини�трат�р ����ьютера, �т�р�йте ��н� ���анд� н�й �тр��и, �ерейдите в т�т �атал��, �де нах�дит�� нужный файл, а �ате� на�ерите ���анду cacls имя_файла. Будет выведен ��и���, ��т�рый ���ажет, и�еет ли ��ль��ватель д��ту� � файлу.
Средства управления файлами 589 Предоставление разрешений всем пользователям Е�ли файл �ыл �ере�ещен в �т�рытую, ��щую �а��у, н� ��тал�� нед��ту�ен дл� дру�их ��ль��вателей, �итуацию ��жн� и��равить � ����щью ���анды cacls. В�й� дите в �и�те�у �а� ад�ини�трат�р ����ьютера или �а� владелец файла, �т�р�йте ��н� ���андн�й �тр��и, �ерейдите в �а��у, ��держащую эт�т файл, и на�ерите ���анду cacls имя_файла /E /G everyone:RWC �де имя_файла �вл�ет�� и�ене� т��� файла, ��т�рый нужн� �делать д��ту�ны�. Чт��ы �дн�й ���анд�й и��равить �итуацию � не���ль�и�и файла�и, ��жн� и�� ��ль��вать �и�в�лы��а�е�тители (на�ри�ер, *.*�. М�жн� та�же на�вать ��н�рет� ных ��ль��вателей. На�ри�ер, ���анда cacls имя_файла /E /G norm:RWC bob:RWC �ред��тавл�ет ра�решени� ��ль��вател�� � учетны�и �а�и���и Norm и Bob, не �т� рыва� д��ту� � файлу дл� в�ех. (Н� е�ли в�лючен �р��т�й д��ту� � ��щи� файла�, Norm и Bob не ��лучат д��ту� � файлу �� �ети. Дл� и���ль��вани� файла �етевы�и ��ль��вател��и �ри в�люченн�� �р��т�� д��ту�е � ��щи� файла� нужн� �ред�� �тавить ра�решение в�е� ��ль��вател��.� Превращение файла или папки в закрытые Дл� �ревращени� файла в �а�рытый лучше удалить ра�решени� дл� у�а�анных ��ль��вателей или �ру��, и���ль�у� �люч /R. На�ри�ер, дл� удалени� д��ту�а дл� в�ех и���ль�ует�� �ледующа� ���анда: cacls имя_файла /E /R everyone Дл� вне�ени� и��енений дл� �а��и и в�е�� ее ��держи���� нужн� и��енить �в�й�тва �а��и, а �ате� в����ль��вать�� �люч�� ре�ур�ивн�й ��ра��т�и дл� вне� �ени� и��енений дл� в�ех файл�в и ��дчиненных �а���, �а� в �ледующе� �ри�ере: cd \имя_папки cacls . /E /R everyone calcs *.* /T /E /R everyone ▼o Использовать команду cacls для папок нужно с особой осторожностью. Если удалить разреше- ния, присущие такой системной папке, как \Windows, операционная система может прекратить работу. По возможности, для изменения разрешений для папок нужно пользоваться средства- ми, имеющимися в графическом пользовательском интерфейсе. Принуждение файлов к унаследованию разрешений от их папок При в�трече � нечитае�ы� файл�� в �т�рыт�й �а��е вы �тал�иваете�ь � �р��ле� ��й, ра����тренн�й в недавней вре��е. У�транить эту �р��ле�у ��жн�, �а�тавив в�е файлы в �а��е уна�лед�вать ра�решени� �т ��держащей их �а��и. Пр��ра��а cacls � эти� ��равить�� не ��жет. М�жн�, �а� уже у���инал��ь, �р��т� в����ль��вать�� �ред�тва�и �рафиче����� интерфей�а или альтернативн�й утилит�й у�равлени� ра�решени��и д��ту�а � файла� �� и�ени icacls, ��т�ра� ���тавл�ет�� в�е�те � W��dows 7 и V�s��. При ра��те в XP ее нужн� ��лучить и� �дн��� и� на��р�в W��dows R�sou��� ���s, ра����тренных в ��нце �лавы. Эту ��ерацию ни в ��е�
590 Глава 13. Утилиты командной строки �лучае нель�� �р�в�дить в �тн�шении та�их важных �а���, �а� \windows или лю��й и� ее ��дчиненных �а���: cd \users\public\documents icacls *.* /reset Эффективные средства управления Суще�твует �н��� утилит ���андн�й �тр��и, у�р�щающих вы��лнение не��т�� рых д�в�льн� ут��ительных �адач у�равлени� W��dows. Е�ли ва� ���да�ли�� �рих�дил��ь ве�ти ��и�� и�ен в�ех �и�те�ных �луж� или драйвер�в у�тр�й�тв, �а�ущенных на данн�� ����ьютере, ра��тающе� ��д у�равление� W��dows, вы ��ни�аете, � че� идет речь. В данн�� ра�деле ���а�аны не��т�рые ве�ь�а уд��ные �ред�тва, �����ающие у�равл�ть ����ьютера�и и� ���андн�й �тр��и. driverquery К��анда driverquery выв�дит и�ена в�ех драйвер�в у�тр�й�тв, у�тан�вленных на ����ьютере. М�жн� выве�ти ��и��� драйвер�в л��альн��� ����ьютера или дру�их ����ьютер�в вашей �ети. И�х�дный ф�р�ат ��и��а и�еет �ледующий вид. Модуль Название Тип драйвера Дата ссылки ============ ====================== ============= ====================== 1394ohci 1394 OHCI-совместимый Kernel 03.04.2010 7:15:17 ACPI Драйвер Microsoft ACPI Kernel 14.07.2009 3:11:11 AcpiPmi ACPI Power Meter Drive Kernel 14.07.2009 3:16:36 adp94xx adp94xx Kernel 06.12.2008 2:59:55 adpahci adpahci Kernel 01.05.2007 21:29:26 adpu320 adpu320 Kernel 28.02.2007 3:03:08 AFD Ancillary Function Dri Kernel 14.07.2009 3:12:34 ... К��анду driverquery ��жн� �а�у�тить �е� ар�у�ент�в, чт��ы �на вывела ��и��� дл� л��альн��� ����ьютера, или д��авить в ���анду ее �а�у��а �люч /S имя_ком­ пьютера, чт��ы �на вывела ��и��� драйвер�в дру���� ����ьютера. Е�ли нев��� ��жн� ��лучить д��ту� � �етев��у ����ьютеру, ��жн� д��авить д���лнительные �лючи /u имя_пользователя /p дл� и���ль��вани� альтернативн�й учетн�й �а�и�и, на�ри�ер, � �рава�и ад�ини�трат�ра. К��анда driverquery �а�р��ит у ва� �ар�ль учетн�й �а�и�и. ▼) При наличии сетевого диска, отображенного на удаленный компьютер с использованием вашей собственной учетной записи, вы не можете указать driverquery другое имя учетной записи. Windows разрешила только вам подключиться к данному удаленному компьютеру — для этого в конкретный момент времени может использоваться только одна учетная запись. П� у��лчанию ���анда driverquery выв�дит та�лицу в ф�р�ате, ���а�анн�� в �редыдуще� �ри�ере. Е�ли нужн� и���ртир�вать инф�р�ацию в эле�тр�нную та�лицу, ��жн� д��авить �люч /FO CSV дл� ��лучени� ре�ультата в ф�р�ате � �а� выч�а�и и �а��ты�и �ежду �т�л�ца�и.
Эффективные средства управления 591 У ���анды driverquery и�еет�� р�д дру�их �лючей, ��т�ры�и ��жн� в��� ��ль��вать��. Наи��лее интере�ны� и� них �вл�ет�� �люч /V, вы�ывающий д�� �авление д���лнительных �т�л�ц�в, та�их �а� и�� файла драйвера у�тр�й�тва и е�� ���т��ни� (�а�ущен�не �а�ущен�, и �люч /SI, ��т�рый д��авл�ет инф�р�ацию �� у�тан�в�чн�� файле драйвера и � е�� �р�и�в�дителе. В��ре�и утверждени�� интера�тивн�й ��рав�и, �люч /SI �рив�дит � выв�ду инф�р�ации � драйверах �а� и�еющих, та� и не и�еющих ��д�и�и. Дл� �р����тра ��лн��� �еречн� �лючей нужн� вве�ти ���анду driverquery /?. runas К��анду runas ��ле�нее и���ль��вать в W��dows XP, че� в W��dows 7 и V�s��, ��т��у чт� в XP �т�ут�твует ��нтр�ль учетн�й �а�и�и ��ль��вател�, и дл� вы� ��лнени� ад�ини�тративных фун�ций ��ычн� и���ль�ует�� учетна� �а�и�ь �� и�ени Administrator. К��да нужн� вы��лнить у�равл�ющие ��ерации, �рих�дит�� вых�дить и� �и�те�ы и вх�дить в нее ��д и�ене� ад�ини�трат�ра. К��анда runas ���в�л�ет �а�у��ать не��т�рые �рил�жени� ��д вид�� дру���� (�а� �ривил�, ��ладающе�� ��льши�и �рава�и� ��ль��вател�, ��тава��ь в т� же вре�� �аре�и�трир�ванны� на ����ьютере ��д и�ене� �в�ей ����твенн�й учет� н�й �а�и�и. К��анда runas �ри��дит�� �ри не��х�ди���ти �а�у�тить �р��ра��у у�тан�в�и или и��лед�вать файлы, � ��т�ры� в ��ычн�� режи�е у ва� нет д��ту�а. Дл� �а�у��а runas и���ль�ует�� �ледующий �инта��и�: runas [(/noprofile|/profile)] [/env] [/netonly] [/smartcard] /user:имя_пользователя команда Е�ли ���анда ��держит �р��елы или ар�у�енты ���андн�й �тр��и, ее нужн� �а� �лючить в �авыч�и. Чаще в�е�� эта ���анда и���ль�ует�� дл� т���, чт��ы �т�рыть ��н� ���андн�й �тр��и � �рава�и ад�ини�трат�ра ����ьютера, �� �ледующи� �инта��и���: runas /user:имя_учетной_записи cmd � �а�ен�й эле�ента имя_учетной_записи и�ене� учетн�й �а�и�и ад�ини�трат�ра ����ьютера, на�ри�ер Administrator. Я не �уду �де�ь у�лу�л�ть�� в ����енн��ти ���анды runas. В W��dows 7 и V�s�� �на �ра�тиче��и не в��тре��вана, ��т��у чт� в�е�т� нее ��жн� �т�рыть ��н� ���андн�й �тр��и � ра�ширенны�и �ривиле�и� ��и. Е�ли ваша учетна� �а�и�ь не �тн��ит�� � учетны� �а�и��� ад�ини�трат�ра ����ьютера, вы вы�ираете дру�ую учетную �а�и�ь и� �ри�лашени�, выведенн��� �и�те��й ��нтр�л� учетных �а�и�ей ��ль��вателей (UAC�. ➔ О�н� ���андн�й �тр��и � ра�ширенны�и �ривиле�и��и ра���атривает�� в �ла� ве 10, в ра�деле «От�рытие ��на ���андн�й �тр��и � �рава�и ад�ини�трат�ра». В XP ��жн� та�же и���ль��вать runas дл� �а�у��а дру�их �р��ра��, на�ри�ер, �р��ра�� у�тан�в�и или ���ий �р��ра��ы W��dows �xp�o���. Н� ���а не �удут вне�ены и��енени� в у�тан�в�и, вы не ���жете �а�у�тить �р��ра��у W��dows �xp�o��� или лю�ую и� ее �р�и�в�дных �р��ра�� — Панель у�равлени�, К��� �ьютер, Д��у�енты, Сетевые ��д�лючени� и не��т�рые дру�ие а��леты �анели у�равлени�.
592 Глава 13. Утилиты командной строки Дл� вне�ени� этих и��енений в�йдите в �и�те�у ��д т�й учетн�й �а�и�ью, ��т�ра� �удет и���ль��вать�� � ���анд�й runas, и �т�р�йте W��dows �xp�o���. Щел�ните на �ун�те �еню Сервис (Too��Параметры папок (Fo�d�� Op��o�s�. Вы� �ерите в�лад�у Вид (V��w�. В ��и��е Дополнительные параметры (Adv����d S�����gs� у�тан�вите флаж�� Запускать окна с папками в отдельном процессе (L�u��h Fo�d�� W��dows �� � S�p����� P�o��ss�. Щел�ните на �н���е OK и выйдите и� �и�те�ы. Те�ерь ��на �р��ра��ы �xp�o��� �удут ра��тать ���ле их �а�у��а ���анд�й runas. Б�лее ��др��н� эт�т ��ле�ный ��вет ��и�ан на ве���транице blogs.msdn.com/ aaron_margosis/archive/2004/07/07/175488.aspx tasklist К��анда tasklist выв�дит ��и��� в�ех �р�це���в, �а�ущенных в �и�те�е. Эта инф�р�аци� �ри��дит��, ���да нужн� �����треть, �а�ущена ли в авт��атиче� ���� режи�е та или ина� �р��ра��а, или е�ли е�ть ��д��рение, чт� �а�а��ни�удь важна� �р��ра��а или �и�те�на� �луж�а ��льше не ра��тает. Эта ���анда ��жет та�же выве�ти инф�р�ацию � �р��ра��ных файлах дина�иче��и ��д�лючае�ых �и�ли�те� — Dy��m�� L��k L�b���y (DLL�, и���ль�уе�ых в данный ���ент �ажды� �р�це����. К��анда tasklist и���ль�ует не���ль�� �лючей, ��т�рые ��жн� увидеть ���ле вв�да ���анды tasklist /?. Зде�ь �удут ра����трены т�ль�� наи��лее интере�ные и� них. Бе� �лючей и�х�дный выв�д ���анды ��sk��s� и�еет �ледующий вид: Имя образа PID Имя сессии No сеанса Память ========================= ======== ================ =========== ============ System Idle Process 0 Services 0 24 КБ System 4 Services 0 124 КБ smss.exe 364 Services 0 376 КБ csrss.exe 504 Services 0 2584КБ wininit.exe 592 Services 0 1512КБ csrss.exe 600 Console 1 11 776 КБ services.exe 648 Services 0 5796КБ lsass.exe 664 Services 0 5752КБ lsm.exe 672 Services 0 2044КБ svchost.exe 788 Services 0 5384КБ winlogon.exe 836 Console 1 2644КБ ... terminal.exe 8264 Console 1 47 436 КБ SearchFilterHost.exe 8784 Services 0 10 164 КБ SearchProtocolHost.exe 6936 Console 1 5916КБ WmiPrvSE.exe 12572 Services 0 6296КБ tasklist.exe 8376 Console 1 4968КБ На�начение �т�л�ц�в ��ъ��нен� в та�л. 13.5 . В эт�� �еречне ���а�аны �а� �р�це��ы �и�те�ных �луж�, та� и ��ль��ватель� ��ие �р��ра��ы. Ключ /V �рив�дит � выв�ду д���лнительных �т�л�ц�в: ���т��� ни� �р��ра��ы (ра��тает�не �твечает�, и�ени ��ль��вател� �р��ра��ы, ��ще�� вре�ени и���ль��вани� центральн��� �р�це���ра и �а��л�в�а ��на, е�ли та��в�й и�еет��.
Эффективные средства управления 593 Таблица 13.4. Заголовки столбцов в выводе команды tasklist Заголовок Описание И�� ��ра�а (Im�g� N�m�� И�� �р��ра��н��� файла PID Идентифи�ат�р �р�це��а. Чи�л�, �вл�ющее�� уни�альны� идентифи� �ат�р�� �ажд�й ра��тающей �р��ра��ы И�� �е��ии (S�ss�o� N�m�� Дл� �р��ра��, фи�иче��и �а�ущенных ��ль��вател��и ����ьютера, в эт�� ��ле выв�дит�� �л�в� Co�so��. И�� �е��ии �тличает�� дл� ��ль� ��вателей, ��д�лючивших�� чере� удаленный ра��чий �т�л или чере� Служ�ы тер�инал�в W��dows No �еан�а (S�ss�o�#� W��dows ��ддерживает ��нце�цию �еан��в, ���в�л�ющую �дн�вре� �енный вх�д в �и�те�у не���ль�их ра�ных ��ль��вателей. В вер�и�х W��dows дл� на�т�льных ����ьютер�в а�тивн� ра��тать в �тдельн� в��тый ���ент вре�ени ��жет т�ль�� �дин ��ль��ватель, н� �аре�и�три� р�ваны в �и�те�е ���ут �ыть не���ль�� ��ль��вателей. Бы�тра� ��ена ��ль��вател� ���в�л�ет �ере�лючать�� �ежду �еан�а�и. В W��dows 7 и V�s�� �еан� 0 и���ль�ует�� и��лючительн� дл� �и�те�ных �луж�. Пер� вый в�шедший в �и�те�у ��ль��ватель ��лучает �еан� No 1, вт�р�й ��н� �урирующий вх�д в �и�те�у �тн��ит�� � �еан�у No 2 и т. д. В W��dows XP �ервый в�шедший в �и�те�у ��ль��ватель на фи�иче���� на�т�льн�� ����ьютере (в �тличие �т удаленн��� ра��че�� �т�ла� ��д�лючает�� � �еан�у No 0, в ��т�р�� уже �а�ущены �и�те�ные �луж�ы Па��ть (M�m Us�g�� О�ъе� �а��ти, и���ль�уе�ый �р��ра���й. Су��арный ��ъе� ��жет �ре� вышать ��ъе� фи�иче���й �а��ти, �����ль�у дл� не��т�рых �р��ра�� ��жет и���ль��вать�� �траничный �в��ин� Выв�д ���анды ��sk��s� ��жн� э����ртир�вать в эле�тр�нную та�лицу, д��авив в вы��в ���анды �люч /FO CSV. На�ри�ер, ���анда tasklist /fo csv >tasks.txt ��хран�ет те�ущий ��и��� �р�це���в в те��т�в�� файле, ��т�рый �ате� ��жн� �удет э����ртир�вать в эле�тр�нную та�лицу �x��� �а� файл � �а��ты�и в �аче�тве ра�делителей. Пр�це��ы �и�те�ных �луж� ���ут фа�тиче��и �ред��тавл�ть не���ль�� ра�� личных у�лу�. Ключ /SVC, �а� ���а�ан� в �ледующе� �ри�ере, �рив�дит � выв�ду �луж�, �ред��тавл�е�ых �ажд�й �адачей: Имя образа PID Службы === === === === === === == === === == === === === === === === === === === === === === services.exe 612 Eventlog, PlugPlay lsass.exe 628 PolicyAgent, ProtectedStorage, SamSs svchost.exe 796 RpcSs svchost.exe 940 Dnscache svchost.exe 968 LmHosts, RemoteRegistry, SSDPSRV, WebClient spoolsv.exe 1036 Spooler ...
594 Глава 13. Утилиты командной строки Ра�ра��тчи��в �р��ра��н��� ��е��ечени� ��жет �аинтере��вать в��р��, �а�ие DLL�файлы �а�ружены �ажды� �р�це����. Ключ /M, �а� ���а�ан� в �ледующе� �ри�ере, �рив�дит � выв�ду эт�й инф�р�ации: Имя образа PID Модули ========================= ====== ===================================== cmd.exe 2876 ntdll.dll, kernel32.dll, msvcrt.dll, USER32.dll, GDI32.dll, ADVAPI32.dll, RPCRT4.dll, Apphelp.dll М�жн� та�же �р����треть ��и��� �р�це���в дл� дру���� ����ьютера, д�� �авив в ���анду �люч /S имя_компьютера. Та� же �а� и в �лучае � и���ль��ва� ние� ���анды driverquery, дл� эт��� ��жет ��над��ить�� и���ль��вание и�ени �ривиле�ир�ванн�й учетн�й �а�и�и �уте� д��авлени� �лючей /U имя_пользова­ теля /P. К��анда tasklist ����енн� ��ле�на, ���да �р��ра��а �авершила�ь аварийн�, н� ее «�у��и» еще �читают�� ра��тающи�и. О���енн� эти� �тличает�� �р��ра��а M���oso�� Wo�d: ин��да Wo�d аварийн� �авершает �в�ю ра��ту и и�че�ает и� ��ыч� н��� Ди��етчера �адач, н� ���анда tasklist ���а�ывает, чт� �р�це�� �� и�ени winword.exe в�е еще ра��тает. И���а эт��� ��вт�рный �а�у�� Wo�d нев����жен д� тех ��р, ���а эт�т не��нтр�лируе�ый �р�це�� не �удет ��тан�влен ���анд�й taskkill. ▼) Команда tasklist и команда taskkill, которая будет рассмотрена в следующем подразде- ле, с Windows XP Home Edition не поставляются. Но они поставляются со всеми редакциями Windows 7, Vista и XP Professional. Пользователи Windows XP Home могут скопировать tasklist. exe и taskkill.exe с компьютеров, работающих под управлением Windows XP Pro. taskkill К��анда taskkill ���в�л�ет �ре�ращать ра��ту �р��ра��, �а�ущенных на ваше� ����ьютере или на дру�их �етевых ����ьютерах, и���ль�у� дл� эт��� и�� ��ль��� вател� �р��ра��ы, н��ер �еан�а, н��ер идентифи�ат�ра �р�це��а (PID� или и�� �р��ра��ы. К��анда taskkill ����енн� ��ле�на те�, чт� ин��да ��жет �ре�ращать вы��лнение �р�це���в, ��т�рые �т�а�ывают�� и�че�ать, ���да их �ытают�� у�рать � ����щью диал���в��� ��на Ди��етчера �адач. У ���анды taskkill и�еет�� �н�же�тв� �лючей, даже ��льше, че� ва� ���да� ли�� ��жет �ри��дить��. Фа�тиче��и (вы уж �ен� �р��тите� ее �лед�вал� �ы на� �вать не ��skk��� (у�ийцей �р�це���в�, а ov��k��� (и��ыт�чн��тью�. П�лный ��и��� �лючей ��жн� увидеть ���ле вв�да ���анды taskkill /?. Зде�ь �удут ра����трены т�ль�� �а�ые ��ле�ные �лючи. Завершение процесса по его PID-номеру Е�ли ��жн� ��ределить PID�н��ер вышедшей и����д ��нтр�л� �р��ра��ы ли�� в выв�де ���анды tasklist, ли�� в диал���в�� ��не Ди��етчера �адач, т� ��жн� на�рать taskkill /pid pid-номер /f /t ���тавив в�е�т� pid­номера идентифи�аци�нный н��ер �р�це��а.
Эффективные средства управления 595 Ключ /F �а�тавл�ет W��dows �авершить �р�це�� «�ринудительн�», а �люч /T �а�тавл�ет �авершить в�е д�черние �р�це��ы или ��д�р��ра��ы, �а�ущенные �ре� �ращае��й �р��ра���й. В� �н��их �луча�х эт� ���в�л�ет решить �р��ле�у. Е�ли эт� не �ра��тает, ��жн� ���р���вать �а�у�тить �р��ра��у taskkill, ��ль�у��ь �рава�и ад�ини�трат�ра: runas /user:Administrator taskkill /pid pid-номер /f /t К��анда taskkill ��жет та�же �авершать �р�це��ы на удаленн�� ����ьютере, дл� че�� и���ль�ует�� �люч /S имя_компьютера � те� же ф�р�ат��, ��т�рый �ыл ��и�ан дл� ���анды tasklist. Завершение процессов другого пользователя Е�ли нужн� �авершить �р�це��, �ринадлежащий дру���у ��ль��вателю (на�ри� �ер, т��у, �т� в�шел в �и�те�у, и���ль��вав �ы�трую ��ену ��ль��вател��, нужн� в����ль��вать�� учетн�й �а�и�ью ад�ини�трат�ра. Наверн�е, лучше в�е�� в�йти в �и�те�у �а� ад�ини�трат�р и в����ль��вать�� дл� решени� �р��ле�ы диал���� вы� ��н�� Ди��етчера �адач, н� ��жн� та�же в����ль��вать�� ���анд�й taskkill. К��анда taskkill /FI "USERNAME eq имя_пользователя" �де имя_пользователя — эт� и�� учетн�й �а�и�и; дл� л��альн��� ����ьютера эт� ��жет �ыть �р��т� и��, а дл� д��енн�й учетн�й �а�и�и эт� ��жет �ыть имя_поль­ зователя@домен или домен\имя_пользователя . К��анду ��жн� �а�у�тить и� не� �ривиле�ир�ванн�й учетн�й �а�и�и, �т�рыв, �а� �ыл� ра����трен� ранее, ��н� ���андн�й �тр��и � ра�ширенны�и �ривиле�и��и. Сначала нужн� в����ль��вать�� эт�й ф�р��й, чт��ы ���в�лить лю�ы� �р�� �ра��а�, ��т�рые х�т�т �авершить �в�ю ра��ту эле�антн�, в����ль��вать�� эт�й в����жн��тью. Зате�, чт��ы ��равить�� � те�и �р��ра��а�и, ��т�рые ���р�тив� л�ют�� �авершению, �ледует ��вт�рить ���анду � �люча�и /F /T. Завершение процессов с использование имени программы Пр��ра��у ��жн� �авершить, у�а�ав ее и�� в ф�р�е ���анды taskkill: taskkill /IM файл_программы Зде�ь файл_программы — эт� и�� �X��файла �р��ра��ы (на�ри�ер, winword. exe�. При у�а�ании и�ени ��жн� и���ль��вать �и�в�лы��а�е�тители; на�ри�ер, �ри у�а�ании note* �удет �авершена �р��ра��а notepad.exe (Бл��н�т�, а та�же в�е дру�ие �р��ра��ы, чье и�� начинает�� на note. При и���ль��вании �и�в�л�в��а� �е�тителей нужн� �р��вл�ть ����ую ��т�р�жн��ть, �����ль�у эт� ��жет �риве�ти � �лучайн��у нежелательн��у �авершению важных �луж� W��dows. sc К��анда sc на�ывает�� �р��ра���й ��нтр�ллера �луж� (S��v��� Co���o�����, и не� ��р��та. Она ��жет у�равл�ть �ра�тиче��и в�е�и а��е�та�и у�тан�в�и, ��ддерж�и и и��енени� �и�те�ных �луж� и драйвер�в у�тр�й�тв на л��альных или �етевых
596 Глава 13. Утилиты командной строки ����ьютерах W��dows. У эт�й ���анды та�же е�ть ��льш�е ��личе�тв� �лючей, ��и��� ��т�рых ��жн� �р����треть, на�рав ���анду sc /?. У нее та� �н��� �лючей, чт� ���ле выв�да ��рав�чн�й инф�р�ации � ����щью �люча /? �на �редла�ает ���а�ать ��рав�у дл� �в�их ��д���анд query и queryex. О�н�вн�й ф�р�ат ���анды sc и�еет �ледующий вид: sc [\\имя_сервера] команда [имя_службы [ключ ...]] Е�ли ар�у�ент имя_сервера ��ущен, ���анда sc ра��тает на л��альн�� ����ью� тере. К��анда не ���в�л�ет вве�ти дру��е и�� ��ль��вател� или �ар�ль, ��эт��у дл� вы��лнени� дру�их �адач, �а и��лючение� ��и��а у�тан�вленных �луж�, эту ���анду нужн� �а�у��ать и� ��на ���андн�й �тр��и � ра�ширенны�и �ривиле� �и��и. В �ледующих ра�делах �удет �еречи�лен р�д ��лее ��ле�ных sc����анд. При ���луживании ����ьютер�в ��д у�равление� W��dows нужн� тщательн� и�учить �еречень ���анд, ��т��у чт� �ни ���ут вы�вать у ва� �ра�тиче��ий интере� �� ра�ны� �ричина�. Вывод списка установленных служб К��анда sc queryex выв�дит длинный ��и��� у�тан�вленных �луж� и те�ущее ��� �т��ние их ра��ты. Ти��в�й ��и��� �луж� и�еет �ледующий вид: Имя_службы: Dhcp Выводимое_имя: DHCP Client Тип : 20 WIN32_SHARE_PROCESS Состояние : 4 RUNNING (STOPPABLE,NOT_PAUSABLE,ACCEPTS_SHUTDOWN) Код_выхода_Win32 : 0 (0x0) Код_выхода_службы : 0 (0x0) Контрольная_точка : 0x0 Ожидание : 0x0 ID_процесса : 844 Флаги : О�и�ание наи��лее ��ле�ных ча�тей эт��� ��и��а и�л�жен� в та�л. 13.5 . Таблица 13.5. Полезные поля в выводе команды sc queryex Поле Описание И��_�луж�ы «Крат��е» и�� �луж�ы. Эт� и�� ��жет и���ль��вать�� � ���анд�й ��� дл� �а�у��а или ��тан�в�и �луж�ы Выв�ди��е_и�� «Длинн�е» и�� �луж�ы. Эт� и�� выв�дит�� в �анели Служ�ы (S��v���s� в К�н��ли у�равлени� W��dows (W��dows M���g�m���� С��т��ние Те�ущее ���т��ние а�тивн��ти �луж�ы ID_�р�це��а Идентифи�ат�р �р�це��а �луж�ы Чт��ы ��раничить ��и��� т�ль�� драйвера�и или т�ль�� �луж�а�и, ��жн� д�� �авить � ���анде sc queryex а�ру�ент type= driver или type= service (� �р��ел�� ���ле �на�а равен�тва�.
Утилиты для работы с сетью 597 Запуск и остановка служб Си�те�ны� ад�ини�трат�ра� вре�� �т вре�ени �рих�дит�� �а�у��ать и ��танавли� вать �луж�ы �� не���ль�и� �ричина�: чт��ы �ере�а�у�тить неуд�влетв�рительн� ра��тающую �луж�у, чт��ы �а�тавить �луж�у �ан�в� �р�ве�ти инициали�ацию � н�вы�и �у���вы�и данны�и или чт��ы вре�енн� ��тан�вить �луж�у, ���а идет ���луживание дру�их �луж�. М�жн� у�равл�ть �луж�а�и, и���ль�у� �рафиче��ий ин�тру�ентарий у�равлени� W��dows, н�, ���да ��д��н��� р�да �адачи �рих�дит� �� вы��лн�ть д�в�льн� ча�т�, уд��нее �удет в����ль��вать�� �а�етны� файл��. На�ри�ер, � и���ль�ую �а�етный файл дл� ��тан�в�и и �ере�а�у��а ��чт�в��� �ервера ��ей ����ании, ���ле т��� �а� � вне� и��енени� в е�� ��нфи�ураци�нный файл. Вве�ти и�� �а�етн��� файла (е�ли интере�н�, е�� и�� downup� на�н��� �р�� ще, че� ���ать�� в �рафиче��их ин�тру�ентах у�равлени� ����ьютер��. Чт��ы в����ль��вать�� ���анд�й sc дл� �а�у��а и ��тан�в�и �луж� на л��аль� н�� или удаленн�� ����ьютере, нужн� �нать «�рат��е» и��. Пр�ще в�е�� �рат��е и�� �луж�ы ��жн� найти � ����щью ���анды sc queryex, ��т�ра� выв�дит ��и��� в�ех и�ен �луж�. Зате� ��жн� в����ль��вать�� ���анда�и sc stop имя_службы sc \\имя_компьютера stop имя_службы дл� ��тан�в�и �луж�ы на л��альн�� ����ьютере или на удаленн�� ����ьютере, у�а�анн�� � ����щью имени_компьютера ���твет�твенн�. Т�чн� та� же дл� �а� �у��а �луж� ��жн� в����ль��вать�� ���анда�и sc start имя_службы sc \\ имя_компьютера start имя_службы ▼) У команды sc имеется множество других команд, позволяющих устанавливать и конфигури- ровать службы, а также выяснять их рабочее состояние и списки зависимостей. Особенно по- лезными могут быть команды установки, если потребуется развернуть службы в корпоративной среде. Утилиты для работы с сетью Ра��та в �ети �вл�ет�� �дн�й и� �а�ых �ильных �т�р�н W��dows, чт� ��дтвержда� ет�� ��илие� утилит ���андн�й �тр��и, �редна�наченных дл� у�равлени� �етью и �тлад�и. Кр��е �ред�тв, �редна�наченных дл� у�равлени� �ет��и W��dows � це� лью и���ль��вани� ��щих файл�в и �ринтер�в, W��dows ���тавл�ет�� � ��лны� на��р�� �тандартных TCP�IP��р��ра��, � ��т�ры�и ��жет �ыть не�л�х� �на��� лю��й ��ль��ватель U��x. И�еют�� в виду �р��ра��ы «�» и� ар�енала ���k���y U��x и �ринтерные �р��ра��ы U��x lpq и lpr, а та�же та�ие �тандартные TCP� IP��ред�тва, �а� �р��ра��ы ping, ftp и nslookup. Я не ра���ла�аю д��тат�чны� �р��тран�тв�� дл� ��и�ани� в�ех �етевых �ред�тв, �ред��тавл�е�ых W��dows, н� � вы�рал ше�ть, на ��й в��л�д, наи��лее ��ле�ных. Дру�ие �ред�тва �еречи�лены в �рил�жении Г «С�рав�чни� �� �р��ра��а� ���андн�й �тр��и».
598 Глава 13. Утилиты командной строки ipcon�g Пр��ра��а ipconfig �вл�ет�� ве�ь�а уд��н�й утилит�й, ���а�ывающей ва� ��� �т��ние �етев�й ��нфи�урации TCP�IP ваше�� ����ьютера. Она ����енн� ��ле�на �ри и���ль��вании ����утируе���� �етев��� ��д�лючени�, виртуальн�й ча�тн�й �ети (VPN� или ада�тер�в л��альн�й �ети (LAN� � авт��атиче��и� �ри�в�ение� IP�адре�а, ��т��у чт� ipconfig ��жет ����щить � т��, �а��й IP�адре� �ыл �ри�в�ен данн��у дина�иче��и ��нфи�урируе���у ��д�лючению. К��анда ipconfig ��жет та�же ��в���дить или �ере�а�р��ить авт��атиче��и �ри�в�енные IP�адре�а дл� ваших ада�тер�в л��альн�й �ети. Вывод информации об IP-адресах В наи�р��тейшей ф�р�е ���анда ipconfig выв�дит те�ущий IP�адре�, �а��у ��д� �ети и адре� шлю�а дл� лю���� а�тивн��� LAN�ада�тера и ����утируе�ых �етевых ��д�лючений, в�люча� ����утируе�ые интернет���д�лючени�. Ее выв�д и�еет �ледующий вид: Настройка протокола IP для Windows Ethernet adapter Подключение по локальной сети: DNS-суффикс подключения . . . . . : mycompany.com Локальный IPv6-адрес канала . . . : fe80::3cb4:bfdb:442f:6315%11 IPv4-адрес.. .........:192.168.0.3 Маскаподсети..........:255.255.255.0 Основнойшлюз..........:192.168.0.1 При �а�у��е � �люч�� /all ���анда ipconfig выв�дит д���лнительную инф�р� �ацию � �ажд�� ��д�лючении. Ее выв�д и�еет �ледующий вид: Настройка протокола IP для Windows Имякомпьютера..........:java Основной DNS-суффикс. . . . . . . : Типузла............:Неизвестен IP-маршрутизация включена . . . . : Нет WINS-проксивключен.......:Нет DNS Suffix Search List. . . . . . : mycompany.com Ethernet adapter Подключение по локальной сети: DNS-суффикс подключения . . . . . : mycompany.com Описание ............:SMCEZCard10/100PCI Физический адрес. . . . . . . . . : 00-E2-4F-11-39-47 DHCPвключен...........:Нет Локальный IPv6-адрес канала . . . : fe80::3cb4:bfdb:442f:6315%11 IPv4-адрес ...........:192.168.0.3 Маскаподсети..........:255.255.255.0 Основной шлюз . . . . . . . . . : 192.168.0.1 DNS-серверы...........:192.168.0.2 Эта инф�р�аци� �ри��дит�� �ри диа�н��ти�е �р��ле� �ети и Интернета. Б�� лее т���, �ри и���ль��вании ����утируе���� ��д�лючени� или дина�иче����� (DHCP����нфи�урируе���� LAN���д�лючени� эт� един�твенный ������ ��лу� чени� ��д��н�й инф�р�ации.
Утилиты для работы с сетью 599 Наи��лее важные эле�енты �еречи�лены в та�л. 13.6 . Таблица 13.6. Информация, выводимая командой ipcon�g /all Заголовок Описание И�� ����ьютера И�� ����ьютера дл� и���ль��вани� в �р�т���лах TCP�IP; ��жет не ��в�адать � и�ене� ����ьютера в �ети W��dows О�н�вн�й DNS� �уффи�� О�н�вн�е д��енн�е и�� �луж�ы д��енных и�ен — Dom��� N�m� S��v��� (DNS� дл� данн��� ����ьютера Ти� у�ла Ти� у�ла N���IOS. О�ычн� на �и�те�ах, и���ль�ующих �етев�й �р�� т���л N���IOS �н у�а�ывает�� �а� Ги�ридный DNS��уффи�� ��д�лючени� И�� д��ена DNS дл� ��ределенн��� ��д�лючени� О�и�ание И�� �етев��� ада�тера или ада�тера ����утируе���� �етев��� ��еди� нени� дл� данн��� ��д�лючени� DHCP в�лючен Да, е�ли ��д�лючение на�тр�ен� на авт��атиче��ую ��нфи�урацию IP�адре� IP�адре�, �ри�в�енный данн��у ��д�лючению Ма��а ��д�ети Ма��а ��д�ети данн��� ��д�лючени� О�н�вн�й шлю� О�н�вн�й шлю� (�аршрути�ат�р� дл� данн��� ��д�лючени� DNS��ерверы IP�адре�а �ервера или �ервер�в, и���ль�уе�ых дл� DNS���и��а (д��енн��� и�ени� Инф�р�аци�, выв�ди�а� ���анд�й ipconfig, ��жет �ыть ����енн� ��ле�на �ри у�транении ��н�ретных �етевых �р��ле�: y y К��да W��dows не ��жет найти DHCP��ервер дл� данн��� LAN�ада�тера, IP� адре� фи�урирует �а� Авт��атиче��и ���нфи�урир�ванный IP�адре�. Е�ли т�ль�� ���тр�енна� ва�и �еть не �вл�ет�� не��льш�й �етью �е� DHCP��ервера, ��д�люченн�й � ��ще�у �аршрути�ат�ру или и�еющей ��щее ��д�лючение � Интернету �ред�тва�и W��dows, ��ычн� эт� �видетель�твует �� аварии �ете� в�й линии или DHCP��ервера. y y Е�ли IP�адре� ���а�ан �а� 0.0 .0 .0, �начит, ада�тер �т�лючен. y y Е�ли IP�адре� не ���твет�твует �ети, � ��т�р�й вы ��д�лючены, т�, ���рее в�е��, вы �ере�е�тили ����ьютер и� �дн�й �ети в дру�ую и нуждаете�ь в �ере�а�у��е и ��н�влении �в�е�� IP�адре�а. Ка� эт� делает��, � ���р� ���ажу. Повторное получение автоматически присваиваемых адресов Е�ли ваша �еть и���ль�ует DHCP дл� авт��атиче����� �ри�ваивани� ����ьютера IP�адре��в, вре�ена�и ���ут в��ни�ать �р��ле�ы, �в��анные � те�, чт� авт��а� тиче���е �ри�ваивание не �р�и�х�дит или не �ри�ваивает�� н�вый адре� ���ле �т�лючени� �т �дн�й �ети и ��д�лючени� � дру��й. С ����щью ���анды ipconfig та�а� �р��ле�а решает�� д�в�льн� �ы�тр�, д��тат�чн� лишь на�рать �ледующие ���анды в ��не ���андн�й �тр��и, �т�рыт�� � ра�ширенны�и �ривиле�и��и: ipconfig /release ipconfig /renew
600 Глава 13. Утилиты командной строки ▼) Эти команды зачастую могут восстановить работу отключившегося кабельного модема или ин- тернет-подключения DSL. Изучение и очистка кэш-памяти DNS К��да W��dows д�лжна найти IP�адре� �аданн��� и�ени х��та, �на вре�енн� �а� ���инает ре�ультаты � целью э��н��ии вре�ени �ри у�тан�в�е ���ледующих ��д�лючений � т��у же �а���у ве���айту. Е�ли W��dows не ��жет найти адре� дл� �аданн��� и�ени, эт� та�же вре�енн� �а���инает��, ���ть�та�и дл� э��н��ии вре�ени и нерв�в �ри �удущих ��и��ах. Эта инф�р�аци� хранит�� в та� на�ыва� е��й �эш��а��ти DNS (DNS R�so�v�� C��h��. С�держи��е эт�й �эш��а��ти ��жн� выве�ти � ����щью ���анды ipconfig / displaydns. В�ю инф�р�ацию, хран�щую�� в �эш��а��ти, ��жн� �тереть, в����ль� ��вавши�ь ���анд�й ipconfig /flushdns. Эт� ��жет �ри��дить��, � �ри�еру, �ри ��ене IP�адре��в вашей �р�ани�ации или е�ли ве���айт вре�енн� �ыл �т�лючен �т �ети, а �ате� ��д�лючение �ыл� в���тан�влен�. При �чи�т�е �эш��а��ти DNS удал�ет�� в�� у�таревша� инф�р�аци�. ▼) Эти команды нужно вводить в окне командной строки, открытом с расширенными привиле- гиями. Дру�ие варианты �а�у��а ���анды ipconfig ���в�л�ют �ере�а�у��ать ��луче� ние DHCP�инф�р�ации дл� �тдельных ада�тер�в и �ри�ваивать DHCP��р�т���лу и�� «�ла��а». Д���лнительную инф�р�ацию ��жн� ��лучить, на�рав ���анду ipconfig /?. net К��анда net �ред��тавл�ет р�д ин�тру�ент�в дл� ��нфи�урир�вани� �етевых �т��ражений и ��щих ре�ур��в и ��жет даже д��авл�ть учетные �а�и�и ��ль��ва� телей. Эт� ве�ь�а �транна� ���анда, ���вивша��� в �а��� начале и�т�рии и���ль� ��вани� �етей на PC. У ���анды net и�еют�� 22 ��д���анды. С�и��� этих ���анд ��жн� увидеть ���ле вв�да ���анды net help, а д���лнительную инф�р�ацию �� лю��й �тдельн�й ���анде ��жн� ��лучить, на�рав ���андную �тр��у net help команда, �де команда — �дн� и� и�ен, �еречи�ленных в �ледующих ра�делах. Е�ли на�рать ���анду net /? или net команда /?, вы та�же ��лучите ��рав�у, �равда, �енее детали�ир�ванную. В �ледующих ра�делах � не �тану ��и�ывать в�е 22 ���анды, �ринадлежащие ���анде net. Са�ы�и ��ле�ны�и �вл�ют�� три ���анды: net help, net use и net view. Они и���ль�уют�� �ра�тиче��и ��в�едневн�. Р�д дру�их ���анд ��жет и�� ��ль��вать�� дл� у�равлени� W��dows и учетны�и �а�и���и ��ль��вателей. net continue К��анда net continue в����н�вл�ет ра��ту �и�те�н�й �луж�ы, �ри��тан�вленн�й � ����щью ���анды net pause. К��анда net, ��д��н� ���анде sc, ��жет и���ль� ��вать�� дл� у�равлени� �и�те�ны�и �луж�а�и. Дл� эт�й ���анды и���ль�ует��
Утилиты для работы с сетью 601 �инта��и� net continue "имя_службы", �де имя_службы эт� «�т��ражае��е» и�� �луж�ы. Е�ли в и�ени е�ть �р��елы, е�� нужн� в��ть в �авыч�и. К��анды net continue, net pause, net start и net stop ра��тают т�ль�� на л��альн�� ����ьютере. К��анда sc, ра����тренна� ранее в данн�й �лаве, ��жет ра��тать �а� � л��альны�, та� и � лю�ы� �етевы� ����ьютер��, ��эт��у дл� у�равлени� �луж�а�и � ре���ендую в�е�т� ���анд net и���ль��вать sc. net �le К��анда net file выв�дит и�ена в�ех ��щих файл�в л��альн��� ����ьютера, �т� �рытых на данный ���ент удаленны�и �етевы�и ��ль��вател��и. Ее выв�д и�еет �ледующий вид: Код Путь Пользователь # Блокировок --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- -- 17 c:\book\test1.bat ADMINISTRATOR 0 С�и��� ���а�ывает л��альные и�ена файл�в и ��ль��ватель��их учетных �а� �и�ей, �т и�ени ��т�рых и���ль�ует�� �аждый файл, н� не ����ьютер, � ��т�р��� ��д�лючил�� удаленный ��ль��ватель. Е�ли нужн�, ��жн� �удет �а�рыть файл, �т�рытый удаленны� ��ль��вател��, на�рав ���анду net file id /close, �де id — эт� �дин и� ID�н��ер�в (��д�в�, выв�ди�ых в ��и��е ���анды net �le. Эту ���анду �ледует �ри�ен�ть т�ль�� в т�� �лучае, е�ли вы �наете, чт� удаленный ��ль��ва� тель не нах�дит�� на �в�е� ра��че� �е�те или чт� е�� ����ьютер дал ���й. net help К��анда net help выв�дит ��рав�у дл� лю��й и� ���анд net. Дл� ��лучени� ��л� н��� ��и��а �ад��у�ентир�ванных ���анд нужн� на�рать ���анду net help. net helpmsg К��анда net helpmsg число выв�дит те��т ����щени� �� �ши��е дл� чи�л�в��� ��да �ши��и W��dows. Эти чи�л�вые ��ды выв�д�т�� не��т�ры�и �р��ра��а�и. net localgroup К��анда net localgroup ���дает л��альную �ру��у �е���а�н��ти на л��альн�� ����ьютере. Эта ���анда ра��тает т�ль�� � вер�и��и W��dows, ��н�ванны�и на W��dows NT, н� не на W��dows 9x. Дл� ���дани� и удалени� л��альных �ру�� и���ль�ует�� �ледующий �инта��и�: net localgroup имя_группы [/comment:"text"] /add [/domain] net localgroup имя_группы [/comment:"text"] /delete [/domain] Не����ательный �люч /comment �рив�дит � д��авлению те��т�в��� ��и�а� ни� �ру��ы. Ключ /domain �рив�дит � д��авлению �ру��ы в �аче�тве д��енн�й л��альн�й �ру��ы на те�уще� ��нтр�ллере д��ена, а не на л��альн�й ра��чей �танции. М�жн� удал�ть ��ль��вателей и� �ру��ы и д��авл�ть в нее, и���ль�у� �леду� ющие ���анды: net localgroup имя_группы имя_пользователя ... /add net localgroup имя_группы имя_пользователя ... /delete
602 Глава 13. Утилиты командной строки net pause К��анда net pause вре�енн� �ри��танавливает �и�те�ную �луж�у. Дл� нее и�� ��ль�ует�� �ледующий �инта��и�: net pause "имя_службы" Д���лнительна� инф�р�аци� �� у�равлении �луж�а�и дана в ��и�ании ��� �анды net continue. С�и��� те�ущих �а�ущенных �луж� ��жн� ��лучить, на�рав ���анду net start. net print К��анда net print ���в�л�ет �р���атривать �череди на �ечать и у�равл�ть и�и. Дл� �р����тра �череди на �ечать удаленн��� �ринтера и���ль�ует�� �ледую� щий �инта��и�: net print \\имя_компьютера\общее_имя Эта ���анда выв�дит ��и��� в�ех �жидающих �аданий на �ечать. На�ри�ер, в ��ей �ети ���анда net print \\sumatra\okidata выв�дит �ледующий ��и���: Имя Задание # Размер Состояние --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- okidata Очередь 1 заданий bknittel 109 12380 Ожидание В ��и��е ���а�ан�, чт� е�ть �дн� �жидающее �адание на �ечать, �ереданн�е ����ьютер�� bknittel. Задание и�еет идентифи�аци�нный н��ер 109. Задание на �ечать ��жн� �ри��тан�вить, �н�ть � не�� �ри��тан�в�у или уда� лить, и���ль�у� �ледующую ���анду: net print \\имя_компьютера номер_задания {/hold | /release | /delete} На�ри�ер, net print \\sumatra 109 /delete и� �череди ��е�� �ринтера удал�ет �адание, нах�д�щее�� в ���т��нии �жидани�. К��анда net print не на�т�ль�� ��ле�на, �а� �анель у�равлени� У�тр�й�тва и �ринтеры, н� ее ��жн� и���ль��вать �ри ��д�лючении � ����ьютеру ��д у�рав� ление� W��dows � и���ль��вание� �ред�тва ������, ра��тающе�� в те��т�в�� режи� �е. Е�ли нужн� авт��ати�ир�вать у�равление �адани��и на �ечать, т�, наверн�е, лучше �удет на�и�ать �ценарий, и���ль�ующий ин�тру�ентарий у�равлени� W��dows, ра����тренный в �лаве 7. net send К��анда net send �режде и���ль��вала�ь дл� �т�рав�и ����щений дру�и� ��ль��� вател�� �ети. Считает��, чт� �луж�а ����щений �ред�тавл�ет у�р��у �е���а�н��ти, ��эт��у �ейча� �на �т�лючена �� у��лчанию, и, �лед�вательн�, ���анда net send вышла и� у��тре�лени�. net session К��анда net session выв�дит �ведени� � в�ех ��д�лючени�х дру�их ����ьютер�в � ��щи� файла� и �ринтера� ваше�� ����ьютера. Она �ред�тавл�ет �а�� ��д� �лючение, �� �дн��у дл� �ажд��� удаленн��� ����ьютера, не�ави�и�� �т ��личе�
Утилиты для работы с сетью 603 �тва файл�в, и���ль�уе�ых дру�и�и ����ьютера�и. (Дл� �аданн��� удаленн��� ����ьютера ��� �ы �ыть д���лнительн� выведенный �еан�, е�ли эт�т ����ьютер и���ль�ует ��щее ��д�лючение � Интернету, �ред��тавл�е��е ваши� ����ьюте� р��.� Выв�д ���анды net session и�еет �ледующий вид: Компьютер Пользователь Тип клиента Ожидание открытия --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- -- \\BALI ADMINISTRATOR Windows 2000 2195 1 00:00:00 \\SUMATRA Windows 2000 2195 3 00:00:17 В ��и��е ���а�аны и�ена удаленных ����ьютер�в, ��д�люченных � ваше�у ����ьютеру, и�� удаленн��� ��ль��вател� (е�ли �н� и�ве�тн��, ��ераци�нна� �и�те�а удаленн��� ����ьютера, ��личе�тв� файл�в или �а���, �т�рытых уда� ленны� ��ль��вателе�, и ��личе�тв� вре�ени, �р�шедше�� � ���ента ���ледней а�тивн��ти. У�нать ��льше �� а�тивн��ти �тдельн��� ��д�лючени� ��жн� � ����щью ���анды net session \\имя_компьютера ��т�ра� выв�дит ��и��� ��щих �а��� и �ринтер�в, и���ль�уе�ых в данный ���ент удаленны� ��ль��вателе�. В �лучае ��тр�й не��х�ди���ти удаленн��� ��ль��вател� ��жн� �т�лючить �ринудительн�, на�рав �ледующую ���анду: net session \\имя_компьютера /delete net share К��анда net share выв�дит ��и��� ��щих �а���, �ред��тавл�е�ых ваши� ����ью� тер��, и ���в�л�ет у�равл�ть и�и. О�н�вна� ���анда net share выв�дит ��и��� в�ех ��щих �а���, �ред��тавл�е�ых в данный ���ент ваши� ����ьютер��. К �ри� �еру, на ��е� ����ьютере эт�т ��и��� и�еет �ледующий вид: Общее имя Ресурс Заметки --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- -- IPC$ Удаленный IPC C$ C:\ Стандартный общий ресурс ADMIN$ C:\WINDOWS Удаленный Admin CDROM E:\ Users C:\Userse О�щие ре�ур�ы IPC$, C$ и ADMIN$ у�танавливают�� �и�те��й W��dows дл� ад�ини�тративных целей. П� у��лчанию W��dows 7 и V�s�� делают ��щей �а��у Users, в ��т�р�й ��держат�� в�е �а��и �р�филей ��ль��вателей. (W��dows не ��� �в�л�ет удаленны� ��ль��вател�� видеть даже �а�� �уще�тв�вание �а��� или файл�в, на ��т�рые у них нет �рав на чтение, ��эт��у ри�� �е���а�н��ти �де�ь �т� �ут�твует. Удаленный д��ту� � �ажд�й и� ��щих �а��� и � �ажд��у ��ще�у файлу ��ль��вател� у�равл�ет�� �уте� и��енени� �тандартных у�тан�в�� �е���а�н��ти файла и �а��и.� W��dows XP авт��атиче��и �т�рывает ��щий д��ту� � �а��е Мои документы (My Do�um���s�, �ринадлежащей �а��е Все пользователи (A�� Us��s� �а� � �а��е Общие документы (Sh���dDo�s�. В ��и��е �т��ражают�� та�же и дру�ие �а��и, ��ъ�вленные ��щи�и �вны� ��ра���.
604 Глава 13. Утилиты командной строки Дл� д��авлени� и удалени� ��щих �а��� ��жн� та�же и� ���андн�й �тр��и и���ль��вать ���анду net share. У эт�й ���анды три вер�ии. Перва� вер�и� и�еет �ледующий вид: net share общее_имя=диск:путь [/users:количество | /unlimited] [/remark:текст][/cache:{Manual | Documents | Programs | None}] Она �ревращает �а��у, у�а�анную в эле�енте диск:путь, в ��щую � и�ене� общее_имя. М�жн� д���лнительн� ��раничить ��личе�тв� ��д�лючений � ��щей �а��е, в����ль��вавши�ь �люч�� /users. Дл� �а�и�и те��та ��и�ани� ��жн� в����ль��вать�� �люч�� /remark, а та�же ��жн� у�а�ать, �а� файлы в эт�й �а��е �удут ра���атривать��, е�ли ��ращае�ые � ни� �а�р��ы удаленн��� ��ль��вател� д�лжны �ыть д��ту�ны в режи�е �т�лючени� �т �ети. net share общее_имя [/users:количество | /unlimited] [/remark:текст][/cache:(Manual | Documents | Programs | None)] Эта вер�и� ���анды и��ен�ет ��раничени� �� ��личе�тву ��д�люченных ��ль� ��вателей, те��т ��и�ани�, ��д��а��и �� и���ль��ванию �уще�твующе�� ��ще�� ре�ур�а в �т�люченн�� режи�е. net share (общее_имя | имя_устройства | диск:путь} /delete И ���ледн�� вер�и� эт�й ���анды �ре�ращает ��щее и���ль��вание �а��и или �ринтера. Дл� �ре�ращени� ��ще�� и���ль��вани� �а��и ��жн� у�а�ать ее ��щее и�� или ди�� и �уть, а дл� �ре�ращени� ��ще�� и���ль��вани� �ринтера ��жн� у�а�ать и�� �череди �ринтера. К��анда net share �ред��тавл�ет уд��ный ������ дл� �ревращени� �а��� в ��щие и их ��ратн��� �ревращени�, и ее и���ль��вание ��жет �ан�ть �еньше вре�ени, че� ра��та �� �ред�тва�и �рафиче����� интерфей�а W��dows �xp�o���. net start К��анда net start выв�дит ��и��� а�тивных �луж�. И�ена, выведенные эт�й ��� �анд�й, �вл�ют�� длинны�и «�т��ражае�ы�и» и�ена�и, ��т�рые та�же ��жн� увидеть � ����щью ���анды sc queryex, ра����тренн�й ранее в данн�й �лаве. Н� ���анда net start выв�дит т�ль�� �а�ущенные �луж�ы. Неа�тивную �луж�у ��жн� �а�у�тить � ����щью ���анды net start "имя_ службы". К��анда net start ��жет т�ль�� �а�у��ать �луж�ы на л��альн�� ���� �ьютере. К��анда sc ��лее ��ле�на, �����ль�у �на ��жет та�же �а�у��ать �луж�ы на удаленных ����ьютерах. В ��льшин�тве �лучаев ���анды net start и net stop, ��т�ра� та�же �удет в���ре ра����трена, �ледует �а�у��ать в ��не ���андн�й �тр��и, �т�рыт�� � ра�� ширенны�и �ривиле�и��и. Н� в W��dows XP ��льшин�тв� �луж� ��ычн� ��жет �а�у��ать�� и ��танавливать�� �ри ра��те � учетн�й �а�и�ью ��ытн��� ��ль��ва� тел� (Pow�� Us���. net statistics К��анда net statistics workstation выв�дит инф�р�ацию �� и���ль��вании ва� ши� ����ьютер�� удаленных �етевых ре�ур��в: ��личе�тв� �т�равленных и ��лу� ченных �айт�в, ��щее ��личе�тв� ��ераций чтени� и �а�и�и и �тати�ти�у �ши���.
Утилиты для работы с сетью 605 К��анда net statistics server выв�дит инф�р�ацию �� и���ль��вании дру�и� �и ����ьютера�и ��щих файл�в и �ринтер�в, �ред��тавл�е�ых ваши� ����ью� тер��, в�люча� ��личе�тв� �т�равленных и �рин�тых �айт�в, ��личе�тв� �ши��� �ар�лей и ��личе�тв� �т�рытых файл�в. net stop К��анда net stop "имя_службы" ��танавливает �и�те�ную �луж�у на ваше� ���� �ьютере. Дл� эт��� нужн� у�а�ать длинн�е «�т��ражае��е» и�� �луж�ы, ��т�р�е выв�дит�� ���анд�й sc queryex или ���анд�й net start. ▼▼ Если возникли подозрения насчет чьего-либо несоответствующего обращения с общими фай- лами на вашем компьютере, вы можете немедленно прекратить общее использование файлов, набрав команду net stop server из окна командной строки, открытого с расширенными при- вилегиями. В XP, если вы не являетесь администратором компьютера, нужно набрать runas / user:Administrator "net stop server". net use К��анда net use �вл�ет�� наи��лее важн�й и ��ле�н�й и� ���анд net, �����ль�у �на ���в�л�ет �т��ра�ить и� ���андн�й �тр��и �етевые ди��и и �етевые �ринтеры. П�ль�у и� эт�й ���анды ��жн� и�влечь не т�ль�� �ри не���ред�твенн�й ра��те в ���андн�й �тр��е. Главны� ��ра��� �на �р��вл�ет�� в �а�етных файлах �ри авт��атиче���й ��нфи�урации нужн�й �етев�й �реды �еред те�, �а� �а�етный файл �ри�ту�ит � ���ир�ванию или ра��ечат�е файл�в. Ра����три� наи��лее ��ле�ные вер�ии эт�й ���анды: net use Эта вер�и� ���анды выв�дит ��и��� и�еющих�� на данный ���ент �т��раже� ний в�ех �етевых ди���в и �ринтер�в. Эт� �чень ��ле�на� ���анда, ��т��у чт� �на �ра�у же ���а�ывает, �а�ие �етевые ди��и д��ту�ны и �де �ни нах�д�т��. net use диск:\\компьютер\общее_имя Эта вер�и� ���анды �т��ражает �у�ву ди��а диск на ��щую �етевую �а��у �� и�ени \\компьютер\общее_имя . Эт� �а�а� �р��та� вер�и� ���анды. В �ледующей вер�ии ���а�аны в�е д��ту�ные �лючи. net use диск:\\компьютер\общее_имя [\подкаталог ...] [[пароль]{/user:имя_пользователя | /smartcard}[/savecred]] [/persistent:{yes|no}] Е�ли ���ле ��ще�� и�ени у�а�ан� �дн� или не���ль�� и�ен ��д�атал���в, �т�� �раженный ди�� ра���атривает эти ��д�атал��и в �аче�тве ��рнев��� �атал��а ди��а, и �н не ��жет «увидеть» �атал��и ��лее вы������ ур�вн�. П�ль��вател�� Nov��� N��W��� эт� �в�й�тв� �на���� �а� фун�ци� «m�p �oo�». Ключ /persistent ���в�л�ет у�а�ать, нужн� ли авт��атиче��и в���танавливать �т��ражение ���ле вых�да и� �и�те�ы и в��вращени� в нее. П� у��лчанию �адан� авт��атиче���е в���тан�вление, н� эти у�тан�в�и ��жн� и��енить. П� у��лчанию ��д�лючение � удаленн��у ����ьютеру ��уще�твл�ет�� � и�� ��ль��вание� ваше�� и�ени ��ль��вател� и �ар�л�. Е�ли вы х�тите в����ль��� вать�� дру��й учетн�й �а�и�ью, нужн� д��авить �люч /user или �люч /smartcard.
606 Глава 13. Утилиты командной строки Е�ли у�а�ан� и�� ��ль��вател�, е�� ��жн� вве�ти в лю��� и� �тандартных ф�р�ат�в: имя_пользователя, домен\имя_пользователя или имя _пользователя@ домен. ▼) Вы можете подключиться к данному удаленному компьютеру в данный конкретный момент времени только под одной учетной записью пользователя. Отобразить одну букву диска с ис- пользованием вашей собственной учетной записи, а другую букву диска с использованием другой учетной записи невозможно. У�а�ать �ар�ль дру��й учетн�й �а�и�и ��жн� в ���андн�й �тр��е не���ред� �твенн� �еред �люч�� /user. Н� хранить �ар�ли в �а�етных файлах не�е���а�н�. К �ча�тью, е�ть два ��лее ��дх�д�щих варианта. Е�ли ��у�тить �ар�ль или у�а�ать на е�� �е�те �и�в�л *, ���анда net use �редла�ает вве�ти �ар�ль. М�жн� та�же �а�тавить ���анду net use �редл�жить вве�ти �ар�ль �дн��ратн�, д��авив �люч /savecred, а �ате� �а���нить �ар�ль. net use lptN: \\компьютер\общее_имя [ключи user и persistence] Эта вер�и� ���анды �т��ражает удаленный �етев�й �ринтер на ��рт LPT дл� и���ль��вани� �р��ра��а�и DOS. Е�ли нужн�, вы ��жете �т��ра�ить ��рты �т LPT1 и д� LPT9; н� вы не ��жете �т��ра�ить и�� т��� ��рта LPT, ��т�рый и�� ��ль�ует�� интерфей��� фи�иче����� ��рта на ваше� ����ьютере. Эта вер�и� ���анды ��ддерживает та�ие же альтернативные �лючи /user и /persistent, �а� и ранее ра����тренна� ���анда �т��ражени� ди���в. net use устройство: /del[ete] Эта вер�и� ���анды удал�ет �т��ражение ди��а или �ринтера. В �аче�тве устройства и���ль�ует�� удал�е�а� �у�ва ди��а или ��рт LPT. net use диск: /home Эта вер�и� ���анды �т��ражает �у�ву ди��а на на�наченный дл� вашей учетн�й �а�и�и «д��ашний» �атал��. Она ра��тает т�ль�� т��да, ���да вы в�шли в �и�те�у ��д д��енн�й учетн�й �а�и�ью и ���да �и�те�ный ад�ини�трат�р у�а�ал д��аш� ний �атал�� дл� вашей учетн�й �а�и�и. Эта ���анда ��жет �ри��дить�� в �а�етных файлах и в �ценари�х вх�да в �и�те�у. Ка� уже ранее у���инал��ь, �а�а ���анда net use выв�дит в�е �етевые �т��ра� жени�. С�и��� и�еет �ледующий вид: Состояние Локальный Удаленный Сеть --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- -- OK K: \\sumatra\cdrive Microsoft Windows Network OK LPT1 \\sumatra\okidata Microsoft Windows Network Зде�ь ���а�ан�, чт� ди�� K: �т��ражен на ��щую �а��у \\sumatra\cdrive и DOS� �ринтер LPT1 �т��ражен на \\sumatra\okidata. Ст�л�ец Состояние ���а�ывает, чт� ��д�лючени� � ����ьютеру \\sumatra в данный ���ент а�тивны. М�жн� увидеть, �а� в �т�л�це Состояние ���вит�� �л�в� Отсоединен �ра�у ���ле вх�да в �и�те�у или чере� 20 �инут, или в лю��� дру��� �лучае неа�тивн��ти, н� ��ычн� эт� не �вл�ет�� �ри�на��� �р��ле�ы. W��dows в���танавливает ��д�лючение авт��атиче��и, ���да вы �ытаете�ь в����ль��вать�� ди���� или �ринтер��.
Утилиты для работы с сетью 607 Я �а�етил, чт� ���анда net use чаще в�е�� и���ль�ует�� �ри ���дании �а�етных файл�в дл� авт��атиче����� ре�ервн��� ���ир�вани� и дл� и���ль��вани� �ете� вых �рил�жений. Ра����три� �дин и� и���ль�уе�ых �н�ю �а�етных файл�в дл� ре�ервн��� ���ир�вани�: @rem Файл примера batch1301.bat @echo off net use z: /del >nul 2>nul net use z: \\bali\backups if errorlevel 1 ( echo Сетевой диск недоступен exit /b 1 ) xcopy "%userprofile%\Documents" "z:\%username%" /H/K/R/E/D/I/Z/C if errorlevel 1 ( echo При резервном копировании возникли ошибки exit /b 1 ) net use z: /del Перва� и���ль�уе�а� в эт�й �р��ра��е ���анда net use удал�ет в�е �уще� �твующие �т��ражени� дл� ди��а Z:. П����ль�у те�ущие �т��ражени� ���ут �т�ут�тв�вать, и �, в та��� �лучае, не х�чу видеть ����щение �� �ши��е, ��т��и �тандартн��� выв�да и �тандартн�й �ши��и �ерена�равлены в файл «�u��», ��� эт��у выв�д �р��т� и�че�ает. Вт�ра� ���анда net use �т��ражает ди�� Z: на �а��у ре�ервн��� ���ир�вани� на ��е� файл�в�� �ервере. Зате� ���анда xcopy ���ирует ��держи��е �а��и До- кументы (Do�um���s� в ��й ����твенный �ер��нальный ��д�атал�� на файл�в�� �ервере. Пере�енные �реды ��ружени� %userprofile% и %username% ���в�л�ют лю���у ��ль��вателю ��ей �ети и���ль��вать эт�т же �а�ый �а�етный файл. Файл �авершает�� удаление� �т��ражени� ди��а, чт� �вл�ет�� ча�тью ��щей �ра�ти�и �равильн��� ведени� ����ьютерн��� х���й�тва. ▼) В Windows XP вместо имени папки Документы (Documents) я использую имя папки Мои доку- менты (My Documents). Е�ть еще три д���лнительные вер�ии ���анды net use, ��т�рые, �а� � ��ни�аю, �ра�тиче��и не и���ль�уют��. Ра����три� �ервую вер�ию: net use \\компьютер\общее_имя[\подкаталог...] [[{пароль | *}} {/user:имя_пользователя | /smartcard} [/savecred]] [/persistent:{yes|no}] Эта вер�и� ���анды у�танавливает ��д�лючение � ��щей �а��е �е� �т��ра� жени� на �у�ву ди��а. Эт� у���р�ет д��ту�, е�ли ���же в W��dows �xp�o��� или дру�их �рил�жени�х вы ��д�лючите�ь � ��щей �а��е, и���ль�у� и�� в ф�р�ате UNC (\\компьютер\общее_имя�. net use \\компьютер\общее_имя /delete Эта вер�и� ���анды �т�лючает ��щую �а��у, ��д�люченную �е� �у�вы ди��а. net use /persistent:{yes | no}
608 Глава 13. Утилиты командной строки Эта вер�и� ���анды у�танавливает на�тр�й�и �� у��лчанию дл� �в�й�тва ��� �т��н�тва (p��s�s����� в yes или no. Эта на�тр�й�а �� у��лчанию �ри�ен�ет�� �ри �ледующих вв�дах ���анд net use �е� у�а�ани� �люча /persistent. В ��льшин�тве �лучаев и���ль�уют�� ��н�вные вер�ии ���анды net use. net user Бе� �лючей ���анда net user выв�дит ��и��� в�ех л��альных учетных �а�и�ей ��ль��вателей, и�еющих�� на ����ьютере. К��анда net user имя_пользователя выв�дит инф�р�ацию �� у�а�анн�й учетн�й �а�и�и ��ль��вател�, в�люча� дату ���ледне�� вх�да, ��лн�е и�� ��ль��вател�, ��раничени� �� вре�ени и �� ра��чи� �танци��, �атал�� �р�фил� и ��н�вн�й �атал�� ��ль��вател�, на�тр�й�и �ценари� вх�да в �и�те�у и член�тв� в �ру��ах. К��анд�й net user ��жн� та�же в����ль��вать�� дл� ���дани� учетных �а�и�ей и у�равлени� и�и. Зде�ь е�ть не���ль�� вариант�в. В�т �ервый и� них: net user имя_пользователя [пароль] /add ключи [/домен] Эта вер�и� ���анды ���дает учетную �а�и�ь ��ль��вател� � у�а�анны� и�ене� ��ль��вател�. Е�ли ��у�тить �ар�ль, учетна� �а�и�ь ���дает�� �е� �ар�л�. Пар�ль учетн�й �а�и�и ��жн� у�тан�вить в ���андн�й �тр��е или же ��жн� у�а�ать �и�в�л *, ��т�рый �а�тавит ���анду net user �редл�жить ��ль��вателю вве�ти �ар�ль н�в�й учетн�й �а�и�и. Ключ /domain д��авл�ет учетную �а�и�ь в �аче�тве д��енн�й, а не л��альн�й учетн�й �а�и�и. На эт�� � �авершаю ра����трение ���анды net user. О�тал��ь т�ль�� �а�етить, чт� эта ���анда �ри��дит��, е�ли нужн� на�тр�ить �ра�у не���ль�� учетных �а� �и�ей ��ль��вателей на не���ль�их �ашинах. На�ри�ер, вы ��жете на�и�ать �а� �етный файл дл� ���дани� учетных �а�и�ей ��ль��вателей дл� �ла��а в ��лледже, и���ль�у� �р��ра��у, ��х�жую на эту: @rem Файл примера mkaccount.bat @echo off rem -------------------------------------------- rem Создание учетной записи студента rem Командная строка должна обязательно содержать название класса, rem имя пользователя и пароль rem -------------------------------------------- if"%3"==""( echo Порядок использования: mkaccount имя_класса имя_пользователя пароль exit /b ) rem -------------------------------------------- rem Попытка создания учетной записи. Во всем этом rem пакетном файле %1 – название класса (например, CS101), rem %2 – новое имя для входа в систему (например, asmith), а rem %3 – это первоначальный пароль (например, xyz123) rem -------------------------------------------- net user "%2" "%3" /add /passwordreq:yes /domain
Утилиты для работы с сетью 609 if errorlevel 1 ( echo Ошибка создания учетной записи %2 pause exit /b ) rem -------------------------------------------- rem Добавление нового пользователя в группу класса rem и в группу студентов (students) rem -------------------------------------------- net group "%1" "%2" /add net group students "%2" /add rem -------------------------------------------- rem Создание папки профиля пользователя и предоставление rem полных прав доступа новой учетной записи студента. Учитель rem уже имеет полные права на доступ к папке rem \classes\имя_класса, поэтому она или он унаследует права rem на каталог студента. rem Чтобы перемещающийся профиль работал, группа "students" rem должна иметь разрешения на папку класса, но эти rem разрешения не должны применяться к подкаталогам. rem -------------------------------------------- mkdir "d:\home\classes\%1\%2" cacls "d:\home\classes\%1\%2" /E /G "%2:F" rem -------------------------------------------- rem Назначение папки профиля с использованием сетевого пути rem \\server\classes для папки d:\home\classes rem -------------------------------------------- net user "%2" /profilepath: "\\server\classes\%1\%2" /domain В эт�� �а�етн�� файле ���анда net user и���ль�ует�� дл� ���дани� учетн�й �а�и�и �тудента, д��авлени� учетн�й �а�и�и � д��енны� �ру��а� �ла��а и в�ех �тудент�в, ���дани� �а��и �р�фил� учетн�й �а�и�и, �ред��тавлени� н�в�й учет� н�й �а�и�и ��лных �рав д��ту�а � ее �р�филю, а �ате� на�начени� �а��и �р�фи� л� учетн�й �а�и�и. Эт�т �а�етный файл ��жет �ыть вы�ван и� �а�етн��� файла, в ��т�р�� ��держит�� �еречень �ла��а. На�ри�ер: @echo off call mkaccount CS101 abaker DK@$g931xC call mkaccount CS101 bsmith OXD2ba-12# call mkaccount CS101 cfong PXc43L$*Qf ... net view К��анда net view выв�дит ��и��� нах�д�щих�� в �ети ����ьютер�в, види�ых данн��у ����ьютеру (т� е�ть �н ��жет ���а�ать «Сетев�е ��ружение»�, а та�же �на ��жет выве�ти ��и��� ��щих �а��� и �ринтер�в, д��ту�ных на удаленн�� ����ьютере. П�эт��у ���анда net view �чень ��ле�на �ри �тлад�е �р��ле� ра��ты в �ети W��dows.
610 Глава 13. Утилиты командной строки К��анда net view �е� ар�у�ент�в выв�дит ��и��� и�ве�тных а�тивных ����ьюте� р�в в те�ущей ра��чей �ру��е или д��ене. Эт�т ��и��� ��жет и�еть �ледующий вид: Имя сервера Заметки --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- \\BALI Наш скромный файловый сервер \\JAVA Рабочая станция Брайана Дл� выв�да ��и��а в�ех и�ве�тных д��ен�в и ра��чих �ру�� в те�ущей �ети ��жн� д��авить �люч /domain, а дл� выв�да ��и��а ����ьютер�в в у�а�анн�� д�� �ене или ра��чей �ру��е нужн� д��авить �лючи /domain:имя_домена. К��анда net view \\имя_компьютера выв�дит ��и��� �а��� и �ринтер�в, �в� л�ющих�� ��щи�и на у�а�анн�� ����ьютере. Эт�т ��и��� и�еет �ледующий вид: Общие ресурсы на \\bali Имя общего ресурса Тип Используется как Комментарий --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- - cdrive Диск faxes Диск F: Laserjet Принтер Два лотка temp Диск X: Эт� х�р�ший ������ ��лучить �рат�ий ��и��� �етевых ре�ур��в, ��т�ры�и ��жн� в����ль��вать�� � ����щью ���анды net use. Те эле�енты, у ��т�рых в �т�л�це «И���ль�ует�� �а�» у�а�ана �у�ва ди��а, уже �т��ражены. Д��авление �люча /cache ���ле и�ени ����ьютера (на�ри�ер, net view \\bali /cache� ���в�л�ет �р����треть на�тр�й�и авт�н��н��� �эшир�вани� файл�в дл� на��ра ��щих �а���. В эт�� �лучае ��держи��е �т�л�ца «К���ентарии» �а�ен�� ет�� на�тр�й�а�и �эшир�вани� файл�в дл� �ажд�й ��щей �а��и. Эт� �ри�ени�� т�ль�� � ��щи� �а��а�, �ред��тавл�е�ы� W��dows XP P�o��ss�o���, W��dows 2000 P�o и S��v�� и W��dows .N�T s��v��. И на��нец, е�ли в вашей �ети е�ть файл�вые �ерверы Nov��� N��W���, две д�� ��лнительные ф�р�ы ���анды net use ���в�л�ют �р����треть ��и��� д��ту�ных �ервер�в N��W��� и ��щих ре�ур��в �ервер�в: net view /network:nw net view /network:nw \\имя_сервера netstat К��анда netstat выв�дит ��и��� ���т��ни� ��д�и�те� �р�т���ла TCP�IP ваше�� ����ьютера. В ��н�вн�� �на и���ль�ует�� дл� выв�да ��и��а и�ен удаленных ����ьютер�в, � ��т�ры� ��д�лючен ваш ����ьютер. Перечи�ленные ��д�лючени� ���а�ывают, чт� ваш ����ьютер и���ль�ует ре�ур�ы, �ред��тавл�е�ые дру�и� ���� �ьютер��, ли�� чт� дру��й ����ьютер ��д�лючен � ваше�у ����ьютеру. К��анда netstat ��жет выве�ти ��и��� TCP� и UDP���рт�в, �т�рытых ваши� ����ьютер�� дл� �т�леживани� их ���т��ни�. В та�их ��и��ах ���а�ывают�� �луж�ы, ��т�рые �ред��тавл�ют�� ваши� ����ьютер�� �ети или Интернету. К��анда netstat ��жет та�же выве�ти �тати�тиче��ие данные � трафи�е и �ши��ах �ети TCP�IP. П�лный �инта��и� ��жн� увидеть, на�рав ���анду netstat /?. Наи��лее ��� ле�ные �лючи �удут ��и�аны в �ледующе� ра�деле.
Утилиты для работы с сетью 611 Вывод списка активных подключений К��анда netstat �е� �лючей выв�дит в�е те�ущие TCP��в��и �ежду ваши� и дру�и�и ����ьютера�и. П� у��лчанию ���анда netstat �ытает�� �ревращать IP�адре�а удаленных ����ьютер�в в и�ена. Эт� ��жет �ан�ть не�ал� вре�ени, ��эт��у, чт��ы ��лучить �ы�трую чи�л�вую ра��ечат�у, ��жн� д��авить �люч –n . Та�лица ��д�лючений ��жет и�еть �ледующий вид: Имя Локальный адрес Внешний адрес Состояние TCP java:4273 sumatra.mycompany.com:microsoft-ds ESTABLISHED TCP java:4319 bali.mycompany.com:netbios-ssn ESTABLISHED TCP java:netbios-ssn sumatra.mycompany.com:2430 ESTABLISHED TCP java:4564 msgr-cs122.msgr.hotmail.com:1863 ESTABLISHED Кажда� �тр��а �ред�тавл�ет �дн� ��д�лючение. Ст�л�цы «Л��альный адре�» и «Внешний адре�» ���а�ывают и�ена ��д�люченных ����ьютер�в и н��ер ��рта или и�� ��д�лючени�. П�рт ���а�ывает ти� �етев�й �луж�ы: http или 80 ���а�ы� вает ��д�лючение ве���луж�ы, н��ера �т 137 д� 139 или и�� netbios-x ���а�ывают �луж�у ��щих файл�в W��dows и т. д . Ин��да �� н��ера� ��рт�в ��жн� ��ределить, �а��й и� ����ьютер�в — ваш или удаленный — �ред��тавл�ет �луж�у и �а��й и� ����ьютер�в �вл�ет�� �ли� ент�� или ��тре�ителе� �луж�ы. В ��льшин�тве �лучаев на �ерверн�й �т�р�не TCP���д�лючени� и���ль�ует�� н��ер ��рта ниже 1024, а на �лиент���й �т�р�не и���ль�ует�� н��ер ��рта выше 1024. Н� �ывают и и��лючени�, �����ль�у не� ��т�рые �луж�ы и���ль�уют на �ерверн�й �т�р�не ��лее вы���ие н��ера ��рт�в. На�ри�ер, TCP���рт 33�9 и���ль�ует�� �луж�а�и удаленн��� тер�инала M���oso�� и удаленны� ра��чи� �т�л��, ��рт 5190 и���ль�ует�� �луж��й ��н�венных ��� ��щений AOL, а ��рт 1�63 и���ль�ует�� M���oso�� M�ss��g��. В та�их �луча�х т�т ��нечный �ун�т ��д�лючени�, ��т�рый и���ль�ует «�тандартный» н��ер ��рта, �вл�ет�� �ерверн�й �т�р�н�й. В �редыдуще� �ри�ере ли�тин�а ���а�ан�, чт� л��альный ����ьютер �� и�ени Java и���ль�ует ��щие файлы �а� на Sumatra, та� и на Bali, �����ль�у у не�� е�ть ��д�лючени� � ��рта� �еан�а N���IOS (���b�os�ss�� этих ����ьютер�в. К���ьютер Bali, в �в�ю �чередь, и���ль�ует ��щие файлы на Java, ��т��у чт� у не�� е�ть ��д� �лючение � N���IOS���рту ����ьютера Java. И на��нец, у ����ьютера Java е�ть ��д�лючение � �луж�е M���oso�� M�ss��g��. ▼▼ Список «общеизвестных» портов находится в файле \windows\system32\drivers\etc\services. Если нужно, чтобы команда netstat могла выводить имена дополнительных сетевых служб, список в этом файле можно дополнить. Для начала добавьте в конец файла служб вашего компьютера следующие записи: msmsgs 1863/tcp #Microsoft Messenger tsc 3389/tcp #Microsoft Remote Desktop Services aim 5190/tcp #AOL Instant Messenger pcaw-ssn 5631/tcp #PC Anywhere session pcaw-scan 5632/udp #PC Anywhere server discovery В Windows 7 и Vista файл служб можно редактировать только из окна командной строки, откры- того с расширенными привилегиями. В XP нужно войти в систему с правами администратора или воспользоваться окном командной строки, открытым с правами администратора.
612 Глава 13. Утилиты командной строки Ст�л�ец «С��т��ние» ���а�ывает ���т��ние ��д�лючени� и ��ычн� и�еет �дн� и� �ледующих �начений. Состояние Означает LISTEN Ваш ����ьютер �жидает вх�д�щих ��д�лючений � данн��у ��рту SYN_SEND Ваш ����ьютер �ытает�� �т�рыть эт� ��д�лючение. Дру��й ����ьютер еще не �т�ли�нул�� ESTABLISHED Эт� ��д�лючение �вл�ет�� а�тивны� FIN_WAIT_1 или 2 П�д�лючение �а�рывает�� CLOSE_WAIT П�д�лючение уже �а�рыт�. Эта �а�и�ь ���вл�ет�� ненад�л�� Вывод списка открытых портов (серверов) П�лный ��и��� ��рт�в, �� ��т�ры� �т�ывает�� ваш ����ьютер, ��жн� ��лу� чить � ����щью ���анды netstat -a . Эта ���анда д��авл�ет � ��и��у в�е ��рты, не уча�твующие в данный ���ент в ��д�лючени�х, н� �т�леживае�ые ваши� ����ьютер��. Каждый и� них ��тенциальн� у�а�ывает на �луж�у, �ред��тавл�е� �ую ваши� ����ьютер�� дру�и�, нах�д�щи��� в �ети ����ьютера� или Интер� нету в цел��, е�ли у ва� не у�тан�влен� ни�а��й �и�те�ы �етев�й �ащиты. С�и��� ��рт�в, выв�ди�ых W��dows XP, �лиш��� длинный, и ��льшин�тв� н��ер�в ��рт�в не �вл�ют�� �тандартны�и н��ера�и, �в��анны�и � х�р�ш� и�ве�тны�и �луж�а�и. Е�ли д��авить �люч –o, ���анда netstat д���лнительн� выведет PID�н��ер �р��ра��ы, ��т�ра� �т�рыла �аждый ��рт. Эту инф�р�ацию ��жн� ��ъединить � выв�д�� ���анды tasklist, чт��ы ��ределить, �а�а� �р��ра��а �в��ана � �ажды� ��д�люченны� или �жидающи� ��рт��. В�е�т� эт��� ��жн� в����ль��вать�� �люч�� -b, и �р��ра��а netstat выведет и�� и���лн�е���� файла �т�леживающей ��рт �р��ра��ы. Статистика отслеживания Ключи -e, -s и -p ���в�л�ют выв�дить �у��арную �тати�ти�у ��h�����, а та�же �тати�ти�у �� �ажд��у �р�т���лу. О�и�ани� этих �лючей ��жн� найти в инте� ра�тивн�й ��рав�е. Постоянный мониторинг Чт��ы ���анда netstat ��вт�р�ла �в�й выв�д �аждые n �е�унд, в ��нце ���андн�й �тр��и эт�й ���анды ��жн� ���тавить чи�л� (n�. Эт� ���в�лит на�людать �а �т� �рывае�ы�и и �а�рывае�ы�и ��д�лючени��и в �р�це��е �тлад�и или �ледить �а и��ен�е��й � течение� вре�ени �тати�ти��й. nslookup Пр��ра��а nslookup �вл�ет�� �ред�тв�� �т�рав�и интера�тивных �а�р���в DNS� �ервера�. Она ���в�л�ет и��ать IP�адре�а �� �аданны� и�ена� х��т�в, и на���р�т,
Утилиты для работы с сетью 613 и ��жет та�же ����чь ����нать интернет��л�у�ышленни��в — ��а�ер�в и в�л��� щи��в. ▼) nslookup является довольно сложной программой, ее описанию можно посвятить целую главу. Центр справки и поддержки содержит достаточно подробную информацию о всех ее командах, но не может при этом служить в качестве учебника. В эт�й �лаве нед��тат�чн� �е�та дл� ��и�ани� в�ех ���анд �р��ра��ы �s�ookup, н� � да� ��и�ание не���ль�их �ра�тиче��их �ри�енений, чт��ы �р�де��н�трир�� вать ее в����жн��ти. Определение IP-адреса по заданному имени хоста Чт��ы найти IP�адре� дл� �аданн��� и�ени х��та DNS, �ледует на�рать ���анду nslookup имя_хоста . Е�ли х��т�� �вл�ет�� ваш и�х�дный д��ен, т� и�� д��ена и� ���анды ��жн� и��лючить. В �р�тивн�� �лучае лучше у�а�ать ��лн�е и�� д��ена и в ��нце д��авить т�ч�у. На�ри�ер, ���анда nslookup www.microsoft.com. �риведет � выв�ду �ледующе�� те��та: Сервер: sumatra.mycompany.com Address: 192.168.0.2 Не заслуживающий доверия ответ: Имя: www.microsoft.akadns.net Addresses: 207.46 .230.218, 207.46.197.100, 207.46.197 .113, 207.46 .230.219 Aliases: www.microsoft.com В �тр��е «Сервер» у�а�ан DNS��ервер, давший �твет; в данн�� �лучае эт� �дин и� �ервер�в в ��ей �ети. За��л�в�� «Не �а�луживающий д�вери� �твет» �видетель�твует � т��, чт� на ��е� DNS��ервере уже нах�дила�ь ��д ру��й �а� �р�шенна� инф�р�аци�, ��тавша��� � �редыдуще�� ��и��а, ��эт��у е�у не �ри� шл��ь не���ред�твенн� в�ту�ать в ��нта�т � ��н�вны� DNS��ервер�� M���oso�� или � �ервер��, �а�луживающи� д�верие. И на��нец, nslookup выв�дит варианты и� не���ль�их IP�адре��в дл� эт��� ве���айта. Вы ��жете вы�рать лю��й и� них на �в�е у���трение. Определение имени хоста по заданному IP-адресу DNS��и�те�а Интернета �ред��тавл�ет ��ратный ��и���вый �ехани��, ��� �в�л�ющий нах�дить и��, �в��анн�е � IP�адре���. М�жн� на�рать nslookup 207.46.230 .218, и nslookup выведет �ледующую инф�р�ацию: Сервер: sumatra.mycompany.com Address: 192.168.0.2 Имя: microsoft.com Address: 207.46.230.218 Она ���а�ывает, чт� �тандартны� или каноническим и�ене� дл� эт��� IP�адре�а �вл�ет�� microsoft.com. Дру�ие и�ена х��та ���ли �ы та�же в��вратить эт�т IP�адре� (ранее �ыл� ���а�ан�, чт� www.microsoft.com �вл�ет�� �дни� и� них�, н� эт� и�� �вл�ет�� ��н�вны�. К���ании неред�� у�танавливают не���ль�� и�ен, та�их �а�
614 Глава 13. Утилиты командной строки mycompany.com, ftp.mycompany.com, www.mycompany.com и mail.mycompany.com, и в�е �ни у�а�ывают на �дин и т�т же IP�адре�. Эта в����жн��ть ��ратн��� ��и��а ��жет �ри��дить�� дл� идентифи�ации и�т�чни�а ра��ыл�и ��а�а. Е�ли вы ���жете ��ределить и�� т��� ����ьютера, �т�уда и�х�дит ��а�, т� � �л�у�ышленни�е ��жн� �удет ����щить не�уще�у �а не�� �твет�твенн��ть �р�вайдеру у�лу� Интернета и д��ить�� �а�рыти� учетн�й �а�и�и. Х�т� ��а�еры в�е�да и���ль�уют фальшив�е и�� ����ьютера и ��ратные адре�а �в�их ��чт�вых ����щений, IP�адре�а в �тр��ах «П�лучен�:» не л�ут и ��� �а�ывают и�х�дн��� �т�равител�. Н� �н��ие интернет��р�вайдеры и ����ании не �ред��тавл�ют инф�р�ацию дл� ��ратн��� ��и��а, ��эт��у ���анда nslookup не ��жет ����щить ва� д��енн�е и�� не��т�рых IP�адре��в. И в�е же ���анда nslookup ��жет �ыть ��ле�н�й �ри ведении ��и��а инф�р�ации � начале ��ны — S���� o� Au�ho���y. Исследование информации о начале зоны К��да нев����жн� ��ределить и�� х��та и д��ена ��н�ретн��� IP�адре�а, должна �ыть в����жн��ть ��ределени� � ����щью д���лнительных �а�р���в nslookup и�ени ����ании, владеющей IP�адре���. Дл� эт��� �ы не ��же� в����ль��вать� �� �р��ты� интерфей��� ���андн�й �тр��и и вынуждены �а�у��ать �р��ра��у nslookup �е� �лючей. В эт�� режи�е �на выдает �ри�лашени� на вв�д ���анд на �в�е� ����твенн�� ��ы�е �а�р���в. П�и�� инф�р�ации � начале ��ны ра��тает �ледующи� ��ра���: IP�адре�а и�еют и�ве�тный ф�р�ат aaa. bbb. ccc . ddd (четыре �ру��ы н��ер�в �ежду 1 и 255 — на�ри�ер, 63.194.114 .254�. Е�ли nslookup не ��жет найти и�� дл� адре�а aaa.bbb .ccc.ddd, �на, �� �райней �ере, ��жет ��ределить, �а�а� ����ани� �твечает �а �л�� в�ех адре��в, начинающих�� � aaa.bbb .i . Чт��ы �р�верить эт�, на�ерите �ледующие ���анды: nslookup set type=any ccc.bbb.aaa.in-addr.arpa. Введите три на��ра чи�ел в ��ратн�� ��р�д�е, �т ���ледне�� � �ерв��у, и ��� �тавьте ���ле них in-addr.arpa. Дл� и��лед�вани� �л��а, ��держаще�� адре� 63.194.114.254, нужн� на�рать 114.194.63.in-addr.arpa. Е�ли в�е ��лучит��, nslookup выведет чт��ли�� ��х�жее: 114.194.63.in-addr.arpa nameserver = ns1.pbi.net 114.194.63.in-addr.arpa nameserver = ns2.pbi.net 114.194.63.in-addr.arpa primary name server = ns1.pbi .net responsible mail addr = postmaster.pbi .net serial = 200203060 refresh = 3600 (1 hour) retry = 900 (15 mins) expire = 604800 (7 days) default TTL = 3600 (1 hour) ns1.pbi.net internet address = 206.13.28.11 ns2.pbi.net internet address = 206.13.29.11
Утилиты для работы с сетью 615 Зде�ь ���а�ан� и�� DNS��ервера, �твет�твенн��� �а эт�т �л�� IP�адре��в, и �ри� �ре�ленн�е и�� д��ена д�лжн� ����щить ва� �� и�ени ����ании, владеющей IP�адре�а�и, или �� интернет��р�вайдере, у�равл�юще� и�и. Е�ли �ре�ледует�� ��а�ер или в�л��щи�, эта инф�р�аци� д�лжна у�а�ать ва� �равильн�е на�равление дл� ����щени� � �р��ле�е или ��лучени� д���лни� тельн�й инф�р�ации. М�жн� ���ытать�� наладить ��нта�т �� ��чт�в��у адре�у �твет�твенн�й �р�ани�ации — "responsible mail address", выведенн��у ���анд�й nslookup. П��тавьте в�е�т� �ерв�й т�ч�и �на� «��» (@�, и вы ��лучите в данн�� �ри�ере ��чт�вый адре� postmaster@pbi.net. Н� в ��льших ����ани�х эт�т адре� эле�тр�нн�й ��чты, в����жн�, не �т�лежи� вает��. Т��да, ��жет �ыть, лучше �удет ���р���вать abuse@имя_домена. Е�ли nslookup не ��жет найти инф�р�ацию �� IP�адре�ах, ��жн� ���ытать�� на�рать �ледующую ���анду: bbb.aaa.in-addr.arpa. Н� е�ли даже эт� и да�т �а�ую�т� инф�р�ацию, �твет�твенн�й �т�р�н�й, ���рее в�е��, �удет наци�нальный интернет��р�вайдер верхне�� ур�вн�, ��т�рый вр�д ли �удет �аинтере��ван в ��а�ании ��дей�тви�. Чт��ы выйти и� режи�а �ри�лашени� на вв�д ���анды, нужн� на�рать exit. Тестирование DNS-сервера Режи� �ри�лашени� на вв�д ���анды nslookup ��жн� и���ль��вать дл� те�тир�� вани� ��н�ретн��� DNS��ервера. Эт� те�тир�вание ��жет ��тре��вать�� ���ле на� �тр�й�и �ервера вашей �р�ани�ации. Дл� эт��� нужн� на�рать �ледующие ���анды: nslookup server имя_хоста или ip-адрес Зде�ь имя_хоста или ip­адрес — эт� и�� или адре� те�тируе���� �ервера. Зате�, �� �ере т��� �а� nslookup �удет �р�д�лжать выв�дить �ри�лашение на вв�д, вв�ди� те и�ена х��т�в или IP�адре�а. К��анда nslookup �т�равл�ет �а�р��ы у�а�анн��у �ерверу, ��т�рый д�лжен �рин�ть �� ни� решение. П��ле �авершени� эт�й ра��ты �ледует на�рать ���анду exit. ping Эт� ве�ь�а ��чтенн�е �ред�тв� �т�равл�ет не��льшие �а�еты данных на у�а�анный целев�й ����ьютер или на �етев�й �аршрути�ат�р, ��т�рый, �ред��л�жительн�, �т�равл�ет их ��ратн�. К��анда ping выдает �р�цент �а�ет�в � данны�и, ��� вершивших удачн�е �утеше�твие туда и ��ратн�. Та�и� ��ра��� эта ���анда ��� �в�л�ет у�нать, ра��тает ли целев�й ����ьютер и в�е интернет���единение �ежду ваши� и эти� ����ьютер��. На�ри�ер, �ри на��ре ���анды ping www.berkeley. edu � ��лучаю �ледующий выв�д: Обмен пакетами с arachne.berkeley.edu [169.229.131.109] с 32 байтами данных: Ответ от 169.229.131.109: число байт=32 время=22мс TTL=242 Ответ от 169.229.131.109: число байт=32 время=21мс TTL=242 Ответ от 169.229.131.109: число байт=32 время=22мс TTL=242 Ответ от 169.229.131.109: число байт=32 время=20мс TTL=242
616 Глава 13. Утилиты командной строки Статистика Ping для 169.229 .131.109: Пакетов: отправлено = 4, получено = 4, потеряно = 0 (0% потерь) Приблизительное время приема-передачи в мс: Минимальное = 20 мс, Максимальное = 22 мс, Среднее = 21 мс (Зде�ь �ы ���ть и�ее� дел� � �ан�ниче��и� и�ене�; ���анда ping ищет IP� адре� дл� на�ранн��� и�ени, а �ате� ищет �ан�ниче���е и�� дл� эт��� адре�а. П�� эт��у в ли�тин�е фи�урирует и�� arachne.berkeley.edu, а не www.berkeley.edu.� М�жн� увидеть, чт� в�е четыре те�т�вых ��ра�ца, �т�равленных ���анд�й ping, вернули�ь на�ад. Кажд�е �утеше�твие туда и ��ратн� �ан�л� ���л� 20 ��. Е�ли �еть те�тирует�� на у�т�йчив��ть �анала, ���анде ping ��жет �ри��дить�� �люч -t . К��анда ping -t те�тирует �етев�е ��д�лючение не четыре ра�а, а ���т��н� н�, ���в�л�� ра���рать�� � �етевы�и �анала�и и ��нцентрат�ра�и. Пр��ледите �а �и�ание� ��нтр�льных инди�ат�р�в, ���а�ывающих �утеше�твие �т�равл�е�ых ���анд�й ping �а�ет�в � данны�и. ▼▼ При попытке диагностировать ненадежное интернет-подключение начните с тестового опроса IP-адреса шлюза вашего компьютера и IP-адреса его DHCP-сервера. Соответствующие числа этих адресов вам может дать программа ipcon�g. Этот тест покажет, способен ли компьютер поддерживать связь со своим ближайшим соседом. Если ping-тест закончится неудачно, значит, проблема кроется в вашем сетевом или модемном подключении, а Интернет здесь ни при чем. К��анда ping ���в�л�ет у�а�ать ра��ер �т�равл�е�ых ею �а�ет�в данных. Я ��наружил, чт� неу�т�йчив�е DSL���д�лючение � Интернету ��жет ин��да �ередавать ��р�т�ие �а�еты �е� �а�их�ли�� �р��ле�, н� �ри эт�� в���ще не в ��� �т��нии �т�равл�ть длинные �а�еты. П����ль�у ���анда ping �т�равл�ет не��ль� шие 32��айт�вые �а�еты �� у��лчанию, ��жет ���а�ать��, чт� DSL���д�лючение ра��тает. К��да �р�х�дит p��g�те�т ве���айта, а I������� �xp�o��� � не�у не ��жет ��д�лючить��, в��ни�ает ве�ь�а �а�утанна� �итуаци�. Д��авление �люча -s 800 �а�тавл�ет ���анду ping �т�равл�ть �00��айт�вые �а�еты. Е�ли вы ���т��нн� �а�ечаете, чт� не��льшие �а�еты �р�х�д�т чере� ваше интернет���д�лючение, а ��льшие не �р�х�д�т, �р��ле�а ��жет �ыть в �анале �ежду ваши� DSL���де��� и центральны� �фи��� телеф�нн�й ����ании. ▼) Многие интернет-хосты не возвращают ping-пакеты. Даже не пытайтесь провести ping-тест www.microsoft.com или www.intel.com. Они не ответят. Если вы пытаетесь определить работо- способность своего интернет-подключения, попробуйте провести ping-тест одного из почтовых или DNS-серверов вашего интернет-провайдера, они, скорее всего, ответят. tracert Интернет ���т�ит и� ��тен ты��ч ����ьютер�в и �етевых �аршрути�ат�р�в, ��д� �люченных дру� � дру�у � ����щью инф�р�аци�нных ��единений ра�личн��� ти�а: ��т�в�л��на, �ети ��h�����, телеф�нн�й линии, СВЧ�ради��анала и т. д . Чт��ы д��рать�� � ваше�� ����ьютера д� интернет�х��та, ваши данные в �р�це��е �луждани� в��ру� �е�н��� шара д�лжны в лю��� �лучае «�ере�ры�нуть» �т 4 д�
Утилиты для работы с сетью 617 20 та�их ��д�лючений. (Е�ли ва� ���да�ли�� �рих�дил��ь ��ль��вать�� у�лу�а�и авиа����ании Sou�hw�s� A������s, вы �наете, на чт� эт� ��х�же.� Е�ли �де�ни�удь �� �ути �лучит�� ���й, ваши данные д� �в�ей цели не д��ерут��. Пр��ле�а в т��, чт� �ри нев����жн��ти д��рать�� д� интернет�х��та вы не �наете, в че� и�енн� дел� — т� ли �т�а�ал нужный ва� ����ьютер, т� ли интернет �т�а�ал �де�т� �� �ути � не�у. К��анда tracert ��жет ��д��а�ать, �а��й и� вариант�в и�еет �е�т�. Она ра��� тает �ледующи� ��ра���: ���анда tracert имя_хоста �т�равл�ет не��льш�й �а�ет данных в адре� у�а�анн��� ����ьютера, т�чн� та� же, �а� эт� делает ���анда ping. Н� �а�ет �ерен��ит �ар�ер, в ��т�р�� ��в�рит��, чт� �н ��жет �делать т�ль�� �дин �рыж�� �� на�равлению � �в�ей цели. П��ле ��уще�твлени� эт��� �ерех�да �н �читает�� нед��тавленны� и �т�равл�ет�� на�ад �ервы� �аршрути�ат�р��. Чт�, ����твенн�, и нужн� — е�ли эт�т �а�ет в��вращает�� � ва�, вы �наете, чт� ��д�лю� чение �т ваше�� ����ьютера д�, �� �райней �ере, �дн��� интернет��аршрути�ат�ра ра��тает. Зате� tracert �т�равл�ет еще �дин �а�ет � «��чт�в�й ��лат�й», ��т�р�й хватает т�ль�� на т�, чт��ы �ере�ры�нуть ра��т��ние в два �аршрути�ат�ра. Е�ли вт�р�й �аршрути�ат�р вернет е�� на�ад, вы у�наете, чт� ��единение �ежду �ервы� и вт�ры� �аршрути�ат�р�� ра��тает. К��анда tracert ��вт�р�ет эт�т �рие� �н�ва и �н�ва, ���а �а�ет ли�� не д�йдет д� нужн��� �ун�та на�начени�, �а� ���а�ан� на ри�. 13.1, ли�� не �ере�танет в��вращать��. В �ерв�� �лучае �танет ��н�, чт� ра��тает ве�ь �етев�й �аршрут, а в ���ледне� вы ��й�ете, на���ль�� дале�� д�� �рали�ь ваши данные, �режде че� их �ередача ��тан�вила�ь. Эт� ��д��ажет ва� �е�т� нарушени� �в��и. Рис. 13.1 . Команда tracert составляет карту пути от вашего компьютера к удаленному интернет-хосту Ра����три� �ри�ер: �ред��л�жи�, чт� ��� ��чт�ва� �р��ра��а ����щила � нев����жн��ти ��д�лючить�� � ��е�у ��чт�в��у �ерверу, mail.pacbell.net. Е�ли � на�еру ���анду tracert mail.pacbell.net и увижу ����щение Трассировка маршрута к mail.pacbell.net [64.164.98.8] С максимальным число прыжков 30: 1 3ms 2ms 2 ms 11.22.33.1 64.220 .177.1 сообщает: сеть вне досягаемости � �уду �нать, чт� данные ��вершили �дин у��ешный �рыж�� на адре� 11.22.33.1, ��� т�рый �ринадлежит ��е�у DSL��аршрути�ат�ру. Н� эт�т �аршрути�ат�р ����щил, чт� �н не ��жет �ередать эти данные дальше. Эт� ��начает, чт� и�т�чни� �р��ле�ы нах�дит�� ���ли���ти �т �ен�; ��е �етев�е ��д�лючение �р��ал�, и � д�лжен ��� ратить�� �а ����щью � �в�е�у интернет��р�вайдеру.
618 Глава 13. Утилиты командной строки С дру��й �т�р�ны, е�ли �тчет и�еет �ледующий вид: Трассировка маршрута к mail.pacbell.net [64.164.98.8] С максимальным числом прыжков 30: 1 3ms 2ms 2 ms 64.220.177.1 2 25 ms 15 ms 16 ms 65.104.11.1 3 17 ms 15 ms 20 ms 205.158.11.61 4 16 ms 19 ms 20 ms 64.0.0.129 5 22 ms 19 ms 17 ms 64.220.0 .62 6 18 ms 19 ms 24 ms 64.220.0 .21 7 23 ms 21 ms 19 ms bb1-p3-2 .pxpaca.sbcglobal.net [151.164 .8 8 18 ms 23 ms 19 ms bb2-p9-0 .sntc01.pbi.net [64.161.1.21] 9 27 ms 19 ms 27 ms 64.161.1 .26 10 18 ms 19 ms 19 ms bb1-p15-0.pltn13.pbi .net [64.161 .124.253 11 22 ms 18 ms 19 ms srvr1-vlan40.pltn13.pbi .net [64.164 .97 .2 12 19 ms 22 ms 23 ms mta7.pltn13.pbi.net [64.164.98.8] Трассировка завершена. �начит, ра��тает ве�ь �етев�й �уть. Е�ли ��чт�вый �ервер не �твечает, т� эт� не �вл�ет�� �р��ле��й ��д�лючени�. В����жн�, не ра��тает �а� ��чт�вый �ервер. Е�ли те�т, �р�веденный ���анд�й tracert, ���а�ывает, чт� данные ��вершили три и ��лее �рыж��в, н� не ����ли д��рать�� д� �ун�та на�начени�, ��жн� �рий� ти � �а�лючению, чт� �р��ле�а �в��ана � �аршрути�ат�ра�и, �ринадлежащи�и интернет�«�а�и�трали», и на�, �р��ты� ��ертны�, � эти� не ��равить��. ▼▼ Программа tracert является отличным средством диагностики проблем, и она еще более по- лезна, когда вы знаете, как должен выглядеть ее вывод, если ваше интернет-подключение ра- ботает должным образом. Команде tracert нужно указать несколько удаленных мест и записать результат, направив вывод в файл и сохранив или распечатав его. Тогда у вас будет материал для сравнения, если что-нибудь пойдет не так. ▼) Вы можете самостоятельно ознакомиться с некоторыми полезными сетевыми программами, например arp, ftp, nbtstat, netsh, pathping и route. Программа netsh позволяет конфигурировать сетевые адаптеры, маршрутные таблицы и фильтры и имеет свою собственную сложную среду командной строки. Но большинство ее команд работает только в Windows 2000/.NET Server. Дополнительные утилиты За�ру�ив � ве���айта ����ании M���oso�� на��ры W��dows R�sou��� ���s, ��жн� ��лучить ��тни д���лнительных ��ле�ных утилит. Зайдите на ве���айт www. microsoft.com и �р�ведите ��и�� �� �лючев�й фра�е «dow��o�d w��dows ��sou��� k��». О���енн� ���ат на утилиты ���андн�й �тр��и на��р W��dows S��v�� R�sou��� ���s, а дл� е�� и���ль��вани� у�танавливать W��dows S��v�� ��в�е� не ����ательн�. П��ле �а�ру��и и у�тан�в�и на��ра R�sou��� ��� в не�� �удут в�лючены файлы ��рав�и � д��у�ентацией �� в�е�у �ред��тавл�е���у ин�тру�ентарию.
Введение в Windows PowerShell III
Windows PowerShell В эт�й �лаве �удет ��и�ан� дей�твительн� уни�альн�е �ред�тв� дл� ���дани� �це� нариев и у�равлени� — W��dows Pow��Sh���. y y Мы ра����три�, �а� Pow��Sh��� ра��тает в �реде ���андн�й �тр��и. В �леду� ющих �лавах �удет ра����трен ��ы� �р��ра��ир�вани� Pow��Sh��� и ���анды Pow��Sh���. y y Вы у�наете, чт� Pow��Sh��� ра��тает не � те��т��, а � ��ъе�та�и. y y Мы ����в�ри� � важных на�тр�й�ах �е���а�н��ти, ��т�рые нужн� и��енить �еред �а�у���� �ценариев Pow��Sh���. Введение в Windows PowerShell В 2006 ��ду, ���да M���oso�� вы�у�тила ��вершенн� н�вую �реду ��д на�вание� W��dowsPow��Sh���, W��dows S���p� Hos� (WSH� и ���л�ч�а ���андн�й �тр��и ��лучили н�в��� �ли����� р�д�твенни�а. Эта �реда �ыла че��т� ��х�жа на �в�их �редше�твенни��в: �а� и ���л�ч�а ���андн�й �тр��и, �на ���в�л�ла вв�дить ��� �анды в интера�тивн�� режи�е, н� �на та�же ���в�л�ла ���ещать их в �ценарии и �а�етные файлы, а дл� вы�траивани� файл�в и �р��ра�� в �дну це��ч�у ��жн� �ыл� �р��т� и���ль��вать �аналы и �ерена�равлени�. Ка� и WSH, �на �ред��тав� л�ла ��щный ��ъе�тн���риентир�ванный ��ы� �р��ра��ир�вани� дл� ���дани� �л�жных �ценариев. Н� Pow��Sh��� — ��вершенн� ин�е, д�в�льн� �транн�е тв�рение, и�еющее � т��у же та�ие эффе�тивные �ред�тва, ��т�рые �уще�твенн� �рев��х�д�т в�е т�, чт� �редла�ают WSH и ���л�ч�а ���андн�й �тр��и. С�ы�л эт�й фра�ы �удет ра�� �рыт в �ледующих ра�делах. Объектно-ориентированная командная оболочка В�т �дна и� ����енн��тей Pow��Sh���, ���тавл�ющих ее �тличие и �в�е��ра�ие. В����ни�, чт� е�ли на�рать ���анду dir в ��ычн�� ��не ���андн�й �тр��и, �на выда�т на э�ран те��т�вый �л��, ���т��щий и� и�ен, ра��ер�в и �ет�� вре�ени 14
Введение в Windows PowerShell 621 тех файл�в, ��т�рые нах�д�т�� в �атал��е. Эт�т те��т ��жн� на�равить в файл, в����ль��вавши�ь ��ерат�р�� �ерена�равлени� >, или же ��жн� �у�тить те��т �� �аналу на вх�д дру��й �р��ра��ы, и���ль�у� ��ерат�р |. На�ри�ер, ���анда dir/s/b|sort выв�дит ��и��� файл�в те�уще�� �атал��а и е�� ��д�атал���в в виде ��т��а те��та, и те��т �т�равл�ет�� �р��ра��е sort, ��т�ра� ��ртирует эле�енты эт��� ��и��а в алфавитн�� ��р�д�е. Ва� эт� д�лжн� �ыть и�ве�тн� ���ле �р�чтени� �лавы 10 «К��андна� �тр��а CMD», или е�ли вы ��ль��вали�ь �ред�й ���андн�й �тр��и �ра�тиче��и лю��й ��ераци�нн�й �и�те�ы в ���ледние, ��аже�, 30 лет. Ка�ал��ь �ы, ���андные �тр��и W��dows Pow��Sh��� ра��тают т�чн� та� же, н� ���анды эт�й ���л�ч�и ра��тают не �р��т� � те��т��, а � объектами. (Эт� те же �а�ые ��ъе�ты, � ��т�рых ��в�рил��ь в �лавах 3–9: ��ъе�ты, ��т�рые �ред�тавл�ют файлы, �а��и, драйверы у�тр�й�тв W��dows, �етевые �луж�ы, эт� ��тни ��ъе�т�в, ��ределенных в �и�ли�те�е .N�T F��m�wo�k.� Т�, чт� �ерех�дит �т �дн�й ���анды � дру��й � ����щью �и�в�ла �анала (|�, �вл�ет�� ��т���� ��ъе�т�в. Ра�личные ���анды Pow��Sh��� ���в�л�ют ва� �енерир�вать в �тн�шении этих ��ъе�т�в �е� т�ды, ра��тать � ни�и и вы�ывать их, и��ен�ть �в�й�тва ��ъе�т�в и и�вле�ать и� них инф�р�ацию. В�т чт�, � �ри�еру, �р�и��йдет, е�ли на�рать ���анду dir в ��не Pow��Sh���. К��анда dir ���л�ч�и Pow��Sh��� на �а��� деле �вл�ет�� ��евд�ни��� (у�л�вны� ����начение�� дл� ���андлета (�md���� Get-ChildItem. М�жн� на�рать лю��е и�� и ��лучить т�т же ре�ультат. О че� эт� �ы? Cmd���, �р�и�н��ит�� «�omm��d����» («���андлет»�, в ��ы�ле «не��льша� и��щна� ���анда». К��андлета�и на�ывают�� в�тр�енные ���анды Pow��Sh���. В����жн�, в т�� ��ду в Ред��нде на�людал�� дефицит �ла�ных �ву� ��в? Нет, �ричина �т�ль �транн��� на�вани� в т��, чт� ���андлеты не �вл�ют�� ��лн��тью в�тр�енны�и в Pow��Sh���, �а� ���анды cmd.exe, н� �ни та�же и не ��� ладают ��лн�й не�ави�и���тью �т эт�й ���л�ч�и, �а� exe�файлы. Они реали��ваны ���н�в��у, ��эт��у, �а� ни �рути, нуждают�� в н�в�� �л�ве. Бе� и���ль��вани� ар�у�ент�в Get-ChildItem выдает ��ъе�ты File и Folder дл� в�ех файл�в и ��дчиненных �а��� в те�уще� �атал��е. Е�ли на�рать ���анду dir �е� ар�у�ент�в, Get-ChildItem выдает ��и��� ��ъе�т�в File и Folder, и, �����ль�у нет �анала или �ерена�равлени� выв�да, ре�ультаты выв�д�т�� в ���андн�е ��н� W��dows Pow��Sh���. К��да ��ъе�ты ���адают в ��н� Pow��Sh���, эта ���л�ч�а выв�дит �� �дн�й �тр��е дл� �ажд��� ��ъе�та в �ра�ив��, ра��ит�� на �т�л�цы ф�р�ате, ���а�ыва� наи��лее важные �в�й�тва �ажд��� ��ъе�та. Дл� ��ъе�т�в File и Folder эти �в�й� �тва в�лючают Имя (N�m��, Длину (L��g�h�, Последнее время записи (L�s�W����T�m�� и Режим (Mod��. Эт�т ��и��� и�еет �ледующий вид: Каталог: C:\users\bknittel Mode LastWriteTime Length Name --- - - --- --- --- --- ------ --- - d-r -- 6/2/2010 1:27 PM Contacts d-r -- 6/15/2010 11:35 PM Desktop d-r -- 6/14/2010 8:47 AM Documents
622 Глава 14. Windows PowerShell d-r -- 6/2/2010 1:27 PM Downloads ... d-r -- 6/2/2010 1:27 PM Videos d-r -- 6/23/2010 11:01 AM Virtual Machines -a- -- 8/21/2009 6:07 PM 1889 listprops.vbs -a- -- 8/20/2009 12:34 PM 1020 nets.vbs -a- -- 8/20/2009 11:54 AM 3668 tempfile.txt -a- -- 9/14/2009 7:13 PM 1605 test.vbs -a- -- 6/23/2010 2:19 PM 3650 x За��л�в�и в верхней ча�ти �т�л�ц�в — эт� �р��т� и�ена выведенных �в�й�тв. Та�а� же ра��ечат�а �ыла �ы выведена дл� лю���� дру���� ти�а ��ъе�та, ��енери� р�ванн��� ���андлет��. Нужн� ��ни�ать, чт� ���анда dir в ��ычн�й �реде ���андн�й �тр��и �енери� рует те��т в фи��ир�ванн�� ф�р�ате. К��андлет dir в W��dows Pow��Sh��� �ене� рирует ��и��� ��ъе�т�в File и Folder, ��т�рые Pow��Sh��� ф�р�атирует в те��т, выв�ди�ый на э�ран ���ле эт���. Выв�д ���андлета Pow��Sh��� ��жн� �ерена�равить в файл, и���ль�у� уже �на� ���ый �и�в�л >, и �р�и��йдет т� же �а��е: ��т�� ��ъе�т�в �удет �тф�р�атир�ван в �ривле�ательную те��т�вую ра��ечат�у. Н�в�введение� в Pow��Sh��� �удет т�, чт� �лучает�� �ри и���ль��вании �и�в�� ла �анала (|�. Pow��Sh��� ���в�л�ет на�равить ��т�� ��ъе�т�в и� �дн��� ���анд� лета в дру��й, а та� ���ут �ыть и��енены �в�й�тва этих ��ъе�т�в или вы�ваны их �ет�ды, вы��лн�ющие реальную ра��ту �� �ере �р�х�да этих ��ъе�т�в. И т�ль�� т��да, ���да ��ъе�ты в ��нце ��нц�в д��ерут�� д� э�рана, ���вит�� те��т. Один ���андлет ��жет �енерир�вать ��и��� ��ъе�т�в, �ред�тавл�ющих файлы, ���� �ьютеры, �луж�ы и �етевые ��ъе�ты, дру��й ���андлет в �анале ��жет �ани�ать�� фильтрацией и �ередавать дальше т�ль�� те их них, ��т�рые �ред�тавл�ют интере�, а �ледующий ���андлет ��жет вы�вать �ет�ды дл� вы��лнени� дей�твий над ��ъ� е�та�и. И эт� дей�твительн� уни�альн�е �в�й�тв� W��dows Pow��Sh���. Ита�, дей�твие, тре�ующее �ри�енени� ци�ла в WSH: fso = CreateObject("Scripting.FileSystemObject") for each file in fso.GetFolder("c:\temp").Files file.Delete next ��жн� вы��лнить в W��dows Pow��Sh��� � ����щью �дн�й ���андн�й �тр��и: dir c:\temp | remove-item К��андлет dir �енерирует ��и��� ��ъе�т�в File и Folder, �ред�тавл�ющих ��� держи��е �атал��а c:\temp, и �ередает е�� ���анде remove-item, ��т�ра� удал�ет �ред�еты «реальн��� �ира», �т��щие �а �ажды� �ереданны� ��ъе�т��. М�жн� та�же на�рать �ледующую ���анду: (dir c:\temp).delete() ��т�ра� �енерирует та��й же ��т�� ��ъе�т�в File и Folder и вы�ывает дл� �ажд��� ��ъе�та �ет�д delete. Ре�ультат �удет та�и� же: файлы �удут удалены. (И чт� вр�д ли �удет дл� ва� не�жиданн��тью, ��жн� та�же �р��т� на�рать ���анду remove-item c:\temp\*.* . Эта ���анда �удет наи��лее на�л�дн�й, н� �на
Введение в Windows PowerShell 623 не ���а�ывает, че� и�енн� Pow��Sh��� �тличает�� �т ��ычн��� ��на ���андн�й �тр��и.� В�т еще �дин �ри�ер т���, �а� ��жет ра��тать ���анда, и���ль�ующа� �аналы: dir | where-object {$_.LastWriteTime -lt (get-date).addmonths(-6)} | remove-item К��андлет dir �енерирует ��ъе�ты дл� �ажд��� файла в те�уще� �атал��е, where-object �р��у��ает чере� �е�� т�ль�� те и� них, ��т�рые �тарше ше�ти �е� ��цев, а remove-item удал�ет �тарые файлы. Та�и� ��ра���, и� универ�альных ���андлет�в ���дана ���анда �чи�т�и ди��а. (К�тати, вв�дить ее не �т�ит.� Эт� ве�ь�а не��ычн�е и эффе�тивн�е �ред�тв�, � ��т�р��у еще нужн� �ривы�� нуть. Основанная на .NET Framework Пр��ра��на� �латф�р�а .N�T F��m�wo�k �вила�ь �твет�� ����ании M���oso�� на ���вление у ����ании Su� M���osys��ms ��ы�а �р��ра��ир�вани� J�v�. В ���их �луча�х ��енерир�ванные �р��ра��ы и���ль�уют не на��р ��ерат�р�в у�тан�влен� н��� на ваше� ����ьютере центральн��� �р�це���ра I���� или AMD, а ��ерат�ры выду�анн��� ����ьютерн��� �р�це���ра. И�х�дна� �латф�р�а .N�T F��m�wo�k (или, в �лучае � J�v�, виртуальна� �ашина J�v� V���u�� M��h���� и�учает ��ерат�ры и вы��лн�ет их �ред�и�ани�. Ины�и �л�ва�и, .N�T��р��ра��ы ��льшей ча�тью интер�ретируют�� ни���ур�внев�й �р��ра���й �ри не��т�рых инженерных ухищрени�х, �а�тавл�ющих их ра��тать чуть ли не � та��й же ���р��тью, �а� и те �р��ра��ы, ��т�рые у�равл�ют ваши� центральны� �р�це���р�� на�р��ую. Т�, чт� делает�� на эт�� интер�ретирующе� ур�вне, �ра�тиче��и не ���в�л�ет неверн� на�и�анны� или вышедши� и����д ��нтр�л� �р��ра��а� вы�вать аварийную �иту� ацию в W��dows или ���ешать ра��те дру�их �рил�жений. Кр��е эт���, ���датели .N�T F��m�wo�k ��лучают �в���ду в ��н�труир�вании выду�анных центральных �р�це���р�в � на��р�� ��ерат�р�в, х�р�ш� в�и�ывающи��� в ��вре�енные ��ы�и �р��ра��ир�вани�, не и�еющие ��рней в у�таревше� на��ре ��ерат�р�в I����. П� �райней �ере, те�ретиче��и, .N�T��р��ра��ы д�лжны �ыть ��лее надежны�и, че� «р�дные» �р��ра��ы. Кр��е эт���, .N�T��р��ра��ы �ишут�� на ��ы�ах, ��т�рые �ерут на �е�� ни���ур�вневые ����енн��ти у�равлени� ����ьютерн�й �а��тью и ��ъе�та�и, ��эт��у �р��ра��и�ту не нужн� в��ить�� � ни�и, и эт�, ���ть же те�ретиче��и, �рив�дит � еще ��лее вы����й надежн��ти. Ча�ть «F��m�wo�k» ���вила�ь в на�вании �латф�р�ы �ла��дар� т��у фа�ту, чт� �р��ра��е .N�T F��m�wo�k д��ту�на ��р��на� �и�ли�те�а фун�ций и ��ъ� е�т�в �р��ра��ир�вани�. И�еющий�� в .N�T интерфей� �ри�ладн��� �р��ра�� �ир�вани� (API� у�тр�ен на�н��� �л�жнее и�х�дн��� W��dows API, на ��т�р�� ���давали�ь W��dows��рил�жени� �тар��� �тил�. Он в�лючает ��тни ��ъе�т�в, ���в�л�ющих ра��тать � �рафиче��и�и интерфей�а�и ��ль��вател� (GUI�, ��� лучать д��ту� � �а�а� данных, ра��тать � �етевы�и ��д�лючени��и, вы�траивать в�аи��дей�твие � Интернет��, вы��лн�ть �ри�т��рафиче��ие фун�ции, ��ра�а� тывать ��льшие чи�л�вые �а��ивы и делать еще �н���е дру��е.
624 Глава 14. Windows PowerShell А в�т, чт� в не� найдет�� дл� ва�. (Вы ведь ��ни�али, � че�у � �л�ню?� В�� ��щь .N�T F��m�wo�k д��ту�на в ���андных �тр��ах и �ценари�х W��dows Pow��Sh���. Кр��е у�равлени� W��dows и вы��лнени� тривиальных �адач ��ра� ��т�и данных, ��т�рые ��жн� вы��лн�ть � ����щью WSH или �а�етных файл�в, �ценарии Pow��Sh��� ���ут в�аи��дей�тв�вать � ве���луж�а�и, ра��тать � �а�а�и данных, выв�дить диал���вые ��на и делать �н���е дру��е. Е�ли ва� �рих�дил��ь ра��тать �а� � V�su�� ��s�� �o� App������o�s (V�A�, ���дава� �ценарии, ��аже�, в M���oso�� Wo�d, та� и � V�S���p� в WSH, т� вы �наете, чт� V�S���p�, в �тличие �т V�A, не и�еет д��ту�а � внутренни� фун�ци�� W��dows API. В W��dows Pow��Sh��� та�ие ��раничени� �т�ут�твуют. Сценари�� д��ту�ен ве�ь интерфей� .N�T F��m�wo�k API. Един�твенн�е реальн�е �ре��т�твие — �л�жн��ть и�учени�. Ра�у�еет��, в трех �лавах � не ���у �ередать ва� в�е��ъе�лющий �ра�тиче��ий ��ыт ра��ты � .N�T и Pow��Sh���, н� вы ��лучите начальные �ведени� и у�наете, �а� �р�д�лжить ��� учение �а���т��тельн�. Расширяемая среда Pow��Sh��� ��жет �а�у��ать три вида �р��ра��: в�тр�енные ���анды, внешние �р��ра��ы и �ценарии. Зде�ь �р��леживает�� анал��и� � ��ычн�й �ред�й ��� �андн�й �тр��и, �де ��жн� и���ль��вать в�тр�енные ���анды, ���луживае�ые �а��й �р��ра���й cmd.exe, �а�у��ать внешние �р��ра��ы или ���давать �а�етные файлы, ���в�л�ющие �р�ани��вать ��а ти�а ���анд дл� вы��лнени� эта��в ��лее �л�жн�й �адачи. В Pow��Sh��� в�тр�енны�и ���анда�и �вл�ют�� ���андлеты. Н� в �тличие �т ���л�ч�и ���андн�й �тр��и, эти в�тр�енные ���анды не �рив��аны � �р��ра��е Pow��Sh���, а д��авл�ют�� � ней чере� �ехани�� инте�рир�вани�, �а� �дин или не���ль�� .DLL �файл�в, хран�щих�� на ваше� же�т��� ди��е. П�эт��у � �реде ��жн� д��авл�ть ��ециальн� ���данные ���андлеты. За�ы�ел ���т�ит в т��, чт� M���oso�� и �т�р�нние �р�и�в�дители ���ут д��авл�ть у�танавливае�ые ���андлеты у�равлени� дл� �в�их �рил�жений и �луж�, чт��ы �ни ���ли у�рав� л�ть�� �ценари��и Pow��Sh���. К �ри�еру, ��ециали�ир�ванные интер�рируе�ые ���андлеты е�ть у �ервер�в M���oso�� SQL S��v��, M���oso�� �x�h��g� и VMW���. При наличии д��тат�чн��� ��ыта �р��ра��ир�вани� на �латф�р�е .N�T вы ��� жете ���давать �в�и ����твенные ��ециали�ир�ванные ���андлеты, и���ль�у� та�ие �ред�тва ра�ра��т�и, �а� W��dows Pow��Sh��� 2.0 So��w��� D�v��opm��� ��� (SD�� и M���oso�� V�su�� S�ud�o �xp��ss �d���o�, ��т�рые ��жн� �в���дн� �а�ру�ить � ве���айта M���oso��. Кр��е т���, Pow��Sh��� �твечает �а ���андные �лючевые �л�ва, �вл�ющие�� ча� �тью ��вершенн� уни�альн��� в�тр�енн��� ��ы�а �р��ра��ир�вани� эт�й ���л�ч� �и. Эт� не V�S���p�, и не V�.N�T, и не C#. Эт� Pow��Sh���. Б�лее ��др��н� ��ы� Pow��Sh��� �удет ра����трен в �лаве 15 «Пр��ра��ир�вание в �реде Pow��Sh���». М�жн� та�же ���дать и и���ль��вать .N�T� и COM���ъе�ты не т�ль�� в �це� нари�х, �а� �ри и���ль��вании WSH, н� и не���ред�твенн� в ���андн�й �тр��е Pow��Sh���.
Получение Windows PowerShell 625 Эт� ��начает, чт� лю��й ���андлет, �р��ра��а W��dows, �р��ра��а ���андн�й �тр��и, .N�T���ъе�т и COM���ъе�т (в�люча� WMI и ASDI� д��ту�ны �р��� на ��нчи�ах ваших �альцев. ▼) Кстати, интересно будет узнать, что так же, как VBA предоставляет объектно-ориентиро- ванный, полноценный язык программирования, который может быть встроен в такие прило- жения, как Microsoft Word, программисты могут делать PowerShell «ведущим» внутри своих .NE T-приложений. PowerShell предназначен не только для оказания помощи в автоматиза- ции рутинных задач, но и служит в качестве языка сценариев и макроязыка для приложений и служб Windows. Получение Windows PowerShell Д��ту�ны две вер�ии Pow��Sh���: 1.0 и 2.0 . В эт�й �ни�е �удет ра����трена т�ль�� вер�и� 2.0 — эт��у е�ть три �ричины: y y �на ��лее ��щна� и у�равл�е�а�; y y эта вер�и� у�танавливает�� на W��dows 7 �� у��лчанию; y y �на в�лючает �тличные �рафиче��ие �ред�тва реда�тир�вани� и �тлад�и �це� нариев, ��т�рые на�ывают�� инте�рир�ванн�й �ред�й ра�ра��т�и �ценариев Pow��Sh��� (Pow��Sh��� I���g����d S���p���g ��v��o�m��� — IS��. Ка� уже ��в�рил��ь, ���л�ч�а W��dows Pow��Sh��� 2.0 �� у��лчанию у�тан�в� лена в W��dows 7 и W��dows S��v�� 200� R2. Далее в эт�й �лаве �удет ���а�ан�, чт� ее ��жн� �а�ру�ить дл� W��dows XP, V�s��, W��dows S��v�� 2003, W��dows S��v�� 2003 R2 и W��dows S��v�� 200�. ▼) На Windows 7 или на более ранних версиях Windows после установки обновления PowerShell, которое вскоре будет рассмотрено, можно будет заметить, что в состав значения переменной среды окружения PATH добавилась запись \windows\system32\WindowsPowerShell\1.0. Элемент 1.0 не означает, что у вас старая версия PowerShell. Версия имеет номер 2. Она просто исполь- зует тот же путь для своих компонентов, что и более ранняя версия. В �ледующе� ра�деле ��и�ывают�� �р�цедуры у�тан�в�и W��dows Pow��� Sh��� 2.0 на �ажд�й вер�ии W��dows, дл� ��т�р�й �на д��ту�на. Windows 7 На W��dows 7 W��dows Pow��Sh��� 2.0 у�тан�влена �� у��лчанию. Чт��ли�� ���� �енн�е делать дл� ее у�тан�в�и не тре�ует��. Windows Vista и Windows XP Дл� у�тан�в�и Pow��Sh��� 2.0 на ��лее �тарых вер�и�х W��dows �ледует вы��лнить три дей�тви�: 1. У�едить�� в т��, чт� у�тан�влена �латф�р�а .N�T F��m�wo�k 3.5 . Е�ли ее нуж� н� у�тан�вить, а та�же �а�ру�ить и у�тан�вить �а�ую вы���ую и� д��ту�ных
626 Глава 14. Windows PowerShell вер�ию �а�ета ��н�влени� (s��v��� p��k�. На вре�� на�и�ани� данн�й �ни�и �ыла д��ту�на вер�и� .N�T F��m�wo�k 3.5 SP1. ▼) Оболочке PowerShell 2.0 требуется Microsoft .NET Framework 2.0 или выше, а вот средству редак- тирования и отладки GUI PowerShell, которое будет рассмотрено чуть позже, понадобится .NET Framework 3.5. На момент написания этих строк была выпущена версия .NET Framework 4.0, но установщик PowerShell не считает ее отвечающей предварительным условиям установки обо- лочки. Поэтому в данной установочной процедуре я предлагаю установить .NET Framework 3.5. 2. За�ру�ить и у�тан�вить ��н�вление, ��т�р�е на�ывает�� W��dows M���g�m��� F��m�wo�k Co��. На вре�� на�и�ани� этих �тр�� е�� ��жн� �ыл� найти на ве�� �айте support.microsoft.com/kb/968930. Е�ли эт�т URL�адре� не �ра��тает, нужн� �р�ве�ти ��и�� на ве���айте microsoft.com �� �лючев��у �л�ву «��96�930» или «W��dows M���g�m��� F��m�wo�k dow��o�d». Нужн� найти ��ыл�у на �а�ру��у ���твет�твующе�� ��н�влени� дл� вашей вер�ии W��dows. О�н�вление д��ту�н� дл� �ледующих вер�ий W��dows дл� на�т�льных �и�те�: y y W��dows V�s��, x�6 (32�ра�р�дн�й� и x64 (64�ра�р�дн�й� вер�ий y y W��dows XP SP3 и W��dows �mb�dd�d, x�6 (32�ра�р�дн�й� вер�ий О�н�вление у�танавливает �а�еты W��dows Pow��Sh��� 2.0 и W��dows R�mo�� M���g�m��� (W��RM�. Он� та�же в�лючает и �а�у��ает на XP �ранд� �ауэр W��dows F���w��� и �луж�у ра�делени� интернет���д�лючени� — I������� Co������o� Sh����g. 3. За�у�тить ��н�вление W��dows дл� �а�ру��и и у�тан�в�и лю�ых д��ту�ных ��н�влений �е���а�н��ти, �ритиче��их ��н�влений и (или� �а�ет�в ��н�влений .N�T F��m�wo�k. П��ле у�тан�в�и W��dows Pow��Sh��� на ваше� ����ьютере �р�те�тируйте эту ���л�ч�у ���ла�н� ��и�анию, ��т�р�е в���ре �удет дан� в ра�деле «Среда Pow��Sh���». Windows Server 2008 R2 На W��dows S��v�� 200� R2 ���л�ч�а W��dows Pow��Sh��� 2.0 у�тан�влена �� у��лчанию. Windows Server 2008 R2 Server Core Дл� у�тан�в�и Pow��Sh��� 2.0 на ���р�е S��v�� Co�� R2 �а�у�тите sconfig, а �ате� вы�ерите на�тр�й�у удаленн��� у�равлени� — Con�gure Remote Management, и в�лю� чение W��dows Pow��Sh��� — Enable Windows PowerShell. Или на�ерите �ледующие ���анды: dism /Online /Enable-Feature /FeatureName: NetFx2-ServerCore dism /Online /Enable-Feature /FeatureName: MicrosoftWindowsPowerShell
Среда PowerShell 627 Windows Server 2008 (pre-R2), 2003 R2 и 2003 Следуйте �редыдущи� ин�тру�ци��, �а�авши��� W��dows V�s�� и XP, н� в� вт�� р�� �ун�те вы�ерите �а�ет ��н�влени�, ��дх�д�щий дл� вашей вер�ии W��dows S��v��. О�н�вление д��ту�н� дл� �ледующих S��v���вы�у���в: y y W��dows S��v�� 2003, x�6 и x64 вер�ий (в�люча� W��dows S��v�� 2003 R2�. y y W��dows S��v�� 200�, x�6 и x64 вер�ий. На ���ент на�и�ани� этих �тр�� M���oso�� не �ланир�вала �ред��тавл�ть Pow��Sh��� 2.0 дл� вер�ий I����um W��dows S��v��, �тличных �т 200� R2. Е�ли �и� туаци� � ���енту �р�чтени� данн�й �ни�и не и��енит��, ��танет�� лишь �а�ру�ить и у�тан�вить W��dows Pow��Sh��� 1.0 дл� W��dows S��v�� 2003 I����um, �р�вед� ��и�� ��н�влени� M���oso�� ��926140. Windows Server 2008 (Pre-R2) Server Core У�тан�вить Pow��Sh��� 2.0 на ���р�е W��dows S��v�� 200� S��v�� Co�� нев����жн�. М�жн� у�тан�вить Pow��Sh��� 1.0, н� дл� эт��� ��тре�ует�� ��йти на не���ль�� ухищрений. Са�а� ��льша� трудн��ть �удет ���т��ть в у�тан�в�е .N�T F��m�wo�k. Чт��ы найти ��и�ание эт�й �р�цедуры, �р�ведите в Goog�� ��и�� �� �лючев�й фра�е «Dm���y’s Pow����og Pow��Sh��� o� S��v�� Co��». Среда PowerShell Чт��ы увидеть �ун�т �еню Windows PowerShell, д�лжен �ыть д��ту�ен �ледую� щий вариант: щелч�� на �н���е Пуск (S�����, вы��р �ун�т�в Все программы (A�� P�og��ms�, Стандартные (A���sso���s� (х�т�, в����жн�, �ридет�� в����ль��вать�� �р��рут��й вни�, �� у��лчанию эт�т �ун�т нах�дит�� р�д�� � �ун�т�� �еню Служебные (Sys��m Too�s��. На 32�ра�р�дных вер�и�х W��dows ��ычн� е�ть два варианта: y y Windows PowerShell — эт� интера�тивна� �реда ���андн�й �тр��и. Она �удет ра����трена в �ервую �чередь. y y Windows PowerShell ISE — эт� GUI�ин�тру�ентарий дл� реда�тир�вани� и �т� лад�и, ��т�ры� ��жн� в����ль��вать�� �ри ра�ра��т�е �ценариев Pow��Sh���. Он �удет ра����трен чуть ���же. На 64�ра�р�дных вер�и�х W��dows эти два �ун�та �еню и���ль�уют�� дл� �а�у��а 64�ра�р�дн�й вер�ии W��dows Pow��Sh���. Кр��е эт���, е�ть еще �ун�ты �еню Windows PowerShell (x86) и Windows PowerShell ISE (x86), ��т�рые и���ль�уют�� дл� �а�у��а 32�ра�р�дных вер�ий Pow��Sh���. Они �ред��тавлены на т�т �лучай, е�ли �ридет�� и���ль��вать инте�рир�ванные ���андлеты, д��ту�ные т�ль�� в 32�ра�р�дн�й вер�ии, в ��тальн�� �ни интере�а не �ред�тавл�ют. Кр��е эт���, ��жн� �т�рыть ��ычн�е ��н� ���андн�й �тр��и и на�рать ���анду powershell или на�рать powershell в ��ле ��и��а W��dows или в диал���в�� ��не Выполнить (Ru��.
628 Глава 14. Windows PowerShell ▼) Если запустить PowerShell внутри обычного окна командной строки, вы не получите исполь- зуемую по умолчанию цветовую схему белое на синем, которая используется при открытии PowerShell из меню, но запущена будет одна и та же программа. Набрав команду exit, вы смо- жете вернуться в обычное окно оболочки cmd.exe. ▼) Окно Windows PowerShell является таким же субъектом решения вопросов безопасности, каким является обычное окно командной строки. Для изменения системных файлов или выполнения других административных действий в Windows 7 и Vista нужно запустить PowerShell с расши- ренными привилегиями. На Windows XP для выполнения задач, требующих особых привилегий, вы должны войти в систему как администратор компьютера или запустить PowerShell от имени учетной записи администратора, воспользовавшись командой runas. Более подробно этот вопрос рассматривается ближе к концу данной главы, в разделе «Без- опасность PowerShell». Ка�и� �ы �ет�д�� вы ни в����ль��вали�ь дл� �а�у��а Pow��Sh���, �ледующи� �ри�лашение� на вв�д данных, ��т�р�е вы увидите, �удут �у�вы PS в лев�й ча�ти э�рана, �а� ���а�ан� на ри�. 14 .1 . На�ерите ���анду dir и наж�ите Ввод, �р��т� чт��ы у�едить��, чт� эт� уже не �тар�е ��н� ���андн�й �тр��и. Ф�р�ат ли�тин�а �атал��а �удет �ильн� �тличать��. Рис. 14 .1 . Буквы PS в левой части приглашения на ввод сообщают, что вы используете Windows PowerShell Б�лее ��др��н� �реда ���андн�й �тр��и �удет ра����трена в �ледующе� ра�� деле.
Окно командной строки PowerShell 629 Окно командной строки PowerShell W��dows Pow��Sh��� выдает �ри�лашение на вв�д ���анд т�чн� та� же, �а� эт� делает �тара� �реда ���андн�й �тр��и. В �тр��е �ри�лашени� на�ирает�� ���анда, нажи�ает�� Ввод, �реда выв�дит не�ий ре�ультат, и вы ��вт�р�ете эт�т �р�це�� �н�ва и �н�ва. Н� Pow��Sh��� вн��ит �юда и реальн�е у��вершен�тв�вание: ���андный ��ы� эт�й ���л�ч�и �вл�ет�� �� на�т��ще�у ��лн�ценны� ��ы��� �р��ра��ир�вани�, �де�ь ле��� ���дают�� �ере�енные, � ��т�ры�и ��жн� ра��тать и �начени� ��т�рых ��жн� выв�дить на э�ран. В����ни�, � �ри�еру, чт� дл� хранени� данных в �а�ет� ных файлах ��жн� в����ль��вать�� ���анд�й set имя=xxx, а дл� и�влечени� этих данных ��жн� в����ль��вать�� �инта��и��� %имя%. В W��dows Pow��Sh��� �ере�енные ��редел�ют�� ���ещение� �еред и�ене� �ере�енн�й �на�а д�ллара ($�, �а� дл� ее ��ределени�, та� и дл� и�влечени� ее �начени�. На�ри�ер, ��жн� на�рать �ледующие ���анды $a=40+7 $a и W��dows Pow��Sh��� ���лушн� выведет вычи�ленн�е �начение a, равн�е 47. Кажда� ���анда Pow��Sh��� �вл�ет�� выражение� � �ере�енн�й, ��эт��у в��лне д��у�ти�� на�рать в �аче�тве ���андн�й �тр��и 40+7 — Pow��Sh��� выведет ре�ультат. Эт� �а�ые �р��тые �ри�еры, н� �ни ���ут �ыть �чень эффе�тивны�и �ри ра��те � ��ъе�та�и — �р��т� на�ерите и�� ��ъе�та и е�� �в�й�тва, чт��ы �ыл� выведен� �начение эт��� �в�й�тва. На�ри�ер, на�ерите: $f.path дл� выв�да �в�й�тва Path ��ъе�та, ��т�рый �ыл ���ещен в �ере�енную $f. Б�лее ��др��н� �инта��и� �р��ра��ир�вани� Pow��Sh��� �удет ра����трен в �ледующей �лаве. А �ейча� �ледует �а���нить, чт� в�е, чт� ��жн� ���ещать в �це� нарий, ��жн� та�же на�ирать не���ред�твенн� в ���андн�й �тр��е Pow��Sh���. Редактирование командной строки Дл� вне�ени� и��енений в ��держи��е ���андных �тр�� �� �ере их на��ра, а та�же дл� ��вт�рн��� вы��ва, реда�тир�вани� и ��вт�рн��� и���ль��вани� ранее на� �ранных ���анд Pow��Sh��� ���в�л�ет и���ль��вать �лавишу backspace, �лавиши �� �трел�а�и и дру�ие �лавиши реда�тир�вани�, и�еющие�� на вашей �лавиатуре. Е�ли ва� �рих�дил��ь ра��тать � ��н�� ���андн�й �тр��и, т� в�е эт� �удет �на� ����, �����ль�у и���ль�уют�� те же �а�ые �лавиши реда�тир�вани�. (Причина �р��та: Pow��Sh��� �вл�ет�� �тандартны� ��н��льны� �рил�жение�, т�чн� та�и� же, �а� и cmd.exe.� Важнее в�е�� �а���нить фун�ции �лавиш �� �трел�а�и: y y Клавиши �� �трел�а�и влев� и в�рав� (← и →� ���в�л�ют �ере�ещать�� �� на�ирае��й ва�и ���андн�й �тр��е, ��эт��у ��жн� вернуть�� на�ад и и�� �равить �ши��у в начале �тр��и �е� �тирани� и ��вт�рн��� на��ра в�е�� ��� держи����.
630 Глава 14. Windows PowerShell y y Клавиши Ctrl+← и Ctrl+→ ���в�л�ют �ере�ещать�� на�ад и в�еред ���л�вн�. Эт� и��авл�ет �т �н���чи�ленных нажатий на �лавиши. y y Клавиши Home и End ���в�л�ют не�едленн� �ере�ещать�� в начал� и в ��нец �тр��и. y y Е�ли вернуть�� в реда�тируе��й �тр��е на�ад и �ри�ту�ить � на��ру те��та, т� ве�ь на�ирае�ый те��т в�тавл�ет�� в�ереди т���, чт� уже �ыл� на�ран�. О�ычн� та��й режи� �вл�ет�� наи��лее ��дх�д�щи�. Н� е�ли нужн� �а�енить ��льш�й ��ъе� те��та, т� в�е�т� �тирани� ненужн��� фра��ента и �ечати н�в��� �ледует �дн��ратн� нажать �лавишу Ins, и н�вый на��р �удет ве�ти�ь ��верх �тар���. Кур��р �ри��ретет ф�р�у �вадрата, на���ина� � т��, чт� д�лжн� �р�и��йти �ри на��ре те��та. Дл� в��врата в режи� в�тав�и �и�в�л�в ��жн� нажать �лавишу Ins еще ра�. Pow��Sh��� авт��атиче��и вернет�� � режи�у в�тав�и, ���да �удет нажата �лавиша Ввод, ��эт��у �ледующую ���анду ��жн� �удет реда�тир�вать в ��ычн�� режи�е. y y Клавиши �� �трел�а�и вверх и вни� (↑ и ↓� ���в�л�ют вернуть�� � ранее на�ран� ны� ���анда�. Клавишу ↑ ��жн� и���ль��вать дл� ��наружени� �редыдущей ���анды, ���ле че�� ��жн� �удет нажать �лавишу Ввод дл� ее ��вт�рн��� и�� ��ль��вани� или же ��жн� найти ���анду, а �ате�, �еред нажатие� �лавиши Ввод, �треда�тир�вать ее. П�ле�н� �удет та�же у�нать и � не��т�рых дру�их фун�ци�нальных �лавишах. Эти �лавиатурные ���анды фа�тиче��и ра��тают в любых ��нах Pow��Sh��� или ��ычн�й ���андн�й �тр��и и � лю�ы�и ��н��льны�и �рил�жени��и. Клавиша Делает следующее F2 F2, �а нажатие� ��т�р�й �ледует на��р �дин�чн��� �и�в�ла, ���ирует те��т и� ранее введенн�й ���андн�й �тр��и в те�ущую ���андную �тр��у, в�л�ть д� �ерв��� ���влени� на�ранн��� �и�в�ла, н� не в�люча� е�� �а����. На�ри� �ер, е�ли ранее �ыла на�рана ���анда get-childitem c:\temp | get-member а �ате� нажата �лавиша F2 и на�ран �и�в�л |, т� в те�ущую ���андную �тр��у ���ирует�� фра��ент copies get-childitem c:\temp F3 Печатает в�е, чт� �ыл� �редыдущей ���андн�й �тр���й � ���иции �ур��ра и д� ��нца �тр��и. На�ри�ер, е�ли вы д��у�тите в ���андн�й �тр��е ��е� чат�у: fet-childitem c:\temp и не �а�етите ее д� нажати� �лавиши Ввод, т� �р��т� на�ерите g, а �ате� на� ж�ите F3 дл� вы��ва ��тальн�й ча�ти �тр��и. У ва� ��лучит�� get-children c:\temp F4 F4 , �а нажатие� ��т�р�й �ледует на��р �дин�чн��� �и�в�ла, удал�ет те��т � ���иции �ур��ра и д� �ерв��� ���влени� на�ранн��� �и�в�ла, и��люча� е�� �а���� F7 Выв�дит ��и��� ранее на�ранных ���анд. Эт�т ��и��� ��жн� �р��ручивать, и���ль�у� �лавиши �� �трел�а�и, а нажатие� �лавиши Ввод вы�ывать ��� вт�рный �а�у�� вы�ранн�й ���анды
Окно командной строки PowerShell 631 Клавиша Делает следующее F9 П��в�л�ет на�ирать н��ер �редыдущей ���анды. Н��ера�и �лужат те чи�ла, ��т�рые выв�д�т�� в ���вл�юще��� ��не, вы�ывае��� �лавишей F7. (Эта �лавиша �ыла �ы ��ле�на �ри ��ратн�� �т�чете н��ер�в, чт��ы чи�� л� 3 ��начал� третью ���анду на�ад, н� �т�чет ведет�� ���дру���у, ��эт��у ��ль�ы �т нее �ал�.� Че�тн� ��в�р�, вы ��жете �делать �арьеру в IT��и�не�е и даже не �нать � �у� ще�тв�вании этих �лавиатурных ���анд, �в��анных � фун�ци�нальны�и �лави� ша�и, и не и��ытывать ������� неуд���тва. Н� е�ли вы ���жете их �а���нить, ���да�ни�удь �ни �ри��д�т��. Личн� � �е�у��ешн� �ытаю�ь �а���нить ���анду, �в��анную � �лавишей F7. Копирование и вставка К��ир�вание и в�тав�а в �реде Pow��Sh��� ра��тает т�чн� та� же, �а� и в лю��� ��не ���андн�й �тр��и или ��н��льн�й �р��ра��ы, и ���ть�та�и ��т��у, чт� Pow��Sh��� �вл�ет�� ��ычн�й ��н��льн�й �р��ра���й, �а� и cmd.exe. Те��т нель�� выре�ать и� ��на, е�� ��жн� т�ль�� ���ир�вать и� �р���у��ль� н��� уча�т�а в �уфер ���ена. Дл� ���ир�вани� и� э�рана Pow��Sh��� � ����щью �ыши наведите �ур��р на верхний левый у��л ��на Pow��Sh���, щел�ните на не� и вы�ерите �ун�ты �еню Изменить (�d���, Пометить (M��k�. Пере�е�тите у�а�атель в верхний левый у��л ���ируе���� те��та, наж�ите �н���у �ыши и �еретащите �ур��р в нижний �равый у��л нужн��� ва� те��та. Зате� дл� ���ир�вани� те��та щел�ните на э�ране �рав�й �н����й или наж�ите Ввод. ▼) Если не весь нужный текст находится в поле зрения, не забудьте, что в ходе этого процесса окно можно прокручивать. Дл� в�ех этих дей�твий �уще�твуют та�же �лавишные ����инации. Сначала нужн� нажать Alt+пробел И (E) М (K). Зате� дл� �ере�ещени� �ур��ра в верхний левый у��л нужн��� те��та ��жн� в����ль��вать�� �лавиша�и �� �трел�а�и, ��� �ле эт���, удержива� нажат�й �лавишу Shift и и���ль�у� в� вре�� эт��� �лавиши �� �трел�а�и, нужн� �ере�е�тить �ур��р в нижний левый у��л. Дл� �авершени� ��ерации �ледует нажать �лавишу Ввод. Личн� � �читаю, чт� �р�ще в�е�� дл� начала нажать Alt+пробел И (E) М (K), в��ть �ышь, чт��ы ���етить �р���у��льни�, а �ате� вернуть�� � �лавиатуре и нажать Ввод. Дл� в�тав�и те��та и� �уфера ���ена в ��н� Pow��Sh��� наведите �ур��р на верхней левый у��л ��на Pow��Sh���, щел�ните на не� и вы�ерите �ун�ты �еню Изменить (�d���, Вставить (P�s���. В����жн�, �ы�трее �удет в����ль��вать�� дл� эт��� �лавишн�й ����инацией Alt+пробел И (E) А (P).
632 Глава 14. Windows PowerShell Приостановка вывода и прекращение выполнения вышедшей из-под контроля программы Ка� и в ��ычн�й �реде ��на ���андн�й �тр��и, дл� �ре�ращени� вы��лнени� �р��ра��ы или �ценари� Pow��Sh��� ��жн� в����ль��вать�� ����инацией Ctrl+C. Кр��е эт���, ����инаци� Ctrl+S �ри��танавливает выв�д, ��т�рый �р��ручива� ет�� та� �ы�тр�, чт� е�� нев����жн� �р�читать, а ��вт�рн�е и���ль��вание Ctrl+S в����н�вл�ет выв�д. Дл� �р����тра ��держи���� ��на Pow��Sh��� ��жн� та�же в����ль��вать�� ��л���й �р��рут�и. И в�е же, е�ли ���анда ���ирает�� ��енерир�вать ��льш�й ��ъе� выв�ди��й инф�р�ации, та� же �а� и в �реде ��на ���андн�й �тр��и, лучше ли�� на�равить выв�д в �анал и �р��у�тить е�� чере� ���анду more, ��т�ра� �удет делать �ау�у �ри �а��лнении �ажд��� э�рана, ли�� на�равить выв�д в файл, а �ате� �р����треть файл в Бл��н�те или в те��т�в�� �р�це���ре. Синтаксис командной строки Синта��и� ���андн�й �тр��и Pow��Sh��� в че��т� уже �на���, а в че��т� и не�на� ���. Е�� ����енн��ти ра���атривают�� в �ледующих ра�делах. Типы команд Ка� уже ранее у���инал��ь, Pow��Sh��� и�еет в�тр�енные ��ерат�ры и ��жет �а�у��ать внутренние ���андлеты, внешние ���анды и �ценарии, ��держащие �н�же�тв� ���анд Pow��Sh���. За и��лючение� �лючевых �л�в ��ы�а Pow��Sh���, вр�де if и foreach, ��т�рые ���ут и�еть �л�жные �тру�туры, ���анды вы��лн�ют�� ���тр�чн�, �а� и в ��не ���андн�й �тр��и. Первы� �л�в�� в �тр��е �вл�ет�� ���анда, ��т�рую нужн� вы��лнить. Ве�ь ��тальн�й те��т в �тр��е �ередает�� ���анде в �аче�тве ар�у�ент�в. О�ычн� �р�� �елы ра�дел�ют и�� ���анды и ар�у�енты, н� дл� в�тав�и �р��ел�в в ар�у�ент ��жн�, �а� в �ледующе� �ри�ере, в����ль��вать�� �динарны�и или дв�йны�и �авыч�а�и ("�: command /abc "аргумент с пробелами" Н� �де�ь е�ть и не��ычный ��в�р�т: дл� на��ра и�ени �р��ра��ы, в�лючаю� ще�� �р��елы в �а��� и�ени или в �ути, нужн�, �а� в �ледующе� �ри�ере, �а� �лючить и�� в �динарные или дв�йные �авыч�и и ���тавить �еред ���анд�й �на� а��ер�анда: &"команда с пробелами" /abc аргумент Pow��Sh��� нах�дит �р��ра��у, ���твет�твующую и�ени ���анды, �уте� �р�� ���тра �ледующих �е�т (в ��р�д�е �еречи�лени��: 1. Сначала Pow��Sh��� �р���атривает �в�й ��и��� псевдонимов, �вл�ющий�� ��и���� ���ращений дл� ���анд. Pow��Sh��� у�танавливает�� ��чти чт� �� 150 в�тр�енны�и �ред��ределенны�и ��евд�ни�а�и. На�ри�ер, cd у�танав�
Окно командной строки PowerShell 633 ливает�� в �аче�тве ��евд�ни�а дл� ���андлета Set-Location. П� �ере ра��ты � Pow��Sh��� в���ре у ва� в��ни�нет ��тре�н��ть в ��ределении �в�их ����твен� ных ��евд�ни��в дл� наи��лее ча�т� и���ль�уе�ых ���анд. Е�ли и�� ��евд�ни�а ���твет�твует ���анде, Pow��Sh��� �а�ен�ет и�� ��� �анды в вашей ���андн�й �тр��е ��ределение� ��евд�ни�а, и �р�це�� ��и��а �авершает��. 2. Зате� Pow��Sh��� ��анирует и�ена фун�ций, ��ределенных те�ущи� �ценари� е�, е�ли вы �а�у�тили �ценарий Pow��Sh���, или ��ределенных в ���андн�й �тр��е. Е�ли �удет найдена фун�ци� � у�а�анны� и�ене�, �на вы�ывает��, и ей �ередают�� ар�у�енты ���андн�й �тр��и. Ка� �удет ��ъ��нен� в �ледующей �лаве, �в�и фун�ции на ��ы�е Pow��Sh��� вы ��жете ��редел�ть в �ценари�х или в ��не ���андн�й �тр��и. Они ра��тают т�чн� та� же, �а� и ���андлеты. 3. Е�ли и�� ���анды в ��и��е ��евд�ни��в не найден�, Pow��Sh��� �р���атривает ��и��� ���андлет�в, ��т�рые ���ту�или в �ред��ределенн�� виде � W��dows Pow��Sh��� или �ыли д��авлены в �аче�тве в�траивае�ых в�е�те � д��авленны� �рил�жение� или �луж��й. Е�ли та��й ���андлет �удет найден, �н �а�у��ает�� на вы��лнение. 4. Е�ли и�� не ��в�адает � и�ене� �а�����ни�удь ���андлета, Pow��Sh��� и���ль� �ует �тандартный �ехани�� ��и��а в �ути, чт��ы найти внешнюю �р��ра��у, чт� в� �н���� ��х�же на дей�тви� ���л�ч�и �md.�x�. Сначала ��и�� ведет�� в те�уще� �атал��е, а �ате� в �атал��ах, �еречи�ленных в �ере�енн�й �реды ��ружени� PATH, �ри эт�� ищет�� файл � ��ределенны� и�ене� ���анды, чье ра�ширение �вл�ет�� ра����навае�ы� ра�ширение� �р��ра��ы. В �ажд�й �р�� ��атривае��й �а��е Pow��Sh��� �начала ищет ра�ширение .ps1, и���ль�уе��е дл� �ценариев Pow��Sh��� в Pow��Sh��� вер�ий 1.0 и 2.0. Е�ли файл �ценари� найден, Pow��Sh��� �а�у��ает �ценарий (��дчин���ь ��раничени�� �е���а�� н��ти, ��т�рые в���ре �удут ра����трены�. Е�ли файл � ра�ширение� .ps1 найден не �удет, �р�в�дит�� ��анир�вание на ра�ширени�, �еречи�ленные в �ере�енн�й �реды ��ружени� PATHEXT, т�чн� та� же, �а� эт� делает ���л�ч�а cmd.exe. Эт�т �ехани�� ���в�л�ет найти и �а�у�тить �тандартные и���лн�е�ые файлы W��dows (.exe�файлы�, �ред�тавл�ющие ��� ��й �а� GUI�, та� и ��н��льные �рил�жени�. В �начение PATHEXT вх�д�т та�же ра�ширени� .cmd и .bat, ��эт��у Pow��Sh��� ��жет �а�у�тить ��ычные �а�ет� ные файлы ��на ���андн�й �тр��и — дл� эт��� �на �а�у��ает ���ию cmd.exe. Т�чн� та� же дл� и�ен файл�в � ра�ширени��и .vbs, .js, .vbe и .jse �на �а�у��ает WSH, чт��ы вы��лнить �ценарии, ��держащие�� в файлах � эти�и и�ена�и, а дл� и�ен файл�в � ра�ширени��и .MSC �на �а�у��ает ��на�т�у ��н��ли MMC (M���oso�� M���g�m��� Co�so���. След�вательн�, и� �реды Pow��Sh��� ��жн� �а�у��ать ���андлеты и �це� нарии Pow��Sh���, ��н��льные �рил�жени�, �р��ра��ы W��dows, �а�етные файлы или �р��ра��ы лю���� дру���� вида. К��анда notepad ����режне�у �а�у��ает Бл��н�т.
634 Глава 14. Windows PowerShell Н� в ��ычн�� ��и���в�� �р�це��е и���ль�уют�� �ледующие и��лючени�: y y Е�ли ваша ���анда в�лючает в �аче�тве ча�ти и�ени ���анды �вный �уть, �а� �у��ает�� у�а�анный файл. На�ри�ер, ���анда c:\bin\sort.exe �а�у�тит у�а�ан� ную ���ию sort.exe и не �удет �ытать�� найти sort в �аче�тве ��евд�ни�а или в �е�тах, у�а�ывае�ых �начение� �ере�енн�й PATH. y y В �аче�тве у�илени� �ер �е���а�н��ти Pow��Sh��� не �танет �а�у��ать �цена� рий Pow��Sh��� и� файла � ра�ширение� .ps1, ��т�рый �удет найден в те�уще� �атал��е, ���а не �р����трит ��и���, и�еющий�� в �ере�енн�й PATH. О��л�ч�а ����щит ва� � наличии та���� файла, н� не �танет е�� �а�у��ать. Она �а�у�тит т�ль�� те �ценарии Pow��Sh���, ��т�рые �удут найдены в �е�тах, у�а�анных в �ере�енн�й PATH, или те �ценарии, дл� ��т�рых �уть �удет у�а�ан в �вн�� виде. Файл в те�уще� �атал��е ��жн� �а�у�тить, ���тавив �еред е�� и�ене� �и�� в�лы .\, �а� в �ри�ере .\myscript.ps1. Эт� �вн� у�а�анный �уть, ��эт��у �н уд�влетв�р�ет тре��вани�� �е���а�н��ти Pow��Sh���. И в�е равн�, Pow��Sh��� ��жет в���ще не �а�у�тить �ценарии, в �ави�и���ти �т д���лнительн� у�тан�вленных �ер �е���а�н��ти, ��т�рые �удут ра����трены в �ледующе� ра�деле. y y В��лне в����жн�, чт� ���андлет � �дни� и те� же и�ене� �удет ��ределен в ��лее че� �дн�й д���лнительн�й ��на�т�е Pow��Sh���. О��л�ч�а Pow��Sh��� ведет ��и�� в ��на�т�ах, начина� � тех, ��т�рые у�танавливали�ь ���ледни�и, �р�дви�а��ь � те�, чт� у�танавливали�ь �ервы�и, и �удет �адей�тв�ван т�т ���андлет, ��т�рый �удет найден �ервы�. Кр��е т���, и���ртир�вать (�а� �ру�ить� н�вые ��дули ��на�т�и � ���андлета�и ��жн� в �р�це��е ра��ты ���л�ч�и Pow��Sh���, и � ни� �удет �ри�енен т�т же ��р�д�� ��и��а: �начала �удут и��лед�ваны ��на�т�и, у�тан�вленные �а�ы�и ���ледни�и, а �ате� ��и�� �р�д�лжит�� в ранее у�тан�вленных ��на�т�ах. В����жн�, ва�и �удет ��ределен ��евд�ни�, чье и�� ��в�адет � и�ене� уже �уще�твующе�� ���андлета. Т��да �ри вв�де и�ени эт��� ��евд�ни�а вы ��лучите ���анду, ��ределенную ��евд�ни���, а не и�х�дны� ���андлет��. Дл� �а�у��а ��н�ретн��� ���андлета и� ��н�ретн�й ��на�т�и �е� �р��ле� � ��р�д��� ��и��а и ��евд�ни�а�и ��жн� �еред и�ене� ���андлета ���тавить и�� ��дул� ��на�т�и, �авершае��е ��ратны� �лэше�. На�ри�ер, ���анда Microsoft.PowerShell.Utility\Get-Date �а�у�тит ���андлет Get-Date, ��реде� ленный в ��дуле Microsoft.PowerShell.Utility, даже е�ли вы уже ��ределили ��евд�ни� дл� Get-Date или е�ли в дру��� ��дуле �удет ��ределен ���андлет � та�и� же и�ене�. y y Дл� ��лучени� д���лнительн�й инф�р�ации � ���андн�� ��и��е в ��не ���андн�й �тр��и Pow��Sh��� �ледует на�рать ���анду help about_command_ precedence. Я ��ни�аю, чт� в� введении эт�т �атериал �л�жн� у�в�ить, н� ва� нужн� �нать ����енн��ти ��и���в�й �и�те�ы, чт��ы ��лучить в����жн��ть �а�у��ать ���� �твенные �ценарии и ра��ирать�� в �р��ле�ах, е�ли ���да�ни�удь �удет �а�ущена не�жиданна� дл� ва� �р��ра��а.
И командлеты, и объекты, и сценарии, да когда же все это кончится! 635 Зде�ь �лавн�е ��н�ть, чт� �ри желании ра�ра�атывать и и���ль��вать �в�и ����твенные �ценарии Pow��Sh��� нужн� �удет ���дать дл� них ��ециальную �а��у и ���е�тить и�� эт�й �а��и в �ере�енную PATH �реды ��ружени� W��dows. Е�ли у ва� уже е�ть �а��а дл� �а�етных файл�в или �ценариев WSH, т� ею ��жн� в��� ��ль��вать�� и дл� �ценариев Pow��Sh���. ➔ П�р�д�� ���дани� �а��и �ценариев и ���ещени� �ути � ней в �ере�енную �реды ��ружени� PATH ра����трен в �лаве 1, в ра�деле «Д��авление у�а�аний на �ценарии в �ере�енную PATH». Зате�, чт��ы ��лучить в����жн��ть �а�у��ать �в�и �ценарии, �ледуйте ин� �тру�ци��, ра����тренны� далее в ра�деле, ���в�щенн�� �е���а�н��ти �ценариев. Перенаправление и каналы Выв�д ���анд, �а�ущенных и� ���андн�й �тр��и Pow��Sh��� и и� �ценариев Pow��Sh���, ��жн� �ерена�равить в файлы, и���ль�у� та��й же �инта��и�, ��т�рый �ыл ��и�ан в �лаве 10. Привычные ��ерат�ры — |, >, <, >> и та� далее, ра��тают т�чн� та� же, �а� и в �реде ��ычн�й ���андн�й �тр��и. Н� в Pow��Sh��� �ледует ���нить, чт� ��льшин�тв� ���андлет�в выв�д�т не те��т, а ��ъе�ты. Выв�д та�их ���андлет�в �ревращает�� в те��т�вую ра��ечат�у т�ль�� т��да, ���да �ни ���адают в ��н� Pow��Sh���, �ерена�равл�ют�� в файлы или �ередают�� �� �аналу в �тандартные ���анды ��н��ли W��dows. Ф�р�ати� р�вание� этих те��т�вых ра��ечат�� ��жн� у�равл�ть � ����щью ���андлет�в, � че� �удет ра���а�ан� в �лаве 16, в ра�деле «Ф�р�атир�вание выв�да ���андлета». И командлеты, и объекты, и сценарии, да когда же все это кончится! Мир Pow��Sh��� вв�дит н�вые, не���ль�� �а�утанные ��н�ти� и тер�ины, и � �ред� ��ла�аю, чт� ваша �ерва� реа�ци� �удет ��х�жа на ��ю: � �р����трел не���ль�� �ценариев Pow��Sh���, ��че�ал �атыл�� и ��ду�ал: «Интере�н�, на �ухне ��тали�ь еще ��нчи�и или нет?» П�началу в�е эт� �а�ал��ь ве�ь�а не��н�тны� и в����жн� не �т��щи� и�учени�. К �ча�тью, эт� чув�тв� в���ре �р�шл�. (П�нчи��в т�же ни� �т� не �ри��т�вил.� Са�ы� ��льши� �ре��т�твие� �тали д�в�льн� �транные и�ена ���андлет�в и не��ычный �инта��и� ���андн�й �тр��и. У ���андлет�в �ыли и�ена Remove- ItemProperty, Get-Content, Wait-Job, New-Alias и т. д . Ра���рать�� в них ����жет �ледующа� инф�р�аци�: y y И�ена ���андлет�в нечув�твительны � ре�и�тру �и�в�л�в. М�жн� на�ирать wait-job, а ��жн� и Wait-Job. За�лавные �у�вы и���ль�уют�� дл� ��льшей ра�личи���ти �л�в �ри чтении д��у�ентации. y y Пр��ра��и�ты M���oso�� вы�рали дл� на�вани� ���андлет�в ���лашение �у� ще�твительн�е��ла��л, чт��ы и�ена ��лее чет�� ����начали реальную ра��ту ���андлет�в. Дефи� �вл�ет�� в�е�� лишь ча�тью и�ени. И�� Rename-Item (�ереи�ен�вать эле�ент� не �вл�ет�� �а��й�т� ����инацией ���анды Rename
636 Глава 14. Windows PowerShell и ���анды Item. И�� ���т�ит цели��� и� �дн��� �л�ва: Rename-Item, и вы ��жете д��адать�� и� эт��� и�ени, чт� ���андлет, вер��тн�, и��ен�ет и�� �ред��тав� ленн��� е�у эле�ента. К�нечн�, �ри эт�� и�ена �тан�в�т�� длинее и труднее в на��ре. U��x� �р��ра��и�т вы�рал �ы дл� ���анды Rename-Item и�� вр�де ri. Н� та��е и�� ���анды на �а��� деле не ��в�рит � т��, чт� �на делает. Са��е интере�н�е, чт� в Pow��Sh��� есть в�тр�енный ��евд�ни� дл� Rename-Item, и эт�т ��евд�ни�... ri. Пр�це�� и�учени� ���анд Pow��Sh��� ��жн� начать � и���ль��вани� длин� ных и�ен, �����ающих �а���нить на�начение ���анд, а �ате� �р����треть ��евд�ни�ы и �ри�ту�ить � и�учению а��ревиатур этих ���анд. y y И�ена �лючей ���андн�й �тр��и ���андлет�в та�же �рат���тью не �тлича� ют��. На�ри�ер, ���андлет get-process ��жет и���ль��вать �ледующие не� ����ательные ар�у�енты: -Name "строка" -ComputerName "строка" -FileVersionInfo -Module -Id целое_число -InputObject объект И ���ть речь ��йдет � длинных и�енах! Кт� ���жет �ы�тр� на�рать -InputObject не �делав трех ��ечат��? О�а�ывает��, на�ирать в�е на�вание �люча и не нужн�, д��тат�чн�, чт��ы нужный �люч �тличал�� �т лю�ых дру�их �лючей, начинающих�� � та�их же �у�в. П�эт��у в�е�т� -InputObject ��жн� на�рать -input или даже –in. Н� д� -i у��р�тить эт�т �люч нель��, �����ль�у эт��� нед��тат�чн�, чт��ы найти ра�личие �ежду -Id и -Inputobject. y y Не��т�рые ���анды ��жн� у��р�тить еще ��льше. На�ри�ер, ��ычна� ���анда new-alias и�еет �ледующий вид: new-alias -name краткое_имя -v al настоящее_имя -descr "Краткое описание" Н� в �ледующей �рат��й вер�ии ���анды ар�у�енты��лючи ��жн� �р��т� ��у�тить: new-alias краткое_имя настоящее_имя В эт�� �лучае два ар�у�ента на�ывают�� ���ици�нны�и, �����ль�у Pow��Sh��� д�лжна ��ределить, чт� их на�начение ��н�ван� на их ���иции в ���андн�й �тр��е. У�нать � т��, �а��й ар�у�ент ��жет �ыть у�а�ан та�и� ��������, ��жн�, �����трев на ��и�ание �инта��и�а ���андлета. Е�ли на�рать new-alias -?, ��жн� увидеть, чт� �инта��и� и�еет �ледующий вид: New-Alias [-Name] <string> [-Value] <string> [-Description <string>] [-Force] [-Option {None | ReadOnly | Constant | Private | AllScope}] [-PassThru] [-Scope <string>] [-Confirm] [-WhatIf] [<CommonParameters>] О�ратите вни�ание на т�, чт� �люч -Name �а�лючен в �вадратные �����и, �тал� �ыть, �н не����ателен, а в�т �начение <string> ���ле не�� в та�ие �����и не �а�лючен�. Эт�т ар�у�ент ����ательн� д�лжен �ыть на эт�� �е�те, ��эт��у �н ��жет �ыть ����нан �� �в�ей ���иции. Т�чн� та� же ���а�ан� и �тр���в�е �начение, �в��анн�е � �люч�� -Value, н� ни �дин и� дру�их ар�у�ент�в та� ��льше не ���а�ан.
И командлеты, и объекты, и сценарии, да когда же все это кончится! 637 Дру��й трудн��тью в и�учении Pow��Sh��� �вл�ет�� �транный �инта��и� ��ы�а эт�й ���л�ч�и � ���анда�и, ��х�жи�и на ранее ���а�анный �ри�ер: dir | where-object {$_.LastWriteTime -lt (get-date).addmonths(-6)} | remove-item Ча�ти эт�й ���анды dir и remove-item ��в�р�т �а�и �а �е��, н� �редн�� ча�ть не и�еет �т�ль �чевидн��� на�начени�. О�н�вные �илы �ридет�� �атратить и�енн� на ее и�учение, и един�твенн� �равильны� �удет �р����тр �а� ��жн� ��льше�� ��личе�тва �ри�ер�в. Я ра���рал�� �� в�е� эти� д�в�льн� �ы�тр� и ���у ����ве� т�вать читать ��д �а� ��жн� ��льше�� ��личе�тва �ценариев. Читайте �ценарии, �а� литературные �р�и�ведени�, ���ти�айте ��ы� и ра��ирайте�ь в т��, чт� �ни делают. Мн��ие т�н���ти �инта��и�а �удут ра���раны в �ледующей �лаве. А �де�ь �удет ��ращен� вни�ание на р�д ����енн��тей т�й ���анды, ��т�ра� �риведена в �аче�тве �ри�ера. К��андлет where-object �вл�ет�� фильтр��. Он читает ��т�� ��ъе�т�в и� �ре� дыдущей ���анды �анала, вычи�л�ет �начение true или false дл� �ажд��� ��ъе�та и �р��у��ает чере� �е�� т�ль�� те ��ъе�ты, �начение дл� ��т�рых вычи�л�ет�� в true. В данн�� �ри�ере �начение true или false �ред��тавл�ет�� т�й ча�тью, ��т�ра� нах�дит�� в фи�урных �����ах: {$_ .LastWriteTime -lt (get-date).addmonths(-6)} ▼o Эта команда хорошо подойдет для очистки временной папки, но ее не стоит запускать в папке вашего профиля или где-либо еще! Файлы не попадают в корзину и не могут быть восстанов- лены, если будут удалены по недоразумению! Важн� �нать, чт� эт� выражение не ��ра�атывает�� не���ред�твенн� ���андле� т�� where-object. Е�ли �ы �н� и� ��ра�атывал��ь, т�, наверн�е, у �ажд��� ���андле� та �ыл �ы �в�й, �тличный �т дру�их ������ ���тр�ени� этих выражений, чт� �риве� л� �ы � не���лед�вательн��ти ���дани� та�их выражений и �л�жн��ти их ��в�ени�. В�е�т� эт��� ф�р�ат данн��� выражени� �вл�ет�� ча�тью �а���� ��ы�а Pow��� Sh���. С техниче���й т�ч�и �рени�, where-object �жидает в �в�ей ���андн�й �тр��е тел� (��д� фун�ции. Фи�урные �����и ��начают, чт� на�ирает�� тел� фун�ции, ��редел�е��й «на лету», �е� �ри�ваивани� ей и�ени, и чт� эта фун�ци� �ред�� �тавл�ет�� ���андлету where-object в ��ль��вание дл� вычи�лени� �ажд��� ��а� нируе���� и� файл�в��� ��ъе�та. (Эта не��льша� фун�ци� техниче��и на�ывает�� лямбда, н� в данн�� �лучае эт� неважн�.� Давайте ра��ере��� � ней. Она ���т�ит и� трех ча�тей. $_. LastWriteTime $_ — эт� �е�т� в�тав�и ��ъе�та, и��ледуе���� ���андлет�� where-object. $_ .LastWriteTime и�вле�ает и� ��ъе�та �наче� ние �в�й�тва LastWriteTime. Дл� ��ъе�та файла или �а��и эт� дата и вре�� е�� ���ледне�� и��енени� -lt Пр�в�дит �равнение двух �начений, ��т�р�е вычи�л�ет�� в true, е�ли �ерв�е �начение �еньше вт�р���. Ины�и �л�ва�и, выражение {a -lt b} вычи�л�ет�� в true, е�ли �начение a �еньше �начени� b. В данн�� �лучае те�т вычи�л�ет�� в true, е�ли �начение �в�й�тва LastWriteTime �еньше че� (раньше че�� вре��, ��т�р�е �ледует �а -lt
638 Глава 14. Windows PowerShell (get-date).addmonths(-6) Эт� �а�а� �транна� ча�ть, н� �����трите, �а� �на ра��тает: �а�у��ает�� ���андлет get-date. Бе� ар�у�ент�в �н выдает .N�T���ъе�т System.DateTime, �т��ражающий те�ущую дату и вре��. В �а��й �р��т�й ф�р�е �н ��х�ж на фун�цию Now() в V�S���p�. Кру�лые �����и в��ру� ���андлета ���а�ывают, чт� �ы ���ирае��� ра���атривать выдавае�ый и� ре�ультат в виде �начени�. Addmonths — эт� �дин и� �тандартных �ет�� д�в ��ъе�та System.DateTime. В данн�� �лучае �ы ��лучае� те�ущую дату �ину� ше�ть �е��цев — ины�и �л�ва�и, дату на ше�ть �е��цев ранее те�ущей В ��нечн�� ре�ультате эт� выражение вычи�л�ет�� в true, е�ли файл ���ледний ра� ��двер�ал�� �а�и�и ��лее ше�ти �е��цев на�ад. Фи�урные �����и �ревращают эт� выражение в фун�цию, ���в�л�� ���андлету where-object �р�в�дить вычи�� ление дл� �ажд��� и�учае���� и� ��ъе�та. На вых�де эт�й ���анды where-object �удут т�ль�� ��ъе�ты тех файл�в, ��� �леднее и��енение ��т�рых �р�и��шл� ��лее ше�ти �е��цев на�ад. О�тавша��� ча�ть ���андн�й �тр��и �ред��тавл�ет эт�т ��т�� ��ъе�т�в ���андлету remove- item, ��т�рый удал�ет �ред�тавл�е�ые и�и файлы. В ит��е эта ���анда �чищает �атал�� �т �тарых, неи���ль�уе�ых файл�в. Н� � на�и�ал эту ���анду не ��т��у, чт� эт� �ерв�е, чт� �ришл� �не в ��л�ву. Сначала � и�учил ��н�вы ���андлет�в, ��эт��у в��лне ����нанн� на�и�ал �ле� дующее: dir | where-object {какое-то выражение} | remove-item Зате� �не �ришл��ь и�учить �в�й�тва ��ъе�т�в файл�в и �а���, чт��ы на� учить�� и���ль��вать �в�й�тв� LastWriteItem и и�учить ��ъе�т System.DateTime, чт��ы найти �ет�д addmonths. Интере�н�, чт� решать эту �адачу �не �����али ��� �андлеты, дающие ��и�ани� �в�й�тв лю�ых в�третивших�� и� ��ъе�т�в, ��т�рые �удут ра����трены далее. Получение справки Наи��лее важн�й ���анд�й Pow��Sh���, ��т�рую �ледует и�учить в �ервую �че� редь, �вл�ет�� ���анда, �����ающа� и�учать дру�ие ���анды! Она на�ывает�� get-help, н� у нее е�ть �ред��ределенный ��евд�ни� �� и�ени help, ��эт��у вы ��жете и���ль��вать и т� и дру��е и�� ���анды. В Pow��Sh��� и�еет�� ��льш�й ��ъе� в�тр�енн�й ��рав�чн�й инф�р�ации — на ���ент на�и�ани� этих �тр�� фа�тиче��и и�ел��ь 477 ра�личных �татей. Ра����три� р�д ��вет�в �� и���ль��ванию эт�й ���анды: y y Дл� ��лучени� �рат���� введени� в интера�тивную ��рав�чную �и�те�у нужн� на�рать �а�� �л�в� help. y y П��ле �л�ва help или get-help ��жн� на�рать �л�в�, �ред�тавл�ющее и�� ���андлета или ча�ть е�� и�ени. М�жн� та�же на�рать фра�у, �а�лючив ее в �авыч�и.
Получение справки 639 Е�ли на�ранн��у ва�и �а�р��у ���твет�твует ��лее �дн�й те�ы, и�ени ���андлета или ��и�ани�, get-help выведет ��и��� ���твет�твующих �татей ��рав�и. Зате� ��жн� �удет на�рать help � у�а�ание� на�вани� ��н�ретн�й �татьи � интере�ующи�и ва� ��др��н��т��и. Е�ли на�ранн��у ва�и �л�ву или фра�е ���твет�твует т�ль�� �дн� и�� или ��и�ание, get-help выведет ��рав�у �� ���твет�твующей те�е. y y Дл� не��т�рых ���андлет�в д��ту�на д���лнительна� ��рав�чна� инф�р�а� ци�. На�ри�ер, р�д �ри�ер�в �� и���ль��ванию ���андлета new-alias ��жн� увидеть, на�рав ���анду help new-alias -examples. О�щи�и �люча�и дл� д�� ��лнительн�й инф�р�ации �вл�ют�� –examples (�ри�еры�, -detailed (��лее ��др��на� ��рав�а� и –full (��лна� ��рав�а�. На ��н�вн�й �транице те�ы �удет ���а�ан�, д��ту�ны ли ра�шир�ющие ее �траницы. y y Те��т ��рав�и ���вл�ет�� в ��не ��н��ли, и �� у��лчанию �н �ередает�� �� �а� налу ���анде more, ��эт��у выв�д �ри��танавливает�� �� �а��лнении �ажд��� э�рана. Дл� �ерех�да � �ледующей �транице �ледует нажать Ввод. y y В����жн�, ва� �удет ле�че и�учать ��рав�у, на�равив ее выв�д в файл, д��а� вив, � �ри�еру, в ��нец ���андн�й �тр��и >x, а �ате� дл� чтени� те��та на�рав ���анду notepad x. y y Е�ть ��рав�чные �татьи, �хватывающие �аждый и� у�тан�вленных ���анд� лет�в, и д���лнительные �татьи �� ра�личны� те�а�. Эти �татьи начинают�� � �рефи��а about_ . На�ри�ер, help about_execution_policies выв�дит инф�р� �ацию � �и�те�е ��раничений, �а�ающих�� ра��ты �� �ценари��и. (М�жн� та�же на�рать ���анду help about_exec и ��лучить анал��ичный ре�ультат, �����ль�у т�ль�� �дна �тать� ��держит �тр��у «�bou�_�x��» в �в�е� �а��л�в�е или в ��и�ании.� Дл� �р����тра ��и��а в�ех этих �татей «�bou�» �ледует на�рать ���анду help about. Эта интера�тивна� ��рав�чна� �и�те�а �тличн� ��дх�дит дл� ��и��а ��и�аний ���андлет�в на ��н�ве �л�в, ��и�ывающих их �редна�начение, и, ���ле т��� �а� нужный ���андлет �удет найден, дл� и�учени� и���ль�уе���� дл� не�� �инта��и�а ���андн�й �тр��и. ▼▼ При описании синтаксиса в интерактивной справке используются следующие соглашения: y [ ] квадратные скобки показывают необязательные аргументы команды. y { } фигурные скобки обычно показывают серию ключей на выбор с вертикальной чертой | между ключами. y < > угловые скобки окружают значение, которое вы должны предоставить сами. Напри- мер, [-Description <string>] показывает, что аргумент указывать необязательно. Его можно опустить или можно набрать что-нибудь вроде -description "какой-нибудь текст". Как уже упоминалось в предыдущем разделе, вы можете сократить этот аргумент до -descr "какой- нибудь текст".
640 Глава 14. Windows PowerShell Приглашение на завершение команд Е�ли вы на�ираете ���анду Pow��Sh���, ��т�ра� тре�ует ��н�ретных ар�у�ент�в, н� �ри эт�� ��у��аете �дин и� них или в�е тре�уе�ые ар�у�енты, Pow��Sh��� �ред� ла�ает вве�ти эти ар�у�енты, выв�д� их и�ена. Ра����три� �ри�ер: е�ли на�рать set-alias �е� ар�у�ент�в, Pow��Sh��� �редла�ает вве�ти тре�уе�ые ар�у�енты -n a me и -value. Эт� вы�л�дит �ледующи� ��ра���: PS C:\Users\bknittel> set-alias Командлет Set-Alias в конвейере команд в позиции 1 Укажите значения для следующих параметров: Name: Name: ax Value: get-alias (На�ранные �тветы выделены �ур�ив��.� Эт�т �ехани�� ��жет ����чь ва� научить�� ��ль��вать�� ���андлета�и, н� �ледует ���нить, чт� Pow��Sh��� �удет выв�дить �ри�лашени� т�ль�� дл� ����ательных ар�у�ент�в, и�н�риру� не����а� тельные. Личн� � в данн�� �ехани��е �����й ��ль�ы не вижу и ни���да не вы�ываю е�� �редна�еренн�. Н� ва� �ледует �нать � е�� �уще�тв�вании, �����ль�у �ри �р��у��е ����ательн��� ар�у�ента Pow��Sh��� ��жет �а�р��ить е�� у ва� та�и� ��������, чт� ��началу ��жет вы�вать у ва� нед�у�ение. Псевдонимы Ка� уже у���инал��ь в ра�деле «Синта��и� ���андн�й �тр��и», �ри на��ре ��� �анды Pow��Sh��� �р���атривает ��и��� ��евд�ни��в, фун�ций, ���андлет�в и внешних �р��ра�� в ��и��е �р��ра��ы, ��т�рую ва� нужн� �а�у�тить. П����ль�у ����� неи��ушенные в ра��те � ���андн�й �тр���й �ривы�ли на� �ирать та�ие ���анды, �а� cd и dir, Pow��Sh��� ���тавл�ет�� � �ред��ределенны�и ��евд�ни�а�и дл� �н��их и� та�их и�ве�тных ���анд. У �н��их ���андлет�в �лиш��� длинные и�ена, ��эт��у �ред��ределенные ��евд�ни�ы дл� �н��их ��� �андлет�в и�еют длину т�ль�� в два или в три �и�в�ла. (Чт� не ��жет не ��рад�� вать ��ль��вателей U��x!� Эт� делает�� в ра�чете на т�, чт� ���т��нн� и���ль�ует�� т�ль�� не��льш�е ��личе�тв� �дних и тех же ���анд. К��да вы ��ределите�ь � их �еречне�, ��жн� �удет �����треть, �а� вы�л�д�т их ��евд�ни�ы, и ��ль��вать�� и�и, ���раща� вре�� на��ра ���анды. Одн� и� �ерье�ных ��раничений ��евд�ни��в ���т�ит в т��, чт� �ни ���ут �т�� �ражать т�ль�� �дн� и�� ���анды на дру��е. В ��ределение ��евд�ни�а не ���ут в�лючать�� ар�у�енты ���андн�й �тр��и. Мне �ы �чень ��нравила�ь в����жн��ть ��ределени� ��евд�ни�а �� и�ени h, ��т�рый �ы выдавал ���анду cd $home, дела� ющую те�ущи� �атал�� ваше�� �р�фил� — ваш «д��ашний» �атал��, — н� та�а� в����жн��ть не ��ддерживает��. И �чень жаль.
Переход по каталогам и другим местам 641 Как получить список псевдонимов С�и��� в�ех в�тр�енных ��евд�ни��в ��жн� увидеть, на�рав ���анду alias (��т�� ра�, �а� вы увидите, �а�а �вл�ет�� ��евд�ни��� дл� на�т��щей ���анды �� и�ени get-alias�. Я ��ла�аю, чт� �р�ще в�е�� �р����треть эт�т ��и��� в те��т�в�� файле ���ле на��ра двух ���анд: alias >x notepad x В не� вы �а�етите ��евд�ни� �� и�ени % дл� ���андлета ForEach-Object и ��ев� д�ни� �� и�ени ? дл� ���андлета Where-Object. П��ледний �ри и���ль��вании в �ри�ере ���анды «удаление у�таревших файл�в» �ридает ей �ледующий вид: dir | ? {$_. LastWriteTime -lt (get-date).addmonths(-6)} | remove-item Личн� � �читаю, чт� эт� х�р�ш� ���трит��, и е�ли �ривы�нуть � на��ру та��й ���анды, эт� ���в�лит �э��н��ить вре��. Нужн� ли и���ль��вать ��д��ные ��� �ращени� — решать, ��нечн�, ва�, �����ль�у ни�т� ни���у ниче�� не нав��ывает. Лучше вы�рать ���ращени�, и�еющие дл� ва� �а��й�т� ��ы�л, �р�и�н�рир�вав �ри эт�� в�е ��тальные. Как определить новый псевдоним Н�вый ��евд�ни� ��жн� ��ределить, на�рав ���анду �ледующе�� вида: new-alias -name краткое_имя -value настоящее_имя -description "Краткое описание" ��д�тавив в�е�т� эле�ента краткое_имя ���давае�ый ��евд�ни� и в�е�т� эле�ен� та настоящее_имя и�� �а�у��ае��й ��евд�ни��� ���анды. Е�ли та��й ��евд�ни� уже �уще�твует, дл� �а�ены �тар��� ��евд�ни�а �ридет�� д��авить �люч -force. П��же в данн�й �лаве �удет ���а�ан�, �а� ��жн� у��р�тить эту ���анду. Следует и�еть в виду, чт� ��ределени� ��евд�ни��в ���ле �а�рыти� ��на Pow��Sh��� не выживают. При �ледующе� �а�у��е Pow��Sh��� ��ределенные ва�и ��евд�ни�ы и�че�нут. Е�ли у ва� ���в�т�� лю�и�ые ��евд�ни�ы, ��т�рые �ах�чет� �� ��хранить, ��ратите�ь � ра�делу «Пр�фили Pow��Sh���» в ��нце данн�й �лавы. Переход по каталогам и другим местам В �ире ���андн�й �тр��и дл� �ерех�да вверх и вни� �� �а��а� и ди���вы� на� ���ител�� и���ль�уют�� на�ирае�ые ���анды. В W��dows Pow��Sh��� дл� ��ены �атал���в и���ль�ует�� та�а� же ���анда cd, �а� и в ��не ���андн�й �тр��и, ��� эт��у �на���ые ва� ���анды cd \Users cd .. cd subfolder ра��тают ����режне�у. Дл� авт��а��лнени� ча�тичн� на�ранн��� и�ени файла или �а��и, т�чн� та� же, �а� и в �реде ���андн�й �тр��и, ��жн� в����ль��вать�� �лавишей Ta b .
642 Глава 14. Windows PowerShell М�жн� та�же в����ль��вать�� и�ена�и �атал���в, хран�щи�и�� в �ере�енных Pow��Sh���. Путь � �а��е ваше�� �р�фил� ��ль��вател� хранит�� в �ере�енн�й $home, ��эт��у дл� в��вращени� и� лю���� �е�та в �атал�� �в�е�� �р�фил� ��жн� в����ль��вать�� ���анд�й cd $home. А в�т ��е�чт� дей�твительн� интере�н�е: ���анда cd и���ль��вала�ь ва�и дл� �ере�ещени� �� файл�в�й �и�те�е. А в Pow��Sh��� вы ��жете та�же �ере�ещать�� �� �и�те�н��у рее�тру! В�т �а� эт� ра��тает: �� анал��ии � те�, �а� W��dows ра����нает ра�ные �у�вы ди���в, на�ри�ер: c:\users\bknittel d:\saved_pictures\February2010\Yosemite e:\setup.exe Pow��Sh��� ра����нает д���лнительные хранилища данных, �ред��тавл�е�ые та� на�ывае�ы�и поставщиками, ��т�рые �тав�т в �дин р�д � ди���вы�и на� ���ител��и рее�тр, а та�же ��и��и �ере�енных �реды ��ружени�, ��евд�ни�ы, �ере�енные Pow��Sh���, и�еющие ��ределени� фун�ции, цифр�вые �ертифи�аты и ве���луж�ы дл� у�равлени� (WS�m���g�m����. М�жн� у�а�ать �ути дл� этих эле�ент�в, выве�ти их ��и��� � ����щью ���анды dir, а в не��т�рых �луча�х даже и���ль��вать ���анду cd дл� �ере�ещени� �� ни�. Хранилища данных, и�начальн� �ред��тавл�е�ые в W��dows 7, �еречи�лены в та�л. 14.1. Таблица 14.1. Хранилища данных, предоставляемые в Windows 7 Имя хранилища Содержимое A:,B:,C:ит.д. Ди���вые на���ители (���тавщи� FileSystem� Alias: С�и��� ��евд�ни��в Pow��Sh��� Cert: Цифр�вые �ертифи�аты Env: Пере�енные �реды ��ружени� Function: Фун�ции, и�еющие ��ределени� HKCU: Ра�дел рее�тра H��Y_CURR�NT_US�R HKLM: Ра�дел рее�тра H��Y_LOCAL_MACHIN� Variable: Пере�енные Pow��Sh��� WSMan: П�д�лючени� W�b S��v���s M���g�m��� � л��альн��у и удален� ны� ����ьютера� Авт��авершение и�ен ра��тает та�же и в �тн�шении этих хранилищ данных. На� �ри�ер, е�ли на�рать dir hklm:soft и нажать �лавишу Ta b , Pow��Sh��� �а�енит soft на SOFTWARE, т� е�ть на �ервый ра�дел рее�тра, ��т�рый ���твет�твует ча�тичн� вве� денн��у и�ени. Путь ��жн� �р�д�лжить, на�рав \ и еще �дну ча�ть и�ени ра�дела. П��р��уйте на�рать в ��не ���андн�й �тр��и Pow��Sh��� �ледующие ���анды (и ��ратите вни�ание на т�, чт� ва� не нужн� и���ль��вать дл� них �а�лавные �у�вы, �����ль�у и�ена не чув�твительны � ре�и�тру�:
Безопасность PowerShell 643 dir hklm:\software Выв�дит �еречень ��дра�дел�в, вх�д�щих в ра�дел H��Y_ LOCAL_MACHIN�\SOFTWAR� cd hklm:\software Делает рее�тр вашей «те�ущей ���ицией» dir Выв�дит �еречень ра�дел�в в эт�й те�ущей ���иции cd $home О�уще�твл�ет в��врат в файл�вую �и�те�у, в �а��у ваше�� �р�� фил� dir cert:\currentuser Выв�дит ��и��� �ертифи�ат�в, �в��анных � вашей учетн�й �а� �и�ью dir variable: Выв�дит ��и��� в�ех �ере�енных, ��ределенных на данный ��� �ент в W��dows Pow��Sh��� dir env: Выв�дит ��и��� в�ех и�еющих ��ределени� �ере�енных �реды ��ружени� Мн��ие ���андлеты Pow��Sh��� ���ут ра��тать � ��ъе�та�и, у�а�анны�и � ����� щью �утей � ни�, не�ави�и�� �т т���, на чт� и�енн� у�а�ывают эти �ути — на файл, на ра�дел рее�тра, на �ертифи�ат или на чт��ни�удь еще. На�ри�ер, ���анда del (��т�ра� �вл�ет�� ��евд�ни��� ���анды delete-item� ��жет удалить ра�дел ре� е�тра та� же ле���, �а� и файл, � ����щью ���анды вида del hkcu:\software\badkey. Безопасность PowerShell П����ль�у W��dows Pow��Sh��� ��жет и���ль��вать�� дл� и��енени� у�тан�� в�� W��dows и и�еет в����жн��ть, �удучи �а�ущенн�й �ривиле�ир�ванны� ��ль��вателе�, ��дрыва �и�те�ы �е���а�н��ти W��dows, ����ани� M���oso�� ���а��тила�ь � нед��у�ти���ти �а�у���в �ценариев Pow��Sh��� �е� вы��лнени� ва�и целена�равленных дей�твий дл� ра�решени� та�их �а�у���в. Суще�твуют та�же д���лнительные �арьеры дл� �а�у��а тех �ценариев, ��т�рые ���ту�или и� Интернета, �� эле�тр�нн�й ��чте, чере� �р��ра��ы ��н�венных ����щений и т. д . Эт� �ыл� �делан� � целью �ред�твращени� в����жн��ти вы�влени� в�л��щи�а�и ��тенциальных �решей, на�ри�ер, в I������� �xp�o���, ���в�л�ющих у�тан�вить и �а�у�тить �ценарии Pow��Sh��� в вашей �и�те�е �е� ваше�� ра�решени�. Сценарии PowerShell и контроль учетных записей пользователей W��dows Pow��Sh���, �режде в�е��, �ыла ра�ра��тана дл� у�равлени� W��dows, ��� эт��у в ��нечн�� ит��е �т нее �жидают�� дей�тви�, дл� ��т�рых тре�уют�� �рава ад�ини�трат�ра. В W��dows 7 и V�s�� ���л�ч�а Pow��Sh��� тре�ует расширенных �ривиле�ий — д��тат�чн� �р��т� �а�у�тить ее ��д учетн�й �а�и�ью ад�ини�трат�� ра ����ьютера. От�р�йте � ра�ширенны�и �ривиле�и��и ��н� ���андн�й �тр��и, а �ате� на�ерите powershell или же в����ль�уйте�ь �дни� и� �ет�д�в, ��т�рый и���ль��вал�� дл� �а�у��а � ра�ширенны�и �ривиле�и��и ���л�ч�и cmd.exe, н� те�ерь в�е�т� нее �а�у�тите ���л�ч�у powershell.exe.
644 Глава 14. Windows PowerShell В W��dows XP дл� вы��лнени� ад�ини�тративных фун�ций нужн� �ри �а� �у��е Pow��Sh��� �ыть �аре�и�трир�ванны� в �и�те�е в �аче�тве ад�ини�трат�ра ����ьютера. М�жн� в�е�т� эт��� дл� �а�у��а powershell.exe ��д учетн�й �а�и�ью ад�ини�трат�ра в����ль��вать�� ���анд�й runas. М�жн� в����ль��вать�� �а�ет� ны� файл�� su, ��т�рый ра���атривал�� в �лаве 10, а �ате� дл� �а�у��а ���л�ч�и на�рать powershell или же ��жн� на�и�ать н�вый �а�етный файл, ��т�рый �удет �а�у��ать powershell.exe в�е�т� cmd.exe — в�е эт� на ваше у���трение. Т�ль�� чт� у����нутый в��р�� в �тн�шении и���ль��вани� ���анды runas в W��dows XP уже ра���атривал�� в �лаве 10, в ра�деле «От�рытие ��на ���андн�й �тр��и � �рава�и ад�ини�трат�ра». ➔ Ин�тру�ции �� �т�рытию ��на ���андн�й �тр��и � ра�ширенны�и �ривиле� �и��и даны в �лаве 10, в ра�деле «От�рытие ��на ���андн�й �тр��и � �рава�и ад�ини�трат�ра». Ка�ую �ы вер�ию W��dows вы ни и���ль��вали, ва� наверн��а �ах�чет�� не� �едленн� в�е эт� и��ытать на �ра�ти�е. Дл� эт��� нужн� �удет в����ль��вать�� �ривиле�ир�ванн�й ���анд�й Pow��Sh���, ���в�л�ющей �а�у��ать �ценарии Pow��Sh���. Эта ���анда �удет ра����трена в �ледующе� ра�деле. Политика выполнения сценариев Сра�у ���ле у�тан�в�и Pow��Sh��� на�тр�ена на и���ль��вание в �аче�тве инте� ра�тивн��� ��на ���андн�й �тр��и, н� не на�тр�ена на �а�у�� �ценариев. И в эт�� е�ть в��лне ��ределенный ��ы�л. Б�льшин�тв� ��ль��вателей W��dows ни���да не и�еют дел� � Pow��Sh���, и ни�т� не �нает, �удут ли еще ��наружены �а�ие�ни� �удь и�ъ�ны, ���в�л�ющие �л�у�ышленни�а� не�а�етн� �т�равить вред�н��ные �ценарии Pow��Sh��� чере� I������� �xp�o���, Adob� A��ob��, YouTub� или чере� �а�ую�ни�удь дру�ую �р��ра��у. Лучше ��е���а�ить��, че� ��т�� чув�тв�вать �е�� вин�ваты�. Н� �уде� �читать, чт� вы ��ытный ��ль��ватель, желающий в����ль��вать�� �ценари��и Pow��Sh���. Т��да ни�а�их �р��ле�, нужн� лишь и��енить и���ль� �уе�ую �� у��лчанию ��лити�у вы��лнени� �ценариев � Restricted to на ре��� �ендуе�ую �н�ю RemoteSigned. В����жные на�тр�й�и ��лити�и �еречи�лены в та�л. 14.2. Я ре���ендую у�тан�вить ��лити�у RemoteSigned. Сценарии, ��т�рые вы на� �и�али и ��хранили на �в�е� ����ьютере или ��лучили �� вашей л��альн�й �ети, �удут �а�у��ать�� �е� �р��ле�, а �ценарии, ���ту�ившие чере� �р��ра��ы � интер� нет���д�лючение�, не �удут �а�у��ать��, ���а у них не �удет цифр�в�й ��д�и�и и вы не ��дтвердите, чт� вы д�вер�ете лицу или ����ании, ��д�и�авшей �ценарий. Эт� �удет не�л�хи� ����р��и���� �е���а�н��ти. Дл� и��енени� эт�й на�тр�й�и нужн� �т�рыть ��н� ���андн�й �тр��и Pow��Sh��� � ра�ширенны�и �ривиле�и��и в ���твет�твии � ��и�ание�, �риве� денны� в �редыдуще� ра�деле. Зате� на�ерите ���анду set-executionpolicy remotesigned
Безопасность PowerShell 645 Таблица 14.2. Настройки политики выполнения сценариев PowerShell Настройка Описание Restricted Эт� у�тан�в�а �� у��лчанию. При лю�ых ���т��тель�твах не ���ут �ыть �а�ущены в���ще ни�а�ие �ценарии AllSigned Будут �а�у��ать�� т�ль�� �ценарии, и�еющие цифр�вые ��д�и�и (в�люча� �ценарии �р�фил�, ��т�рые �удут ра����трены в �ледующе� ра�деле�; �р��е эт���, ва� �удет �редл�жен� ра�решить �а�у�� �ценари� ев, ��д�и�анных � и���ль��вание� ��ределенн��� �ертифи�ата RemoteSigned Будут �а�у��ать�� �ценарии (и �р�фили�, на�и�анные на л��альн�� ����ьютере. Сценарии, �а�руженные и� Интернета, не �удут �а�ущены д� тех ��р, ���а �ни не �удут и�еть цифр�в�й ��д�и�и, и вы не �д��рите �ертифи�ат ��д�и�и Unrestricted Будут �а�у��ать�� в�е �ценарии, н� вы ��лучите �реду�реждени� в �т� н�шении �ценариев, ��т�рые �ыли �а�ружены, и их �а�у�� нужн� �удет �ан�ци�нир�вать Bypass Будут �а�у��ать�� в�е �ценарии не�ави�и�� �т их �р�и�х�ждени�. Эт� ��тенциальн� �чень ри���ванна� на�тр�й�а, �на ��жет �ри�ен�ть�� т�ль�� �ри ве�ь�а ��ецифиче��их ���т��тель�твах, ���да и�еют�� дру�ие �и�те�ы �е���а�н��ти дл� �ред�твращени� �а�у��а вред�н��ных �ценариев �е� ваше�� ра�решени� (Не ��ределена� Е�ли не у�тан�влен� в���ще ни�а��й ��лити�и, Pow��Sh��� �читает, чт� дей�твует ��лити�а Restricted, и ни�а�ие �ценарии �а�у��ать�� не �удут Желание вне�ти эти и��енени� нужн� ��дтвердить, нажав �лавиши y и Ввод. (Эт� ��дтверждение ��жн� вы�лючить, д��авив в ���андную �тр��у �люч -force.� Те�ерь вы ���жете �а�у��ать �ценарии и �р�фили Pow��Sh���. Б�лее ��др��н� �ценарии ра���атривают�� в �ледующих двух �лавах. В �тн�шении этих на�тр�е� �е���а�н��ти нужн� �нать �ледующее: y y Е�ли ваш ����ьютер �вл�ет�� ча�тью ��р��ративн�й д��енн�й �ети, т�, ���рее в�е��, в�е эти на�тр�й�и чере� �ру���вую ��лити�у нах�д�т�� ��д ��нтр�ле� ваше�� �етев��� ад�ини�трат�ра. Чт��ы у�нать � те�ущих на�тр�й�ах, нужн� на�рать ���анду get-executionpolicy. Са���т��тельн�е и��енение этих на� �тр�е� ��жет �ыть ва� нед��ту�н�. y y Е�ли ва� нав��ана или ва�и вы�рана на�тр�й�а ��лити�и AllSigned, �ридет�� �на�жать цифр�в�й ��д�и�ью лю��й �ценарий, ��т�рый нужн� вы��лн�ть. Эт� д�в�льн� ��ре�енительный �р�це��, н�, е�ли � не�у �ривы�нуть, эт� �у� дет ве�ь�а не�л�х�й вариант на�тр�й�и. Цифр�ва� ��д�и�ь ра���атривала�ь в �лаве 9 «И���ль��вание �ценариев дл� у�равлени� ����ьютера�и и �ет��и», д���лнительную инф�р�ацию ��жн� найти в ра�деле «П�д�и�ь �ценариев». y y Ст�ит на���нить, чт� файлы, �а�руженные и� Интернета, ���ечены �а� «��� тенциальн� ри���ванные», �����ль�у инф�р�аци� ��хранена в �тдельн�� ��� т��е данных, �в��анн�� � �а�руженны� файл��. Дл� удалени� эт�й ���ет�и и�
646 Глава 14. Windows PowerShell �а�руженн��� �ценари�, в �е���а�н��ти ��т�р��� вы абсолютно уверены, нужн� в����ль��вать�� W��dows �xp�o���, чт��ы �т�рыть диал���в�е ��н� �в�й�тв файла и щел�нуть на �н���е Разблокировать (U�b�o�k�. Те�ерь �н �удет �чи� тать�� л��альны� файл�� и �удет �а�у��ать�� в ра��ах ��лити�и вы��лнени� RemoteSigned. В �а�лючение нужн� �а���нить, чт� в �лучае ра��ты в ��ычн�й л��альн�й �ети (LAN�, а не в д��енн�й �ети W��dows, а та�же в �лучае, ���да ��лити�а вы��лнени� �ценариев не у�тан�влена в �ру���в�й ��лити�е, у�тан�в�и �ридет�� �ен�ть на в�ех ����ьютерах, на ��т�рых тре�ует�� у�равление � и���ль��вание� Pow��Sh���. Профили PowerShell Ка� уже �ыл� ���а�ан� в �редыдущих ра�делах, �реду Pow��Sh��� ��жн� на�тр�� ить ��д ваши �ред��чтени�, д��авив ����твенные ��евд�ни�ы, д��авив �атал��и в �уть ��и��а и т. д . Н� на�ирать в���ий ра� ���ле �а�у��а Pow��Sh��� в�е на�тр�� ечные ���анды �удет �лиш��� ут��ительн�. Ва� не �ридет�� эти� �ани�ать��, е�ли на�тр�ен профиль Pow��Sh���, �ред�тавл�ющий ����й �ценарий, ���т��щий и� ���анд, �а�у��ае�ых Pow��Sh��� �ри �ажд�� �а�у��е н�в��� э��е��л�ра эт�й ���л�ч�и. Дл� �ценари� �р�фил� ���ли �ы ��д�йти �ледующие ���анды: new-alias -name "n " - val "notepad" - descr "Редактирование файла в Блокноте" $env:path += "c:\PSscripts" чт��ы �ред��читае�ые ва�и ����твенные ��евд�ни�ы �ыли д��ту�ны �ри �ажд�� и���ль��вании Pow��Sh���. Нужн� у����нуть еще �дн� ���т��тель�тв�: �а�а� �ы ра�н�видн��ть W��dows Pow��Sh��� ни �а�у��ала�ь (��ычн�е ��н� ���андн�й �тр��и Pow��Sh���, Pow��Sh��� IS� в �рафиче���� ��ль��ватель���� интерфей�е или вариант Pow��Sh���, в�тр�ен� ный в дру��е �рил�жение�, �на �� �череди ищет �ценарии �р�фил� в �ледующих двух �е�тах: %windir%\system32\WindowsPowerShell\v1.0 �де %windir% — �а��а, в ��т�рую у�тан�влена W��dows, ��ычн� эт� c:\windows, и %userprofile%\[My] Documents\WindowsPowerShell �де %userprofile% — �а��а �р�фил� вашей учетн�й �а�и�и, ��ычн� эт� c:\Users\ имя_пользователя на W��dows 7 и V�s��, и c:\Documents and Settings\ имя_пользова­ теля на W��dows XP. Внутри этих двух �а��� ра�личные виды W��dows Pow��Sh��� ишут ра�ные и�ена файл�в �р�фил�. Каждый и� вариант�в Pow��Sh��� �начала ищет �ценарий �� и�ени pro�le.ps1 и, е�ли нах�дит, �а�у��ает е�� на вы��лнение. Зате� ���андн�е ��н� Pow��Sh��� ищет �ценарий �р�фил� �� и�ени Microsoft.Powershell_pro�le.ps1 и, е�ли нах�дит, �а�у��ает е�� на вы��лнение. А в�т �р��ра��а Pow��Sh��� IS�, �а� �у��ае�а� в �рафиче���� интерфей�е ��ль��вател�, �начала ищет pro�le.ps1, а �ате� Microsoft.PowerShellISE_pro�le.ps1.
Профили PowerShell 647 Сценарии �р�фил�, ��т�рые нах�д�т�� в �а��е, у�а�ывае��й �ере�енн�й %windir%, �а�ают�� в�ех ��ль��вателей ����ьютера, а �ценарии �р�фил�, ��т�рые нах�д�т�� в �а��е, у�а�ывае��й �ере�енн�й %userprofile%, �а�ают�� т�ль�� ���� л�че�, и���ль�уе�ых ва�и. П�эт��у �уте� и��енени� ��держи���� ра�ных файл�в ��жн� �р�и�ве�ти р�д ����твенных ��щед��ту�ных на�тр�е� и �делать не��т�рые на�тр�й�и т�ль�� дл� �е��. П�д��ны� же ��ра��� ��жн� на�тр�ить в�е варианты Pow��Sh���, ���е�тив ���анды в pro�le.ps1, или же ��жн� �ри������ить ��д �в�й в�у� ра�ные варианты Pow��Sh���s, ���е�тив ���анды в файлы дл� т�й или ин�й вер�ии. Pow��Sh��� вы��лн�ет �аждый найденный �ценарий, ��эт��у ит���ва� �реда �у� дет и�еть ��в��у�ные и��енени�, �ривне�енные в�е�и на�тр�ечны�и �ценари��и. СОЗДАНИЕ ПРОФИЛЯ POWERSHELL В Pow��Sh��� е�ть �ред��ределенна� �ере�енна� �� и�ени $profile, ��т�ра� у�а�ывает на файл �р�фил� дл� т�й или ин�й вер�ии в вашей �а��е, у�а�ыва� е��й в �ере�енн�й %userprofile%. На�ри�ер, в ��е� ��не ���андн�й �тр��и Pow��Sh��� �ере�енна� $p�o���� и�еет �начение "c:\Users\bknittel\Documents\ WindowsPowerShell\ Microsoft.PowerShell_profile.ps1". При�ту�ить � ���данию �р�фил� Pow��Sh��� ��жн�, на�рав ���анду notepad $profile. Пр��ра��а Бл��н�т ��р��ит, х�тите ли вы ���дать н�вый файл. Щел�� ните на �н���е Да (Y�s� и ��жете �ри�ту�ать � е�� ���данию. Б�лее ��др��н� ���дание �ценариев ра���атривает�� в �ледующих двух �лавах. Чт��ы ���дать �р�филь дл� в�ех ��ль��вателей в �а��е %windir%\system32\ WindowsPowerShell\v1.0 на W��dows 7 или V�s��, �ледует ���нить, чт� нужн� в����ль��вать�� ��н�� ���андн�й �тр��и или э��е��л�р�� Pow��Sh��� � ра�� ширенны�и �ривиле�и��и. И�� эт�й �а��и хранит�� в �ере�енн�й $PSHOME, ��эт��у дл� ���дани� или реда�тир�вани� файла и� Pow��Sh��� ��жн� в��� ��ль��вать�� ���анд�й notepad $pshome\profile.ps1 или ���анд�й notepad $pshome\Microsoft.PowerShell_profile.ps1. Но, и эт� ве�ь�а �уще�твенн�е но, �ценарии �р�фил� — эт� в�е те же �ценарии, и Pow��Sh��� вы��лнит т�ль�� те �ценарии �р�фил�, ��т�рые �твечают тре��ва� ни�� �е���а�н��ти, ра����тренны� в �редыдуще� ра�деле. Следует ���нить, чт� �� у��лчанию и���ль�ует�� ��лити�а вы��лнени� Restricted, ��эт��у �ценарии �р�фил� в���ще не �удут �а�у��ать�� (е�ли т�ль�� вы не нах�дите�ь в д��енн�й �ети и ваш ад�ини�трат�р �ети не ра�решил вы��лнение �ценариев�. Чт��ы в����ль��вать�� �в�й�тв�� �р�фил� дл� индивидуальн�й на�тр�й�и �в�ей �реды Pow��Sh���, нужн� и��енить ��лити�у вы��лнени� и, в����жн�, �на�дить �в�и �ценарии цифр�в�й ��д�и�ью. Ка� эт� �делать, ��ъ��нен� в �ре� дыдуще� ра�деле.
Программирование в среде PowerShell В эт�й �лаве �ы ра����три� ��и�ание Pow��Sh��� �а� ��ы�а �р��ра��ир�вани�. А в �ледующей �лаве �ерейде� � �ра�ти�е. y y Будет ���а�ан�, чт� в Pow��Sh��� и�еют�� в�е �тру�туры, �жидае�ые �т ��� вре�енн��� ��ы�а �р��ра��ир�вани�. (Ниче�� удивительн���, эт�т ��ы� ���а� и��тв�вал �в�и �в�й�тва чуть ли не �т �ажд��� и�еюще���� ��ы�а!� y y Вы у�наете, чт� у ��ы�а Pow��Sh��� �ри�р�тан� в ру�аве не���ль�� дей�твитель� н� не��ычных �ри������лений, ����енн� дл� ра��ты � �а��ива�и. У не�� та�же и�еют�� в�тр�енные ин�тру�енты дл� �р�и�в�д�тва �равнений, �инта��иче� ����� ра���ра и ��д�тан�в�и те��та � и���ль��вание� ша�л�н�в ре�ул�рных выражений. y y Зде�ь вы у�наете, чт� в�е �ере�енные �вл�ют�� ��ъе�та�и .N�T F��m�wo�k, ��эт��у �уще�твует р�д �ет�д�в и �в�й�тв, ��т�ры�и ��жн� ��ль��вать�� в �тн�шении лю��й �ере�енн�й. В эт�й �лаве �удут �ред��тавлены начальные �ведени� � �н��их ��ле�ных ��ъе�т�в. Язык программирования Windows PowerShell В эт�й �лаве дает�� ��и�ание Pow��Sh��� �а� ��ы�а �р��ра��ир�вани�. Будут ���лед�вательн�, ��эле�ентн�, �т ��ще�� � ча�тн��у ра����трены ��чти в�е ���� �енн��ти ��ы�а. Я ��ла�аю, чт� и дл� н�вич�а и дл� ��ытн��� �р��ра��и�та та��й ��дх�д �танет ��лее ��ле�ны� введение�, че� фра��ентир�ванные ��рав�чные файлы или не �енее фра��ентир�ванные ��рав�чни�и и уче�ни�и, ��н�ванные на ве��техн�л��и�х и найденные �де�ни�удь в недрах Интернета. Я ре���ендую ва� �е�л� �р����треть �атериал эт�й �лавы, чт��ы ��лучить �ред�тавление � в�ех ����енн��т�х �р��ра��ир�вани� в �реде Pow��Sh���, а �ате� вернуть�� � данн�й инф�р�ации и вни�ательн� �р�читать те ее ча�ти, в ��т�рых нужн� ра���рать�� ��лее ��др��н�. П��ле эт��� вы �удете лучше ��д��т�влены � и�учению интера�тивных ��ра� в�чных �траниц Pow��Sh��� дл� ��лучени� ��лее ��др��н�й инф�р�ации �� �т� дельных эле�ентах ��ы�а. Нужн� �удет �р��т� на�рать в ��не ���андн�й �тр��и Pow��Sh��� help или help название_темы (��. �лаву 14, ра�дел «П�лучение ��рав� 15
Комментарии 649 �и»�. В����жн�, ва� �удет �р�ще �р���атривать та�ие же �траницы ��рав�и в интера�тивн�� режи�е на ве���айте technet.microsoft.com. Вы�ерите на �лавн�й �транице �ун�т �еню Library, �ате� �лева ра��р�йте �ун�ты �еню ScriptingWindows PowerShellWindows PowerShell Core и �р����трите �татьи � �а��л�в�а�и «W��dows Pow��Sh��� Abou� H��p Top��s» и «W��dows Pow��Sh��� Cmd��� H��p Top��s». Синтаксис Windows PowerShell W��dows Pow��Sh��� �вл�ет�� �ред�й ���андн�й �тр��и и, �а� и �тара� ���л�ч�а ���андн�й �тр��и, на �а��� ��н�вн�� ур�вне ���в�л�ет ���тр�чн� вв�дить ���ан� ды. Эта �реда вы��лн�ет �аждую ���анду и выв�дит ре�ультаты. В �редыдущей �лаве �ыл� ра����трен�, �а� �на вы��лн�ет ���андлеты и ���анды W��dows и �а� �ередавать вых�дные данные чере� �анал и �ерена�равл�ть выв�д. Те�ерь �ы ра�� ���три� Pow��Sh��� �а� ��ы� �р��ра��ир�вани� и ���дани� �ценариев. Ка� вы увидите, Pow��Sh��� — эт� н�вый ��ы�. Е�ли и���ль�уе�ый в W��dows S���p� Hos� (WSH� ��ы� V�S���p� ��н�ван на V�su�� ��s�� �o� App������o�s, � ��т�� ры� �н��ие �на���ы �а� � ��ы��� �а�р���ределений и �ценариев, и���ль�уе�ы� в M���oso�� O�����, т� Pow��Sh��� �ыл ���дан � нул�. В эт�� е�ть �а� х�р�шие, та� и �л�хие �т�р�ны. Х�р�шие �в��аны � те�, чт� ���датели Pow��Sh��� ���ли ��вершен� н� �в���дн� в�лючить в ��ы� р�д интере�ных н�вых идей, в ре�ультате че�� ���ви� ла�ь в����жн��ть вы��лн�ть д�в�льн� �л�жные ��ерации. Н� дл� эт��� �ыл �ри� ду�ан д�в�льн� �а�ы�л�ватый �инта��и�, ��т�рый ��р�й на���инает ���андную ���л�ч�у U��x 1970�х ��д�в, а не ��ы� �р��ра��ир�вани� 2000�х . Наверн�е, ���че в�е�� � не� ��жн� �ыл� �ы выра�ить�� та�: е�� �ра��та �вн� не �р��ает�� в �ла�а. Н� �а� �ы та� ни �ыл�, эт� �чень ��щный ��ы� (действительно ��равдыва� ющий ���тавл�ющую �в�е�� и�ени — pow���, и �н ��жет �тать �чень ��ле�ны� ра��чи� ин�тру�ент��. Давайте начне� � ��н�в ��ы�а Pow��Sh���. Комментарии К���ентарии неи��енн� �вл�ют�� �дни� и� �ервых эле�ент�в �ри и�учении лю� ���� ��ы�а �р��ра��ир�вани�. В Pow��Sh��� ����ентарий начинает�� � �и�в�ла #. Эт�т �и�в�л ��жн� ���е�тить в начале �тр��и, т��да в�� �на �ревратит�� в ���� �ентарий, или ���е�тить е�� в лю��� �е�те ���андн�й �тр��и. В�е чт� нах�дит�� �т �и�в�ла # и д� ��нца �тр��и, �удет �р�и�н�рир�ван�. Ра����три� �ри�ер: $cname = 'dualcore' # присваивание имени удаленному компьютеру Е�ли нужн� на�и�ать ��льш�й �л�� те��та ����ентари�, е�� ��жн� ���е�тить внутри �и�в�л�в <# и #>, �а� в данн�� �ри�ере: <# Это блок текста комментария #> Эт�т �инта��и� ра��тает т�ль�� в Pow��Sh��� V2.0 и ��лее ���дних вер�и�х. Перва� вер�и� �ар�еры �л��а ����ентариев не ��ддерживает.
650 Глава 15. Программирование в среде PowerShell Переменные и типы Чт��ы �тличить их �т ���андлет�в, ���анд и дру�их �лючевых �л�в ��ы�а, �ере� �енные Pow��Sh��� начинают�� � �и�в�ла $. Ра��ту эт��� �инта��и�а ��жн� уви� деть, на�рав в ���андн�� ��не Pow��Sh��� �ледующие две ���анды: $stone = 'opal' $stone Перва� ���анда ��хран�ет �тр��у opal в �ере�енн�й �� и�ени $stone, а вт�ра� ���анда выв�дит �начение эт�й �ере�енн�й. ▼▼ Командная строка PowerShell, содержащая только лишь значение, имя переменной или вы- ражение, выводит получившееся значение в окно командной строки. Для вывода не нужно применять какую-нибудь специальную команду, если только не требуется специальное форма- тирование, которое будет рассмотрено в главе 16. И�ена �ере�енных в�е�да начинают�� �� �на�а д�ллара $ и ���ут ��держать лю��е ��четание �у�в, чи�ел, �р��ел�в или дру�их �и�в�л�в — фа�тиче��и, лю�ых выв�ди�ых на �ечать �и�в�л�в �а и��лючение� фи�урных ������ { и } и дв�ет�� чи� (:�. Е�ли и�� ��держит �р��елы или ��ециальные �и�в�лы, е�� нужн� в��ть в фи�урные �����и. Ре�и�тр �и�в�л�в р�ли не и�рает. Ра����три� р�д �ри�ер�в: $deli = 'Ba Le Vietnamese Sandwiches' ${my computer name} = 'dualcore' ${[weird]>variable|name I'd#never%really*use} = 'abc' А те�ерь �удет еще интере�нее: в�е �ере�енные Pow��Sh��� �вл�ют�� ��ъе�та�и. Т�чнее, �ни �вл�ют�� ��ъе�та�и .N�T F��m�wo�k, �ри эт�� д��ту�ен лю��й ти� ��ъе�т�в .N�T F��m�wo�k. Стр���вые �начени�, та�ие �а� 'abc', хран�т�� в виде ��ъе�т�в System.String, а чи�л�вые �начени�, та�ие �а� 123, �� у��лчанию хран�т� �� �а� ��ъе�ты System.Int32. Пере�енны� д��ту�ны в�е �в�й�тва и �ет�ды этих ��ъе�т�в. На�ри�ер, е�ли в��ть ��ю �ере�енную $deli, выражение $deli.Length выведет длину �тр��и — 27. Наи��лее ча�т� в�тречающие�� ти�ы �ере�енных �еречи�лены в та�л. 15.1. В та�л. 15.2 �еречи�лены не��т�рые д���лнительные ти�ы, ��т�рые ���ут �ри� ��дить�� �ри ра��те � �ита�и или � ����ы�и ти�а�и �начений и ��ъе�та�и, в�тре� чающи�и�� в �и�те�н�� �р��ра��ир�вании и у�равлении. Таблица 15.1. Самые распространенные типы переменных PowerShell Имя объекта Сокращение при приведении Представляемые значения Пример System.Boolean [boolean] или [bool] T�u� и F��s� T�u� System.DateTime [datetime] Дата и вре�� 10�01�201011:30 AM System.TimeSpan [timespan] Интервал вре�ени 1 день 2 ча�а
Переменные и типы 651 Имя объекта Сокращение при приведении Представляемые значения Пример System.Double [double] Чи�л� � �лавающей т�ч��й � т�ч� н��тью ���л� 15 �на��в 3.1415926535�979 System.Int32 [int] или [int32] Цел�чи�ленн�е �начение �т –2 1 474�364� д� +21474�3647 55903�736 System.String [string] Стр��а �и�в�л�в '�b�' Таблица 15.2. Некоторые более специфические типы переменных Имя объекта Сокращение при приведении Представляемые значения Пример System.Byte [byte] Бе��на��в�е цел�чи�ленн�е �начение �т 0 д� 255 47 System.Char [char] Отдельный �и�в�л в ��дир�в�е Юни��д '�' System.Decimal [decimal] Чи�л� � �лавающей т�ч��й � т�чн��тью ���л� 2� �на��в 1234567�901234567 System.Int16 [int16] Цел�чи�ленн�е �начение �т –3276� д� +32767 4747 System.Int64 [long] Цел�чи�ленн�е �начение �т –9223372036�54775�0� д� +9223372036�54775�07 1234567�901234567 System.SByte [sbyte] Цел�чи�ленн�е �начение �т –12� д� +12� 47 System.Single [single] Чи�л� � �лавающей т�ч��й � т�чн��тью ���л� 7 �на��в 3.141593 System.UInt16 [uint16] Бе��на��в�е цел�чи�ленн�е �начение �т 0 д� 65535 4747 System.UInt32 [uint32] Бе��на��в�е цел�чи�ленн�е �на� чение �т 0 д� 4294967295 474747 System.UInt64 [uint64] Бе��на��в�е цел�чи�� ленн�е �начение �т 0 д� 1�446744073709551615 4747474747474747 Литеральные значения О�ычн� Pow��Sh��� ��редел�ет ���твет�твующий ти� ��ъе�та дл� лю���� вве� денн��� ва�и �начени�. На�ри�ер, е�ли на�рать $v = 3, Pow��Sh��� ��ределит, чт� 3 �вл�ет�� цел�чи�ленны� �начение�. П� у��лчанию дл� �ред�тавлени� эт��� �начени� и на�начени� дл� е�� хранени� �ере�енн�й $v ���дает�� ��ъе�т System.
652 Глава 15. Программирование в среде PowerShell Int32. А в�т выражение $v = 'abc' чет�� �ред�тавл�ет �тр��у, ��эт��у Pow��Sh��� и���ль�ует System.String. В та�л. 15.3 ���а�аны варианты вв�да � �лавиатуры ра�личных ти��в �начений и т�, �а� Pow��Sh��� их интер�ретирует. Таблица 15.3. Форматы литеральных значений Формат Тип значения 'xyz' Sys��m.S����g 'xyz' Sys��m.S����g, � интер��л�цией (��т�ра� в���ре �удет ра����трена� 123 0x12ab Sys��m.I��32 (ше�тнадцатерична� �а�и�ь� 1234L 0x12abL Sys��m.I��64 (ше�тнадцатерична� �а�и�ь� 123.45 4.321e-6 Sys��m.Doub�� (э����ненциальна� �а�и�ь� 123.45D Sys��m.D���m�� $true, $false Sys��m.�oo���� При ра��те � чи�ла�и нужн� ду�ать �� и���ль��вании дл� хранени� ра��� чих �начений ��ъе�та ���твет�твующе�� ти�а. Е�ли ра��та ведет�� � чи�ла�и, ��т�рые не �ревышают в длину дев�ть цифр, т� в��лне ��д�йдет и���ль�уе�ый �� у��лчанию ти� [int] (System.Int32�. Н� е�ли �жидают�� чи�ла � 10 и ��лее цифра�и, ��тре�ует�� �вны� ��ра��� ����щить Pow��Sh��� � т��, чт� нужн� ли�� и���ль��вать [int64] или [uint64] дл� целых чи�ел, ли�� и���ль��вать [decimal], ��т�рый �вл�ет�� ф�р�ат�� чи�ел � �лавающей т�ч��й � т�чн��тью 2� �на��в � �лавающей т�ч��й в лю��й ���иции �реди этих 2� �на��в. Е�ли �ред��ла�ает� �� ра��та � чи�ла�и � �лавающей т�ч��й (др��ны�и чи�ла�и�, ��т�рые нужны дл� ��ра��т�и ��лее или �енее �ру�ных �начений, нужн� и���ль��вать [double] (System.Double�. В та��� �лучае нет ни�а�их ��н�ваний дл� и���ль��вани� System. Single. Следует еще ра� на���нить, чт� в ��льшин�тве �лучаев Pow��Sh��� ��жет ав� т��атиче��и ��ределить, �а��й и�енн� ��ъе�т нужн� и���ль��вать. М�жн� дать Pow��Sh��� �вные у�а�ани� � т��, �а��й ��ъе�т нужн� и���ль��вать, и���ль�у� �тру�туру ��ы�а ��д на�вание� приведение, ��т�ра� ���же �удет ра����трена в данн�й �лаве. Следует �а�етить, чт� �� у��лчанию �ере�енные Pow��Sh��� �вл�ют�� уни� вер�альны�и и ��держат ��ъе�ты лю���� ти�а: �тр��у, чи�л�, �а��ив, ��ъе�т у�равлени� WMI или лю��й дру��й ��ъе�т. Ти� ��ъе�та, ��т�рый ��жет ��дер� жать�� в �ере�енн�й, ��жн� �вны� ��ра��� ��раничить, ���е�тив на�вание ти�а в �вадратных �����ах перед и�ене� �ере�енн�й, слева �т �на�а равен�тва, �а� в �ледующих двух ���твет�твующих �ри�ерах: [int]$v=3 [System.Int32] $v = 3
Переменные и типы 653 Е�ли эт� �делать, �ере�енна� ���жет ��держать т�ль�� ��ъе�ты у�а�анн��� ти�а, и вы ��лучите ����щение �� �ши��е, е�ли а� вы ���ытаете�ь ���е�тить в нее �начение дру���� ти�а, и �� Pow��Sh��� не ���жет ��ределить, �а� ��хранить �начение в виде ��ъе�та �а�вленн��� ти�а. На�ри�ер, ���ле вы��лнени� �редыду� щих ���анд �ерва� и� �ледующих ���анд �удет вы��лнена, а вт�ра� ��енерирует �ши��у $v = '21' $v = 'xyz' ��т��у чт� Pow��Sh��� ��жет �ре��ра��вать �тр��у '21' в ее чи�л�в�е �начение, н� �ре��ра��вать 'xyz' в чи�л� не �ред�тавл�ет�� в����жны�. Приведени� ��ъе�т�в � ��ределенн��у ти�у, ��т�рые �удут ра����трены ���же в данн�й �лаве, �а�тав� л�ют �риве�ти � ��ределенн��у ти�у �начение, ��т�р�е нах�дит�� справа �т �на�а равен�тва, не�ави�и�� �т т���, �ыла ли �а�а �ере�енна� ��ъ�влена дл� хранени� т�ль�� у�а�анн��� ти�а �начени�, или �ыла ��ъ�влена в �аче�тве универ�альн��� хранилища ��ъе�та. Свойства и методы объекта В�е �ере�енные, а та�же в�е �начени� и выражени� в Pow��Sh��� �вл�ют�� ��ъ� е�та�и .N�T ли�� в виде �р��тых ти��в ��ъе�т�в, ра����тренных в �редыдуще� ра�деле, ли�� в виде ��лее �л�жных ��ъе�т�в. В�е эти ��ъе�ты и�еют �ет�ды и (или� �в�й�тва. Дл� ��лучени� �начени� �в�й�тва ��ъе�та нужн� на�рать ��ыл�у на ��ъе�т, ��� �ле нее ���тавить т�ч�у, а �ате� на�рать на�вание �в�й�тва, �а� в �ледующе� �ри�ере $a = "my string" $a.Length ��т�рый вычи�л�ет и выв�дит длину �тр��и. Анал��ичн� ��жн� ���ту�ать � поля­ ми, ��т�рые �вл�ют�� �в�й�тва�и ��ъе�та, �редна�наченны�и т�ль�� дл� чтени�; �ни не �ави��т �т �а�����ли�� ��н�ретн��� �начени� данных. Дл� вы��ва �а�����ни�удь �ет�да ��ъе�та ���ле и�ени �ет�да нужно ���тавить �ру�лые �����и: $a.ToUpper() При и���ль��вании �ру�лых ������ Pow��Sh��� выв�дит ���ию �тр��и � �и�� в�ла�и, �ереведенны�и в верхний ре�и�тр. Е�ли �ру�лые �����и не ���тавить, вы ��лучите не �лиш��� ��ле�ную инф�р�ацию � �а��� �ет�де. (С техниче���й т�ч�и �рени�, �е� �ру�лых ������ �начение выражени� объект.метод �вл�ет�� ��ыл��й на �ет�д, н� не вы��в�� эт��� �ет�да.� Е�ли у ва� е�ть ��ыт ра��ты � ��ы� ��� V�su�� ��s�� или е�� варианта�и, �де �ру�лые �����и ���ут не �тавить�� ���ле и�ени �ет�да, ва� �ридет�� �а���нить н�в�е �равил�! П��р��уйте �а�и на�рать ���анду gm -in 'abc' чт��ы �����треть �ет�ды и �в�й�тва �тр���в��� .N�T���ъе�та. Зате� на�ерите �ледующие ���анды: $a = 1,2,3 gm -in $a gm -in $a[0]
654 Глава 15. Программирование в среде PowerShell ▼▼ Для свойств, методов и полей объекта есть общее название — элементы (members). Инфор- мацию об элементах .NET-объектов можно найти на веб-сайте msdn.microsoft.com, если вы- брать вкладку Library, а затем провести поиск по ключевой фразе «.NET array object members». PowerShell может также вывести массу информации об объектах. Для получения списка свойств и методов любого объекта нужно набрать команду «gm -in объект», где объект — это значение объекта или имя переменной. (gm является псевдонимом командлета get-member cmdlet, а –in является аббревиатурой -inputobject. Полная команда имеет вид «get-member –inputobject», но кому захочется набирать ее по 10 раз в день?) В ре�ультате �удет ���дан �а��ив. Первый ���андлет gm выв�дит инф�р�ацию � �а��� ��ъе�те �а��ива. Вт�р�й ���андлет gm выв�дит инф�р�ацию �� ��ъе�те, хран�ще��� в �ерв�� эле�енте �а��ива. Конструкторы объектов К��да и���ль�ует�� н�вый ��ъе�т, �ача�тую �ра�у же нужн�, чт��ы �н ��держал ��н�ретн�е �начение. На�ри�ер, ��ерат�р $v = 3 ���дает [int]���ъе�т, ��т�рый � �а���� начала ��держит �начение 3. Дл� не та�их �р��тых .N�T���ъе�т�в, ��т�рые ��держат ��лее �л�жные �начени�, на�ри�ер ��ъе�ты [datetime], ра���атривае�ые далее в данн�й �лаве, ��жн� в����ль��вать�� �ет�д�����н�тру�т�р��. К�н�тру�� т�р создает ��ъе�т и ��хран�ет данные в не�, �а� т�ль�� �н �удет ���дан. Мн��ие .N�T���ъе�ты и�еют не���ль�� вариант�в ��н�тру�т�р�в, ��т�рые и���ль�уют дру��е ��личе�тв� ар�у�ент�в или дру�ие ти�ы данных. Ключи ��н�тру�т�ра �еречи�лены в интера�тивн�й д��у�ентации �� .N�T F��m�wo�k, ра����тренн�й в �редыдуще� ра�деле. .N�T решает, �а�а� вер�и� и���ль�ует��, на ��н�ве ��ли� че�тва ар�у�ент�в и ти��в у�а�анных ва�и �начений. На�ри�ер, н�вый ��ъе�т [datetime] ��жн� ���дать, �ред��тавив ��д, �е��ц, день, ча�, �инуту и �е�унду или же в����ль��вавши�ь р�д�� дру�их вариант�в. Дл� и���ль��вани� ��н�тру�т�ра в Pow��Sh��� нужн� в����ль��вать�� ���анд� лет�� new-object и �ередать в �а��иве ар�у�енты ��н�тру�т�ра. На�ри�ер, чт��ы ���дать ��ъе�т DateTime дл� 6 �арта 2010 9:22:33 AM, ��жн� в����ль��вать�� �ледующи� ��ерат�р��: $dt = new-object System.DateTime 2010,3,6,9,22,33. При эт�� и���ль�ует�� вер�и� ��н�тру�т�ра, д��у��ающа� и���ль��вание ше�ти цел�� чи�ленных ар�у�ент�в: year (��д�, month (�е��ц�, day (день�, hour (ча��, minute (�инута� и second (�е�унда�. Нужн� и���ль��вать ��лн�е и�� ��ъе�та, на�ри�ер System.DateTime или System.Timespan. ▼) Зачастую подобное явное использование конструктора не потребуется. PowerShell может пре- образовать строковые значения в несколько типов объектов, включая даты и показатели вре- мени, и для этих типов данных проще воспользоваться строковым методом. Как это сделать, будет показано далее. Вставка в строки Pow��Sh��� ���в�л�ет у�а�ать �тр��и, �а�лючив те��т в �и�в�лы �динарных ('� или дв�йных ("� �авыче�. При и���ль��вании �динарных �авыче� те��т интер�ре� тирует�� и�енн� та�, �а� �н на�ран. Е�ли и���ль�уют�� дв�йные �авыч�и, лю��й
Переменные и типы 655 в�треченный внутри �тр��и эле�ент $имя �а�ен�ет�� �начение� у�а�анн�й �ере� �енн�й. Эт� �в�й�тв� ��жет ��а�ать�� ��ле�ны�, н� �ри эт�� нужн� ���тарать�� ���йти�ь �е� лишних �юр�ри��в. В�т чт� � и�ею в виду: в �ледующе� �ценарии $name = 'Брайан' $nametag1 = 'Привет, меня зовут $name' $nametag2 = " Привет, меня зовут $name" �ере�енн�й $nametag1 �ри�ваивает�� �тр���в�е �начение Привет, меня зовут $name, а �ере�енн�й $nametag2 �ри�ваивает�� �тр���в�е �начение Привет, меня зовут Брай- ан. Кр��е т���, �тр��и, �а�люченные в дв�йные �авыч�и, д��у��ают ��д�тан�в�у ре�ультат�в вычи�лений целых выражений, и���ль�у� ф�р�ат $(выражение) �а� в �ледующе� �ри�ере: "Ваш возраст - $($current_year - $birth_year) года (лет). " Эта ���андна� �тр��а выведет те��т вр�де Ваш возраст — 32 года (лет). Эт� ве�ь�а уд��ный ������ и���ль��вани� в�тав�и, ��т�рый ��жн� �ри�енить дл� ф�р�атир�вани� выв�да, в�лючающе�� �у�вальный те��т и ��держи��е �ере� �енных и выражений. Н� в �ередине �ценариев, та� �де идет ра��та �� �тр��а�и, в����жн�, та�а� в�тав�а �удет и�лишней, ��эт��у нужн� �удет в����ль��вать�� �динарны�и �авыч�а�и. ▼▼ Для тех, кто привык работать с C, C++, C#, VBScript или с большинством других языков, изба- виться от привычки использования двойных кавычек довольно нелегко, но нужно все же попы- таться. В большинстве случаев использование двойных кавычек не вызовет никаких неприят- ностей, но однажды эти кавычки могут сыграть злую шутку. В PowerShell двойными кавычками лучше пользоваться только в том случае, когда вам действительно нужна вставка. Чт��ы ���тавить �авыч�и, ��ружающие �тр��у внутри �тр���в��� �начени�, нужн� и���ль��вать �дв�енные �авыч�и. На�ри�ер, $b = 'John''s book' $v = '''имя в кавычках'' ' ���ещает �тр��у John’s book в �ере�енную $b, а �тр��у 'имя в кавычках' в �ере� �енную $v. В� вт�р�� �ри�ере �ервые �динарные �авыч�и �т�рывают �тр���в�е �начение. С��едние вт�ра� и треть� �авыч�и интер�ретируют�� �а� �дин �и�в�л �авыч�и, ��т�рый ���ещает�� в �тр���в�е �начение. В�е�т� эт��� ��жн� в����ль� ��вать�� «дру�и�и» �авыч�а�и, на�ри�ер $v = "'имя в кавычках '" $v = '"имя в кавычках "' дл� ��лучени� �тр���в��� �начени�, ��держаще�� ���твет�твенн� �динарные или дв�йные �авыч�и. Н�, �а� уже у���инал��ь, �ри и���ль��вании дв�йных �авыче� � внешней �т�р�ны �тр��и, е�ли эта �тр��а ��держит �на�и д�ллара, �а� ��ерат�р ��жет �ыть вы��лнен не�жиданны� дл� ва� ��ра���. ▼) Если строка заключается в двойные кавычки, то PowerShell можно заставить не применять вставку, поставив перед знаком $ в строке символ обратного апострофа (`) . Например, строка "Имя переменной "$a" выведет текст Имя переменной $a.
656 Глава 15. Программирование в среде PowerShell Специальные символы О�ратный а���тр�ф и���ль�ует�� та�же дл� ���ещени� в �тр��у ��ециальных �и�в�л�в. Между �динарны�и или дв�йны�и �авыч�а�и �ледующие �тр��и �а� �ен�ют�� �дин�чны�и �и�в�ла�и. Строка Замена `0 ASCII��и�в�л NUL (0� `a Си�в�л �в�н�а (ASCII 7�, ��т�рый �ри выв�де в ��н� ���андн�й �тр��и вы�ывает �ву��в�й �и�нал `b За��й — ���ksp��� (ASCII �� `f Перев�д �траницы — Fo�m ���d (ASCII 12� `n Перев�д �тр��и — L��� ���d (ASCII 10� `r В��врат �арет�и — C�����g� ���u�� (ASCII 13� `t Г�ри��нтальна� та�ул�ци� — Ho���o���� ��b (ASCII 9� `v Верти�альна� та�ул�ци� — V������� ��b (ASCII 11� Конструкция Here-String Стр���в�е �начение, ��держащее в�тр�енные �и�в�лы в��врат �арет�и — �ерев�д �тр��и, ��жн� ���дать � ����щью ��н�тру�ции, ��т�ра� на�ывает�� here­string (�де�ь �тр��а�. Эт� �тр���в�е �начение, ра��р��тран�е��е на не���ль�� �тр��. У эт�й ��н�тру�ции �ледующий ф�р�ат: $переменная = @ ' эти строки копируются в переменную '@ В �аче�тве �т�рывающих и �а�рывающих �ар�ер�в ��жн� и���ль��вать ли�� @' и '@, ли�� @" и "@. Пу�тые �тр��и в �л��е те��та и�н�рируют�� и в ���давае��й в ре�ультате вы��лнени� ��ерат�ра �тр���в�й �ере�енн�й не ���вл�ют��. Внутри �л��а те��та �и�в�лы �авыче� не и�еют ��ециальн��� на�начени� и ���ируют�� �у�вальн�. При и���ль��вании в �аче�тве �ар�ер�в �ру�� �и�в�л�в @" и "@ ��у� ще�твл�ет�� в�тав�а �начений в�е�т� и�ен �ере�енных. Освобождение переменных Ин��да, х�т� и д�в�льн� ред��, в��ни�ает не��х�ди���ть в удалении ��ределенн�й в �ценарии �ере�енн�й — на�ри�ер, е�ли е�ть �ценарий, ��т�р��у �рих�дит�� ра��тать д�в�льн� д�л�� � ��льши�и ��ъе�а�и данных. В та��� �лучае ��жет ��� �вить�� ��тре�н��ть ��в���дить �ере�енные, в ча�тн��ти �а��ивы или ��ъе�ты, хран�щие ��льшие ��ъе�ы данных. Пр�ще в�е�� �ри�в�ить �ере�енн�й н�в�е �начение в�а�ен �тар���. Е�ли �ере� �енна� $a ��держит ��р��ный �а��ив, т� ��ерат�р $a = $null аннулирует �а��ив.
Переменные и типы 657 В �аче�тве альтернативы дл� удалени� и�ени �ере�енн�й и ее ��держи���� ��жн� в����ль��вать�� ��ерат�р�� � ���андлет�� remove-variable имя_переменной. ▼) После освобождения переменных совсем не обязательно переходить в Диспетчер задач, чтобы посмотреть, какую память занимает powershell.exe. Среда .NET Framework, на которой основа- на работа оболочки PowerShell, освобождает ранее занимаемую память благодаря процессу так называемого сбора мусора (garbage collection) только тогда, когда увидит в этом реальную необ- ходимость. Ее можно заставить заняться сбором мусора с помощью оператора [GC]::Collect(), но я не рекомендую ею пользоваться, если только не возникнут какие-нибудь экстремальные обсто- ятельства. Ее частое использование может привести к падению производительности системы. Предопределенные переменные О��л�ч�а Pow��Sh��� �ред��редел�ет р�д �ере�енных, ча�ть и� ��т�рых �ен�ет �в�е �начение в х�де вы��лнени� ���анд Pow��Sh���. В Pow��Sh��� та�ие �ере�ен� ные на�ывают�� авт��атиче��и�и. Не��т�рые и� этих �ере�енных �еречи�лены в та�л. 15.4 . Дл� �р����тра ��лн��� ��и��а нужн� в ��рав�чни�е �� Pow��Sh��� ��ратить�� � те�е about_automatic_variables. Таблица 15.4. Неполный список автоматических (предопределенных) переменных Переменная Содержимое $$ П��ледн�� ле��е�а в ���ледней �тр��е, �р�читанн�й и� ��на ���андн�й �тр��и $? И�еет �начение True, е�ли �редыдуща� ��ераци� у��ешн� �аверши� ла�ь, в �р�тивн�� �лучае и�еет �начение False. Ее �начение ��жн� �р�верить, чт��ы ��ределить фа�т в��ни�н�вени� и��лючени�, ���да �начение �ере�енн�й $ErrorActionPreference у�тан�влен� в Continue (д���лнительные �ведени� �� эт�й у�тан�в�е даны в ра�деле «О�ра� ��т�а и��лючений»� $^ Перва� ле��е�а в ���ледней �тр��е, �р�читанн�й и� ��на ���андн�й �тр��и $_ Те�ущий ��ъе�т, ���да �н и���ль�ует�� в ��нвейерн�й (и���ль�ующей �анал� ���анде или в ��ерат�ре foreach () и switch() � �а��ив�� или � ��т���� ���анд в �аче�тве вв�да $Args Ар�у�енты, �ереданные �ценарию или фун�ции $PSCulture Идентифи�ат�р ��ы�а��ультуры дл� W��dows (на�ри�ер, en-US� $Error Ма��ив, в ��т�р�� ��держит�� инф�р�аци� �� �ши��ах, ��наружен� ных Pow��Sh���. $Error[0] ��держит инф�р�ацию � �а��й ���ледней �ши��е, $Error[1] — � �ред���ледней �ши��е и т. д. К�личе�тв� ��хра� н�е��й инф�р�ации �� �ши��ах не �ревышает �начени� �ере�енн�й $MaximumErrorCount $False Булев� �начение False $ForEach Внутри ци�ла foreach ��держит ��ыл�у на ну�ерат�р, у�равл�ющий ци�л��. Пра�тиче���й ��ль�ы ��чти не �ред�тавл�ет продолжение 
658 Глава 15. Программирование в среде PowerShell Переменная Содержимое $Home Путь � личн��у �атал��у ��ль��вател� $Host О�ъе�т, в ��т�р�� ��держит�� инф�р�аци� � вы��лн�е��й �р��ра��е, в ��т�р�й �а�ущена Pow��Sh��� $Input О�ъе�т, ��т�рый в данный ���ент нах�дит�� в ��нвейере �л��а ��да фун�ции, или ве�ь вв�д, ��уще�твл�е�ый в фун�цию $LastExitCode К�д вых�да и� ���ледней внешней вы��лненн�й �р��ра��ы $Matches Хэш�та�лица, ��держаща� лю��е �тр���в�е �начение, ���твет�твующее �редыдуще�у ��ерат�ру -match $MyInvocation О�ъе�т, ��т�рый ��держит инф�р�ацию � те�уще� �ценарии Pow��� Sh���, ���андн�й �тр��е или фун�ции. М�жет �ри��дить�� дл� ра�� �ечат�и �тлад�чных ����щений $NULL Значение Nu�� $PID Н��ер идентифи�ат�ра �р�це��а вы��лн�е��й �р��ра��ы Pow��Sh��� $Profile П�лный �уть � ваше�у ��ль��ватель����у �р�филю Pow��Sh��� $PSHome П�лный �уть � �а��е, ��держащей и���лн�е�ую �р��ра��у ���л�ч�и Pow��Sh��� $PSScriptRoot Путь � �атал��у, ��держаще�у те�ущий вы��лн�е�ый �ценарий $PSVersionTable Хэш�та�лица, ��держаща� инф�р�ацию � вер�ии Pow��Sh��� $Pwd П�лный �уть � те�уще�у �атал��у $ShellID И�� ��ъе�та дл� э��е��л�ра Pow��Sh��� $This В ��де �ценари�, реали�ующе�� �в�й�тв� или �ет�д ��ъе�та, эта �ере� �енна� �ред�тавл�ет �а� ��ъе�т $True Булев� �начение True $PSUICulture Идентифи�ат�р ��ы�а и �ультуры дл� Pow��Sh��� Суще�твует та�же на��р Preference��ере�енных (на�тр�е� �ред��чтений�, у�равл�ющих ра��т�й Pow��Sh���. Не��лный ��и��� та�их �ере�енных �ред� �тавлен в та�л. 15.5 . Таблица 15.5. Неполный список Preference-переменных, используемых в PowerShell Переменная Предназначение $ConfirmPreference У�равл�ет ��р�д��� ��ращени� ���андлет�в Pow��Sh��� � ��ль��вателю �еред вы��лнение� ри���ванных дей�твий, на�ри�ер, �еред удаление� �луж� W��dows. М�жет и�еть �начени� "None" (��дтверждение не тре�ует���, "Low" (��д� тверждение тре�ует�� даже дл� �ал�ри���ванных дей�твий�, "Medium" и "High" (��дтверждение тре�ует�� т�ль�� дл� вы��� ��ри���ванных дей�твий� Таблица 15.4 (продолжение)
Переменные и типы 659 Переменная Предназначение $DebugPreference У�равл�ет ��р�д��� выв�да �тлад�чн�й вых�дн�й инф�р�а� цией ���андлет�в Pow��Sh��� и выв�д�� и� ���андлета write- debug. М�жет и�еть �начени� "Stop" (Pow��Sh��� ��танавлива� ет вы��лнение ���ле выв�да лю��й �тлад�чн�й инф�р�ации�, "Inquire", "Continue" и "SilentlyContinue" $ErrorActionPreference У�равл�ет ��р�д��� дей�твий Pow��Sh��� ���ле �р��ра��� ных �ши���, не тре�ующих ��тан�в�и (нефатальных �ши� ����. М�жет и�еть �начени� "Stop", "Inquire", "Continue" и "SilentlyContinue". Оши��и, тре�ующие �ре�ращени� вы��л� нени� (фатальные �ши��и�, в�е�да ��ра�атывают�� дей�твие� "S top", е�ли т�ль�� �ни не �тлавливают�� �дни� и� �ехани���в ��ра��т�и и��лючений, ра���атривае�ых далее в данн�й �лаве $LogxxxEvent Р�д �ере�енных, у�равл�ющих те�, �а��й ти� ���ытий �а� �и�ывает�� в Журнал ���ытий W��dows. П�др��н��ти ��жн� найти в ��рав�е �� эт�й те�е $MaximumErrorCount Ма��и�альн�е ��личе�тв� �ши���, инф�р�аци� � ��т�рых хранит�� в �а��иве $Error П�лный ��и��� этих �ере�енных нах�дит�� в ��рав�чни�е �� Pow��Sh��� в те�е about_preference_variables. Массивы Ма��ивы ���в�л�ют хранить в �дн�й �ере�енн�й �ра�у не���ль�� не�ави�и�ых �начений, и �ни ча�т� и���ль�уют�� в �р��ра��ир�вании, ���да нужн� �р�делать �дни и те же дей�тви� �� ��и���� ��х�жих эле�ент�в. Pow��Sh��� ���в�л�ет ���� давать �а��ивы не���ль�и�и ������а�и. Ма��ив ��жн� ���дать «на лету», на�рав не���ль�� �начений, �тделенных дру� �т дру�а �а��ты�и: $powers=8,4,2,1 Эти� �������� ��жн� ���дать �а��ив, ���т��щий и� целых чи�ел, а та�же �тр���вый �а��ив: $names = 'Alpha', 'Bravo', 'Charlie', 'Delta' Pow��Sh��� ���в�л�ет та�же на�рать ��и��� �начений, и���ль�у� �ру�лые ����� �и и не����ательный �и�в�л @, на�ри�ер: $powers = (8,4,2,1) $names = @('Alpha', 'Bravo', 'Charlie', 'Delta') Ве�ь ��и��� �начений �а��ива $names ��жн� выве�ти, �р��т� на�рав и�� эт��� �а��ива: $names (эт�т в��р�� в���ре �удет ра����трен ��лее ��др��н��.М�жн� та�же ��лу� чить д��ту� � �тдельны� �а�и���: $names[0], $names[1], $names[2] и $names[3]. В Pow��Sh��� инде��аци� �а��ив�в начинает�� � нул�.
660 Глава 15. Программирование в среде PowerShell О�а �риведенных �ри�ера ���дают �р��тые �а��ивы, ��держащие �� четыре �начени� �уте� ���чередн��� �еречи�лени� �тдельных �начений. И���ль�у� �инта��и� .., ��жн� ���дать �а��ив, ��держащий диа�а��н цел�чи�ленных �на� чений: $a = 1..5 В Pow��Sh��� выражение вида n..m ���дает �а��ив целых чи�ел �т n д� m, ��эт�� �у 1..5 ���дает �а��ив и� ��ти эле�ент�в, ��держащий �начени� 1, 2, 3, 4 и 5. Дл� ���дани� �а��ива в�е�� и� �дн��� эле�ента нужн� �еред един�твенны� �начение� ���тавить �а��тую: $a=,1 И���ль��вание выражени� @() �рив�дит � ���данию �у�т��� �а��ива, не ��� держаще�� в���ще ни�а�их эле�ент�в. Расширение массивов Е�ли ��личе�тв� нужных �начений �аранее неи�ве�тн�, ниче�� �трашн���. М�жн� ���дать �а��ив �е� эле�ент�в, �а� т�ль�� чт� �ыл� ���а�ан�, а �ате� ра�ширить е��, д��авл�� �� �дн��у эле�енту � и���ль��вание� ��ерат�ра �л�жени�: $a=@() $a=$a+100 или же ��жн� в����ль��вать�� э�вивалентны� ��ерат�р�� $a += 100 Эт�т �в�е��ра�ный �инта��и� ��х�ж на ��ычн�е �л�жение, н� �ри�енительн� � �а��ива� �на� + д��авл�ет � �а��иву н�вый эле�ент. Эт�т �ри�ер �ревращает $a в �а��ив, ��держащий эле�ент 100. О�ерат�р + ��жн� та�же �ри�ен�ть дл� ��ъединени� целых �а��ив�в. В �ледующе� �ри�ере: $a=1,2,3 $b=4,5,6 $c=$a+$b ���дает�� �а��ив $c � ше�тью эле�ента�и: 1, 2, 3, 4, 5 и 6. П�д��ны� же ��ра��� ��ерат�р у�н�жени� (*� ���ирует �а��ив �н�же�тв� ра�. На�ри�ер, �начение� выражени� (1,2,3,4)*3 �тан�вит�� �а��ив и� 12 эле�ент�в: 1,2,3,4,1,2,3,4,1,2,3,4. ▼▼ Если нужно предопределить массив с конкретным числом записей, не набирая список значе- ний, можно воспользоваться оператором * (умножение) для дублирования массива с одной записью, как в следующем примере, в котором создается 1000-элементный массив: $a = (,1)*1000 Определение размера массива Следует ���нить, чт� в�е �ере�енные Pow��Sh��� �вл�ют�� ��ъе�та�и, и �а��ивы �де�ь не и��лючение. Ма��ив — эт� в�е�� лишь еще �дин ти� ��ъе�та ��д на�вание� System.Array. У не�� е�ть �в�й�тв� �� и�ени .Count, �начение ��т�р��� равн� ��ли� че�тву эле�ент�в в �а��иве. Д��ту� �� в�е� эле�ента� �а��ива �ри и���ль��вании ��ы�а Pow��Sh��� и�еет �ледующий вид:
Переменные и типы 661 for ($i = 0; $i -lt $a.Count; $i++) { write-output ("Элемент " + i + " имеет значение " + $a[$i]) } В эт�� фра��енте ��да ��ерат�р, �а�люченный в фи�урные �����и, вы��лн�ет�� � инде��а�и 0, 1, 2 и т. д ., в�л�ть д� инде��а $Count-1, ��т�рый �вл�ет�� инде���� ���ледне�� эле�ента. Н� в ��ы�е е�ть ��лее �р��т�й ������ ���лед�вательн��� �ере��ра эле�ент�в �а��ив�в — � и���ль��вание� ���анды foreach: foreach ($x in $a) { ... сюда помещаются операторы ... } ��т�ра� �� �череди �ри�ваивает �ере�енн�й $x �начение �ажд��� эле�ента �а��и� ва $a. Эт�т ��д �р�ще на�рать и в не� �р�ще ра���рать��, н� у�нать, �а�и� �вл�ет�� те�ущее �начение инде��а внутри ци�ла, �удет нев����жн�. Е�ли эта инф�р�аци� нужна, т� дл� ���лед�вательн��� �ере��ра в�ех �начений �ледует в����ль��вать�� �редыдущи� �ет�д��. Многомерные массивы При ���дании �а��ива �уте� на��ра ��и��а �начений эт�т ��и��� ��жн� �а�лючить в �ру�лые �����и: $powers = (8, 4, 2, 1) Я ре���ендую вве�ти эт� в ��ычную �ра�ти�у. Эт� ��вышает ра����навае���ть ��да �ценари� и ���в�л�ет делать р�д интере�ных вещей вр�де ���дани� �а��ива �а��ив�в: $a=((1,2,3,4,5),(6,7,8,9,10)) Ма��ив Pow��Sh��� �вл�ет�� �р��т� ��и���� ��ъе�т�в, и эти�и ��ъе�та�и ��� жет �ыть чт� у��дн�, в�люча� дру�ие �а��ивы. В данн�� �ри�ере ���дает�� �а��ив, ��держащий два эле�ента. Эти два эле�ента �а�и �� �е�е �вл�ют�� �а��ива�и, в �ажд�� и� ��т�рых ��держит�� ��ть эле�ент�в. Значение выражени� $a[1][3] равн� 9. (С��жете ра���рать�� ��че�у? $a[1] — эт� вт�р�й �а��ив, �����ль�у инде��ир�вание начинает�� � нул�. Е�ли � эт��у �а��иву �ри�ре�ить у�а�атель инде��а [3], �ы ��лучи� е�� четверт�е �начение. П�эт��у $a[1][3] равн� 9.� Та�и� же ��ра��� ��жн� ���давать и трех�ерные �а��ивы: $a = (((1,2), (3,4)), ((5, 6), (7, 8)) Зде�ь $a[0][1][0] равн� 3. Н� эт�т �ет�д ���дани� и и���ль��вани� �н����ерных �а��ив�в �лиш��� �р����д��. В Pow��Sh��� и�еет�� в����жн��ть не���ред�твенн��� ���дани� �н����ерных �а��ив�в � и���ль��вание� дру���� �инта��и�а: $a = new-object 'object[,]' n,m �де n и m �вл�ют�� ��личе�тв�� нужных эле�ент�в ���твет�твенн� �ерв��� и вт�� р��� �а��ив�в. Д��ту� � эле�ента� ��уще�твл�ет�� �а� в �ледующе� �ри�ере: $a[3,2] = 104. С ����щью �ледующе�� ��ерат�ра ��жн� ���дать трех�ерный �а��ив: $a = new-object 'object[,,]' n,m,p
662 Глава 15. Программирование в среде PowerShell �де n, m и p �вл�ют�� нужны�и ��личе�тва�и эле�ент�в дл� �ерв���, вт�р��� и третье�� ��и��а инде���в ���твет�твенн� и т. д ., в�л�ть д� 17 и��ерений. Отрицательные значения индексов Pow��Sh��� ���в�л�ет и�вле�ать эле�енты и� ��нца �а��ива �уте� и���ль��вани� �трицательных �начений инде���в. На�ри�ер, дл� �а��ива $v = 1, 2, 3, 4, 5 вы� ражение $v[-1] вернет ва� �начение 5. Работа массивов с каналами и командлетами Pow��Sh��� в�ецел� ра�ра��тан дл� ра��ты � ��ъе�та�и. К��андлеты ра��тают � ��т��а�и ��ъе�т�в, в ���андн�й �тр��е Pow��Sh��� �а��ив ра���атривает�� �а� ��т�� ��ъе�т�в. Я ��дра�у�еваю ��д эти� �ледующее. Е�ли на�рать и�� �ере�енн�й �а��ива, Pow��Sh��� выдает в�е ее ��держи��е в виде ��т��а ��ъе�т�в. Ст�ит на���нить, чт� �ри ���ту�лении ��т��а ��ъе�т�в в ��н� ��н��ли Pow��Sh��� ф�р�атирует и выв�дит их �начени� в �ра�ив�й та�ли� це. И�енн� ��эт��у эти два ��ерат�ра: $a=1,2,3,4,5 $a выв�д�т ��и��� чи�ел. $a выдает ��т�� ��ъе�т�в System.Int32, а Pow��Sh��� выв�� дит их на э�ран: 1 2 3 4 5 Эти� ��жн� в����ль��вать�� дл� �т�рав�и ��ъе�т�в и� �а��ива ���андлету. О�ерат�р $a | get-member �р�в�дит эти System.Int32���ъе�ты чере� �анал в ���андлет get-member, ��т�рый выв�дит та�лицу �в�й�тв и �ет�д�в лю���� �читывае���� и� ти�а ��ъе�та. Та�и� ��ра���, данна� ���анда выв�дит инф�р�ацию �� ��ъе�тах System.Int32, хран�� щих�� в �а��иве. М�жн� та�же ��хранить выв�д ���андлета в �а��иве. На�ри�ер $a = get-childitem �а�у��ает ���андлет get-childitem, ��т�рый в данн�� �лучае выв�дит ��и��� в�ех ��ъе�т�в файл�в и �а��� те�уще�� �атал��а и ��хран�ет эт�т ��и��� ��ъе�т�в в �а��иве $a. Те�ерь эт�т �а��ив ��жн� и���ль��вать в �ценарии дл� и�влечени� и ра��ты � инф�р�ацией � файлах и �а��ах, ��держащей�� в не�. Эт� ве�ь�а не��ычн�е ��ведение �вл�ет�� �дни� и� ар�у�ент�в в ��ль�у �ри� �ут�тви� в и�ени �р��ра��ы �л�ва Power. Pow��Sh��� ���в�л�ет ле��� и �р��т� �ере�лючать�� в�еред и на�ад �ежду декларативным или функциональным про­ граммированием, �де ���андные �тр��и у�танавливают ��т�� ��ъе�т�в, �р�делыва� ющих в�ю ра��ту, и императивным программированием, �де и���ль�уют�� ���анды, ци�лы, ��ерат�ры if и �риверженн��ть � ��ша��в��у вы��лнению �адачи.
Переменные и типы 663 Следует �т�етить еще �дну интере�ную ����енн��ть: �и�в�л �анала ��жет и�� ��ль��вать�� та�же и в выражени�х, и ��ерат�р, на��д��ие �ледующе��: $v = команда 1 | команда 2 | команда 3 ��хран�ет ре�ультат команды 3 в �ере�енн�й $v, ��т��у чт� ��ерат�р = и�еет наи� �еньший �ри�ритет. При�ритетн��ть ��ерат�р�в еще �удет ра����трена в данн�й �лаве. ▼) Есть еще один способ сохранения вывода командлета в переменной: большинство командлетов допускает использование ключа командной строки -OutVariable имя_переменной, который вы- зывает копирование потока вывода из командлета в названную переменную в виде массива объектов. При этом ставить знак $ перед именем переменной не нужно. Можно дополнительно поставить перед именем переменной знак +, чтобы добавить вывод командлета к тому, что уже содержится в переменной. Кроме сохранения в названной переменной, вывод командлета также записывается в стан- дартный вывод, поэтому объекты можно переправить по каналу другому командлету или про- смотреть их в окне командной строки. Извлечение из массива более одного значения Еще �дна не��ычна� ����енн��ть Pow��Sh��� ���в�л�ет и�вле�ать и� �а��ива �ра�у ��лее �дн��� �начени�. Б�льшин�тв� ��ы��в �р��ра��ир�вани�, и���ль�уе�ых �а ���ледние 50 лет, ���в�л�ют и�вле�ать �начение и� �а��ива � и���ль��вание� �инта��и�а на��д��ие �ледующе��: $массив[n], �ла��дар� ��т�р��у и� �а��ива и�вле�ает�� n�е �начение. n на�ывает�� индексом массива. (В�е �тличи� �дн��� ��ы�а �т дру���� �в�д�т�� � т��у, �а�ие �����и и���ль�уют��, �ру�лые или �ва� дратные, и �а��й н��ер у �ерв��� эле�ента �а��ива, 0 или 1. Ка� уже у���инал��ь, в Pow��Sh��� инде��аци� начинает�� � нул�.� А в�т и не�жиданный ��в�р�т: в Pow��Sh��� вы не ��раничены и���ль��вание� т�ль�� �дн��� цел��� чи�ла в �аче�тве �начени� инде��а �а��ива. В �аче�тве инде�� �а ��жн� и���ль��вать �а��ив! В та��� �лучае Pow��Sh��� и�вле�ает в�е �начени� внутренне��, инде��н��� �а��ива, и���ль�ует эти �начени� в �аче�тве инде���в и в��вращает в�е �начени� внешне�� �а��ива, на ��т�рые у�а�ывают инде��ы. В�т чт� � и�ею в виду: $array = 'a', 'b', 'c', 'd', 'e', 'f' $array[1, 3, 5] Вт�р�й ��ерат�р выв�дит b, d и f. П�лучает�� эт� �ледующи� ��ра���: 1, 3, 5 — эт� �а��ив, ��держащий три чи�ла: 1, 3 и 5. Эти чи�ла и���ль�уют�� дл� и�влечени� вт�р���, четверт��� и ше�т��� эле�ента и� �ере�енн�й $array (�����ль�у инде�� �ир�вание начинает�� � нул��, чт� дает на� �тр��и 'b', 'd' и 'f'. Ра�у�еет��, ин� де��ный �а��ив не д�лжен �ыть на�ран �у�вальн�, �н �а� ��жет �ыть �ере�енн�й: $x=1,3,5 $array[$x] ��т�ра� дает т�т же �а�ый ре�ультат. М�жн� та�же и���ль��вать Pow��Sh���� �а��ив � у�а�ание� диа�а��на и ��ерат�р�в ��ъединени�, �а� в �ледующе� вы� ражении: $array[1..3 + $x + 3, 4, 5]. П�трати� не�н��� вре�ени на ра�шифр�в�у.
664 Глава 15. Программирование в среде PowerShell Внутри �вадратных ������ и�еет�� �а��ив � эле�ента�и 1, 2, 3. Мы д��авл�е� (��ъедин�е� � ни�� �а��ив $x, в ��т�р�� е�ть эле�енты 1, 3 и 5, а �ате� �ри��еди� н�е� еще �дин �а��ив � эле�ента�и 3, 4 и 5. Та�и� ��ра���, ��лучает�� инде��ный �а��ив 1, 2, 3, 1, 3, 5, 3, 4, 5. Бла��дар� е�у и�вле�ают�� и выв�д�т�� �тр��и b, c, d, b,d,f,d,eиf.(Уф!� Ма��ивы — эт� в�е�� лишь �дна и� �ате��рий ти��в ��ъе�т�в, на�ывае�ых кол­ лекциями, ��т�рые ��держат �дин или не���ль�� дру�их ��ъе�т�в. Ка� вы уже ви� дели в �редыдущих �лавах данн�й �ни�и, ��лле�ции и���ль�уют�� дл� у�равлени� файла�и, �а��а�и, �луж�а�и W��dows и т. д . П��же в данн�й �лаве �удет у����нут еще �дин ти� ��лле�ции, и���ль�уе��й в Pow��Sh���, та� на�ывае�а� хэш�та�лица. Использование массивов в сравнениях В�т еще �дн� не��ычн�е �в�й�тв� Pow��Sh���: е�ли � �а��ив�� и���ль�ует�� лю��й и� ��ерат�р�в �равнени�, Pow��Sh��� вы��лн�ет �равнение � �ажды� эле�ент�� �а��ива и в��вращает �а��ив, ��держащий элементы, которые прошли проверку на соответствие �ри �равнении. На�ри�ер, данн�е выражение: (1,2,1,2,1,2) -eq 1 э�вивалентн� �а��иву (1,1,1). Ра����трение эт��� в��р��а �удет �р�д�лжен� далее в данн�й �лаве, в ра�деле «Сравнени� � и���ль��вание� �а��ив�в». Константы С ����щью �ледующе�� �инта��и�а ��жн� ��ределить �ере�енные, ��т�рые не ����ут и��ен�ть��: set-variable -name имя_переменной -value значение -option constant Зде�ь �на� д�ллара �еред и�ене� �ере�енн�й не �тавит��. Ключи —name и —value ��жн� ��у�тить, �р��т� на�рав и�� �ере�енн�й и ее �начение. На�ри�ер: set-variable MaxItems 100 -option constant. Ин��да эт� ��жет �ри��дить�� дл� ��ределени� �начений �р��ра��ы, не нуждающих�� в и��енени�х, чт��ы в �цена� рии их нев����жн� �ыл� и��енить �� �а���у�ни�удь нед����тру. Они та�же ��� �а�ывают те�, �т� �р���атривает ��д ваше�� �ценари�, чт� эт� �начение �тн��ит�� � �ред��ределенны�. Эта �тру�тура ���твет�твует �тру�туре const имя = значение в V�S���p�. Выражения Pow��Sh��� ���в�л�ет ���тавл�ть выражени�, ��уще�твл�ющие вычи�лени� над чи�ла�и и �тр��а�и. Идеи т�чн� та�ие же, �а� и те, ��т�рые вы видели в �лаве 2 «Ру��в�д�тв� �� V�S���p�». В та�л. 15.6 �еречи�лены ��ерат�ры выражений. В�е ��ерат�ры ра��тают � чи�л�вы�и �начени��и. Ка� уже �т�ечал��ь, ��ерат�ры + и * ра��тают та�же и �� �тр��а�и. Авт�ры Pow��Sh��� та�же ���а��тили�ь � �ри� �ут�твии р�да д���лнительных ��ерат�р�в, ��т�рые, �а� вы увидите, и�начальн� �ришли и� ��ы�а �р��ра��ир�вани� C.
Выражения 665 Таблица 15.6. Операторы выражений PowerShell Оператор Выполняемое действие Пример Результат + С чи�ла�и: �л�жение. С� �тр��а�и и �а��ива�и: ��ъединение. Е�ли ��ладывают�� чи�л�в�е �начение и �тр�� �а, Pow��Sh��� �ревращает чи�л� в �тр��у, а �а� те� ��ъедин�ет ре�ультаты 3+4 'a' + 'b' '2'+3 7 'ab' '2 3' — Вычитание 5-2 3 * С чи�ла�и: у�н�жение. С� �тр��а�и и �а��ива�и: тиражир�вание 4*3 'ab' *3 12 'ababab' / Деление. Деление целых чи�ел дает цел�чи�� ленный ре�ультат, е�ли нет ��тат�а, в �р�тив� н�� �лучае ��лучает�� ре�ультат � �лавающей т�ч��й. В эт�� ���т�ит �тличие �т ��льшин� �тва дру�их ��ы��в �р��ра��ир�вани�! Дл� ��лучени� у�еченн��� ре�ультата е�� нужн� �риве�ти � цел�чи�ленн��у ти�у 7/2 7./2. 7/[double]2 3.5 3.5 3.5 % П�лучение ��дул� (��тат�а �т делени�� 7%2 1 ++ Авт�ин�ре�ент. При у�тан�в�е ��ерат�ра �е� ред �ере�енн�й Pow��Sh��� д��авл�ет 1 � �ере� �енн�й, а �ате� и���ль�ует эт� н�в�е �начение. При у�тан�в�е ���ле �ере�енн�й Pow��Sh��� и���ль�ует те�ущее �начение �ере�енн�й, а �ате�, уже ���ле и���ль��вани�, д��авл�ет �ней1 ++a a++ a+1 a -- Авт�де�ре�ент. При у�тан�в�е ��ерат�ра �е� ред �ере�енн�й Pow��Sh��� вычитает 1 и� �ере� �енн�й, а �ате� и���ль�ует эт� н�в�е �начение. При у�тан�в�е ���ле �ере�енн�й Pow��Sh��� и���ль�ует те�ущее �начение �ере�енн�й, а �а� те�, уже ���ле и���ль��вани�, вычитает и� нее 1 --a a-- a-1 a -and Л��иче���е (�улев�� И (AND� $true -and $true True -or Л��иче���е ИЛИ (OR� $true -or $false True -xo r Л��иче���е и��лючающее ИЛИ (�x��us�v� OR� $true -xor $true False -not Л��иче���е НЕ ( No�� - not $true False ! (! Т� же �а��е, чт� и -not.� ! $true False -bAND П�ра�р�дн�е (дв�ичн�е� И (AND� 7 -bAND 4 4 -bOR П�ра�р�дн�е (дв�ичн�е� ИЛИ (OR� 5-bOR3 7 продолжение 
666 Глава 15. Программирование в среде PowerShell Оператор Выполняемое действие Пример Результат -bXOR П�ра�р�дн�е (дв�ичн�е� и��лючающее ИЛИ (�x��us�v� OR� 5 -bXOR 3 6 -bNOT П�ра�р�дн�е (дв�ичн�е� �трицание (��g���o�� -bNOT 4 -5* * Ре�ультат -bNOT 4 �вл�ет�� �трицательны�, ��т��у чт� �� у��лчанию дл� целых чи�ел и���ль� �ует�� ��ъе�т ти�а [System.Int32], ��т�рый �вл�ет�� 32�ра�р�дны� целы� чи�л�� �� �на���. 4 в дв�� ичн�� �ред�тавлении и�еет вид 0000...0100 . П�ра�р�дн�е �трицание эт��� чи�ла и�еет вид 1111...1011 . Ре�ультат -bNOT в�е�да �тн��ит�� � ти�у цел��� чи�ла �� �на��� (даже е�ли �начени� е�� ар�у�ент�в �тн���т�� � �е��на��в��у ти�у�, ��эт��у ре�ультат �удет равен -5. При �равнени�х и���ль�уют�� ��ерат�ры, �еречи�ленные в та�л. 15.7, ��т�рые в �аче�тве �в�их �начений в��вращают ли�� True, ли�� False. Таблица 15.7. Операторы сравнения Оператор Выполняемое действие Пример Результат -lt Меньше че� 3-lt4 True -gt Б�льше че� 3-gt4 False -le Меньше че� или равн� 3-le4 True -ge Б�льше че� или равн� 3-ge4 False -eq Равн� 3-eq4 False -ne Не равн� 3-ne4 True -li ke С��твет�твие �тр��е � �и�в�ла� �и��а�е�тител��и 'file 2.doc' -li ke '*.doc' True -notlike Инвер�и� –like 'file 2.doc' -notlike '*.xls' True -match С��твет�твие �тр��е ре�ул�рн��� выражени� 'abc' -match 'a[a-z]*' True -notmatch Инвер�и� –match 'abc' -notmatch '. *c$' False -co ntains У�тан�в�а �ринадлежн��ти на��ру (1,2,3) -contains 3 True -notcontains Инвер�и� –contains (1,2,3) -notcontains 3 False -is [objname] Э�вивалентн��ть ��ъе�ту 3 -is [System.Int32] True -isnot [objname] Инвер�и� –is 3 -isnot [System.Char] True ▼) По умолчанию все эти операторы при сравнении строк нечувствительны к регистру символов. Чтобы сделать их чувствительными к регистру символов, нужно поставить впереди имени опе- ратора сравнения букву «c». Тогда получатся чувствительные к регистру символов операторы: -clt, -cgt, -cle, -cge, -ceq, -cne, -clike, -cnotlike, -cmatch, -cnotmatch, -ccontains и -cnotcontains. Таблица 15.6 (продолжение)
Выражения 667 Сравнения с использованием массивов Еще �дн� не��ычн�е �в�й�тв� Pow��Sh��� �а�лючает�� в т��, чт� �равнени� ��жн� �р�и�в�дить � �а��ива�и. Ре�ультат�� �равнени� �а��ива � �а�и��ни�удь �начени� е� �удет не �твет ти�а True или False, ��т�рый ��жн� �ыл� �ы �жидать. Pow��Sh��� вы��лн�ет �равнение � �ажды� эле�ент�� �а��ива и ���дает �а��ив ре�ультат�в, в ��т�р�� ��держат�� эле�енты, �р�шедшие �равнение. На�ри�ер: (1,2,3,4,5) -ge 3 ���дает ре�ультирующий �а��ив (3,4,5), �����ль�у эт� эле�енты, чьи �начени� ��льше или равны тре�. (Е�ли те�т на �равнение не �р�йдет ни �дин эле�ент, ре� �ультат�� �удет �у�т�й �а��ив, н� в�е�та�и эт� �удет �а��ив.� Та�и� же ��ра��� � �а��ив�� ра��тают в�е ��ерат�ры �равнени�. Эт� утверж� дение ��раведлив� дл� -like, -match, -eq, -ge и т. д . Е�ли в�е�т� эт��� нужн� лишь у�нать, е�ть ли в �а��иве эле�енты, равные у�а�анн��у �начению, в����ль�уйте�ь ��ерат�р�� �равнени� -contains. Е�ли нужн� у�нать, ���ль�� эле�ент�в �а��ива �р�шл� те�т на �равнение, и��ледуйте �в�й�тв� .Count ре�ультирующе�� �а��ива, �а� ���а�ан� в �ледующе� �ри�ере: if ((('abc', 'def', 'ghi ') -match 'abc').Count -eq 1) {'Найден лишь один abc'} Д���лнительные �ведени� ��жн� найти в ��рав�е �� Pow��Sh��� на �транице � инде���� about_comparison_operators. Проверка с использованием операторов -like и -clike М�жн� �р�верить на ���твет�твие �тр��а�, ��держащи� �р��тые ��ерат�ры �и�� в�л�в��а�е�тителей, в����ль��вавши�ь дл� эт��� ��ерат�р�� -like и не���ль�и�и е�� варианта�и: -like и -ilike �вл�ют�� ��лн��тью идентичны�и и вы��лн�ют те�ты �равнений, не чув�твительные � ре�и�тру �и�в�л�в. О�ерат�р -clike �вл�ет� �� чув�твительны� � ре�и�тру �и�в�л�в. Кр��е эт���, инвер�ные те�ты (-notlike, -inotlike и -cnotlike� �р��т� в��вращают �р�тив���л�жные �начени� True или False. Си�в�ла�и��а�е�тител��и �вл�ют�� *, ��т�рый ���твет�твует нулев��у ��ли� че�тву или не���ль�и� лю�ы� �и�в�ла�, и ?, ��т�рый ���твет�твует в т�чн��ти �дн��у �и�в�лу. В�т р�д �ри�ер�в. Тест Возвращает 'abcd' -like 'a*' True 'abcd' -like 'a???' True 'abcd' -like '*abcd' True 'abcd' -like 'ab?cd' False В д���лнение � * и ? ��жн� и���ль��вать ф�р�ат [a-z], ��т�р��у ���твет�твует лю��й �и�в�л в у�а�анн�� диа�а��не. На�ри�ер, выражение 'aqb' -like 'a[m-r]b' равн� True. Н� �ледует �нать, чт� эти те�ты не ра��тают т�чн� та� же, �а� те�ты �� �тандарт� ны�и �и�в�ла�и��а�е�тител��и ��на ���андн�й �тр��и W��dows. В �тандартн��
668 Глава 15. Программирование в среде PowerShell ��не ���андн�й �тр��и и�� файла "test", не и�еющее ра�ширени�, �удет ���т� вет�тв�вать �тр��е � �и�в�л����а�е�тителе� "test.*". Н� в Pow��Sh��� выражение 'test' -like 'test.*' �удет вычи�лен� в False. Поиск соответствий регулярному выражению с помощью операторов -match и -cmatch В Pow��Sh��� и�еет�� в�тр�енна� ��ддерж�а ре�ул�рных выражений, ��т�рые �ред��тавл�ют эффе�тивный ������ ��и��а ���твет�твующих �тр�� на ��н�ве ша�л�на �и�в�л�в. Ре�ул�рные выражени� и���ль�уют�� � эле�ента�и �инта�� �и�а -match и -notmatch — чув�твительны�и � ре�и�тру �и�в�л�в ��ерат�ра�и �равнени�. Ша�л�н ��жет в�лючать �у�вальные �и�в�лы, ��т�ры� д�лжн� �ыть найден� т�чн�е ���твет�твие, и (или� лю�ые ��ециальные �и�в�лы и ша�л�ны, �еречи�ленные в та�л. 15.� . Таблица 15.8. Шаблоны регулярных выражений Шаблон Что ему соответствует . (т�ч�а� Лю��й �тдельный �и�в�л ^ Начал� �р�вер�е��й �тр��и $ К�нец �р�вер�е��й �тр��и [набор] Лю��й и� �и�в�л�в на��ра. Внутри �вадратных ������ ��жн� �еречи�лить �тдельные �и�в�лы и (или� диа�а��ны в ф�р�ате m—q, ��т�рый ���а�ывает, чт� диа�а��н �а�лючает в �е�е лю��й �и�в�л �т m д� q [^набор] Лю��й и� �и�в�л�в вне на��ра * Предыдущий �и�в�л �т нул� и ��лее ра� + Предыдущий эле�ент �т �дн��� и ��лее ра� ? Предыдущий эле�ент �т нул� и д� �дн��� ра�а. В �аче�тве д���лнительн��� ��дифи�ат�ра ���ле *, +, ? или {} ��начает: «���т� вет�тв�вать �т�ль�� ра�, ���ль�� эт� в����жн�» {n} В т�чн��ти n э��е��л�р�в �редыдуще�� эле�ента {n,} n или ��лее э��е��л�р�в �редыдуще�� эле�ента {n,m} От n д� m э��е��л�р�в �редыдуще�� эле�ента (шаблон) Гру��ы и� �дн��� или не���ль�их ша�л�н�в, ���в�л�ющие и���ль��вать эле�енты *, +, ? или {}, �а� в �ледующе� �ри�ере: ([a-z][0-9])+, ��т�р��у ���твет�твует a1b2 | В �ру�лых �����ах ра��тает �а� ��ерат�р «или». На�ри�ер, выражение 'yes' -match ‘(yes|no)’ в��вращает �начение True \a Си�в�л �в�н�а (ASCII 7� \b За��й — ���ksp��� (ASCII �� \t Си�в�л та�ул�ции — T�b (ASCII 9� \n Перев�д �тр��и — L��� ���d (ASCII 10�
Выражения 669 Шаблон Что ему соответствует \v Верти�альна� та�ул�ци� — V������� ��b (ASCII 11� \f Перев�д �траницы — Fo�m ���d (ASCII 12� \r В��врат �арет�и — C�����g� ���u�� (ASCII 13� \e Си�в�л �SC (ASCII 27� \nnn ASCII��и�в�л �� �начению. nnn — эт� три в��ь�еричные цифры (0–7� \xnn ASCII��и�в�л �� �начению. nn — эт� две ше�тнадцатеричные цифры \cx У�равл�ющий (Co���o��x� �и�в�л (ASCII 1–26�, �де x — эт� �у�ва �т A д� Z в верхне� или нижне� ре�и�тре \unnnn Юни��д��и�в�л �� �начению. nnnn — эт� четыре ше�тнадцатеричные цифры \p{xx} Си�в�л в �ла��е Юни��д��и�в�л�в �� и�ени xx \P{xx} Си�в�л вне �ла��а Юни��д��и�в�л�в �� и�ени xx \w Лю��й �и�в�л, ��т�рый ��ычн� ��жн� найти в �л�ве. Ча�т� и���ль�ует�� �� �на��� +, чт��ы е�у ���твет�тв�вал� в�е �л�в� цели���: \w+ \W Лю��й �и�в�л, ��т�рый ��ычн� нель�� найти в �л�ве. (Пу�тые �р��тран�тва, �на�и �ун�туации и т. д.� \s Лю��й �р��ельный �и�в�л (�р��ел, та�ул�ци� и т. д.� \S Лю��й �и�в�л, выв�ди�ый на �ечать \d Лю�а� де��тична� цифра, ша�л�н �чень ��х�ж �� дей�твию на [0-9], н� в�лю� чает и дру�ие цифр�вые Юни��д��и�в�лы \D Лю��й нецифр�в�й �и�в�л \n n — не��льш�е чи�л�, ��редел�ет ���твет�твие n�й �ру��е ша�л�н�в, �а�лю� ченных в �ру�лые �����и \x Си�в�л x, �де x не �вл�ет�� �дни� и� �у�вальных, ранее �еречи�ленных �и�в�� л�в. На�ри�ер, чт��ы ��ециальный �и�в�л * ���твет�тв�вал �у�вальн�, �ледует в����ль��вать�� ша�л�н�� \* ▼) Этот список немного сокращен. Полный список можно увидеть на сайте msdn.microsoft.com, проведя поиск по ключевой фразе «Regular Expression Language Elements». Ра����три� �ри�ер: if ($filename -match 'a[0-9]*.docx?') { ... О�ерат�р if �удет вы��лнен дл� и�ен файл�в a.doc, a1.docx и a12345.doc, н� не дл� и�ени файла az.doc. Дл� ��лее ��др��н��� ��и�ани� ре�ул�рных выражений в данн�й �ни�е нед�� �тат�чн� �е�та, н� вы ��жете �р�читать � них в ра�деле about_regular_expressions ��рав�чни�а �� Pow��Sh���.
670 Глава 15. Программирование в среде PowerShell ▼) Если оператор match возвращает True, он также в виде побочного действия устанавливает зна- чение предопределенной переменной по имени $matches. В элементе $matches[0] содержится текст ввода, соответствующий шаблону регулярного выражения. Если в шаблоне были исполь- зованы круглые скобки, элемент $matches[1] содержит текст, соответствующий первой группе в круглых скобках, элемент $matches[2] содержит текст, соответствующий второй группе и т. д . Строковые операторы В Pow��Sh��� е�ть три ��ерат�ра, и�еющие та��й же ф�р�ат, �а� и �равнени�: -replace, -split и -join, н� на �а��� деле �ни �вл�ют�� ин�тру�ент�� дл� ра��ты �� �тр��а�и, ��т�рый в��вращает �тр���вые �начени�, в не ре�ультаты True или False. Эти ��ерат�ры �удут в���ре ра����трены. ▼) Все следующие строковые операторы могут работать с массивами точно так же, как с отдель- ными строковыми значениями. Если использовать их с массивом, в конечном итоге получится массив, содержащий результаты операций, выполненных над каждым элементом. Например, ('a', 'b', 'c') -replace 'a', 'X' создает массив ('X', 'b', 'c'). - split строка В �аче�тве унарн��� ��ерат�ра (���да �лева �т –split ниче�� нет� �н ра�� �ивает �тр��у вв�да �� �р��ельны� �и�в�ла� (та�ул�ции, �р��ела� и т. д.�. В ре�ультате ��лучает�� �а��ив �тр��. На�ри�ер, -split 'now is the time' в��� вращает �а��ив ('now', 'is', 'the', 'time'). Ар�у�ент строка дл� ��ерат�ра -split ��жет �ыть �тдельн�й �тр���й или �а��ив�� �тр��, в та��� �лучае ре�ультат�� �танет ��лле�ци� ле��е�, и�вле� ченных и� в�ех �тр�� вв�да. строка -split разделитель [, максимум_строк [,'ключи']] В �аче�тве �инарн��� ��ерат�ра -split ра��ивает �тр��у на �тдельные ле�� �е�ы, �ежду ��т�ры�и в эт�й �тр��е �т��т �и�в�лы, ��редел�е�ые ша�л�н�� разделитель. Значение� выражени� �тан�вит�� �а��ив �тр��. П� у��лчанию разделитель ра���атривает�� �� �равила� ��ра��т�и ре�ул�рных выражений. Стр��а вв�да ра��ивает�� на ле��е�ы в тех �е�тах, ��т�рые ���твет�твуют ша�л�ну ра�делител�. Д���лнительна� инф�р�аци� � ре�ул�рных выражени� �х �ыла дана ранее в ра�деле «П�и�� ���твет�твий ре�ул�рн��у выражению � ����щью ��ерат�р�в �m���h и –�m���h». М�жн� �а�тавить -split и��ать �у�вальный ра�делитель, у�а�ав дл� не�� �люч SimpleMatch, ��т�рый �удет в���ре ра����трен. Максимум_строк — не����ательн�е �а��и�альн�е чи�л� ле��е�, и�вле�ае� �ых и� �ажд�й �тр��и вв�да. Е�ли �тр���й вв�да �вл�ет�� �а��ив, ��раничение �ри�ен�ет�� �тдельн� � �ажд�й и� �тр�� вв�да. Ключи — эт� не����ательные �тр���вые ар�у�енты, ��т�рые ���ут ��держать �дн� или не���ль�� �ледующих �лючевых �л�в, ра�деленных �а��ты�и: y y RegExMatch — эт�т режи� и���ль�ует�� �� у��лчанию. Стр��а разделитель интер�ретирует�� �а� ре�ул�рн�е выражение.
Выражения 671 y y SimpleMatch — �ри ��и��е �и�в�л�в�ра�делителей в� вв�де �а�тавл�ет и�� ��ль��вать ���твет�тви� ��ычны� �и�в�ла�. С�в�е�тн� � RegExMatch и�� ��ль��вать�� не ��жет. y y IgnoreCase — �а�тавл�ет и���ль��вать ���твет�тви� �е� учета ре�и�тра �и�в�л�в, даже е�ли и���ль�ует�� ��ерат�р -csplit. Дл� ��ерат�р�в -split и -isplit и���ль�ует�� �� у��лчанию. В�е ��тальные �лючи и���ль�уют�� т�ль�� в режи�е RegExMatch и не д�� �у��ают�� �ри у�а�ании режи�а SimpleMatch. y y CultureInvariant — �а�тавл�ет и�н�рир�вать �равила ��ы�а л��али�ации, и���ль�уе�ые �� у��лчанию дл� ��ределени� в�аи���тн�шений �и�в�л�в верхне�� и нижне�� ре�и�тр�в. y y Multiline — е�ли �тр��а вв�да ��держит не���ль�� �тр�� (��держит �и�� в�лы в��врата �арет�и и �ерев�да �тр��и�, эт�т �люч �а�тавл�ет вы�ирать ���твет�твие �и�в�ла� ^ и $ в начале и в ��нце �ажд�й �тр��и, а не в начале и в ��нце в�ей �тр��и вв�да. y y SingleLine — �а�тавл�ет ���твет�тв�вать �и�в�лу т�ч�и (.� в��врат �арет�и и (или� �ерев�д �тр��и, т�чн� та� же, �а� эт��у �и�в�лу ���твет�твуют в�е дру�ие �и�в�лы. П� у��лчанию �и�в�л т�ч�и (.� не ���твет�твует �и�в�ла� ��нца �тр��и. y y ExplicitCapture — �а�тавл�ет ��хран�ть в �а��иве $matched[] ���твет�тви� т�ль�� ��и�ен�ванны� �ру��а� ша�л�н�в, �а�люченны� в �ру�лые �����и. П� у��лчанию ��хран�ют�� в�е �ру��ы. - csplit и -isplit О�ерат�р -isplit а���лютн� анал��ичен ��ерат�ру -split; �� у��лчанию �н нечув�твителен � ре�и�тру �и�в�л�в. О�ерат�р –csplit — т� же �а��е, чт� и ��ерат�р –split, �а и��лючение� т���, чт� �н �� у��лчанию чув�твителен � ре�и�тру �и�в�л�в. Н� �люч IgnoreCase ��жет �т�енить эту у�тан�в�у. - replace О�ерат�р -replace ищет в �тр��е те��т, ���твет�твующий ре�ул�рны� вы� ражени��, и �а�ен�ет эт�т те��т че��ни�удь дру�и�. Дл� не�� и���ль�ует�� �ледующий �инта��и�: строка -replace шаблон, замена и �начение� эт��� ��ерат�ра в выражении �тан�вит�� �тр��а. Ша�л�н — эт� ре�ул�рн�е выражение, ра����тренн�е ранее в ра�деле «П�и�� ���твет�твий ре�ул�рн��у выражению � ����щью ��ерат�р�в �m���h и –�m���h». За�ена ���твет�твующе�� те��та в �тр��е вв�да �тр���й замена ��уще�твл�� ет�� �т�ль�� ра�, ���ль�� �удет найден� ���твет�твий. К �ри�еру, ре�ультат�� вы��лнени� ��ерат�ра 'abcdef' -replace '[a-c]+', 'X' �тан�вит�� �тр��а Xdef. В ��льшин�тве �р��тых �ри�енений �е� �а�их�ли�� ��ециальных �и�в�л�в ре�ул�рных выражений, ��ерат�р -replace вы��лн�ет �р��тые ��д�тан�в�и �тр��. На�ри�ер, 'Hello Hello' -replace 'Hello', 'Goodbye' выведет �тр��у Goodbye Goodbye.
672 Глава 15. Программирование в среде PowerShell В �тр��е �а�ены ��жн� �ри�ен�ть р�д ��ециальных ��н�тру�ций. Шаблон Чем заменяется $& В�е� ���твет�твующи� те��т�� и� �тр��и вв�да. Та�и� ��ра���, 'abcd' — replace ' .*', '$&$&' выдает abcdabcd $` В�ей �тр���й вв�да, �редше�твующей т�й ча�ти, ��т�ра� ���твет�твует ша�л�ну $’ В�ей �тр���й вв�да ���ле т�й ча�ти, ��т�ра� ���твет�твует ша�л�ну $_ В�ей �тр���й вв�да $n Те��т��, ���твет�твующи� n�й �ру��е в �ру�лых �����ах, и�еющей�� в ша�л�не. $1 �а�ен�ет�� те��т��, ���твет�твующи� �ерв�й �ру��е в �ру� �лых �����ах, $2 �а�ен�ет�� те��т��, ���твет�твующи� вт�р�й �ру��е в �ру�лых �����ах и т. д $$ Один�чны� �и�в�л�� $ При и���ль��вании лю���� и� этих эле�ент�в �тр��у �а�ены нужн� в��ть в �динарные �авыч�и, чт��ы ���ешать Pow��Sh��� ра���атривать их в �аче�тве и�ен �ере�енных дл� в�тав�и �начений (��др��н��ти та��й в�тав�и ра����тре� ны ранее в ра�деле «В�тав�а в �тр��и»�, или же эту �тр��у нужн� в��ть в дв�й� ные �авыч�и и ���тавить �еред эти�и �на�а�и д�ллара ��ратные а���тр�фы (`� . ▼) Этот список, как и список регулярных выражений, представлен в сокращенном виде. Полный список доступен на веб-сайте msdn.microsoft.com после поиска по ключевой фразе «Regular Expression Language Elements». - join массив В �аче�тве унарн��� ��ерат�ра (���да �лева �т -join ниче�� нет� �н ��ъеди� н�ет ��держи��е �а��ива �е� �а�их�ли�� �р��ежут�чных �р��ел�в. На�ри�ер, -join ('a', 'b', 'c') выдает �тр��у abc. массив -join разделитель В �аче�тве �инарн��� ��ерат�ра -join ��ъедин�ет в�е �тр��и у�а�анн��� массива в �дну �тр��у, в�тавл�� у�а�анный �тр���вый разделитель �ежду �ажды� эле�ент�� �а��ива. На�ри�ер, ('a','b','c') -join '/' выдает �тр��у a/b/c. строка -f выражение Ф�р�атирует выражение в ���твет�твии � инф�р�ацией в �начении строка. О�ерат�р ф�р�атир�вани� ра���атривает�� в �лаве 16. Оператор выполнения & Си�в�л & ра��тает �� �тр���вы� �начение�, �т��щи� ���ле не��, и �а�у��ает эт� �начение в �аче�тве ���анды Pow��Sh���. На�ри�ер, $cmd = 'get-childitem' &$cmd
Выражения 673 �а�у��ает ���андлет get-childitem. Эт�т ��ерат�р ��ле�ен дл� �а�у��а ���анды, в �ути ��т�р�й ��держат�� �р��елы, вынуждающие �а�лючать эту ���анду в �авыч�и. Приоритетность операторов Та��е выражение, �а� 3+2*4, �ред�и�ывает Pow��Sh��� �ан�ть�� ариф�ети��й, н� �н� ��жет �ыть интер�ретир�ван� дв����: �л�жить 3 и 2, а �ате� у�н�жить ре�уль� тат на 4 чт��ы ��лучить 20, или у�н�жить 2 на 4, а �ате� �л�жить �р�и�ведение � чи�л�� 3 чт��ы ��лучить 11. Pow��Sh��� и���ль�ует вт�рую интер�ретацию, �����ль�у �ледует �равила� ал�е�ры, ��т�рые �ла��т, чт� ���а дл� и��енени� ��� р�д�а вычи�лени� не �удут и���ль��ваны �ру�лые �����и, у�н�жение и�еет ��лее вы���ий �ри�ритет, че� �л�жение. О�ерат�р у�н�жени� (*� �в��ывает �ре�че, че� ��ерат�р �л�жени� (+�, ��эт��у �начение 2*4 вычи�л�ет�� �ервы�. В �ледующе� ��и��е ��ерат�ры Pow��Sh��� �еречи�лены в ��р�д�е у�ывани� их �ри�ритета. Эле�енты, ра��ещенные в �дн�й и т�й же �тр��е, и�еют равный �ри�ритет. Оператор Описание () Кру�лые �����и $()@() О�ерат�ры ��двыражений [n] Инде��ир�вание �а��ива [тип_объекта] Приведение � ти�у -split -join Те��т�вые ��ерат�ры, и���ль�уе�ые в �аче�тве унарных , Ра�делитель эле�ент�в �а��ива ++ -- Авт�ин�ре�ент и авт�де�ре�ент ! -not -bNOT Отрицание Диа�а��н �а��ива -f О�ерат�р ф�р�атир�вани� (ра���атривает�� в �ла� ве 16� - Унарн�е �трицание (на�ри�ер, -3� */% У�н�жение, деление, и�влечение ��тат�а +- Сл�жение и вычитание -lt -gt -le -ge -eq -ne -clt -cgt -cle –cge -ceq -cne -is -isnot -li ke -notlike -clike -cn otlike -match –notmatch -cm atch -cnotmatch –contains -notcontains –ccontains -cn otcontains -replace -creplace Сравнени�, дру�ие ти�ы те�тир�вани�, дв�ичные, �тр���вые ��ерат�ры, у в�ех у них �дина��вый ур�� вень �ри�ритета -bAND -bOR –bXOR Дв�ичн�е И, ИЛИ и и��лючающее ИЛИ -and -or -xo r Л��иче���е (�улев�� И, ИЛИ и и��лючающее ИЛИ продолжение 
674 Глава 15. Программирование в среде PowerShell Оператор Описание &(объект) Вы��лнение | Канал ���анд >>>2>2>>2>&1 Перена�равление выв�да =+=-=*=/=%= При�ваивание Чт��ы �а�тавить выражени� вычи�л�ть�� в дру��� ��р�д�е, ��жн� в����ль� ��вать�� �ру�лы�и �����а�и. На�ри�ер, (3+2)*4 выдает ре�ультат 20. К��да е�ть ���нени�, лучше и���ль��вать �ру�лые �����и. П��тавить их не �ай�ет �н��� вре�ени, н� �ни ��лее ��н� выра��т ваши на�ерени�. ▼▼ При сочетании математических вычислений и сравнений или при использовании более одного сравнения нужно всегда использовать круглые скобки. Выражение (($a + 4) -lt $b) -bOR ($b -gt 5) возвращает значение True, если ($a+4) меньше чем $b или если $b больше чем 5. Без скобок $a+4-lt$b-bOR$b-gt5 это выражение также будет работать, потому что в данном примере вам на пользу будут дей- ствовать правила приоритетности, но с круглыми скобками в нем будет проще разобраться, и, кроме того, они помогут исключить неуверенность в знании правил приоритетности. Д���лнительную инф�р�ацию ��жн� ��лучить в ��рав�чни�е �� Pow��Sh��� в ра�деле about_Operator_Precedence. Операторы присваивания Ре�ультаты вычи�лени� выражени� ��жн� ��хранить в �ере�енн�й, и���ль��вав ��ерат�р =, �ри�ен�е�ый дл� эт��� в ��льшин�тве ��ы��в �р��ра��ир�вани�: $v=5 Дл� Pow��Sh��� та�же ���аи��тв�ван р�д ��ерат�р�в �ри�ваивани� и� ��ы�а C. Эти ��ерат�ры �еречи�лены в та�л. 15.9 . Таблица 15.9. Операторы присваивания Оператор Действие = С�хран�ет �начение в �ере�енн�й += Д��авл�ет �начение � �начению �ере�енн�й. Следует �а�етить, чт� эт�т ��ерат�р ра��тает не т�ль�� � чи�ла�и, н� и �� �тр��а�и и �а��ива�и. О�е� рат�р += д��авл�ет н�вую �тр��у � уже �уще�твующей и д��авл�ет эле�енты н�в��� �а��ива � ��нцу эле�ент�в �уще�твующе�� �а��ива -= Вычитает �начение и� �начени� �ере�енн�й *= У�н�жает �начение �ере�енн�й на у�а�анн�е �начение. Дл� �тр�� ��уще�т� вл�ет тиражир�вание �тр��и у�а�анн�е ��личе�тв� ра�. Дл� �а��ив�в д�� �авл�ет в �а��ив у�а�анн�е ��личе�тв� ���ий /= Делит �начение �ере�енн�й на у�а�анн�е �начение %= Делит �начение �ере�енн�й на у�а�анн�е �начение и ��хран�ет т�ль�� ��тат��
Выражения 675 На�ри�ер, эти два ��ерат�ра $v=3 $v+=5 и�еют т�чн� та��е же �начение, �а� и эти ��ерат�ры $v=3 $v=$v+5 и в�е �ни �рив�д�т � т��у, чт� в �ере�енн�й $v ��тает�� �начение �. ▼▼ Чаще всего из этих операторов используется +=. Его можно использовать внутри цикла для сложения чисел. Например, следующий фрагмент кода складывает числа в массиве: $sum=0 foreach ($v in $array) {$sum += $v} Значения операторов У в�ех �тру�тур Pow��Sh��� и�еет�� �начение. Лю��й ��ерат�р Pow��Sh��� ��жет �ыть ���тавлен ��рава �т �на�а равен�тва. Эт� ��жет, в ча�тн��ти, �ри��дить�� �ри и���ль��вании ��ерат�р�в if и switch, �����ль�у ��жн� на�рать �ри�ерн� �ледующий ��д: $inverse = if ($a -eq 0) {0} else {1./$a} # если $a равно 0, не делить на 0, # а использовать вместо этого 0 и �ри�ерн� �ледующий ��д: $size = switch ([int] $weight) { # вычисление размера коробки в зависимости # от веса 0 {'маленькая'} 1 {'средняя'} 2 {'средняя'} default {'большая'} } Приведения к определенному типу Бывает та�, чт� дл� �ред�тавлени� �начени� нужн� �а�тавить Pow��Sh��� и���ль��� вать ��н�ретный ти� ��ъе�та. М�жн� в����нить �атериал �лавы 2, �де в V�S���p� дл� �ревращени� �начений в �тр��и и целые чи�ла и���ль��вали�ь ���твет�твенн� та�ие фун�ции, �а� cstr() и cint(). В Pow��Sh��� дл� эт��� и���ль�уют�� приведения к определенному типу. Они �ред�тавл�ют ����й ��н�тру�цию ��ы�а, ���в�л�ющую у�а�ать ��н�ретный ти� �ере�енн�й или ��ъе�та, в ��т�рый нужн� �ревратить выражение. В Pow��Sh��� дл� �риведени� �начени� � ��н�ретн��у ти�у и�� желае���� ��ъе�та �а�лючает� �� в �вадратные �����и и, �а� ���а�ан� в �ледующе� �ри�ере, �тавит�� в�ереди �начени�: $v = [System.Int32] '3' Те� �а�ы� дает�� �ред�и�ание: «В��ть �тр���в�е �начение 3, �ревратить е�� в ��ъе�т System.Int32 и �ри�в�ить ре�ультат �ере�енн�й $v». При �риведении � ��ределенн��у ти�у ��жн� у�а�ать ��лн�е и�� ��ъе�та .N�T F��m�wo�k или же ��жн� в����ль��вать�� лю�ы� уд��ны� и�ене� ���ращени�
676 Глава 15. Программирование в среде PowerShell и� та�л. 15.1 . Предыдущий �ри�ер ��жн� �ыл� �ы � та�и� же у��ех�� �ф�р�ить в �ледующе� виде: $v = [int] '3' В���ще�т� и в W��dows Pow��Sh��� �уще�твует два ������а �риведени� � ти�у. Т�ль�� чт� �ыл ���а�ан �ервый и� них, �де и�� ��ъе�та ���ещает�� �еред �начени� е�. Эт�т ������ и��ен�ет �а�� �начение. В�т еще два �ри�ера та���� �риведени� � ти�у: $a='3' $v = [int] $a $array = [int] '3', [int] '4', [int] '5 ' При �ерв�� �риведении �тр���в�е �начение �ере�енн�й $a �ревращает�� в цел�чи�ленн�е. При вт�р�� �риведении � ти�у �ажд�е и� трех �тр���вых �наче� ний �ревращает�� в цел�чи�ленн�е �начение, ���ле че�� эти �начени� ���ещают�� в �а��ив. Вт�р�й и�еющий�� в Pow��Sh��� ������ �риведени� � ти�у �а�лючает�� в ��� �ещении ��н�тру�ции �риведени� �еред и�ене� �ере�енн�й слева �т �на�а ра� вен�тва. На�ри�ер, [int] $v = '3' Эта вер�и� �ред�и�ывает �ледующее: «С��дать ��ъе�т System.Int32 и �ри�в�� ить е�у �тр���в�е �начение '3'». Ра�ница ��чти неул�ви�а. Ре�ультирующа� �ере� �енна� ��жет � эт��� ���ента и далее ��держать �начени� т�ль�� данн��� ти�а. Эта ф�р�а �риведени� � ти�у наи��лее ��ле�на дл� ���дани� �а��ива и� ��ъе�т�в ��н�ретн��� ти�а. Т�ль�� чт� �риведенный �ри�ер � �а��ив�� $array ��жет �ыть �ере�и�ан �ледующи� ��ра���: [int[]] $array = '3', '4 ', '5' Внешние �вадратные �����и ���а�ывают, чт� �де�ь у�а�ан� �риведение � ти�у. Нах�д�щий�� внутри этих ������ эле�ент int[] ���а�ывает, чт� в данн�� �лучае тре�уе�ы� ти��� ���давае���� ��ъе�та �вл�ет�� �а��ив целых чи�ел. Передача по ссылке П� у��лчанию �начени� �ередают�� �ет�да�, �р�цедура� и фун�ци��, ��реде� ленны� ��ль��вател��и �� �начению. Эт� ��начает, чт� та�ие вы��вы �р�цедуры, �а� эта — $dt.AddSeconds($n), �ри�ваивают AddSeconds �начение �ере�енн�й $n, н� в �р�це��е эт��� $n не ��жет �ыть ��дифицир�вана. Не��т�рые �ет�ды �ред� на�начены дл� и��енени� �начений ар�у�ент�в. В та�их �луча�х нужн� �ередать ��ыл�у на �ере�енную, чт��ы �ет�д ��� �ри�в�ить ей н�в�е �начение. Дл� �ере� дачи ��ыл�и та�, �де эт� тре�ует��, нужн�, �а� ���а�ан� в �ледующе� �ри�ере, �риве�ти и�� �ере�енн�й � ти�у [ref]: $dt=0 [datetime]::TryParse("11/20/2010 3:00 PM", [ref] $dt) Пере�енна�, ��т�рую нужн� �ередать �� ��ыл�е, д�лжна �уще�тв�вать �аранее.
Выражения 677 Хэш-таблицы Пр�ше в�е�� �ред�тавить �е�е хэш�та�лицы в виде �а��ива, чьи эле�енты иден� тифицир�ваны �� и�ена�, а не �� н��ера� их ���иций. Эле�енты �а��ива иден� тифицир�ваны �� н��ера� инде���в 0, 1, 2, 3 и т. д., а эле�енты хэш�та�лицы идентифицируют�� лю�ы� �начение� ��вершенн� �р�и�в�льн��� ти�а. Эт� ��жет �ыть �тр��а или чи�л�. П� �уще�тву, у хэш�та�лиц нет ��ределенн�й «длины», т� е�ть фи��ир�ванн��� диа�а��на н��ер�в эле�ент�в. За и��лючение� эт��� �ни ра��тают т�чн� та� же, �а� и �а��ивы. При�ер хэш�та�лицы, ���данн�й в Pow��Sh���, и�еет �ледующий вид: $table = @{'alpha' = 1; 'bravo' = 2; 'charlie' = 3; 'delta' = 4} С��дание хэш�та�лицы �тличает�� �т ���дани� �а��ива те�, чт� в�е�т� �ру�лых ������ ���ле �и�в�ла @ и���ль�уют�� фи�урные �����и, а �начени� �тдел�ют�� дру� �т дру�а не �а��ты�и, а т�ч�а�и � �а��т�й (;�. Дл� данн�й хэш�та�лицы выражение $table['abc'] вернет �начение 1. Е�ли и���ль�ует�� инде��н�е �начение, �т�ут�твующее в та�лице, �удет в��вращен� �начение null. «Инде��ны�и» �начени��и в данн�� �ри�ере �лужили �тр��и, н� и�и ���ут �ыть та�же и чи�ла. Че� же т��да хэш�та�лица, �р�инде��ир�ванна� чи�ла�и, �удет �тличать�� �т ��ычн��� �а��ива? В �а��иве н��ера�и эле�ент�в д�лж� ны �ыть 0, 1, 2 , 3 и т. д ., и Pow��Sh��� д�лжна �аре�ервир�вать д��тат�чн� �а��� ти дл� �ажд��� в����жн��� эле�ента. А �ри и���ль��вании чи�ел в �аче�тве инде���в хэш�та�лицы чи�ла эле�ент�в ���ут �ыть лю�ы�и �р�и�в�льны�и чи�ла�и. М�жн� и���ль��вать инде��ы 101, -34, 5432 и 11453434. И Pow��Sh��� д�лжна и���ль��вать �а��ть дл� хранени� т�ль�� фа�тиче��и и���ль�уе�ых эле�ент�в. П�д��н� �а��ива�, �начени�, ��храненные в �ажд�� эле�енте хэш�та�лицы, ���ут �ыть ��ъе�та�и лю���� ти�а, �т чи�ел, �тр�� и �а��ив�в и д� ��ъе�т�в у�равлени� WMI или дру�и�и, тре�ующи�и ��хранени� ��ъе�та�и. Е�ли дл� �ажд��� и�ени нужн� ��хранить т�ль�� �дн� �начение, ��д�йдет �р��т�е цел�� чи�ленн�е или �тр���в�е �начение. Е�ли дл� �ажд��� и�ени нужн� ��хранить не���ль�� �начений, в хэш�та�лицу ��жн� ���е�тить �а��ивы или ��ъе�ты. Дл� ���дани� �у�т�й хэш�та�лицы и���ль�ует�� ���анда �ледующе�� вида: $table = @{} Зате�, е�ли не��х�ди��, �ценарий ��жет д��авить � ней н�вые эле�енты. Д�� �авить эле�ент в хэш�та�лицу ��жн�, �р��т� �ри�в�ив �начение н�в��у инде��у. Следующий ��ерат�р: $table['echo'] = 5 д��авл�ет � ранее ���данн�й та�лице н�вый эле�ент. С эт�й же целью ��жн� и�� ��ль��вать и�еющий�� у хэш�та�лицы �ет�д Add: $table.Add('echo', 5) О�е вер�ии вы��лн�ют �дн� и т� же дей�твие. О�ъе�ты хэш�та�лиц .N�T ��ла� дают р�д�� ��ле�ных �ет�д�в и �в�й�тв, наи��лее важные и� ��т�рых �еречи�лены
678 Глава 15. Программирование в среде PowerShell в ��рав�е 15.1 . Не��т�рые и� них �тн���т�� т�ль�� � хэш�та�лица�, а не��т�рые �вл�ют�� ��щи�и дл� в�ех и�еющих�� в .N�T ��лле�ций ��ъе�т�в. СПРАВКА 15.1. ВАЖНЫЕ СВОЙСТВА И МЕТОДЫ SYSTEM.COLLECTIONS.HASHTABLE СВОЙСТВА Count К�личе�тв� эле�ент�в в хэш�та�лице. Keys В��вращает ��лле�цию, ��держащую в�е �лючи (инде��ные �начени�� дл� данн�й хэш�та�лицы. Values В��вращает ��лле�цию, ��держащую в�е �начени�, хран�щие�� в хэш� та�лице. МЕТОДЫ Clear() О�в���ждает хэш�та�лицу �т в�ех эле�ент�в. ContainsKey(ключ) В��вращает True, е�ли в хэш�та�лице ��держит�� �а�и�ь дл� у�а�анн��� ключа (инде��н��� �начени��, в �р�тивн�� �лучае в��вращает False. ContainsValue(значение) В��вращает True, е�ли �а��й�ни�удь эле�ент в хэш�та�лице ��держит у�а� �анн�е значение, в �р�тивн�� �лучае в��вращает False. Remove(ключ) Удал�ет и� хэш�та�лицы у�а�анный ключ и �в��анн�е � ни� �начение. О�ычн� хэш�та�лицы и���ль�уют�� дл� ��и��а �начени�, �в��анн��� � и�� ве�тны� инде��ны� �начение�, н� е�ли нужн� �р���анир�вать в�е эле�енты хэш� та�лицы, эт� ле��� ��жн� �делать, и���ль�у� �в�й�тв� Keys: foreach ($k in $table.Keys) { # при каждом проходе цикла $k содержит другой ключ. Связанное с ним # значение можно получить с помощью оператора $table[$k] } Но все же, зачем нам эти таблицы? К че�у в��ить�� � хэш�та�лица�и? Неужели �ни на�т�ль�� ��ле�ны �ри у�рав� лении ����ьютера�и W��dows или �ри вы��лнении дру�их �ра�тиче��их �адач? Да! Дл� начала, �а� �удет ���же ���а�ан�, �ни ��держат ар�у�енты, �ереданные ���андлету, ��эт��у и�и нужн� ��ль��вать�� �ри на�и�ании �в�их ����твенных ���андлет�в. Н� чт� ��лее важн�, �ни дей�твительн� ��ле�ны, ���да �еред ва�и �т�ит �адача, в�лючающа� �а��й�ни�удь ��д�чет, или ���да нужн� ра��тать � �р�� и�в�льны�и ��и��а�и эле�ент�в лю���� ти�а. Е�ли ва� �ридет�� �аду�ать�� а) �� и���ль��вании �а��ива дл� хранени� и�ен и не��т�р�й дру��й инф�р�ации,
Передача управления 679 и б) �� и���ль��вании ци�ла, чт��ы �����треть �еред д��авление� в �а��ив ��н� �ретн�й �а�и�и, не �ри�ут�твует ли эта �а�и�ь в �а��иве, �начит, у ва� е�ть �адача, ��т�ра�, наверн�е, �ри и���ль��вании хэш�та�лицы �удет решена ��лее �р��ты� ��������. С��твет�твующий �ри�ер �удет �ред��тавлен в �лаве 16. ▼) Справедливости ради следует заметить, что в WSH доступен объект Scripting.Dictionary, ко- торый может позволить вам сделать нечто подобное в VBScript, но этот объект не приобрел широкую известность. Другие типы коллекций В Pow��Sh��� и�еет�� д��ту� �� в�е� ти�а� ��лле�ций ��ъе�т�в, �вл�ющих�� ча� �тью �латф�р�ы �р��ра��ир�вани� .N�T F��m�wo�k. Кр��е System.Collections. HashTable и System.Array, ��т�рый �вл�ет�� ��ъе�т��, ��л�женны� в ��н�ву в�ех .N�T��а��ив�в, е�ть и дру�ие ��лле�ции ��ъе�т�в, в чи�ле ��т�рых System. Collections.Stack, System.Collections.Queue и System.Collections.SortedList. Каждый и� них и�еет �в�е �����е �ри�енение. Коллекция Поведение Array (�а��ив� П��в�л�ет хранить и и�вле�ать нужные эле�енты, и���ль�у� цел�� чи�ленн�е инде��н�е �начение Stack (�те�� П��в�л�ет хранить �р�и�в�льн�е ��личе�тв� ��ъе�т�в и ��штучн� их и�вле�ать. При удалении эле�ента и� �те�а �ервы� �удет ��лучен эле�ент, д��авленный ���ледни� Queue (�чередь� П�х�жа на Stack, н� �ри удалении эле�ента и� �череди �удет ��лучен �а�ый �тарый эле�ент HashTable (хэш�та�лица� Ра��тает на��д��ие �а��ива, �а и��лючение� т���, чт� инде��н�е �начение не����ательн� д�лжн� �ыть целы� чи�л��, и� ��жет �ыть �начение лю���� ти�а SortedList (�т��ртир�ванный ��и���� Ра��тает на��д��ие хэш�та�лицы, �а и��лючение� т���, чт� �ри ��анир�вании ��лле�ции � и���ль��вание� ���анды foreach �лючи �еречи�л�ют�� в �т��ртир�ванн�� ��р�д�е Чт��ы ��лучить д���лнительную инф�р�ацию � ��лле�ци�х .N�T, нужн� �айти на ве���айт msdn.microsoft.com и �р�ве�ти ��и�� �� �лючев�й фра�е «Sys��m. Co������o�s N�m�sp���». Та� вы ���жете �р�читать � �ажд�й ��лле�ции ��ъе�т�в и �р����треть ее �ет�ды и �в�й�тва. Передача управления В �аче�тве ��ы�а �р��ра��ир�вани� Pow��Sh��� ��ладает в�е�и ��ычны�и ��� �анда�и �ередачи у�равлени�, ���в�л�ющи�и те�тир�вать �начени� и вы��лн�ть ра�личные дей�тви� на ��н�ве ��лученн��� ре�ультата. В�е эти ���анды �чень ��� х�жи на те, ��т�рые ��жн� найти в� в�ех ��вре�енных ��ы�ах �р��ра��ир�вани�, ��эт��у �де�ь �удет дан т�ль�� их �рат�ий ����р.
680 Глава 15. Программирование в среде PowerShell if О�ерат�р if, чт��ы ��ределить, нужн� ли вы��лн�ть �ру��у дру�их ��ерат�р�в Pow��Sh���, и���ль�ует выражение, ��т�р�е выдает �начение True или False. Он ��жет �рини�ать лю�ую и� �ледующих ф�р�: if (выражение) { if (выражение) { if (выражение) { оператор оператор оператор (операторы) (операторы) (операторы) ... ... ... } } } else { elseif (выражение) { оператор оператор (операторы) (операторы) ... ... } } ... Е�ли �ерв�е выражение вычи�л�ет�� в True, Pow��Sh��� вы��лн�ет �ервый �л�� ��ерат�р�в внутри фи�урных ������. Е�ли выражение вычи�л�ет�� в False, т� вычи�л�ет�� лю��е �ледующее выражение, �ринадлежащее ��ерат�ру elseif, и е�ли ни �дн� и� выражений в True не вычи�л�ет��, вы��лн�ет�� ���ледн�� �ру��а ��ерат�р�в в �л��е else, е�ли, ��нечн�, та��й �л�� и�еет��. Гру��а elseif ��жет �ыть ��вт�рена лю��е ��личе�тв� ра�. Завершающа� �ру��а else н��ит не����а� тельный хара�тер. Эле�ент выражение д�лжен вычи�л�ть�� в �начение True или False. Е�ли ре� �ультат�� �вл�ет�� чи�л�, т� �н� ра���атривает�� �а� False, е�ли �начение равн� 0, в �р�тивн�� �лучае �н� ра���атривает�� �а� True. Лю�ые дру�ие ти�ы ре�ультат�в ра���атривают�� �а� True. О�ычн� ��жн� увидеть �равнени�, ��д��ные ���а�ан� н��у в данн�� �ри�ере: $v=100 if ($v -ge 100) { 'v не меньше 100' } ��т�р�е на �а��� деле выв�дит фра�у v не меньше 100. while Ци�л while и�еет �ледующую ф�р�у: while (выражение) { оператор (оператор) ... } Выражение те�тирует�� �ри �ерв�� �р�х�де. Е�ли в��вращает�� �начение True, т� вы��лн�ет�� оператор (или ��ерат�ры�, �а� и �ри и���ль��вании ��ерат�ра if. Ра�ница ���т�ит в т��, чт� ���ле вы��лнени� ��ерат�р�в Pow��Sh��� в��вращает у�равление ��ратн� в начал� у�равл�юще�� ��ерат�ра. Выражение вычи�л�ет�� еще ра�, и е�ли �н� ���ть в��вращает True, ��ерат�ры вы��лн�ют�� еще ра� и т. д., ���а в ��нце ��нц�в выражение не �удет вычи�лен� в False. Зате� �ценарий вы� ��лн�ет ��ерат�ры, �ледующие �а ци�л�� while.
Передача управления 681 Внутри ци�ла while не�едленный вых�д и� ци�ла ��уще�твл�ет�� � ����щью ��ерат�ра break, а не�едленный �ерех�д � началу �ледующей итерации ��уще�т� вл�ет�� � ����щью ��ерат�ра continue. О�ерат�р break в���ре �удет ра����трен ��лее ��др��н�. do...while и do...until Ци�л do ��х�ж на ци�л while, �а и��лючение� т���, чт� �н вы��лн�ет те�тир�вание в ��нце ци�ла. Оператор (��ерат�ры� вы��лн�ет�� �а� �ини�у� �дин ра�. У эт��� ци�ла е�ть две вер�ии, и�еющие �ледующие ф�р�ы: do{ do{ оператор оператор (операторы) (операторы) ... ... } while (выражение) } until (выражение) Вариант do...while ��вт�р�ет ци�л, е�ли выражение вычи�л�ет�� в True, и вых�� дит и� не��, е�ли �н� вычи�л�ет�� в False. Вариант do...until ��вт�р�ет ци�л, е�ли выражение вычи�л�ет�� в False, и вых�дит и� ци�ла, е�ли �н� вычи�л�ет�� в True. Внутри ци�ла do не�едленный вых�д и� ци�ла ��уще�твл�ет�� � ����щью ��ерат�ра break, а не�едленный �ерех�д � началу �ледующей итерации ��уще�т� вл�ет�� � ����щью ��ерат�ра continue. О�ерат�р break в���ре �удет ра����трен ��лее ��др��н�. for В Pow��Sh��� ци�л for �ыл в��т и� ��ы��в �р��ра��ир�вани� C и C++, и �н �т� личает�� не��ычн��тью и �л�жн��тью в ��ъ��нении. О�ерат�р и�еет �ледующую ф�р�у: for (инициализатор; условие; инкрементатор) { оператор (операторы) ... } �де инициализатор и инкрементатор �вл�ют�� выражени��и, ��т�рые ���твет� �твенн� у�танавливают �начение �ере�енн�й и и��ен�ют эт� �начение, а условие — эт� �улев� выражение, ��т�рые вычи�л�ет�� ли�� в True, ли�� в False. Внутри фи�урных ������ ��жет �ыть �т нул� и ��лее �тдельных ��ерат�р�в. В�т �а� в�е �р�и�х�дит. О�ерат�р�инициализатор на�траивает ци�л на е�� �ервый �р�х�д, условие ��редел�ет, нужн� ли ��вт�р�ть вы��лнение ��ерат�р�в, а инкрементатор ��д��тавливает ци�л дл� �ледующей итерации. Ци�л for делает в т�чн��ти т� же �а��е, чт� и �ледующий ��д: инициализатор while (условие) { оператор (операторы) ... инкрементатор }
682 Глава 15. Программирование в среде PowerShell Ци�л for �ред��тавл�ет в�е�� лишь ��лее �рат�ий �уть вы��лнени� �адачи. П�� �ле т��� �а� вы � не�у �ривы�нете, �н ��жет �делать ци�л ��лее ��н�тны�, �����ль� �у в не� в�е, чт� у�равл�ет ци�л��, нах�дит�� в �дн�� �е�те. Ра����три� �ри�ер: for($i=1;$i-le10;$i++){ $i } Он выв�дит чи�ла �т 1 д� 10. О�ерат�р�инициали�ат�р �ри�ваивает �ере�ен� н�й $i �начение 1. При �ерв�� �р�х�де �начение $i �авед��� �еньше или равн� 10, ��эт��у ��ерат�р внутри фи�урных ������ вы��лн�ет�� и выв�дит 1. О�ера� т�р�ин�ре�ентат�р и��ен�ет �начение �ере�енн�й $i � 1 на 2. Зате� у�равление в��вращает�� в начал� ци�ла. У�л�вие ����режне�у вычи�л�ет�� в True, ��эт��у ��ерат�р вы��лн�ет�� еще ра� и выв�дит 2. В�е�� эт�т ци�л ��вт�р�ет�� 10 ра�. При де��т�� �р�х�де �ере�енна� $i увеличивает�� д� 11. Те�ерь у�л�вие вычи�� л�ет�� в False, ��эт��у ци�л �авершает��. Е�ли �а���у�ни�удь ваше�у ��ду не тре�ует�� лю�а� и� трех ча�тей внутри �ру�лых ������ или даже ��ерат�ры внутри фи�урных ������, их ��жн� и��лю� чить. На�ри�ер, е�ли �ере�енна�, ��т�рую нужн� и���ль��вать дл� у�равлени� ци�л��, уже ��лучила �начение, ��ерат�р�инициали�ат�р ��жет �ыть и��лючен. Е�ли и��лючить и инициали�ат�р и ин�ре�ентат�р, ��лучит�� нечт�, ра��таю� щее в т�чн��ти, �а� ци�л while. Н� �а� �ы т� ни �ыл�, две т�ч�и � �а��т�й �ежду �ру�лы�и �����а�и д�лжны ��тать��. Е�ли не у�а�ать у�л�вн�е выражение, �удет �читать��, чт� ре�ультат вычи�лени� у�л�ви� равен True, и чт��ы и��ежать вечн��� вы��лнени�, нужн� внутри ци�ла в����ль��вать�� ��ерат�р�� break. А в�т над те�, е�ть ли ��ы�л не �тавить ��ерат�ры внутри фи�урных ������, вы, наверн�е, �ри�аду�аете�ь. Че� т��да �ай�ет�� та��й ци�л? В����ни� � т��, чт� ��ерат�р�ин�ре�ентат�р или даже у�л�вн�е выражение (е�ли �н� вы�ывает фун�� цию или и���ль�ует ��ерат�ры ++ или --� ���ут и��ен�ть �начени� �ере�енных, че�� в не��т�рых �луча�х �удет в��лне д��тат�чн�. На�ри�ер, �ледующий ци�л ��тавл�ет в �ере�енн�й $i �начение инде��а �ерв��� �начени� в �а��иве $array, ��т�р�е �еньше или равн� нулю. $array=5,1,7,0,11,16 for ($i = 0; $array[$i] -gt 0; $i++) {} write-output ("Индекс первого нулевого значения: " + $i) П�д��н��� р�да ци�л �удет а���лютн� ��н�тен �р��ра��и�ту, ра��тающе�у на ��ы�е C, н� � ��ла�аю, чт� лю��й �р��ра��и�т, ра��тающий на ��лее ��вре�енных ��ы�ах, ���читает та��й ��д не т�ль�� �а�утанны�, н� и ра�дражающи�. Внутри ци�ла for не�едленный вых�д и� ци�ла ��уще�твл�ет�� � ����щью ��ерат�ра break, а не�едленный �ерех�д � началу �ледующей итерации ��уще�т� вл�ет�� � ����щью ��ерат�ра continue. О�ерат�р break в���ре �удет ра����трен ��лее ��др��н�. foreach Ци�л foreach �� �равнению � ��ычны� ци�л�� for вы�л�дит ��учн�ват�. Он �� �череди и�учает �аждый эле�ент �а��ива, хэш�та�лицы или дру��й ��лле�ции
Передача управления 683 ��ъе�т�в. Суще�вует две ф�р�ы эт��� ��ерат�ра. Перва� ф�р�а и�еет �ледующий вид: foreach ($переменная in коллекция) { оператор (операторы) ... } При �ажд�� �р�х�де оператора (��ерат�р�в� у�а�анна� переменная и�еет �начение �дн��� и� эле�ент�в ��лле�ции. На�ри�ер: $array = 1,2,3,4 foreach ($v in $array) { write-output ("Значение массива: " + $v) } Внутри ци�ла foreach не�едленный вых�д и� ци�ла ��уще�твл�ет�� � ����щью ��ерат�ра break, а не�едленный �ерех�д � началу �ледующей итерации ��уще�т� вл�ет�� � ����щью ��ерат�ра continue. О�ерат�р break в���ре �удет ра����трен ��лее ��др��н�. Сканирование результатов работы командлета К�лле�ци�, ��анируе�а� � ����щью foreach, не ����ательн� д�лжна �ыть �ере� �енн�й. Она ��жет �ыть �у�вальн� на�ранны� �а��ив��, �а� в foreach ($v in 1,2,3,4,5) {...}, или ��жет �ыть ���андлет�� Pow��Sh���, ��т�рый �енерирует ��� т�� ��ъе�т�в. Эт� �чень эффе�тивный ин�тру�ент! М�жн� ��енерир�вать ��и��� файл�в и �р���анир�вать е�� � ����щью та���� в�т ��ерат�ра: $docsize = 0 foreach ($file in get-childitem c:\* -include *.doc* -recurse) { $docsize += $file.length } $docsize Эт�т ��д выв�дит ��щий ��ъе� �р��тран�тва ди��а, �ан�тый в�е�и файла�и � ра�ширени��и и�ен .doc, .docx и т. д ., на в�ех �а��ах ди��а C:. ▼) Как уже ранее упоминалось в разделе «Определение размера массива», цикл foreach не позво- ляет узнать номер элемента просматриваемого значения. Если нужно знать, скажем, индексное число сканируемых значений массива, следует воспользоваться обычным циклом for, как по- казано в том самом разделе. ▼▼ Символ % является предопределенным псевдонимом для оператора foreach. Поэтому можно набрать такой вот код: get-childitem | % {$docsize += $_ .Length} Я не рекомендую пользоваться этим в сценариях — это напоминает своеобразный шифр и за- трудняет восприятие кода сценария. Но такой псевдоним вполне подойдет для сокращения времени набора командной строки.
684 Глава 15. Программирование в среде PowerShell foreach в канале Вт�ра� ф�р�а ��ерат�ра foreach ��жет �ыть и���ль��вана в ���андных �тр��ах Pow��Sh��� � ��т���� ��ъе�т�в, �ереданны� эт��у ��ерат�ру �� �аналу. Се�ци� в �ру�лых �����ах �де�ь не и���ль�ует��. Оператор (��ерат�ры� вы��лн�ет�� �� �дн��у ра�у дл� �ажд��� ��ъе�та, ��лученн��� �� �аналу. Внутри ��ерат�р�в те�ущий ��ъе�т ��держит�� в �ред��ределенн�й �ере�енн�й $_. Ра����три� �ри� �ер: $docsize = 0 get-childitem c:\* -include *.doc* -recurse | foreach { $docsize += $_ .length } $docsize В не� делает�� т� же �а��е, чт� и в �редыдуще� �ри�ере, н� �ледует �а�етить, чт� на эт�т ра� ��ъе�ты �ередают�� ци�лу foreach �� �аналу. switch О�ерат�р switch ���в�л�ет �р�верить �начение и вы��лнить �дн� и� не���ль�их дей�твий в �ави�и���ти �т найденн��� �начени�. Он �а�ен�ет �ледующую ���ле� д�вательн��ть ��ерат�р�в: if (выражение -eq значение1) { первый набор операторов } else if (выражение -eq значение2) { второй набор операторов } else if (выражение -eq значение3) { ... данн�й ���лед�вательн��тью: switch (выражение) { значение1 {первый набор операторов} значение2 {второй набор операторов} ... default {последний набор операторов} } Внутри ��ерат�ра switch �р�вер�е�ы�и �начени��и �еред �л��а�и ��ерат�р�в ���ут �ыть целые чи�ла, �тр��и, �ере�енные или выражени�. Сначала вычи�л�ет�� выражение ��ерат�ра switch, а �ате� и�учают�� �на� чени� (или �начение�, �еречи�ленные внутри ��ерат�ра switch. Е�ли ре�ультат вычи�лени� выражени� ��в�адает � �дни� и� �начений, Pow��Sh��� вы��лн�ет ���твет�твующий на��р ��ерат�р�в. У вер�ии switch, и���ль�уе��й в Pow��Sh���, и�еет�� р�д ����енн��тей, не��т�рые �уще�твенн� �тличают�� �т �в�й�тв та�их же ��ерат�р�в в дру�их ��ы�ах: y y Выражение ��ерат�ра switch не����ательн� д�лжн� �ыть ��ал�рны� (�дин�ч� ны��, эт� ��жет �ыть �а��ив или ���анда, �енерирующа� ��т�� ��ъе�т�в. Е�ли выражение �енерирует ��лее �дн��� �начени�, т� switch �р�и�в�дит �� �дн��у
Передача управления 685 вычи�лению дл� �ажд��� эле�ента. (Дей�твует на��д��ие foreach. Наверн�е, ��ерат�р �лед�вал� �ы на�вать switcheach!� Ра����три� �ри�ер: $a = (1,2,3,4,5) switch ($a) { 2 {'Это число ДВА'} default {"Это число $_" } } y y Внутри ��ерат�ра switch дл� и�влечени� те�тируе���� эти� ��ерат�р�� �на� чени� ��жн� в����ль��вать�� �ред��ределенн�й �ере�енн�й $_. Эт� ����енн� ��ле�н�, е�ли switch и���ль�ует�� дл� те�тир�вани� выражени�, �а��ива или выв�да ���андлета. y y Е�ли �начение выражения не ��в�адает ни � �дни� и� �еречи�ленных �начений и е�ть �а�и�ь, ���еченна� �лючевы� �л�в�� default, вы��лн�ет�� ��ерат�р (��ерат�ры�, �ринадлежащий �л��у эт��� �л�ва. Е�ли �а�и�ь default �т�ут� �твует, не вы��лн�ет�� ни �дин ��ерат�р. y y Значения ���ут �ыть ра��ещены в лю��� ��р�д�е, �лючев�е �л�в� default ��жет �ыть и не на ���ледне� �е�те. y y П� у��лчанию �р�вер�а �тр�� на ���твет�твие ведет�� �е� учета ре�и�тра �и�� в�л�в. На�ри�ер, switch ('ABC') ���твет�твует �а�и�и 'abc'. Сравнение ��жн� �делать чув�твительны� � ре�и�тру �и�в�л�в, е�ли в����ль��вать�� �люч�� -c a se se n sitive, ��т�рый в���ре �удет ра����трен. y y Значения не ����ательн� д�лжны �ыть литеральны�и ��н�танта�и: �ни ���ут �ыть выражени��и, ��ыл�а�и на �ере�енные, вы��ва�и фун�ций и т. д. Кажд�е выражение вычи�л�ет�� �ри �ажд�� вы��лнении ��ерат�ра switch, ��эт��у нужн� ���а��тить�� �� �т�ут�твии ����чных эффе�т�в (не вы�ывайте фун�� ции, вн���щие ���т��нные и��енени�, и не и���ль�уйте ��ерат�ры ++ или --� . y y Одн� и т� же значение ��жет ���вл�ть�� не���ль�� ра� (ли�� �а� �р�ду�лир�� ванн�е литеральн�е �начение, ли�� �а� ре�ультат и���ль��вани� выражений�. Е�ли ре�ультат выражения ��ерат�ра switch ��в�адает �� значением, фи�ури� рующи� ��лее �дн��� ра�а, вы��лн�ет�� �аждый и� ���твет�твующих �л���в ��ерат�р�в в ��р�д�е их ���влени� в ��ерат�ре switch. Е�ли нужн�, эт� ��веде� ние ��жн� �ред�твратить, �авершив �л�� ��ерат�р�в ���анд�й break, ��т�ра� �риведет � не�едленн��у вых�ду и� ��ерат�ра switch. Бл�� default, е�ли та��в�й и�еет��, не вы��лн�ет��, е�ли найден� ��в�аде� ние и вы��лнен �дин и� дру�их �л���в. y y Ка� ни �транн�, н� �а��ив в �аче�тве значения дл� ��и��а ��в�адени� и���ль� ��вать нель��. А жаль. Был� �ы �р��т� �д�р�в� на�рать выражение вр�де 1..5 дл� ��в�адени� � лю�ы� и� �начений 1, 2, 3, 4 или 5. Н� е�ть ������ ���йти эт� ��раничение: ��жн� в����ль��вать�� выражени� е� дл� ��и��а ��в�адени� �ледующей ф�р�ы: (массив -eq $_), на�ри�ер (1..5 -eq $_). Он� не да�т �начени�, е�ли ��нтр�льн�е �начение ��ерат�ра switch, $_, не �удет �ринадлежать �а��иву 1..5, и ��в�адение найден� не �удет. Н� е�ли
686 Глава 15. Программирование в среде PowerShell ��нтр�льн�е �начение �удет �ринадлежать �а��иву, -eq и�влечет эт� �начение, и ��ерат�р switch ��ределит ��в�адение. Вы�л�дит не �лиш��� �лад��, н� ра� ��тает. Нужн� т�ль�� ��е��ечить, чт��ы в массиве �ыл т�ль�� �дин э��е��л�р �ажд��� не��х�ди���� �начени�. При наличии ду�ли�ат�в ре�ультат -eq ��жет �ыть �а��ив��, и ��ерат�р switch не ���жет ��ределить дл� не�� ��в�адение. Суще�твует не���ль�� вариант�в ��ерат�ра switch. П�лн�е ��и�ание �инта�� �и�а и�еет �ледующий вид: switch [-regex|-wildcard|-exact][-casesensitive] (выражение)|-file имя_файла { значение {оператор (операторы)} ... [ default {оператор (операторы)} ] } Зде�ь ���а�аны �ледующие �лючи. Ключ Описание -regex Первые три �люча �ри�ени�ы т�ль�� � те� ��ерат�ра� switch, у ��� т�рых �начение, в��вращае��е выражением switch, и значения, �ере� чи�л�е�ые внутри ��ерат�ра, �вл�ют�� �тр��а�и. С �люч�� –regex �еречи�ленные �начени� ра���атривают�� �а� ре�ул�рные выраже� ни�. На�ри�ер, switch regex ('abcd') �удет ���твет�тв�вать �наче� нию �а�и�и 'a[bc]+d' -wildcard Перечи�л�е�ые �начени� ра���атривают�� �а� и�еющие �и�в�лы� �а�е�тители. На�ри�ер, switch -wildcard ('abcd') �удет ���твет� �тв�вать �начению �а�и�и 'ab*' -ex act Перечи�л�е�ые �начени� �равнивают�� �� �начение� выражени� ��ерат�ра switch на т�чн�е ���твет�твие. Эт�т �люч и���ль�ует�� �� у��лчанию -ca ses ensitive Сравнени� �тр�� �р�в�д�т�� � учет�� ре�и�тра �и�в�л�в. П� у��л� чанию ре�и�тр не учитывает�� -file имя_файла Эт�т �люч ��жет и���ль��вать�� в�е�т� �начени� (выражение)��� �ле �л�ва switch. В�е�т� те�тир�вани� выражени� (или �а��ива, или ���анды�, Pow��Sh��� ���тр�чн� читает те��т и� у�а�анн��� файла и ��ра�атывает �аждую �тр��у � ����щью ��ерат�ра switch break Са�а� �р��та� вер�и� ��ерат�ра break ��уще�твл�ет не�едленный вых�д и� ци�л�в while, do, for или foreach. Ци�л, � �ри�еру, ��жн� �рервать, е�ли ��наружили�ь �а�ие�ни�удь не�жиданные у�л�ви�. Эта ���анда та�же �ри��дит��, ���да нужн�, чт��ы ча�ть ��ерат�р�в вы��лн�ла�ь д� �р�вер�и у�л�ви� ци�ла, а ча�ть вы��л� н�ла�ь уже ���ле �р�вер�и эт��� у�л�ви�. Ци�л while в�е�да �р�в�дит �р�вер�у в �а��� начале, а ци�л do — в �а��� ��нце, н� ин��да нужн� �р�ве�ти �р�вер�у в �ередине ци�ла, чт� � ����щью ��ерат�ра break ��жн� �делать �ледующи� ��� ра���:
Передача управления 687 while (True) { оператор (операторы) ... if (условие) break; еще операторы ... } Ка� ��в�рил��ь чуть раньше, ��ерат�р break та�же ��уще�твл�ет вых�д и� ��е� рат�ра switch. Эт� ��жет �ри��дить�� в тех �луча�х, ���да �лучит�� чт��ни�удь, чт� ��тре�ует ��тан�в�и ��ра��т�и ��ерат�р�в в �аданн�� �л��е �начени� switch, или нужн� �удет �ре�ратить �р�це�� ���ле ��ра��т�и �дн��� и� �начений в �иту� ации, ���да эт� �начение ��жет ���вить�� ��лее �дн��� ра�а. В Pow��Sh��� е�ть и вт�р�й вариант ��ерат�ра break, ��т�рый ���в�л�ет ва� вы� х�дить и� ��лее че� �дн��� вл�женн��� ци�ла. В�т �а� �н ра��тает: лю���у ци�лу while, do или for ��жн� �ри�в�ить и��, ���тавив �еред �лючевы� �л�в�� while, do или for дв�ет�чие, �а ��т�ры� �ледует и��. Зате� эт� и�� ��жн� и���ль��вать в ��ерат�ре break дл� �ре�ращени� на�ван� н��� ци�ла и в�ех вл�женных в не�� ци�л�в. Ра����три� �ри�ер: :mainloop while (True) { $text = ReadLine() for ($token = GetToken($text); -not IsEmpty($token); $token = NextToken()) { if ($token -eq 'STOP') {break mainloop} process($token) } } Е�ли эт�т ��д ��наружит �начение 'STOP' в �в�е� те��те вв�да, ��ерат�р break �ре�ратит �а� внутренний ци�л for, та� и ци�л while, ��т�рый ���ечен и�ене� mainloop. continue О�ерат�р continue ра��тает внутри ци�ла do, while, for или foreach. Он ��уще�т� вл�ет не�едленный �ерех�д � ��нцу ци�ла и начинает н�вую итерацию. На�ри�ер, эт�т ци�л: for($i=1;$i-le5;$i++){ if ($i -eq 3) {continue} $i } выв�дит чи�ла 1, 2, 4 и 5, �р��у��а� чи�л� 3. Следует �а�етить, чт� ��ерат�р continue не �р��у��ает ��ерат�р�ин�ре�ентат�р ци�ла for. Программные блоки В лю��� �е�те, �де ��жет ���вл�ть�� �тдельный ��ерат�р Pow��Sh���, ��жн� и�� ��ль��вать и �р��ра��ный �л��, ���т��щий и� нул� и ��лее ��ерат�р�в, �а�лю� ченных в фи�урные �����и. Внутри �л��а ��ерат�р�в дл� не�едленн��� вых�да и�
688 Глава 15. Программирование в среде PowerShell �л��а �е� вы��лнени� в�ех ��тальных ��ерат�р�в ��жн� и���ль��вать ��ерат�р break. Е�ли внутри �р��ра��н��� �л��а �ри�в�ить �начение �ере�енн�й, н�ва� �ере� �енна� �удет ���дана л��альн�й �� �тн�шению � �л��у и �удет ��в���ждена, �а� т�ль�� ��уще�твит�� вх�д и� �л��а. На �режние вер�ии �ере�енн�й эт� ни�а� не ��вли�ет. (Эт� не �а�ает�� �л���в, в�лючае�ых в ��ерат�р if, ��ерат�р do и т. д ., и �тн��ит�� т�ль�� � �л��а�, ���данны� �тдельн�.� На�ри�ер: $a=3 { $a=2 # это другая переменная $a $a } $a Эт�т ��д выведет 2, а �ате� 3, ��т��у чт� на и�х�дную �ере�енную $a н�ва� �ере�енна� $a, ���данна� т�ль�� дл� �р��ра��н��� �л��а, ни�а� не вли�ет. Б�лее ��др��н� �� эт�� ��в�рит�� далее, в ра�деле «О�ла�ть види���ти �ере� �енных». Обработка исключений Не �е�рет, чт� вре�ена�и �ценарии ���адают в не�жиданные �итуации. Файл, ��т�рый ваше�у �ценарию нужн� �ере�и�ать, ��а�ывает�� � ���ет��й «Т�ль�� дл� чтени�», или удаленный ����ьютер, � ��т�р��у вы ��д�лючены, �удет вы� �лючен в �р�це��е вашей ра��ты � ни�, или... — э т �т ��и�� � � �ж н � �р�д�лжать д� �е���нечн��ти. В Pow��Sh��� е�ть �ехани��, ���в�л�ющий �редвидеть ��д��ные �р��ле�ы и �треа�ир�вать на них. Он ���в�л�ет на�и�ать ��д, ��т�рый �удет и�� ��ль��ван т�ль�� �ри в��ни�н�вении �ши��и, на�ывае��й исключением, ��т�ра� �рервет н�р�альный х�д вы��лнени� ваше�� �ценари�. В т� вре�� �а� в V�S���p� и�еет�� ве�ь�а ��р��ный �� �в�и� в����жн��т�� �ехани�� on error resume next, в Pow��Sh��� и�еет�� два �ехани��а ��ра��т�и и��лючений: ��ерат�р trap и ��е� рат�р try�catch�finally. trap Дл� ��ерат�ра trap и���ль�ует�� �ледующий ф�р�ат: trap [[тип_исключения]] { оператор (операторы) ... break | continue | return значение } Эт�т ��ерат�р ��жет и���ль��вать�� в ��н�вн�� теле �ценари�, внутри �л�� �а ��ерат�р�в ���ле �лючевых �л�в if, while, for и т. д., или внутри фун�ции, ��ределенн�й ��ль��вателе�, и ��жет нах�дить�� �еред, ���ле или �реди дру�их ��ерат�р�в. В лю��� �лучае, ��держащей�� в ней ��д вы��лн�ет�� т�ль�� �ри в��ни�н�вении �ши��и.
Обработка исключений 689 П�чти �ажда� �ши��а, ��т�ра� ��жет в��ни�нуть в Pow��Sh��� или в .N�T� ��ъе�те, и�еет �в��анный � ней ��н�ретн� на�ванный ти� и��лючени�. В ��ерат�ре trap ��жн� д���лнительн� у�а�ать тип_исключения (�x��p��o�Typ�� — и�� ти�а т��� и��лючени�, ��т�р�е нужн� �ерехватить, �а�люченн�е в �вадратные �����и. М�жн� на�и�ать не���ль�� ра�ных ��ерат�р�в trap дл� �тдельн�й ��ра��т�и и�� �лючений ра�ных ти��в, или ��жн� в���ще не у�а�ывать ти� и��лючени�, или у�а�ать универ�альн�е и�� [Exception] дл� �ерехвата и��лючений в�ех ти��в. Е�ли в �р��ра��н�� �л��е и�еет�� ��лее �дн��� ��ерат�ра trap, Pow��Sh��� вы� �ывает �дин и� них, наи��лее ��дх�д�щий � в��ни�шей �ши��е. Е�ли �р�и�х�дит �ши��а и ��ерат�р trap �ри�ут�твует в вы��лн�е��й ча�ти ��да, Pow��Sh��� не�едленн� �а�у��ает на вы��лнение ��ерат�р trap. Внутри ��е� рат�ра trap те��т ��и�ани� в��ни�шей �ши��и ��держит�� в �ред��ределенн�й �ере�енн�й $_. Б�лее ��др��н� �а��е ���леднее и��лючение ��и�ывает�� та�же в ��ъе�те, ��т�рый нах�дит�� в эле�енте $Error[0]. Бл�� ��ерат�р�в trap д�лжен �а�анчивать�� ��ерат�р�� break, continue или return. Они вы��лн�ют �ледующие дей�тви�. Оператор Действие break Пре�ращает ра��ту ��да ��ра��тчи�а ��ерат�ра trap и �ередает и��лючение лю�ы� trap���ра��тчи�а� в ��де, ��т�рый ��держит данный �л��, или в фун�� ции, ��т�ра� вы�вала те�ущую фун�цию, �� на�равлению � ��н�вн��у �л��у ��да �ценари�. Е�ли и��лючение не �ерехватывают ни�а�ие дру�ие �л��и ��ерат�ра trap, Pow��Sh��� ��ра�атывает е�� �а� не �рерывающую ра��ту (не фатальную� �ши��у и �ред�рини�ает дей�тви�, у�тан�вленные �начение� �ере�енн�й $ErrorActionPreference, ��т�ра� �ыла ��и�ана в та�л. 15.5 continue Вы��лнение в����н�вл�ет�� � т��� ��ерат�ра, ��т�рый �т�ит �ра�у �а ��ера� т�р��, вы�вавши� �ши��у return значение Ра��тает та� же, �а� ��ерат�р break, н� ��уще�твл�ет вых�д и� те�ущей фун�ции, в��враща� у�а�анн�е значение. Н� ��ерат�р return ��жет ра� ��тать, а ��жет и не ра��тать, в �ави�и���ти �т �начени� �ере�енн�й $ErrorActionPreference, ��эт��у �т эт��� �люча в ваших �ценари�х в����жн� �ридет�� �т�а�ать�� Е�ли не и���ль��ван ни �дин и� этих ��ерат�р�в вых�да, �� у��лчанию дей� �твует ��ерат�р break. try-catch-�nally В Pow��Sh��� 2.0 �ыл �ред�тавлен ��ерат�р try�catch�finally, ��т�рый, наверн�е, ��лее ��н�тен в и���ль��вании, че� ��ерат�р trap. Дл� эт��� ��ерат�ра и���ль� �ует�� �ледующий ф�р�ат: try { \ оператор (операторы) \ обязательная часть / /
690 Глава 15. Программирование в среде PowerShell catch [[тип_исключения] [,[тип_исключения] ...] { \ оператор (операторы) \ от нуля и более ... / } / finally { \ оператор (операторы) \ необязательная часть ... / } / Зде�ь вы��лн�ют�� ��ерат�ры, ��т�рые нах�д�т�� внутри �л��а try. Е�ли в��ни�нет и��лючение, �еречи�ленн�е в �е�ции catch, вы��лн�ют�� ��ерат�ры, нах�д�щие�� внутри catch. (Е�ли та� нах�дит�� ��лее �дн��� ��ерат�ра catch, и�� ��ль�ует�� т�т и� них, ��т�рый ��льше в�ех ��дх�дит � и��лючению, �а� эт� уже ��и�ывал��ь ранее �ри ра����трении ��ерат�ра trap.� П��ле эт���, не�ави�и�� �т т���, в��ни�ал� и��лючение или нет, и не�ави�и�� �т т���, ��ра�атывал ��ерат�р catch и��лючение или нет, вы��лн�ет�� �ру��а ��ерат�р�в finally. Ка� и в �лучае �ри�енени� ��ерат�ра trap, ��ерат�р try ��жн� и���ль��вать внутри фун�ций, внутри та�их �р��ра��ных ��ерат�р�в, �а� if и for, и даже внутри дру�их ��ерат�р�в try. Д���лнительную инф�р�ацию �� ��ра��т�е и�� �лючений ��жн� найти в ��рав�чни�е �� Pow��Sh���, в те�ах about_trap и about_ try_catch_finally. Д���лнительную инф�р�ацию � ти�ах и��лючений, ��т�рые ��жн� �ерехватывать, ��жн� найти в ре�ультате ��и��а в Интернете �� те�е «.N�T �x��p��o�s». Один ��ле�ный �рат�ий ��и��� нах�дит�� на ве���айте msdn.microsoft. com. Ищите е�� �� �лючев�й фра�е «Commo� �x��p��o� Typ�s». throw О�ерат�р throw значение �енерирует и��лючение и вы�ывает и�еющий�� в ваше� �ценарии ��ра��тчи� trap или try�catch�finally. Значением ��жет �ыть лю��й и� ��ъе�т�в и��лючений, ��ределенных в .N�T, или лю��е �тр���в�е или чи�л�в�е �начение. Е�ли и���ль�ует�� �тр��а или чи�л�, ��ра��тчи� ��жет ��лучить д��ту� � эт��у �начени� в �ере�енн�й $_ . О�ерат�р throw ��жн� и���ль��вать внутри �л��а catch, чт��ы �ередать у�рав� ление и ���в�лить Pow��Sh��� ��ра��тать и��лючение. Или, в �лучае вл�женных ��ерат�р�в try�catch�finally, дл� �ередачи и��лючени� и� внутренне�� ��ерат�ра внешне�у ��ерат�ру. Эт�т ��ерат�р ��жн� та�же и���ль��вать дл� �енерир�вани� и��лючений, чт��ы �р�те�тир�вать ваши ��ерат�ры catch в �р�це��е �тлад�и. В �лаве 16, в ра�деле «О�ра��т�а и��лючений �а� �трате�и� вых�да», � �редла�аю еще �дин ������ и���ль��вани� ��ерат�ра throw. Определение функций Б�льшин�тв� ��ы��в �р��ра��ир�вани� ���в�л�ет ��редел�ть ��д�р��ра��ы и фун�ции, ��т�рые ����щенн� и�ве�тны �а� подпрограммы. Пр�ще в�е�� �хара�� тери��вать ��д�р��ра��у �а� фра��ент �р��ра��н��� ��да, и�еющий не��т�рую �а��д��тат�чн��ть, ��т�рый ��жн� и���ль��вать (вызывать� в дру�их ча�т�х ва�
Определение функций 691 шей �р��ра��ы или �ценари�, и��авл���ь �ри эт�� �т не��х�ди���ти ��вт�рн��� на��ра в�ех ��ерат�р�в эт��� фра��ента. Фун�ци� — эт� ��д�р��ра��а, в��враща� юща� �а��й�ни�удь ре�ультат или �твет т�й ча�ти �р��ра��ы, ��т�ра� ее вы�вала. В �редыдущих �лавах данн�й �ни�и ва� �ыли ���а�аны �н���чи�ленные �ри�еры и���ль��вани� фун�ций. В�е ��д�р��ра��ы Pow��Sh��� � техниче���й т�ч�и �ре� ни� �вл�ют�� фун�ци��и, ��эт��у �де�ь и далее �ы �уде� ��ль��вать�� и�енн� эти� тер�ин��. Пр��тейша� фун�ци� и�еет �ледующий вид: function simple { return 1 } М�жн� на�рать эт�т ��д, а �ате� на�рать в ���андн�й �тр��е simple, и Pow��Sh��� выведет ре�ультирующее �начение 1. Или же ��жн� на�рать $v = simple, а �ате� на�рать $v, чт��ы увидеть, чт� в��вращае�ы� �начение� �ыл� чи�л� 1. Е�ли фун�ци� не �рини�ает ни�а�их ар�у�ент�в, т� �ру�лые �����и в ее ��ределении не и���ль�уют��. В��вращае��е �начение ��редел�ет�� в фун�ции � ����щью ��ерат�ра return. Эт�т ��ерат�р ��жет и���ль��вать�� в лю��� �е�те фун�ции. Он �а�тавл�ет фун�цию не�едленн� �авершить ра��ту и �ередать у�а�анн�е �начение на�ад, туда, �т�уда �ыла вы�вана фун�ци�. Е�ли фун�ци� д��ирает�� д� �в�е�� ���ледне�� ��ерат�ра, ни�де не в�третив ��ерат�ра return, �на в��вращает �начение $NULL. Аргументы функции В Pow��Sh��� фун�ци��, ��ределенны� ��ль��вателе�, ���ут �ередавать�� �на� чени� ар�у�ент�в, н� �инта��и� вы��ва, в����жн�, в��ре�и ваши� �жидани��, не вы�л�дит, � �ри�еру, �а� имя_функции( аргумент1, аргумент2). В не� не и���ль�уют�� ни �ру�лые �����и, ни �а��тые. Вы��в фун�ции и�еет �ледующий вид: имя_функции аргумент1 аргумент2 ..., и �ред�тавл�ет ����й �дну ���андную �тр��у. П� у��лчанию эле�енты �тр��и вы��ва фун�ции ра���атривают�� в �аче� �тве литеральных �начений. Та�и� ��ра���, funcname abc def ра���атривает�� �а� вы��в фун�ции funcname � дву�� ар�у�ента�и, �тр��а�и abc и def. Е�ли нужн� �ередать �тр��у, в ��т�р�й е�ть �р��елы, ее нужн� �а�лючить в �авыч�и. ▼o Важно помнить о значении круглых скобок в PowerShell — они определяют массивы. Если поль- зовательская функция будет вызвана следующим образом: funcname(arg1,arg2) то получится вызов функции funcname с одним аргументом: массивом, состоящим из двух эле- ментов. С техниче���й т�ч�и �рени� �ри ��ределении фун�ции у�а�ывать ее ��тре�� н��ть в ар�у�ентах не нужн�. Даже фун�ци� simple, �удучи вы�вана � ар�у�ен� та�и, ра��тает ��рре�тн� — �на �р��т� не и���ль�ует эти ар�у�енты. На�ри�ер, simple 1 2 3 ����режне�у в��вращает 1. Ар�у�енты, �ереданные фун�ции, д��ту�� ны в �ред��ределенн�� �а��иве $args; в данн�� �ри�ере в $args �удут ��держать�� три эле�ента — �начени� 1, 2 и 3.
692 Глава 15. Программирование в среде PowerShell Н� у ва� в�е же и�еет�� в����жн��ть ��и�ать те ар�у�енты, ��т�рые �рини� �ают�� фун�цией, чт��ы ��ы� Pow��Sh��� ���� ��вершить дл� ва� р�д ��ле�ных дей�твий, та�их �а� ���ир�вание �начений ар�у�ент�в в ��и�ен�ванные �ере�ен� ные и �а��лнение �начений �� у��лчанию дл� неу�а�анных ар�у�ент�в. При эт�� ��жн� и���ль��вать два ф�р�ата: ��ерат�р param и ��лее традици�нный �еречень ар�у�ент�в, ���ещае�ый �ра�у �а и�ене� фун�ции. Оператор param Ар�у�ента�, и���ль�уе�ы� фун�цией, ��жн� �ри�в�ить и�ена, ���е�тив ��ерат�р param в �аче�тве �ерв��� ��ерат�ра в �л��е ��ерат�р�в фун�ции. При эт�� и���ль� �ует�� д�в�льн� не�р��т�й ф�р�ат: param ([[тип_объекта]]$имя_аргумента [= значение_по_умолчанию][, ...]) О�ерат�р param ��держит �еречень и�ен �ере�енных, ра�деленных �а��ты�и. М�жн� д���лнительн� ���тавить �еред и�ене� ��ецифи�ацию ти�а [тип_объ­ екта] и д���лнительн� ���тавить �на� = и �начение, у�танавливающее �начение ар�у�ента �� у��лчанию, е�ли ��ль��ватель не у�ажет данный ар�у�ент �ри вы��ве фун�ции. О�ерат�р param ���ирует эле�енты и� �а��ива $args в ��и�ен�ванные �ере�енные, н� в�е эт� �р�и�х�дит �л�жнее, че� �ажет�� на �ервый в��л�д. М�жн� та�же ��ределить ар�у�ент фун�ции, не тре�ующий �начени�, а �р��т� и�еющий �начение True, е�ли �н �ри�ут�тв�вал в вы��ве фун�ции, или False, е�ли �н не �ыл у�а�ан. Дл� эт��� ар�у�ента��ере�лючател� в ��ерат�ре param и���ль� �ует�� �ледующий ф�р�ат: [switch] $имя_аргумента. Ра����три� �ри�ер фун�ции, �рини�ающей два ар�у�ента — цел�е чи�л� и не� ����ательный �люч –verbose — и третий ар�у�ент неу�а�анн��� ти�а: function printmsg { param ([int]$level = 1, [switch] $verbose, $message) if ($level -gt $current_output_level) { if ($verbose) write-output 'ЭТО ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ...' write-output $message } } В�е�т� эт��� ��держи��е ��ерат�ра param ��жн� ���е�тить внутри �ру�лых ������ �ра�у ���ле и�ени фун�ции: function printmsg ([int]$level = 1, [switch]$verbose, $message) { if ($level -gt $current_output_level) { write-output $message } } чт� ��лее ��х�же на ��ределение фун�ции в дру�их ��ы�ах. Е�ли эт�т ф�р�ат дл� ва� уд��нее, ��ль�уйте�ь и� ���т��нн�! В лю��� �лучае, эта фун�ци� выв�дит ар�у�ент message, е�ли �начение level ��льше че� или равн� �начений �ере�енн�й $current_output_level. Е�ли ��ль��� ватель не у�ажет ар�у�ент level, е�� �начение� �удет �читать�� 1. В��вращае���� �начени� данна� фун�ци� не и�еет.
Определение функций 693 Не��ычны� �в�й�тв�� Pow��Sh��� �вл�ет�� т�, чт� �ри вы��ве фун�ции ��жн� у�а�ать ар�у�енты ���ици�нн�: printmsg 4 'Это сообщение' или �� и�ени: printmsg -level 4 -message 'Это сообщение' или в ��ешанн�� виде. В�е �ледующие ���анды ра��тают а���лютн� �дина��в�: printmsg -level 4 'Это сообщение' printmsg 'Это сообщение' -level 4 printmsg -message 'Это сообщение' 4 Ар�у�ент level в���ще ��жет �ыть ��ущен, �����ль�у дл� не�� у�а�ан� �на� чение �� у��лчанию: printmsg 'Это сообщение для уровня 1' При вы��ве фун�ции Pow��Sh��� �начала �ытает�� �ри�в�ить ��и�ен�ванны� ар�у�ента� фун�ции ар�у�енты ти�а -имя значение и ��и�ен�ванные –switch� ар�у�енты, �ате� в�е� ��тальны� ар�у�ента� �ри�ваивает�� в�е, чт� ��тал��ь в ���андн�й �тр��е. (Ар�у�ент��ере�лючатель ни���да не ����начает�� ���ици� �нн�, ��эт��у в� в�ех �редыдущих �ри�ерах �начение $verbose равн� False.� Е�ли вы�вать фун�цию � и�ена�и ар�у�ент�в, ��т�рые не ��ределены в ��ерат�ре param, эти ар�у�енты �удут �р�и�н�рир�ваны. Они в�е же ���в�т�� нар�ду �� в�е�и ��тальны�и ар�у�ента�и в �а��иве $args, н� ни�а���� ����щени� �� �ши��е вы� веден� не �удет. На�ри�ер, ар�у�ент -unknown в �редыдущей фун�ции не вы��вет ни�а��й реа�ции. В Pow��Sh��� вер�ии 2.0 �уте� д��авлени� д���лнительн�й инф�р�ации � ��и� ��у param ��жн� ��ределить фун�цию, в ��т�р�й и�еют�� ����ательные ар�у�ен� ты или ��т�ра� �рини�ает ар�у�енты��ере�лючатели (ти�а switch� ��д��ные –v e rbose, не тре�ующие ���ле �е�� �начени�. Перед и�ене� �ере�енн�й и �еред е�� ��ъ�вление� [тип_объекта], е�ли та��в�е и�еет��, нужн� д��авить д���лни� тельный на��р ��ецифи�аций в ф�р�е: [parameter( ключ = значение [, ...] )] � �дни� и ��лее и�ена�и �лючей. Не��т�рые �лючи �еречи�лены в �ледующей та�лице. Ключ Значение Описание Mandatory $true или $false Е�ли �начение равн� $true, ар�у�ент ����а� тельный. П� у��лчанию ар�у�ент �вл�ет�� не����ательны� ValueFromRemainingArguments $true или $false Е�ли �начение равн� $true, эт�т ар�у�ент ��� лучает в�е ��тальные �начени� вы�ывающей ���андн�й �тр��и в виде �а��ива HelpMessage строка Крат��е ��и�ание на�начени� ар�у�ента Alias строка Альтернативн�е (в����жн�, ��лее ��р�т��е� и��, ��т�р�е ��ль��ватель ��жет у�а�ать в ��� �андн�й �тр��е дл� данн��� ар�у�ента
694 Глава 15. Программирование в среде PowerShell На�ри�ер, �ледующа� фун�ци� �рини�ает не����ательный чи�л�в�й �ара�етр - npings и ����ательный ар�у�ент -ComputerName. М�жет �ыть у�а�ан� ��лее �дн��� �начени� ComputerName; в�е �начени� ���ле ар�у�ента -ComputerName �удут и�� ��ль��ваны дл� эт��� ар�у�ента. Значени� �удут ��хранены в �тр���в�� �а��иве: function pingtest ( $npings = 3, [parameter(Mandatory=$true,Alias=CN, ValueFromRemainingArguments=$true)][String[]] $ComputerName ) { foreach ($name in $Computername) { for ($test = 1; $test -le npings; $test++) { # выполнение одного ping-теста для компьтера $name и вывод # результатов. # ... } } } Следующа� ���анда �р�вер�ет четыре ра�ных ����ьютера �� два ра�а �аждый: pingtest -npings 2 -cn server1 server2 server3 server4 Кр��е эт���, ��жн� у�а�ать �а��и�альн�е и �ини�альн�е ��личе�тв� �начений, ��т�рые ���ут �ыть у�а�аны в �аче�тве ар�у�ент�в, тре�уе�ые чи�л�вые диа�а��� ны или диа�а��ны длины �тр��и дл� �начений и �н���е дру��е. М��ут �р�в�дить�� ве�ь�а �л�жные на�тр�й�и ар�у�ент�в. Дл� дальнейше�� ���уждени� эт��� в��р�� �а в данн�й �ни�е нет ��льше �е�та, н� ��лучить д���лнительную инф�р�ацию ��жн� в ��рав�е � Pow��Sh���, в те�е about_functions_advanced_parameters. Область видимости функций П� у��лчанию фун�ции, на�ранные в ��не ���андн�й �тр��и, д��ту�ны д� тех ��р, ���а �т�рыт� ��н� Pow��Sh���. Фун�ции, ��ределенные в файле �ценари�, д��ту�ны т�ль�� в эт�� файле �ценари�. Е�ть два ������а фи��ации ��ределени� фун�ции, чт��ы �на �тала д��ту�н�й в ��не ���андн�й �тр��и и в дру�их файлах �ценариев: y y П��тавить �лючев�е �л�в� global: �еред и�ене� фун�ции, �а� в ��ределении фун�ции global:simple. П��е�тите ча�т� и���ль�уе�ые фун�ции в �в�й �це� нарий �р�фил�, чт��ы � ни� �ыл ���т��нный д��ту�. Не �а�удьте ���тавить �еред их и�ена�и �лючев�е �л�в� global:. О�ратите�ь � �лаве 14, � ра�делу «Пр�фили Pow��Sh���». y y П��е�тить фун�цию в файл �ценари� и �а�у�тить �ценарий � ����щью ��ера� т�ра dot-source, чт��ы Pow��Sh��� ра���атривал �деланные в не� ��ределени�, �а� �удт� �ни �ыли на�раны в ��не ���андн�й �тр��и. За�у�� �ценари� в ре� жи�е dot-sourcing ра���атривает�� в �ледующе� ра�деле. Сценарий, и���ль�уе�ый т�ль�� лишь дл� ��ределени� �л��альных фун�ций, не д�лжен ��держать ни�а�их дру�их ��ерат�р�в. Е�ли ��ешивать ��ределени� фун�ций и ��ерат�ры �ценари�, �танет важна ���ици� фун�ции внутри файла �ценари�. Она д�лжна �ыть ��ределена д� т���, �а� �удет и���ль��вана в теле �це�
Определение функций 695 нари�. М�жн�, ��нечн�, ра��р��ать фун�ции �� в�е�у ��н�вн��у телу �ценари�, н� � в��л в �ривыч�у ���ещать в�е фун�ции в начале файла �ценари�, а ��н�вн�е тел� �ценари� в е�� ��нце. ▼) Функция может ссылаться на функции, которые появляются в сценарии после нее, если только она не вызывается в основном теле сценария до появления в нем этих функций. ▼) Список всех функций, определенных пользователем, содержится в виртуальном хранилище по имени function:. Вывести список функций можно с помощью команды dir function:, а удалить функцию можно с помощью команды rm function:имя_функции. Оператор Dot-Source Си�в�л т�ч�и (.� �а� та��в�й �вл�ет�� ��ециальны� ��ерат�р��, ��начающи� «�а� �у�тить �ледующи� файл �ценари�, �а� �удт� �н �ыл на�ран в ���андн�й �тр��е». Эт� на�ывает�� запустить сценарий, предварив его имя точкой или �а�у�тить е�� в режи�е dot­sourcing. Ра�ница �ежду �а�у���� файла �ценари� �� и�ени myscript. ps1 �уте� на��ра myscript и �уте� на��ра . myscript в ��не ���андн�й �тр��и Pow��Sh��� ���т�ит в т��, чт� �ерва� вер�и� �а�у��ает �ценарий ��ычны� ��������. Пере�енные и фун�ции, ��ределенные в �ценарии, удал�ют��, �а� т�ль�� вы��лнение �ценари� �удет �авершен�, е�ли т�ль�� �еред их и�ена�и не �удет �т��ть ��ределитель ��ла�ти види���ти global:. Вт�ра� вер�и� �а�у��ает �ценарий в режи�е dot-source . Сценарий �а�у��ает�� в ��ла�ти види��� �ти ��на ���андн�й �тр��и, ��эт��у �� у��лчанию в�е фун�ции и �ере�енные �ри� ��ретают �л��альную ��ла�ть види���ти. Они �р�д�лжают �уще�тв�вать и ���ле �авершени� вы��лнени� �ценари�, е�ли т�ль�� �еред их и�ена�и не ���тавлены ��ределители ��ла�ти види���ти local: или script:. ▼) Вспомните, в главе 14 говорилось, что если нужно запустить сценарий, который находится в текущем каталоге, не упомянутом в системной переменной PATH, то имя сценария нужно на- брать в виде .\scriptname.ps1. Эта точка (.) не является оператором dot-source! Она является частью пути файла сценария. Для запуска сценария, находящегося в текущем каталоге в режи- ме dot-source, нужно набрать точку ( .), за ней пробел и только за ним набрать путевое имя .\ scriptname.ps1, чтобы все это имело следующий вид: . . \myscript.ps1 Область видимости переменных П� у��лчанию �ере�енные и фун�ции, ��ределенные в �ценарии Pow��Sh���, фа�� тиче��и види�ы в файле �ценари�, фун�ции или �р��ра��н�� �л��е (внутри фи� �урных �������, в ��т�рых �ни �ри�ут�твуют, а та�же в лю��� �ценарии, фун�ции или �р��ра��н�� �л��е, ��т�рые вы�ывают�� и� эт��� �ценари�, и� эт�й фун�ции или и� эт��� �р��ра��н��� �л��а. Ра����три� �ри�ер:
696 Глава 15. Программирование в среде PowerShell function sample_function { "2 . Внутри sample_function v = $v" $x=1 "3 . Внутри sample_function x = $x" } $v=1 "1. В основном сценарии v = $v" sample_function "4. В основном сценарии x = $x" Выв�д �ценари� �удет и�еть �ледующий вид: 1. В основном сценарии v = 1 2. Внутри sample_function v = 1 3. Внутри sample_function x = 1 4. В основном сценарии x = П����три� �начала на �ере�енную $v. В �в�е� ��н�вн�� теле �ценарий ��ре� дел�ет �ере�енную $v и выв�дит ее �начение. К��да вы�ывает�� фун�ци� sample_ function, �на та�же ��жет «видеть» �ере�енную $v, ��т��у чт� фун�ци� sample_ function вы�ывает�� и� ��н�вн��� �ценари�. М�жн� ��а�ать, чт� �на нах�дит�� на ��лее �лу����� вложенном уровне. Те�ерь �����три� на �ере�енную $x. В�ервые �на ��редел�ет�� внутри фун�� ции sample_function. К��да фун�ци� sample_function в��вращает у�равление, �ере�енна� $x удал�ет��, ��эт��у в ��н�вн�� теле �ценари� �на не ��ределена. К��да ��н�вн�е тел� �ытает�� выве�ти �начение �ере�енн�й $x, �начени� нет. Фун�ци� sample_function и�ела в����жн��ть видеть �ере�енную $v, ��т�ра� �ыла ��ределена в р�дитель���� �р��тран�тве, н� �ри ���ыт�е и��енить �на� чение �ере�енн�й $v �р�и��йдет ��е�чт� интере�н�е. П� у��лчанию Pow��Sh��� ���дает новую �ере�енную � та�и� же и�ене�. П�эт��у �� у��лчанию и��енени�, вне�енные в �ере�енную внутри фун�ции, �ри�ени�ы т�ль�� внутри фун�ции. П�лучае�ый эффе�т ���т�ит в т��, чт� вл�женный ��д �ценари� или фун�ции на �а��� деле вид�т копии �ере�енных, ��ределенных в р�дитель��их �р��тран�твах. Ра����три� и��ененную вер�ию �редыдуще�� �ри�ера: function sample_function { "2 . Внутри sample_function v = $v" $v=47 "3 . Внутри sample_function v = $v" } $v=1 "1. В основном сценарии v = $v" sample_function "4. В основном сценарии v = $v" Эт�т �ценарий выведет �ледующую инф�р�ацию: 1. В основном сценарии v = 1 2. Внутри sample_function v = 1 3. Внутри sample_function v = 47 4. В основном сценарии v = 1 Е�ли фун�ци� sample_function ���да�т н�вую л��альную ���ию �ере�енн�й $v, т� и�х�дн�е �начение эт�й �ере�енн�й �удет вре�енн� ��рыт�. П��ле т��� �а� фун�ци� вернет у�равление, в ��н�вн�� теле �ценари� у �ере�енн�й $v ��� �режне�у �удет и�х�дн�е �начение.
Определение функций 697 Та��е и�х�дн�е ��ведение ��жн� и��енить, ���тавив �еред и�ене� �ере�енн�й ��ределитель ��ла�ти види���ти. Е�ли �ри �ерв�� и���ль��вании �ере�енн�й ���тавить �еред ее и�ене� ��ределитель л��альн�й ��ла�ти види���ти local:, �а� в ��ерат�ре $local:v = 1, эта �ере�енна� �удет видна т�ль�� на �в�е� ур�вне вл�жени� и не �удет видна на ��лее �лу���их ур�вн�х. Е�ли в �редыдуще� �ри�ере �ри�в�ить �начение �ере�енн�й $v и�енн� та�и� ��ра���, ��ажет��, чт� в фун�ции sample_function �на не �удет ��ределена. И на���р�т, е�ли �еред и�ене� �ере�енн�й ���тавить ��ределитель script:, т� �удет ���дана �ере�енна� или ��ыл�а на ���ию �ере�енн�й, ��т�рые �у� дут видны на лю��� вл�женн�� ур�вне в файле �ценари�. Е�ли ���тавить �е� ред и�ене� �ере�енн�й ��ределитель global:, ��жн� ���дать �ере�енную или ��ыл�у на �ере�енную, ��т�рые �удут видны в�е� �ценари�� и ��ну ���андн�й �тр��и. ▼) При работе с вложенными программными блоками или внутри функций нужно использовать опре- делитель script: или определитель global: при любой ссылке на переменную, в противном случае будет просто создана новая переменная с таким именем в текущем пространстве видимости. Функции, работающие с каналами, и фильтры Фун�цию Pow��Sh��� ��жн� вы�вать в ��ерат�ре, ��держаще� ��ерат�р �анала, �а� ���а�ан� в �ледующей ���анде: get-childitem | my_function. Фун�ци� д�лжна �ыть на�и�ана ����ы� ��ра���, чт��ы �на ���ла и��лед�вать �аждый и� ��ъе�т�в, �ереданных �� �аналу. Пр�ще в�е�� на�и�ать фун�цию, и��ледующую �аждый и� ��ъе�т�в, и�еющих�� в �ере�енн�й $input, и���ль�у� ��д, ��д��ный эт��у: foreach ($obj in $input), чт��ы ��штучн� �ередавать �аждый ��лученный �� �аналу ��ъе�т чере� �ере�ен� ную $obj. Н� эт�т �ет�д ��жет ра��тать �лиш��� �едленн�, �����ль�у фун�ци� не �удет вы�ывать��, ���а �редыдущий ���андлет не �авершит �а�и�ь ��ъе�т�в в �анал и не �а��нчит�� ���дание �а��ива $input. Е�ть ��лее эффе�тивный и �еред�в�й ������, в ��т�р�� и���ль�уют�� ��ера� т�ры BEGIN, PROCESS и END. Pow��Sh��� ���в�л�ет ��редел�ть внутри фун�ции три �л��а ��да, ��т�рые �редна�начены дл� и���ль��вани� в �анале: BEGIN ���в�л�ет инициали�ир�вать фун�цию, PROCESS вы�ывает�� �� ра�у дл� �ажд��� ��ъе�та, �р�х�д�ще�� �� �аналу, а END ���в�л�ет �ани�ать�� лю��й не��х�ди��й ��дчи�т� ��й или ��дведение� ит���в. И���ль�у� эт�т �ет�д, Pow��Sh��� ��жет �а�у��ать лю�ые �в��анные �анала�и ���андлеты и фун�ции �дн�вре�енн�, чт��ы �аждый ���андлет или фун�ци� ��ра�атывали ��ъе�ты �� �ере их �р�х�ждени� чере� �редыдущий эле�ент �анала. О�н�вна� �тру�тура и�еет �ледующий вид: function имя_функции { param (список аргументов) BEGIN { инициализирующие операторы ... }
698 Глава 15. Программирование в среде PowerShell PROCESS { операторы обработки, где $_ содержит текущий объект ... } END { операторы, завершающие работу ... } } Эта фун�ци� вы�ывает�� т�ль�� �дин ра�, ��эт��у нужн� ��ра��тать в�е �лю� чи ���андн�й �тр��и (�ередавае�ые чере� ��и��� ар�у�ент�в фун�ции, а та�же �а��ив $args, ��т�рый уже ранее у���инал��� в �л��е BEGIN. Зате� �л�� PROCESS вы��лн�ет�� �� ра�у дл� �ажд��� ��ъе�та, �ереданн��� �� �аналу. Те�ущий ��ъ� е�т ��держит�� в �ере�енн�й $_ . И на��нец, ���да �удут ��ра��таны в�е ��ъе�ты, Pow��Sh��� вы��лн�ет �л�� END. Лю��й и� этих �л���в ��жет �ыть �р��ущен или не и�еть ��ерат�р�в �ежду фи�урны�и �����а�и. Не�ави�и�� �т т���, �а��й ф�р�ат и���ль�ует��, function или filter, е�ли нужн�, чт��ы ваша фун�ци� ���ла и���ль��вать�� в �ередине �анала, �на д�лжна �р��у��ать чере� �е�� ��лные ��ъе�ты на �тандартный выв�д. Эт� ��жн� �делать �уте� �а�у��а ���андлета, ��т�рый выдает ��ъе�ты внутри �л��а ��ра��т�и. Введенный ��ъе�т ��жн� �р��и��� �ередать на выв�д, и���ль�у� ��ерат�р $_ (��т�рый выдает введенный ��ъе�т.� М�жн� та�же в����ль��вать�� ���анд�й write-output объект, �де объект — эт� лю��й ��ъе�т, ��т�рый нужн� �ередать �ледующе�у ���андлету или фун�ции в �анале. В �аче�тве �ри�ера ��жн� �ри� ве�ти �ра�тиче��и �е���ле�ный фильтр, ��т�рый �р��т� �ередает �аждый вт�р�й ��ъе�т на вых�д и �т�а�ывает�� �т в�ех ��тальных ��ъе�т�в: function every_other { begin { $count = 1} process { if (($count++ % 2) -eq 1) { write-output $_}} # выдача объектов #1,3, } ▼) Если блоки BEGIN и END оставлены пустыми, можно взять функцию, использующую вместо слова function ключевое слово �lter. В таком случае блоки BEGIN и END опускаются, и место блока PROCESS занимает тело функции. Это выглядит следующим образом: filter filter_name { операторы ... Можно включить список аргументов. При использовании фильтра функция вызывается по од- ному разу для каждого переданного по каналу объекта, и при этом каждый раз передаются аргументы командной строки. Фун�ции, ра��тающие � �анала�и ��лее ��др��н�, �удут ра����трены в �ла� ве 16.
Использование .NET API 699 Применение сплат-оператора Е�ли �а�у��ать ���андлеты и� �ценари� Pow��Sh���, ��жн� хранить ар�у�енты, ��т�рые нужн� �ередать ���андлету, в �а��иве или в хэш�та�лице. Зате� �ри �а� �у��е ���андлета ��жн� ���тавить �еред и�ене� �ере�енн�й �и�в�л @, ��т�рый на�ывает�� сплат���ерат�р�� (sp����, и е�� �ри�енение �рив�дит � и�влечению ��� держи���� хэш�та�лицы или �а��ива и ���ещению �ажд��� эле�ента в ���андную �тр��у или в вы��в фун�ции, �а� �удт� эт� �ыли �тдельн� на�ранные ар�у�енты. П�р�д�� эле�ент�в, вых�д�щих и� хэш�та�лицы, и�еет, �� �ути, �р�и�в�льный хара�тер, ��эт��у хэш�та�лицы д�лжны и���ль��вать�� т�ль�� дл� хранени� ар�у� �ент�в, ��р�д�� �лед�вани� ��т�рых не и�еет �начени�. Дл� хранени� ар�у�ент�в, ��р�д�� �лед�вани� ��т�рых и�еет �начение, �ледует и���ль��вать �а��ивы. Эт� �р�ще ���а�ать, че� ��и�ать. В данн�� �ценарии: $options = @{'- flag'; '- option=value'} # ключи в хэш-таблице (произвольный # порядок) $files = 'file1', 'file2', 'file3' # имена файлов в массиве (фиксированный # порядок) cmdlet @$args @$files # передача этих значений командлету Pow��Sh��� �ерет хэш�та�лицу и �а��ив и ���ещает их ��держи��е в ���андную �тр��у. Эффе�т ��лучает�� та��й же, �а� е�ли �ы вы на�рали cmdlet -flag –option=value file1 file2 file3 В ��ще�, ��жн� ���ещать �ере�енные, ��т�рые ��держат те��т, в лю��е �е�т� ���андн�й �тр��и, н� �ри эт�� нужн� �нать, чт� �тдельна� �ере�енна� в�е�да в���рини�ает�� �а� �тдельный ар�у�ент ���андн�й �тр��и. П���ню, чт� � и�ею в виду. В��ь�е� ти�ичную ���анду: dir -recurse c:\users ��т�ра� выв�дит ��и��� ��держи���� �а��и c:\users и в�ех ��держащих�� в ней ��дчиненных �а���. Следующие ���анды: $location = '-r ecu rse c:\users' dir $location не дают т��� же ре�ультата. В�е�т� выв�да ��и��а ��держи���� �атал��а выв�дит�� ����щение �� �ши��е, ��т��у чт� не �уще�твует �а��и �� и�ени -recurse c:\users. Эт� �уще�твенн�е ра�личие �ежду Pow��Sh��� и �ир�� �тар��� ��на ���андн�й �тр��и. В cmd.exe �ере�енные �реды ��ружени� ра�шир�ют�� д� вы��лнени� ��� �анды, ��эт��у �тдельна� �ере�енна� ��жет ра���атривать�� �а� ��лее че� �дин ар�у�ент. В Pow��Sh��� �ере�енные, и���ль�ующие�� �а� ар�у�енты ���андн�й �тр��и, ра���атривают�� �а� �дн� �начение ар�у�ента. Использование .NET API Д� �их ��р в данн�й �лаве речь шла т�ль�� � тех эле�ентах ��ы�а, ��т�рые в�тр�ены в W��dows Pow��Sh���. И вы уже ���ли у�едить�� в т��, чт� их та� д�в�льн� �н���! Мы даже не �ри�ту�или � ра����трению ��ъе�т�в и фун�ций .N�T P����o�m, ��т�� рые �удут и���ль��вать�� ва�и дл� ра��ты � данны�и, не ��в�р� уже � в�ех ���анд�
700 Глава 15. Программирование в среде PowerShell летах, �ред��тавл�е�ых Pow��Sh���, ��т�рые дают ва� д��ту� � �а��й W��dows. К ра����трению ���андлет�в �ы �ри�ту�и� в �лаве 16. А �де�ь � х�чу дать ва� �рат�ий ����р ин�тру�ент�в дл� ра��ты � данны�и, и�еющих�� в .N�T API. Эти ин�тру�енты �вл�ют�� не�тъе�ле��й ча�тью Pow��Sh�����р��ра��ир�вани�, и �ни �а�ен�ют ����й фун�ции, в�тр�енные в та�ие ин�тру�енты ���дани� �ценариев, �а� V�S���p�, ��эт��у � ��ду�ал, чт� е�ть ��ы�л ра����треть их в �аче�тве ча�ти данн��� ����ра ��ы�а Pow��Sh���. Вызов статических функций-членов класса В т� вре�� �а� V�S���p� �ред��тавл�ет дл� ра��ты �� �тр��а�и, дата�и и та� далее та�ие фун�ции, �а� left() и mid(), Pow��Sh��� дает ва� д��ту� � �татиче��и� фун�� ци���члена� �ла��а. Эт� �ет�ды .N�T���ъе�т�в, ��т�рые ��жн� и���ль��вать �е� реальн��� ���дани� �а�их ��ъе�т�в. Их �инта��и� и�еет д�в�льн� �транный вид: [имя_объекта]::имя_метода(аргументы...) На�ри�ер, �ледующий �ет�д вычи�л�ет а���лютн�е �начение чи�ла �3: $v=-3 $av = [System.Math]::abs($v) Кр��е �татиче��их �ет�д�в у �н��их ��ъе�т�в и�еют�� статические поля. П�л� ��х�жи на �в�й�тва, �а и��лючение� т���, чт� �ни �вл�ют�� ��н�танта�и и не �ави��т ни �т �а�их ��ецифиче��их �начений данных. В �аче�тве �ри�ера ��л� ��жн� �риве�ти [math]::pi, в ��т�р�� ��держит�� �начение �ате�атиче���й ��н�танты π. Суще�твует ��р��н�е ��личе�тв� ��ъе�т�в .N�T F��m�wo�k, у ��т�рых е�ть �татиче��ие �ет�ды и ��л�. Я �еречи�лю т�ль�� не��т�рые и� них. Б�лее ��др��� ную инф�р�ацию ��жн� ��лучить на ве���айте msdn.microsoft.com, вы�рав в�лад�у Library. Дл� начала �р�ведите ��и�� �� �ледующи� �лючевы� фра�а�: y y Co�v��� M��hods (Sys��m�; y y M��h M��hods (Sys��m�; y y M��h F���ds (Sys��m�; y y D��� M��hods (Sys��m�; y y S����g M��hods (Sys��m�. Ва� нужн� �р����треть �траницы � эти�и �а��л�в�а�и в д��у�ентации .N�T F��m�wo�k C��ss L�b���y. За�и�и в ��и��ах, ���еченные жирн�й �ра�н�й �у�в�й S в лев�� �т�л�це, �тн���т�� � �татиче��и� �ет�да�, ��т�рые ���ут �ыть вы�ваны т�ль�� чт� ��и�анны� ��������. Мет�ды �е� �у�вы S ���ут и���ль��вать�� т�ль� �� в э��е��л�рах ��ъе�т�в. На�ри�ер, в �ла��е String, �ет�д Compare(строка1, строка2) �вл�ет�� �татиче��и� и ��жет �ыть и���ль��ван в �ледующе� виде: [System.String]::Compare($x, $y). Мет�д PadLeft ��жет �ыть и���ль��ван т�ль�� � э��е��л�р�� �тр��и, �а� в �ри�ере $x.PadLeft(32). В интера�тивн�й д��у�ентации ��жн� щел�нуть на и�ени лю���� �ет�да, чт��ы ��лучить ��лее ��др��ную инф�р�ацию � т��, �а� �н ра��тает. Н� эта д�� �у�ентаци� на�и�ана дл� �р��ра��и�т�в, ра��тающих на V�su�� ��s�� .N�T, C#,
Использование .NET API 701 C++ и F#, а не дл� �р��ра��и�т�в Pow��Sh���, ��эт��у не��т�рые �р��елы �ри� дет�� ча�тичн� �а��лн�ть �в�и�и �ила�и. В ��льшин�тве �лучаев лучше в�е�� дл� Pow��Sh��� ��дх�дит инф�р�аци�, �редна�наченна� дл� C#. ▼▼ Если вы знакомы с VBScript и испытываете затруднения в использовании той или иной .NET- функции для выполнения конкретной задачи, зайдите на веб-сайт technet.microsoft.com и про- ведите поиск по ключевой фразе «VBScript-to-Windows PowerShell Conversion Guide». Под этим заголовком находятся статьи, в которых дается описание «.NET»-альтернативам для большин- ства функций VBScript и большинства объектов WSH. Работа со строками В �ла��е [System.String] и�еют�� �татиче��ие �ет�ды, ра��тающие �� �тр��а� �и, н� �ни ва� вр�д ли ��над���т��, �����ль�у �ни лежат в ��н�ве ��ерат�р�в Pow��Sh��� -join, -split, -replace, -eq, -lt и т. д. Pow��Sh��� ���в�л�ет в �аче�тве ���ращени� дл� эт��� и�ени �ла��а и���ль��вать ��н�тру�цию [string. Те� не �енее е�ть �н�же�тв� ��ле�ных �ет�д�в, ��т�рые ��жн� �ри�енить не���ред� �твенн� � [string]���ъе�та�, та�и� �а� �тр���вые выражени� или �ере�енные, ��держащие �тр���вые �начени�. Не��т�рые наи��лее важные �ет�ды �еречи�� лены в ��рав�е 15.2 . СПРАВКА 15.2. МЕТОДЫ И СВОЙСТВА [SYSTEM.STRING] (НЕПОЛНЫЙ ПЕРЕЧЕНЬ) СВОЙСТВА Length В��вращает ��личе�тв� �и�в�л�в в �тр��е. Chars(n) В��вращает и� �тр��и �тдельный �и�в�л. При n = 0 в��вращает�� �ервый �и�в�л, �ри n = 1 в��вращает�� вт�р�й �и�в�л и т. д . Стр��у ��жн� та�же ра�� ��атривать �а� �а��ив. Выражение $s[0] та�же в��вращает �ервый �и�в�л. МЕТОДЫ Contains(s [, t]) В��вращает True, е�ли ��ъе�ты [string] ��держат в �в�е� ���таве ��д� �тр��у s. Ар�у�ент t у�равл�ет чув�твительн��тью � ре�и�тру. Дл� чув�тви� тельн��ти � ре�и�тру нужн� в���ще не у�а�ывать t или у�а�ать [System. StringComparison]::Ordinal, а дл� т��� чт��ы �р�вер�а вела�ь �е� учета ре�и� �тра �и�в�л�в, �ледует у�а�ать [System.StringComparison]::Ordinal IgnoreCase. EndsWith(s [, t]) В��вращает True, е�ли ��ъе�ты [string] �а�анчивают�� т�й же �у�в�й, чт� и �тр��а s. Не����ательный ар�у�ент t �лужит дл� тех же целей, чт� и в �ет�де Contains. IndexOf(s [,n [,m]][, t]) В��вращает инде�� (начинающий�� � нул�� ���иции �и�в�ла или �тр���в��� �начени� s внутри [string], или –1, е�ли s не найдет��. Е�ли у�а�ан ар�у�ент n,
702 Глава 15. Программирование в среде PowerShell ��и�� начинает�� � ���иции n. Е�ли у�а�аны ��а ар�у�ента n и m, д� �аверше� ни� ра��ты ��и�� ведет�� т�ль�� в m �и�в�лах. П� у��лчанию ��и�� ведет�� � учет�� ре�и�тра �и�в�л�в. Чт��ы �делать ��и�� нечув�твительны� � ре�и�тру �и�в�л�в, �а� и в �ет�де Contains, ��жн� у�а�ать не����ательный ар�у�ент t. М�жн� у�а�ать t, даже не у�а�ыва� n и m. Мет�д ��х�ж на фун�цию InStr() в V�S���p�. Insert(n, s) В�тавл�ет �тр��у s в [string], начина� � ���иции n. LastIndexOf(s [,n [,m]][, t]) П�х�ж на �ет�д IndexOf, н� в��вращает инде�� ���ледне�� ���влени� �тр��и или �и�в�ла s. PadLeft(n [, c]) В��вращает [string] длин�й, равн�й n �и�в�л�в, д��авл�� �р��елы � лев��у �раю �тр��и. Не����ательный ар�у�ент c ��жет у�а�ать �тр���в�е �начение, �тличн�е �т �р��ела, ��т�р�е �удет и���ль��ван� дл� �а��лнени�. PadRight(n [, c]) П�х�ж на �ет�д PadLeft, н� �ани�ает�� �а��лнение� �рав�й �т�р�ны. Remove(n [, m]) О�ре�ает ��нец [string] � ���иции n и д� �а���� ��нца. Е�ли у�а�ан не���� �ательный ар�у�ент m, удал�ет т�ль�� m �и�в�л�в. StartsWith(s [, t]) В��вращает True, е�ли [string] начинает�� �� �тр���в��� �начени� s. Не� ����ательный ар�у�ент t ра��тает та� же, �а� и в �ет�де Contains. SubString(n [, m]) И�вле�ает ��д�тр��у � ���иции n и д� ��нца и�х�дн�й �тр��и; е�ли у�а�ан не����ательный ар�у�ент m, в��вращает не ��лее m �и�в�л�в. Мет�д ��х�ж на фун�цию mid() в V�S���p� или � n = 0 ��х�ж на фун�цию Left() в V�S���p�. ToLower() Перев�дит в�е �и�в�лы верхне�� ре�и�тра в �и�в�лы нижне�� ре�и�тра. ToUpper() Перев�дит в�е �и�в�лы нижне�� ре�и�тра в �и�в�лы верхне�� ре�и�тра. Trim([w]) Удал�ет �р��ельные �и�в�лы (�на�и та�ул�ции и �р��елы� в начале и в ��н� це [string]. Не����ательный ар�у�ент w �вл�ет�� �тр���й или �а��ив�� �тр�� или �и�в�л�в, е�ли �н у�а�ан, в�е�т� �р��ельных �и�в�л�в в начале и в ��нце �тр��и удал�ют�� у�а�анные �и�в�лы. TrimEnd([w]) П�х�ж на �ет�д trim, н� удал�ет т�ль�� �а�ы�ающие �р��ельные �и�в�лы. TrimStart([w]) П�х�ж на �ет�д trim, н� удал�ет т�ль�� лидирующие �р��ельные �и�в�лы.
Использование .NET API 703 ▼) Ни один из этих методов не изменяет исходную строку. Они возвращают новую строку, копию исходной с нужными изменениями. Для реального изменения значения строковой переменной нужно результат выполнения метода присвоить переменной, заменяя исходное значение, на- пример $v = $v.trim(). Работа с показаниями даты и времени .N�T���ъе�т [System.DateTime] хранит ���а�ани� и вы��лн�ет вычи�лени� даты и вре�ени. Pow��Sh��� ���в�л�ет ��д�тавл�ть а��ревиатуру [datetime], ��эт��у �на �удет и���ль��вать�� в� в�ех �ледующих �ри�ерах. О�ъе�т [datetime] �ред� �тавл�ет ��ределенн�е вре�� ��ределенн�й даты. Эт� а���лютн�е вре��. При вы� читании �дн��� �начени� [datetime] и� дру���� ��лучает�� дру��й ��ъе�т: [System. TimeSpan], ��т�рый �вл�ет�� �тн��ительны� ��личе�тв�� вре�ени. На�вание эт��� ��ъе�та ��жет �ыть ���ращен� д� [timespan]. О�н�вн�й единицей и��ерени� [timespan] �вл�ет�� та�т, ���тавл�ющий 100 н�. Эт� �чень неуд��н�е ��личе�тв� дл� не���ред�твенн��� и���ль��вани�, �����ль�у в �е�унде 10 000 000 та�т�в. При в�трече � ��ъе�т�� [timespan] �рих�дит�� и���ль��вать и�еющие�� у не�� ра�личные �в�й�тва и �ет�ды дл� �ре��ра��вани� е�� �начени� в ��лее ��ле�ные единицы и��ерени� вре�ени. В ��рав�е 15.3 �еречи�лены не��т�рые наи��лее ��ле�ные �татиче��ие �ет�ды и ��л� [datetime]. СПРАВКА 15.3. СТАТИЧЕСКИЕ ФУНКЦИИ-ЧЛЕНЫ КЛАССА И ПОЛЯ [SYSTEM.DATETIME] (НЕПОЛНЫЙ ПЕРЕЧЕНЬ) ФУНКЦИИ Compare(a,b) И���ль�у� в �аче�тве ар�у�ент�в два �начени� даты�вре�ени, в��враща� ет +1, е�ли вре�� a �вл�ет�� ��лее ���дни�, че� вре�� b, в��вращает 0, е�ли ���а�атели вре�ени идентичны, и в��вращает -1, е�ли вре�� a на�ту�ает раньше вре�ени b. (М�жн� та�же �равнить �начени� [datetime], на�ри�ер, � ����щью ��ерат�р�в -lt и -gt.� Format([s]) Ф�р�атирует дату в виде �тр��и. М�жн� �ередать не����ательный �тр���� вый ар�у�ент s, у�а�ывающий ф�р�ат. Д���лнительна� инф�р�аци� д��ту�на в �лаве 16, в ра�деле «Ф�р�атир�вание выв�да ���андлета». TryParse(s, ref) В��вращает True, е�ли �тр��а s ��жет �ыть �ре��ра��вана в [datetime], и False, е�ли �тр��а не интер�ретирует�� �а� ���а�атель даты�вре�ени. Дл� ��лучени� �начени� [datetime] �ере�енную нужн� �ередать �� ��ыл�е (��. ра�дел «Передача �� ��ыл�е»�. Parse(s) Пре��ра�ует �р��у s в [datetime]. Стр��а s д�лжна �ыть �тф�р�атир�вана � �ри�енение� ������а, ���в�л�юще�� .N�T ее �равильн� интер�ретир�вать. На�ри�ер, "10/3/2010 11:15 AM". Вре�� интер�ретирует�� �тн��ительн� л��аль�
704 Глава 15. Программирование в среде PowerShell н��� ча��в��� ����а. В�е�т� эт��� ��жн� �р��т� �риве�ти �тр��у � нужн��у ти�у, �а� в выражении [datetime] "10/3/2010 11:15 AM". ПОЛЕ Now В��вращает те�ущую дату и вре��. Эт� �татиче���е ��ле (�в�й�тв��, а не �ет�д, ��эт��у ��ыл�а на не�� и�еет �ледующий вид: [datetime]::now. О�ъе�т [datetime] та�же и�еет �н�же�тв� �ет�д�в и �в�й�тв, ��т�ры�и ��жн� в����ль��вать�� дл� ра��ты не���ред�твенн� � ��ъе�т�� [datetime], � �ере�енн�й или � выражение�. Не��т�рые и� них �еречи�лены в ��рав�е 15.4 . СПРАВКА 15.4. МЕТОДЫ [SYSTEM.DATETIME] (НЕПОЛНЫЙ ПЕРЕЧЕНЬ) Add(ti) В��вращает �начение ��ъе�та [datetime] �лю� [timespan]��начение ti. Н� �р�ще, наверн�е, в����ль��вать�� ��ерат�р�� +, чт��ы �л�жить [datetime] и �начение [timespan]. Учтите, е�ли .Add или + и���ль�ует�� � цел�чи�ленны� �начение�, т� эт� �начение интер�ретирует�� в та�тах (100 н��. Дл� д��авлени� у�а�анн��� ��личе�тва вре�ени ���дайте нужный �р��ежут�� в виде [timespan]� �начени� и д��авьте е�� или в����ль�уйте�ь �дни� и� �ледующих �ет�д�в: AddDays(n) AddHours(n) AddMonths(n) AddMinutes(n) AddYears(n) AddSeconds(n) AddMonths(n) AddMilliseconds(n) Д��авл�ют n дней, �е��цев и та� далее � [datetime]. Значение n ��жет �ыть целы� чи�л�� или чи�л�� � �лавающей т�ч��й. Ка� и в �лучае и���ль��вани� [string]��ет�д�в, ра����тренных ранее, эти �ет�ды не ��дифицируют и�х�дн�е �начение [datetime]. Они в��вращают н�в�е �начение [datetime], ��т�ры� ��жн� в����ль��вать��, выве�ти на э�ран или ��� хранить в �ере�енн�й. Значения [timespan] О�ъе�ты [timespan] (System.TimeSpan� �ред�тавл�ют �р��ежут�� вре�ени или ра�ницу �ежду дву�� ���а�ани��и вре�ени и ���ут �ыть ��л�жительны�и или �трицательны�и. Не���ль�� их наи��лее важных �в�й�тв и �ет�д�в �еречи�лены в ��рав�е 15.5 . СПРАВКА 15.5. СВОЙСТВА И МЕТОДЫ [SYSTEM.TIMESPAN] (НЕПОЛНЫЙ ПЕРЕЧЕНЬ) СВОЙСТВА Duration В��вращает «а���лютн�е �начение» �р��ежут�а вре�ени, т� е�ть ��л�жи� тельный [timespan].
Использование .NET API 705 Days Hours Minutes Seconds В��вращает дни, ча�ы, �инуты и �е�унды �начени� [timespan]. Пр��ежут�� в 1,5 дн� выда�т .Days = 1 и .Hours = 12. В�е эти �в�й�тва т�ль�� дл� чтени�. TotalDays TotalMinutes TodayHours TotalSeconds В��вращает ве�ь �р��ежут�� вре�ени, выраженный в ра�личных единицах и��ерени� в виде �начени� � �лавающей т�ч��й [double]. Пр��ежут�� в 1,5 дн� выда�т .Days = 1.5 и .Hours = 36. В�е эти �в�й�тва т�ль�� дл� чтени�. МЕТОДЫ Format([s]) Ф�р�атирует �р��ежут�� в виде �тр��и. М�жн� �ередать не����ательный �тр���вый ар�у�ент s, у�а�ывающий ф�р�ат. Д���лнительна� инф�р�аци� д��ту�на в �лаве 16, в ра�деле «Ф�р�атир�вание выв�да ���андлета». TryParse(s, ref ) В��вращает True, е�ли �тр��а s ��жет �ыть �ре��ра��вана в [timespan], и False, е�ли �тр��а не интер�ретирует�� �а� �р��ежут�� вре�ени. Дл� ��лу� чени� �ре��ра��ванн��� �начени� �ере�енную нужн� �ередать �� ��ыл�е (��. ра�дел «Передача �� ��ыл�е»�. Создание значений [datetime] и [timespan] У�тан�вить дл� ��ъе�та [datetime] или ��ъе�та [timespan] у�а�анную дату и (или� вре�� �уте� и��енени� их �в�й�тв нев����жн�, ��эт��у, е�ли нужн� ���дать ��н�ретн�е �начение, �ледует в����ль��вать�� �дн�й и� �ледующих тех� н�л��ий: y y Пред�тавить дату или интервал в виде �тр��и и �риве�ти ее � нужн��у ти�у, �а� в �ледующих �ри�ерах: $dt=[datetime] '3/6/2010 9:22:33 PM' или $ts = [timespan] '1.22:33:44.55', ��т�рый �ред�тавл�ет 1 день, 22 ча�а, 33 �инуты и 44,55 �е�унды. Даты интер�ретируют�� в ���твет�твии � л��альны�и на�тр�й� �а�и ваше�� ����ьютера. Та�, � �ри�еру, '3/6/2010' �удет �ред�тавл�ть 6 �арта 2010 ��да в США, н� 3 июн� 2010 ��да в Евр��е. Си�те�а та�же ра����нает дату вида 2010�03 �06, 6�M���2010 и в не��т�рых дру�их ф�р�атах. y y В����ль��вать�� �ет�д�����н�тру�т�р��. К�н�тру�т�ры ра���атривали�ь ранее в данн�й �лаве. В �аче�тве �ри�ера: дл� ���дани� [datetime] дл� 6 �ар� та 2010 ��да 9:22:33 �.m. нужн� в����ль��вать�� �ледующи� ��ерат�р��: $dt = new-object System.DateTime 2010,3,6,9,22,33. Зде�ь и���ль�ует�� ��н�тру�т�р, ��т�рый д��у��ает ше�ть цел�чи�ленных ар�у�ент�в: ��д, �е��ц, день, чи�л�, ча�, �инуту и �е�унду. Нужн� и���ль��вать ��лн�е и�� ��ъе�та, на�ри�ер System.DateTime или System.Timespan.
706 Глава 15. Программирование в среде PowerShell y y Дл� �начений [timespan] ��жн� и���ль��вать �татиче��ие �ет�ды FromDays, FromHours, FromSeconds и т. д ., на�ри�ер $ts = [timespan]::FromDays(1.5). ▼▼ Я не думаю, что вам когда-нибудь потребуется использовать тактовую единицу времени в не- посредственном виде, но если все же придется, не пишите сценарий в расчете на то, что в се- кунде будет 10 000 000 тактов, на тот случай, если в будущей версии Windows будет исполь- зоваться другое определение. Вместо этого воспользуйтесь в своих вычислениях значением статического поля [timespan]::tickspersecond. Преобразование значений .N�T���ъе�т [System.Convert] и�еет �н�же�тв� �ет�д�в, ���в�л�ющих �р�в�дить �ре��ра��вание �начений и� �дн��� чи�л�в��� ф�р�ата в дру��й. Мн��ие и� �р�и�� в�ди�ых и�и �ре��ра��ваний ���ут �ыть �р�деланы � ����щью �р��т��� и���ль� ��вани� ��ределений �риведений � ти�а�, �а� �ыл� ��и�ан� ранее в данн�й �лаве. Пр�ще на�рать $i = [int] $v, че� на�рать $i = [System.Convert]::ToInt32($v), чт��ы ��лучить а���лютн� та��й же ре�ультат. Н� ��ъе�т [System.Convert] ��держит ��ле�ные фун�ции, ���в�л�ющие у�а�ы� вать ��н�вание дл� нужн��� �ре��ра��вани�. О�ерат�р [System.Convert]::ToString (значение, основание) ��жн� и���ль��вать дл� �ре��ра��вани� цел��� чи�ла � е�� �ред�тавлению в дв�ичн�й (основание = 2�, в��ь�еричн�й (основание = ��, де��тич� н�й (основание = 10� или ше�тнадцатеричн�й (основание = 16� ф�р�е, и, анал��ичн� эт��у, ��ерат�р [System.Convert]ToInt32(строка, основание) ��жн� и���ль��вать дл� �ре��ра��вани� �тр��и в цел�е чи�л�, �де строка ��держит чи�л� в дв�ичн�й, в��ь�еричн�й, де��тичн�й или ше�тнадцатеричн�й ф�р�е. (Дл� в�ех цел�чи�лен� ных ф�р�ат�в �уще�твуют ���твет�твующие фун�ции «To».� Математические функции .N�T���ъе�т [System.Math] ��ладает ��льши� ��личе�тв�� �татиче��их фун�ций� член�в �ла��а, ��т�ры�и ��жн� в����ль��вать�� дл� вы��лнени� вычи�лений. В ��рав�е 15.6 �еречи�лены не��т�рые наи��лее интере�ные и� них. Дл� и���ль��� вани� этих �начений и фун�ций в ваших �ценари�х нужн� �еред и�ене� ���тавить [System.Math]::. СПРАВКА 15.6. СТАТИЧЕСКИЕ ФУНКЦИИ-ЧЛЕНЫ КЛАССА И ПОЛЯ [SYSTEM.MATH] (НЕПОЛНЫЙ ПЕРЕЧЕНЬ) ФУНКЦИИ Min(a,b) В��вращает �еньшее и� �начений a и b. Max(a,b) В��вращает ��льшее и� �начений a и b. Abs(a) В��вращает а���лютн�е �начение a.
Использование .NET API 707 Round(a) В��вращает ��ру�ление д� �лижайше�� цел��� чи�ла. Round(a,n) В��вращает ��ру�ление д� n де��тичных ���иций. При вы��лнении фи� нан��вых ра�чет�в, � �ри�еру, в США, ре�ультаты д�лжны ��ру�л�ть�� д� �лижайше�� цента � и���ль��вание� выражени� �ледующе�� вида : [System. Math]::Round($значение,2). sin(a) sinh(a) cos(a) cosh(a) tan(a) tanh(a) �тандартные три��н��етриче��ие фун�ции � a, выраженны� в радианах. Е�ли �начение a выражен� в �раду�ах, в����ль�уйте�ь, � �ри�еру, �ледующи� ��д��: [System.Math]::sin(a/180.*[System.Math]::pi). asin(v) acos(v) atan(v) atan2(y,x) О�ратные три��н��етриче��ие фун�ции v и y�x. log(v) log10(v) log(v,b) Натуральные, �� ��н�ванию 10 и �� ��н�ванию b, л��ариф�ы v. sqrt(v) В��вращает �вадратный ��рень и� v. ПОЛЯ E В��вращает �, 2.71�2�... Pi В��вращает π, 3.14159... Ра�у�еет��, д��ту�н� еще �н�же�тв� дру�их фун�ций. Дл� ��лучени� д���лни� тельн�й инф�р�ации �р�ведите на ве���айте msdn.microsoft.com ��и�� �� �лючев�й фра�е «.N�T Sys��m.M��h C��ss».
Использование PowerShell В эт�й �лаве �удет ���а�ан�, чт� дл� вы��лнени� �дних и тех же �адач ��жн� и�� ��ль��вать ли�� ���андные �тр��и, ли�� ���анды �ценариев. y y Вы у�наете, �а� и���ль��вать ���андлеты Pow��Sh��� дл� �енерации, фильтра� ции и ф�р�атир�вани� данных. y y Зде�ь �ы ра����три� на �ри�ерах, �а� и���ль��вать ��ъе�ты .N�T F��m�wo�k в �ценари�х, у�равл�ющих файла�и и �а��а�и. y y Вы ��лучите ��веты �� на�и�анию надежных, ��ле�ных �ценариев. y y Я ра���ажу, �а� нужн� те�тир�вать �ценарии Pow��Sh��� и ве�ти их �тлад�у � ��� ��щью �рафиче���й инте�рир�ванн�й �реды �ценариев — I���g����d S���p���g ��v��o�m���. Реальная работа с PowerShell В �редыдущих двух �лавах ра���атривал��ь и���ль��вание ���андн�й �тр��и Pow��Sh��� и давал��ь ��и�ание ��ы�а �р��ра��ир�вани� Pow��Sh���. В эт�й �лаве �ы �ри�ени� ��лученную инф�р�ацию дл� ���дани� реальных �ри�ер�в �а� дл� интера�тивн�й ра��ты, та� и дл� и���ль��вани� �ценариев. П�д интерактивной работой и ��д использованием сценариев � ��дра�у�еваю �ледующее: �а� ��в�ри� л��ь в �редыдущей �лаве, е�ть два ра�ных ������а и���ль��вани� в����жн��тей Pow��Sh���: y y ��жн� ���давать ���андные �тр��и, и���ль�ующие ���андлеты. При и���ль� ��вании ���андных �тр�� в�е ра��та в��ла�ает�� на �а�у ���анду: �на дает ��и�ание ��т��а ��ъе�т�в �т �дн��� ���андлета � дру���у. К��андлеты вы�и� рают нужные ��ъе�ты и вы��лн�ют тре�уе�ые дей�тви�. Е�ли в����ль��вать�� анал��ией � ��н�чны�и �ашина�и, и���ль��вание ���андн�й �тр��и ��х�же на ��у�тр�й�тв� ��н�чн�й тра��ы на х�л�е и �а���т��тельный �в���дный ��у�� �ашин вни�. В�� ваша ра��та �а�лючает�� в на�тр�й�е в�ех виражей и ��в�� р�т�в � те�, чт��ы �ашины ��а�али�ь в нужн�� �е�те вни�у; 16
Реальная работа с PowerShell 709 y y в �аче�тве альтернативы ��жн� на�и�ать �р��ра��ы �ценариев, и���ль�ующие фун�ции, .N�T���ъе�ты, ци�лы, ��ерат�ры if и т. д . П� анал��ии � ��н�чны�и �ашина�и, эт� в�е равн� чт� �ри�а�ывать �ажд��у ��ршню, ���да идти вверх, а ���да вни�, и выдавать ��др��ные ин�тру�ции в�дителю, ��т�рые �ред�и�ы� вают е�у, �а� реа�ир�вать на в�е в����жные ���т��тель�тва. В ��ще�, эт� �чень х�р�ш�, чт� ра�ра��тчи�и Pow��Sh��� �риду�али та��е �ред� �тв�, ��т�р�е ��жет ра��тать лю�ы� и� этих �������в, �рань �ежду ��т�ры�и �ра�� тиче��и �терта — � �ри�еру, ��ерат�ры foreach и switch ра��тают �а� �р��ра��ные ��ерат�ры, н� ���ут та�же ра��тать и в �в��анных �анала�и ���андлетах. Нель�� ��а�ать, чт� �а��й�т� и� этих �������в хуже или лучше дру����. Сце� нарии ���ут делать в�е, чт� делает�� в ���андн�й �тр��е, и даже ��льше, �р��т� дл� вы��лнени� �адачи нужн� на�ирать ��льше те��та. К��андлеты ������ны �н���е делать в ����а�тн�й, ве�ь�а эффе�тивн�й ф�р�е, н� вы��р д��ту�ных ��� �андлет�в ��раничен. И в ��льшин�тве �лучаев, ���андлеты ������ны �рини�ать т�ль�� решени� ти�а «делать или не делать чт��ни�удь». В т�� или ин�� �лучае вы �тдадите �ред��чтение �дн��у и� этих ��дх�д�в, в �ави�и���ти �т т���, � че�у ��льше �ри������лен ваш ����. С��дание �ценариев — ве�ь�а ��ру�уле�на� ра��� та, ��дх�д�ща� люд�� � ��лее ра�виты� левы� ��лушарие�, а ��н�труир�вание ���андных �тр�� ��лее а��тра�тна� ра��та, ��дх�д�ща� люд�� � ��лее ра�виты� �равы� ��лушарие�. Ка� уже у���инал��ь, ��жн� �дн�вре�енн� и���ль��вать ��е техн�л��ии. М�жн� и���ль��вать �тр��у ���андлет�в дл� ���дани� ��т��а ��ъе�т�в, а �ате� и���ль��вать ��ль��ватель��ую фун�цию и ��ерат�р foreach или switch дл� ра��ты � ни�и. В �ри�ерах данн�й �лавы �удет ���а�ан �р�це�� вы��ра �адач дл� и���ль��ва� ни� ��еих техн�л��ий, и дл� ���андлет�в, и дл� �ценариев. ▼▼ Хочу дать вам хороший совет, подходящий как для интерактивной работы, так и для написа- ния сценариев. Большинство командлетов, которые что-нибудь делают с вашим компьютером, то есть командлетов, которые удаляют или модифицируют файлы, изменяют записи реестра или другие настройки Windows и т. д ., допускают использование ключа командной строки – whatif. Если в командной строке присутствует ключ -whatif, командлет выводит текст, сообща- ющий о том, что было бы сделано, если бы он получил другой ввод, но на самом деле он не делает никаких необратимых изменений. При составлении командной строки добавление ключа -whatif позволит проверить, что ваша командная строка делает именно то, что вам нужно. Если результаты вас устраивают, нажмите клавишу стрелки вверх, уберите из строки -whatif, а затем нажмите клавишу Ввод для реально- го выполнения командной строки. При написании собственного сценария или командлета обратите внимание на присутствие клю- ча -whatif в командной строке. Если ключ -whatif присутствует в командной строке, сценарий будет выводить информацию о том, что он будет делать, но на самом деле он не будет делать ничего, что будет иметь необратимые последствия. Е�ли у ва� уже е�ть ��ыт ра��ты � W��dows S���p� Hos� (WSH�, н� в��ни�ают трудн��ти � на�и�ание� �ценари� Pow��Sh���, ра��р�ю не��льш�й �е�рет: ��жн� ����режне�у ��ль��вать�� лю�ы� и� �тавших �ривычны�и ��ъе�т�в WSH. Они, ��нечн�, не в�и�ывают�� в �тиль Pow��Sh���, н� в �лучае �райней не��х�ди���ти
710 Глава 16. Использование PowerShell ��жн� в����ль��вать�� и и�и. Фа�тиче��и в Pow��Sh��� ��жн� и���ль��вать лю��й COM���ъе�т. Та�, �де вы �ы и���ль��вали фун�цию CreateObject, нужн� в����ль��вать�� ���андлет�� new-object � �люч�� ���андн�й �тр��и -comobject. Ра����три� �ри�ер: $fso = new-object -comobject Scripting.FileSystemObject $tmp = $fso.GetFolder("c:\temp") ... Я ре���ендую ��ль��вать�� эти� �рие��� т�ль�� в �атруднительн�й �итуации и ��ветую �а� ��жн� �ы�трее вернуть�� � решению эт��� в��р��а и �а�енить �та� рые ��ъе�ты их .N�T или Pow��Sh��� э�вивалента�и. Одн� и� и��лючений �а�ает�� не��х�ди���ти и���ль��вани� ���вл�юще���� диал���в��� ��на ����щени�. В WSH вы и���ль��вали �ы фун�цию Msg�ox, н� �р��т��� э�вивалента эт�й фун�ции в Pow��Sh��� нет. П�эт��у в��лне ��д�йдет WS���p�.Sh�����ет�д popup, вы�ывае�ый �ледующи� ��ра���: $wsh = new-object -comobject wscript.shell $wsh.popup("Это текст сообщения", 0, "Это текст заголовка") (М�жн�, ��нечн�, не у�а�ывать ар�у�ент �а��л�в�а, н� е�ли е�� ��у�тить, �а� ��л�в�� диал���в��� ��на �удет вы�л�деть �а� «W��dows S���p� Hos�» — эт� ��жет вне�ти ненужную �утаницу.� Чт��ы вы�рать �н���и, ���вл�ющие�� в эт�� ��не, ��на���ьте�ь � интернет�д��у�ентацией M���oso��, �а�ающей�� Ws���p�.Sh���� �ет�да popup. Технология, использующая командную строку К��андна� �тр��а Pow��Sh��� �т�рывает д��ту� � ��лее че� 200 в�тр�енны� ��� �андлета�, ������ны� у�равл�ть файла�и, �а��а�и, �луж�а�и W��dows, �ринте� ра�и и т. д . Схе�а ���тавлени� ��нвейера ���анд Pow��Sh��� � ����щью �анал�в и�еет �ледующий вид: генерация-объектов | передача-только -нужных-объектов | выполнение-действий >вывод Эт�, ��нечн� же, нена�т��щие ���андлеты, н� �ни де��н�трируют �а� �ринци�. Чт��ы вы��лнить ту или иную �адачу, �ача�тую ��ле�н� ра��ить ее на ��лее �ел�ие ча�ти, и �ан�ть�� �ажд�й и� них �� �тдельн��ти. Фа�тиче��и ���андна� �тр��а Pow��Sh���, ��т�ра� �ыла ���а�ана в �а��� нача� ле �лавы 14 «W��dows Pow��Sh���», ���тр�ена и�енн� та�и� ��ра���. У���инае�а� ���анда и�ела �ледующий вид: dir | where-object {$_.LastWriteTime -lt (get-date).addmonths(-6)} | remove-item Первый ���андлет (��т�рый �вл�ет�� ��евд�ни��� дл� Get-ChildItem� �енери� рует ��т�� файл�вых ��ъе�т�в, найденных в те�уще� �атал��е. Вт�р�й ���андлет �ередает т�ль�� те ��ъе�ты, ��т�рые не ��двер�али�ь и��енени��, �а� �ини�у�, ���ледние ше�ть �е��цев. Третий ���андлет удал�ет эти «�тарые» файлы.
Технология, использующая командную строку 711 Генерация объектов В Pow��Sh��� и�еет�� ��льш�е ��личе�тв� ���андлет�в, ������ных �енерир�вать ��ъе�ты дл� ��нвейерн�й ���анды, и���ль�ующей �аналы. У �н��их и� них и�ена начинают�� � �ла��ла G��. Не��т�рые, наи��лее важные ���андлеты �еречи�лены в та�л. 16.1 . Таблица 16.1. Важные командлеты Get- Имя командлета Что он извлекает Get-ChildItem Файлы и ��дчиненные �а��и и� �а��и, ��дра�делы рее�тра и т. д. (Дл� у�а�ани� �утей и �ара�етр�в рее�тра �ледует ��ратить�� � та�л. 14 .1� Get-Content Стр��и те��та и� файла Get-Counter Инф�р�аци� �четчи�а �р�и�в�дительн��ти Get-EventLog За�и�и журнала ���ытий Get-HotFix У�тан�вленные �а�еты ��н�влени� W��dows Get-Item У�а�анный файл, �а��у, �ара�етр рее�тра и т. � . Или, �ри и���ль� ��вании �и�в�л�в��а�е�тителей, не���ль�� файл�в или �лючей. (Инф�р�аци� �� у�а�анию �утей дл� эле�ент�в, �тличающих�� �т файл�в и �а���, ��жн� найти в та�л. 14 .1� Get-ItemProperty У�а�анные �в�й�тва ��ъе�та или ��ъе�т�в, �р�х�д�щих чере� �анал Get-Process А�тивные �р�це��ы W��dows Get-Services Служ�ы W��dows Get-WinEvent За�и�и и� журнала ���ытий W��dows или и� ���ыти�, �т�леживае� ���� файла�и журнал�в Get-WmiObject О�ъе�ты W��dows M���g�m��� I�s��um������o� (WMI�. (Ин�тру�ен� тарий WMI ��лее ��др��н� �ыл ра����трен в �лаве 7 «Ин�тру�ента� рий у�равлени� W��dows»� На���ню, чт� дл� ��лучени� инф�р�ации � лю��� и� этих ���андлет�в нужн� в ��не ���андн�й �тр��и Pow��Sh��� на�рать ���анду help имя_командлета или ���анду help -examples имя_командлета. Кр��е эт��� ��жн� в����ль��вать�� �рафиче���й (GUI� вер�ией д��у�ентации в инте�рир�ванн�й �реды �ценариев — I���g����d S���p���g ��v��o�m��� (��т�ра� ра���атривает�� ���же в данн�й �лаве� или интера�тивн�й д��у�ентацией на ве���айте technet.microsoft.com. Фильтрация Не��т�рые �енерирующие ��ъе�ты ���андлеты, �еречи�ленные в �редыдуще� ра�деле, и�еют �лючи ���андн�й �тр��и, ��т�рые ���ут дл� начала �ред��тавить ��ределенн�е ��личе�тв� ��ецифи�аций, чт��ы �анал ваше�� ���андн��� ��н� вейера �ри�ту�ил � ра��те т�ль�� � те�и ��ъе�та�и, ��т�ры�и вы интере�уете�ь. В ��льшин�тве �лучаев ��ажет��, чт� в реальных �адачах у�равлени� нужн� ��лу�
712 Глава 16. Использование PowerShell чить в ре�ультате т�ль�� те ��ъе�ты, у ��т�рых и�еет�� в��лне ��ределенн�е �в�й� �тв�, на�ри�ер т�ль�� те файлы, чьи ���а�ани� вре�ени �редше�твуют у�а�анн�й дате. И �де�ь в�ту�ает в дей�твие фильтраци�. В Pow��Sh��� и�еют�� ���андлеты, ��т�рые ���в�л�ют т�чн� вы�рать, �а�ие ��ъе�ты �р�йдут чере� �анал. Пр�ще в�е�� �тфильтр�вать и �р�ани��вать ��т�� ��ъе�т�в � ����щью ���анд� лета Where-Object. Эт�т ���андлет (вы ��жете на�рать т�ль�� �ред��ределенный ��евд�ни� where� читает ��т�� ��ъе�т�в и �ередает дальше т�ль�� те ��ъе�ты, ��� т�рые �твечают ��ределенны� у�л�ви��. П�лный �инта��и� и�еет �ледующий вид: Where-Object {выражение} [-InputObject объект][общие_аргументы] Выражение д�лжн� �ыть в��т� в фи�урные �����и, и �н� ��жет �ыть лю�ы� д�� �у�ти�ы� выражение� Pow��Sh���, вы��в�� фун�ции или ��ерат�р��, выдающи� ре�ультат True или False. В выражении в�тр�енна� �ере�енна� в лю��й ���ент вре�ени $_ ��держит те�тируе�ый ��ъе�т. На�ри�ер, выражение {$_. Length -ge 100} выдает True, е�ли �начени� �в�й�тва ��ъе�та Length ��льше или равн� 100. П� у��лчанию Where-Object читает ��т�� ��ъе�т�в и� �в�е�� �тандартн��� вв�да (и� ���андлета, ��т�рый �редше�твует е�у в ��нвейере ���анд�, вычи�л�ет выражение Pow��Sh��� �ри�енительн� � �ажд��у ��ъе�ту и �ере�равл�ет на �в�й выв�д т�ль�� те ��ъе�ты, дл� ��т�рых выражение �ыл� вычи�лен� в True. Кр�� �е эт��� ��жн� ���лать е�у на вв�д �а��ив или �ере�енную, ��т�рые ��держат ��ъе�ты, и���ль�у� ар�у�ент -InputObject. На�ри�ер, е�ли �а��ив $a ��держит ��ъе�ты, т� ��д Where-Object {$_.Length -ge 100} -InputObject $a �р��у�тит чере� �е�� т�ль�� те ��ъе�ты �а��ива, чье �в�й�тв� Length ��льше или равн� 100. М�жн� та�же ��ределить фун�цию � �л��альн�й или �ценарн�й ��ла�тью види� ���ти (��. ра�дел «О�ла�ть види���ти фун�ций» в �лаве 15� и в����ль��вать�� эт�й фун�цией дл� �р�ведени� те�та. На�ри�ер, е�ли � ��ределю �ледующую фун�цию: function global:PassThisObject ($obj) { return $obj.Length -ge 100 } т� ��ъе�ты ��жн� �удет �р�те�тир�вать �ледующи� ��ра���: Where-Object {PassThisObject $_} Эт� �лиш��� �р��т�й �ри�ер, н� фун�ци� ��жет �ыть лю��й нужн�й ва� �те�ени �л�жн��ти, �на та�же ��жет вы��лн�ть и дру�ие дей�тви�, вр�де �а�и�и в�ех �р���атривае�ых ��ъе�т�в. ▼▼ Чтобы фильтровать, нужно знать, какие свойства объекта использовать для ваших тестовых выражений. Чтобы привести список всех свойств всех .NET-объектов, мне пришлось бы запол- нить всю эту книгу! Но в этом нет необходимости. Следует просто запомнить, что PowerShell может выдать документацию по каждому объекту. Передайте поток объектов командлету get- member, который выводит список свойств и методов объекта для каждого отдельного попавше- го к нему типа объекта. Также полезно запомнить, что псевдоним для Get-Member — gm. На- пример, команда dir | gm покажет вам все свойства файлов и папок, какими они представлены в объектах System.IO.FileInfo и System.IO.DirectoryInfo.
Технология, использующая командную строку 713 Общие_аргументы �ред�тавл�ют ����й ��и��� не����ательных ар�у�ент�в ���андн�й �тр��и, ��т�рые ���ут �ыть и���ль��ваны � лю�ы� �тандартны� ��� �андлет��. О�и�ание этих ар�у�ент�в дан� в та�л. 16.2 . Таблица 16.2. Общие аргументы Аргумент Описание -Verbose В�лючает выв�д ��и�ательн�й диа�н��ти�и, е�ли ���андлет ������ен на ее выдачу -Debug В�лючает выв�д �тлад�чн�й инф�р�ации, е�ли ���андлет ������ен на ее выдачу -ErrorAction:действие Пред�и�ывает ���андлету дей�тви� в �лучае в��ни�н�вени� �итуации, ��т�ра� �удет и� ра���атривать�� �а� �ши��а. Д��у�ти�ы�и �вл�ют�� дей�тви� ��лчалив��� �р�д�лже� ни� — SilentlyContinue, �р�д�лжени� — Continue, и�н�ри� р�вани� — Inquire и ��тан�в�и — Stop -ErrorVariable [+]имя Пред�и�ывает ��хран�ть ����щени� �� �ши��ах в �ере�ен� н�й � у�а�анны� и�ене� (��т�р�е �де�ь на�ирает�� �е� �на�а $�. Дл� д��авлени� ����щений �� �ши��ах � ��держи���у �уще�твующей �ере�енн�й нужн� �еред ее и�ене� ���тавить �на� +. Пере�енна� �вл�ет�� �а��ив�� -WarningAction:действие П�х�ж на �люч -ErrorAction, н� �ред�и�ывает ���андлету ��р�д�� дей�твий �ри в��ни�н�вении �итуации, ��т�ра� �удет и� ра���атривать�� �а� �енее �ерье�на�, н� не��ычна�, тре�ующа� «�реду�реждени�» -WarningVariable [+]имя П�х�ж на �люч –ErrorVariable, н� ��хран�ет в �ере�енн�й �реду�реждающие ����щени� -OutBuffer n Пред�и�ывает ���ирать в�е�те n ��ъе�т�в выв�да �еред �ередачей лю���� и� них �ледующе�у ���андлету в ��нвей� ере. (И���ль�ует�� д�в�льн� ред��� -OutVariable [+]имя Пред�и�ывает ��хран�ть ��т�� ��ъе�т�в на вых�де ���анд� лета в �а��иве �� и�ени имя, а та�же �ередавать их на �тан� дартный выв�д. Е�ли �еред именем ���тавить �на� +, ��т�� �удет д��авлен � ��держи���у �уще�твующей �ере�енн�й -WhatIf Пред�и�ывает выв�дить ����щени� � т��, чт� �ы делал ��� �андлет � вв�ди�ы�и в не�� данны�и �е� вы��лнени� не��� рати�ых дей�твий. (И���ль�ует�� т�ль�� � ���андлета�и, вн���щи�и реальные и��енени�� -Confirm Пред�и�ывает �а�рашивать у ��ль��вател� ��дтверждени� (Y или N� на вы��лнение лю�ых не��рати�ых и��енений. (И���ль�ует�� т�ль�� � ���андлета�и, вн���щи�и реальные и��енени��
714 Глава 16. Использование PowerShell Использование командлета sort-object Вд��ав�� � вы��ру ��ъе�т�в ��жн� та�же �р�ани��вать эле�енты в ��т��е ваше� �� ���андлета. Бе� ар�у�ент�в ���андлет sort-object ��ртирует ��ъе�ты �� и� �в�й�тва� �� у��лчанию. На�ри�ер, ���анда dir | sort-object выв�дит ��и��� файл�в и �а��� те�уще�� �атал��а и ��ртирует их �� и�ена�, �����ль�у дл� этих ��ъе�т�в �� у��лчанию и���ль�ует�� �в�й�тв� Name. М�жн� �адать ��ртир�в�у �� �начению �в�й�тва, и���ль�у� �люч -property имя_свойства, на�ри�ер: dir | sort-object -property Length Дру�и�и ��ле�ны�и ар�у�ента�и �вл�ют�� �люч -descending, ��т�рый �ен�ет ��р�д�� ��ртир�в�и на ��ратный, и �люч -unique, ��т�рый ��ртирует ��т�� ��ъ� е�т�в и �р��у��ает т�ль�� �дин эле�ент � лю�ы� �аданны� �начение� вы�ранн��� �в�й�тва. ▼▼ Командлетом select-object можно заинтересоваться более плотно. Его можно использовать для пропуска из потока ввода только первых или последних n объектов. Например, команда dir | sort -property Length | select-object -last 10 выводит список десяти самых больших файлов текущего каталога. Командлет select-object мо- жет также «разобрать» объекты, оставив только часть их исходных свойств. Фильтрация с помощью Select-String К��андлет Select-String �р��у��ает чере� �е�� т�ль�� �тр��и, ���твет�твую� щие ��ределенн��у ша�л�ну. Он ��д��ен фун�ции findstr в ���андн�й �тр��е W��dows или утилите grep в ���андн�й �тр��е U��x. Е�ли ��ъе�ты, �ередавае�ые ���андлету Select-String, не �вл�ют�� �тр���� вы�и, �ледует ����теречь��! М�жн� ��лучить ве�ь�а не�жиданные ре�ультаты. К �ри�еру, � файл�вы�и ��ъе�та�и ���андлет Select-String �р�вер�ет ��дер� жи��е �ажд��� �ередавае���� файла ���тр�чн� и �т�равл�ет дальше лю�ую ��� �твет�твующую �тр��у и� эт��� файла. Дл� ��лучени� д���лнительн�й инф�р�ации ��жн� на�рать ���анду help select-string -detailed и ���анду help select-string -examples. Переход к конкретным действиям Третий ша� в нашей ти��в�й ���андн�й �тр��е ���андлет�в вы��лн�ет �а�ие� ни�удь дей�тви� над те�и ��ъе�та�и, ��т�рые �ыли ��енерир�ваны и �тфильтр�� ваны. Эта те�а на�т�ль�� ��ширна, чт� � вынужден ��раничить�� вы��р�� лишь не���ль�их «дей�твий». Прежде в�е��, и наи��лее важн� �а���нить, чт� �ри�енительн� � �ереданны� чере� �анал ��ъе�та� ��жн� на�р��ую вы�ывать лю��й �ет�д, и���ль�у� ��ерат�р foreach. В����ни�, чт� в ��ерат�ре foreach �ере�енна� $_ и�еет �начение те�у� ще�� эле�ента, ��эт��у ��ерат�р Конвейер ... | foreach {$_. Метод()}
Форматирование вывода командлета 715 вы�ывает у�а�анный Метод дл� �ажд��� ��ъе�та, �ереданн��� �� ��нвейеру чере� �анал. О�ерат�р или ��ерат�ры внутри foreach ���ут �ыть ���ль у��дн� �р��ты�и или �л�жны�и, ��жет и���ль��вать�� д�в�льн� �р��т�й ��нвейер, в ��нце ��т�� р��� и���ль�ует�� д��тат�чн� �л�жный ��д Pow��Sh���, вы��лн�ющий ��др��ные вычи�лени� и �ред�рини�ающий �л�жные дей�тви�. М�жн� �риве�ти в �ри�ер не���ль�� ���андлет�в, вы��лн�ющих универ� �альные дей�тви�: Remove-Item, Move-Item, Rename-Item и Copy-Item. Р�д дру�их ���андлет�в ���ут �ыть и���ль��ваны � файл�вы�и ��ъе�та�и дл� удалени�, �ере�ещени�, �ереи�ен�вани� и т. д. К��андлет Invoke-Item вы�ывает дл� ��ъе�та �ет�д �� у��лчанию, ��т�рый �ри�ен�ет�� � не�у нау�ад. Н� � �ред��читаю т�чн� у�а�ывать нужный �не �ет�д. Форматирование вывода командлета П� у��лчанию ��ъе�ты, ���адающие в ��н� ���андн�й �тр��и Pow��Sh��� или �ерена�равленные в файл, ф�р�атируют�� в виде та�лицы �� �тр���й на�ваний �в�й�тв в начале ��и��а. Ф�р�атир�вание эт��� ��и��а и вы��р �еречи�л�е�ых �в�й�тв ��редел�ют�� в XML�файле, ��т�рый хранит�� на ваше� ����ьютере, и вы ��жете на�тр�ить эт�т файл ����в�е�у, н� в данн�й �лаве эт�т в��р�� ра�� ��атривать�� не �удет. Дл� на�тр�й�и �еречн� выв�ди�ых в ��и��� �в�й�тв и дл� вы��ра ������а их ф�р� �атир�вани� ��жн� в����ль��вать�� ���андлет�� format-table. На�ри�ер, ���анда dir | format-table -property mode, length, lastwritetime выв�дит ��держи��е те�уще�� �атал��а, и дл� �ажд��� и�еюще���� в ��и��е фай� ла или �а��и выв�дит три вы�ранных �в�й�тва. Дл� ��лучени� д���лнительн�й инф�р�ации ��жн� на�рать ���анды help format-table -detailed и help format- table -examples. О���енн� ��ле�ны �лючи -GroupBy и -Wrap. Дл� детальн��� ф�р�атир�вани� �удет, наверн�е, �р�ще �авершить ���андную �тр��у ��ерат�р�� foreach. Внутри �авершающе�� ��ерат�ра ��жн� в����ль��� вать�� в�тр�енн�й �ере�енн�й $_, чт��ы ��лучить д��ту� � �ажд��у ��ъе�ту, ��� т�рый ���ту�ает чере� �анал ���андн�й �тр��и, и в����ль��вать�� �р��ра��ны� ��д�� дл� вычи�лени� �дн�й или не���ль�их �тр�� выв�да дл� �ажд��� ��ъе�та. Оператор -f И�еющий�� в ��ы�е �р��ра��ир�вани� Pow��Sh��� ��ерат�р -f ф�р�атирует �дн� или не���ль�� �начений в �тр��е выв�да. Он ��х�ж на ��ерат�р printf ��ы�а C. Он и���ль�ует�� �ледующи� ��ра���: "форматируемая_строка" -f значение или "форматируемая_строка" -f массив. О�ерат�р выдает �тр���в�е �начение. Си�в�лы внутри форматируемой_строки ���ируют�� �у�вальн�, �а и��лючение� тех ��д�тр��, ��т�рые и�еют вид {0}, {1}, {2} и т. д ., ��т�рые �а�ен�ют�� �ервы�, вт�ры�, третьи� и ���ледующи�и значениями, нах�д�щи�и�� ��рава �т -f . Ра�� ���три� �ри�ер. Эт� �тр���в�е выражение 'My name is {0} and I am {1} years old' -f $name, $age
716 Глава 16. Использование PowerShell ��жет выве�ти �тр��у My name is Tice Robert and I am 2 years old (Мен� ��вут Тай� Р��ерт, и �не 2 ��да�. Ра�у�еет��, та� делать нель��, �����ль�у эт�т ��д выдает неверную � т�ч�и �рени� ан�лий����� ��ы�а �тр��у, ���да в��ра�т равен �дн��у ��ду. В�е�т� эт��� нужен �ледующий ��д: 'My name is {0} and I am {1} year{2} old' -f ¬ $name, $age, $(if ($age -eq 1) {''} else {'s'}) ��т�рый выв�дит �л�в� year или �л�в� years, в �ави�и���ти �т т���, ��т�р�е и� них �рие�ле��. Е�ли нужн�, чт��ы лю��й и� ��д�тавл�е�ых эле�ент�в и�ел �ини�альную �р��тран�твенную ширину, ���тавьте ���ле инде��н��� н��ера эле�ента, ��т�рый нах�дит�� внутри фи�урных ������, �а��тую, а �ате� чи�л�. Дл� выравнивани� эле�ента �� лев��у �раю эт��� �р��тран�тва ���тавьте ��л�жительн�е чи�л� в у�а� �ывае��� ��личе�тве �р��тран�тва, а дл� выравнивани� ре�ультата �� �рав��у �раю ���тавьте �трицательн�е чи�л�. На�ри�ер, выражение '{0,3}' -f 1 выведет �тр��у '1', а выражение '{0,-3}' -f 1 выведет �тр��у '1'. Е�ли ��д�тавл�е��е �начение тре�ует ��льше �р��тран�тва, че� е�у выделен�, ре�ультат �р��т� �та� н�вит�� шире; �и�в�лы ни���да не у�е�ают��. И на��нец, внутри �ажд��� �начени� в фи�урных �����ах вы ��жете д��авить дв�ет�чие и д���лнительные ��ецифи�ат�ры ф�р�атир�вани�. П� у��лчанию и���ль�ует�� ��ецифи�ат�р :d — де��тичн�е ф�р�атир�вание. :dn Де��тичн�е ф�р�атир�вание � �а��лнение� нул��и д� n цифр, �де n �вл�ет�� чи�л��. На�ри�ер, '{0:d3}' - f 1 выведет 001 :x Ше�тнадцатеричн�е ф�р�атир�вание � �у�ва�и в нижне� ра�р�де :X Ше�тнадцатеричн�е ф�р�атир�вание � �у�ва�и в верхне� ра�р�де :p Пр�центн�е �тн�шение (на�ри�ер, чи�л� .1 �удет выведен� �а� 10.00%� :c Валюта (на�ри�ер, чи�л� .1 �удет выведен� �а� $0.10� :n Чи�л� � �а��т�й в �аче�тве ра�делителей :ddd Ф�р�атир�вание даты�вре�ени, ���т��щее и� литеральных �и�в�л�в и лю�ых или в�ех �ледующих эле�ент�в: hh (ча�ы�, mm (�инуты�, ss (�е�унды�, dd (дни�, MM (чи�л�в�е выражение �е��ца�, yy (��д дву�� цифра�и�, yyyy (��д четырь�� цифра�и�, MMM (�е��ц в трех�у�венн�� ���ращении�, MMMM (�е��ц ��лны� на� �вание��, dddd (день недели� и ddd (день недели в трех�у�венн�� ���ращении�. На�ри�ер, '{0:dddd, MMMM dd, yyyy}' -f (Get-Date) выведет среда, ноября 30, 2011 Е�ть еще д���лнительные ��ецифи�ат�ры ф�р�атир�вани�, �редна�наченные дл� чи�ел � �лавающей т�ч��й, ��т�рые �де�ь ��и�ывать�� не �удут. Д���лнитель� ную инф�р�ацию �� ф�р�атир�ванию ��жн� найти на ве���айте msdn.microsoft.com ���ле �р�ведени� ��и��а �� �лючев�й фра�е «Compos��� Fo�m�����g». Суще�твует �траница � та�и� �а��л�в��� и в д��у�ентации �� .N�T F��m�wo�k. На эт�й �тра� нице �ред�тавлена не�л�ха� ра��та �� ��ъ��нению дей�твий �лючей ф�р�атир�� вани� на �ри�ерах. В нижней ча�ти �траницы е�ть ��ыл�а «S�� A�so» («С�. та�же»� ��т�ра� ведет � ��и�ани�� �лючей ф�р�атир�вани� чи�ел, �тр�� и даты�вре�ени.
Работа с файлами и папками 717 Работа с файлами и папками При и���ль��вании Pow��Sh��� дл� д��ычи инф�р�ации � файлах и даже � рее�тре вы в�третите�ь � не���ль�и�и �а��вы�и ти�а�и ��ъе�т�в. Главны�и �удут ��ъе�ты System.IO.DirectoryInfo и System.IO.FileInfo, ��т�рые �ред�тавл�ют ���твет� �твенн� �а��и и файлы. У них и�еет�� �н�же�тв� ��щих �ет�д�в и �в�й�тв, ��т�рые �еречи�л�ют�� в ��рав�е 16.1. Зате� в ��рав�ах 16.2 и 16.3 �еречи�л�ют�� �в�й�тва и �ет�ды, �ри�ущие ��ъе�та�, �ред�тавл�ющи� т�ль�� �атал��и и т�ль�� файлы. У �ен� нед��тат�чн� �е�та дл� ��и�ани� дру�их .N�T���ъе�т�в � та�и� же ур�вне� детали�ации, н� эти ��ъе�ты файл�в и �а��� и�рают на�т�ль�� важную р�ль, чт� �е� та��й детали�ации �р��т� не ���йти�ь. Ва� наверн��а �ридет�� ча�т� и�и ��ль��вать�� в ��нвейерах ���андлет�в, ���тр�енных � ����щью �анал�в, а та�же �ри �р��ра��ир�вании �ценариев. П��ле ��рав�чных ��и���в �удут �ри� ведены �ри�еры их и���ль��вани� в ��еих техн�л��и�х. ▼) Следует знать, что объект System.IO.FileInfo или объект System.IO.DirectoryInfo можно создать для несуществующего файла или папки. Например, это можно сделать с помощью командлета new-object. Создать объект и присвоить ему имя, еще не значит создать отображаемый им элемент. Если действительно требуется создать файл или папку, нужно будет воспользоваться одним из методов Create. Свойство Exists может сообщить о том, существует ли отображаемый элемент на самом деле. Если эти объекты получены, к примеру, с помощью командлетов get- item или get-childitem или с помощью таких методов, как GetDirectories или CreateSubdirectory, значит, отображаемый элемент файловой системы уже существует, потому что эти методы создают объекты на основе того, что есть в файловой системе. СПРАВКА 16.1. СВОЙСТВА И МЕТОДЫ, ИМЕЮЩИЕСЯ У ОБЪЕКТОВ SYSTEM.IO.DIRECTORYINFO И SYSTEM.IO.FILEINFO (НЕПОЛНЫЙ ПЕРЕЧЕНЬ) СВОЙСТВА Attributes О�ъе�т, �ред�тавл�ющий �иты атри�ут�в т�ль�� чтение, архивный, ��рытый ит.д. CreationTime Дата и вре�� ���дани� ��ъе�та в л��альн�� ча��в�� ����е. Exists В��вращает True, е�ли файл, �а��а или ра�дел рее�тра, на�ванный ��ъе�т��, �уще�твует. Extension Ра�ширение и�ени файла ��ъе�та (на�ри�ер, .txt�. FullName И�� ��ъе�та, в�люча� ди�� и �уть. LastAccessTime Дата и вре�� ���ледне�� �т�рыти� ��ъе�та дл� чтени� или �а�и�и в л��аль� н�� ча��в�� ����е.
718 Глава 16. Использование PowerShell LastWriteTime Дата и вре�� ���ледне�� и��енени� ��ъе�та в л��альн�� ча��в�� ����е. Mode() Стр��а, �ред�тавл�юща� атри�уты ��ъе�та в виде ��ти �и�в�л�в, ра���л�� женных в �ледующе� ��р�д�е: d, е�ли ��ъе�т �вл�ет�� �атал����, a, е�ли ��ъе�т �ыл и��енен �� вре�ени ���ледне�� ре�ервн��� ���ир�вани�; r, е�ли ��ъе�т �редна�начен т�ль�� дл� чтени�; h, е�ли ��ъе�т �вл�ет�� ��рыты�; и s, е�ли ��ъе�т �вл�ет�� �и�те�ны� файл��. Е�ли �а��й�ни�удь атри�ут не у�тан�влен, на е�� �е�те нах�дит�� �и�в�л дефи�а (-�. (Эт� �в�й�тв� д��авлен� � ��ъе�та� System.IO.FileInfo и System.IO .DirectoryInfo ���л�ч��й Pow��Sh��� и не �в� л�ет�� ча�тью вер�ии этих ��ъе�т�в, и�еющей�� в .N�T F��m�wo�k.� Name И�� ��ъе�та �е� �ути. МЕТОДЫ Delete([рекурсивно]) Удал�ет ��ъе�т. Е�ли эт� �атал��, т� �н д�лжен �ыть �у�т, е�ли т�ль�� в �а� че�тве ар�у�ента не �удет �ередан� �улев� �начение True. В та��� �лучае файлы �атал��а и ��д�атал��и удал�ют�� ре�ур�ивн�. GetAccessControl([разделы]) В��вращает ��ъе�т, �ред�тавл�ющий у�тан�в�и ��нтр�л� д��ту�а (�е�� ��а�н��ти� ��ъе�та. Не����ательный ар�у�ент ��раничивает ти� и�вле�ае��й инф�р�ации. MoveTo(путь) Пере�ещает файлы или �а��и в дру�ую �а��у, у�а�анную ар�у�ент�� путь. Та�же ��жет �ыть и��енен� и��. Н�в�е �е�т� ��жет �ыть и на дру��� ди��е. Refresh() О�н�вл�ет �в�й�тва ��ъе�та дл� �т��ражени� те�уще�� ���т��ни� файл�в�й �и�те�ы. SetAccessControl(установки_безопасности) Вы��лн�ет у�тан�в�и ��нтр�л� д��ту�а (�е���а�н��ти�, у�а�анные в ��ъе�те System.Security.AccessControl.FileSecurity. ToString() В��вращает �уть � файлу или � �а��е (н� не ��держи��е файла� в виде �тр��и. В ��рав�е 16.2 �еречи�лены �ет�ды и �в�й�тва, и�еющие�� в System.IO.Direc- toryInfo в д���лнение � �еречи�ленны� в ��рав�е 16.1 .
Работа с файлами и папками 719 СПРАВКА 16.2. СВОЙСТВА И МЕТОДЫ, ПРИСУЩИЕ ОБЪЕКТУ SYSTEM. IO.DIRECTORYINFO (НЕПОЛНЫЙ ПЕРЕЧЕНЬ) СВОЙСТВА Parent В��вращает ��ъе�т System.IO.DirectoryInfo, �ред�тавл�ющий р�дитель� ��ий �атал�� или NULL, е�ли �атал�� нах�дит�� на верхне� ур�вне (�вл�ет�� ��рневы��. Root В��вращает ��ъе�т System.IO.DirectoryInfo, �ред�тавл�ющий ��рнев�й �атал�� на ди��е, ��держаще� �атал�� ��ъе�та. МЕТОДЫ Create([установки_безопасности]) С��дает на�т��щий �атал��, ��т�рый �ред�тавл�ет ��ъе�т, е�ли эт�т �атал�� еще не �уще�твует. CreateSubdirectory(строка [, установки_безопасности]) С��дает н�вый ��д�атал�� � у�а�анны� �утевы� и�ене�. Е�ли �уть �вл�ет�� �тн��ительны�, н�вый �атал�� ���дает�� �тн��ительн� �атал��а, �ред�тавл�� е���� ��ъе�т��. GetDirectories([шаблон[, ключ_поиска]]) В��вращает �а��ив ��ъе�т�в System.IO .DirectoryInfo, �ред�тавл�ющих ��д�атал��и �атал��а. Не����ательный �тр���вый шаблон у�а�ывает �и�в�лы� �а�е�тители дл� �р�вер�и ���твет�тви�. Не����ательный ар�у�ент ключ_поиска ��жет и�еть �начение [System.IO.SearchOption]::TopDirectoryOnly дл� ��и��а эле�ент�в т�ль�� в �лижайших ��д�атал��ах, или �начение [System.IO .Search Option]::AllDirectories дл� ��лее �лу������ ��и��а внутри е�� ��д�атал���в. П� у��лчанию и���ль�ует�� TopDirectoryOnly. GetFiles([шаблон[, ключ_поиска]]) В��вращает �а��ив ��ъе�т�в System.IO .FileInfo, �ред�тавл�ющих файлы �атал��а. Не����ательный �тр���вый ша�л�н у�а�ывает �и�в�лы��а�е�тители дл� �р�вер�и ���твет�тви�. Не����ательный ар�у�ент ключ_поиска ра��тает т�чн� та� же, �а� и в �ет�де GetDirectories. СПРАВКА 16.3. СВОЙСТВА И МЕТОДЫ, ПРИСУЩИЕ ОБЪЕКТУ SYSTEM.IO.FILEINFO (НЕПОЛНЫЙ ПЕРЕЧЕНЬ) СВОЙСТВА Directory О�ъе�т System.IO .DirectoryInfo �ред�тавл�ет �атал��, ��держащий файл. DirectoryName Путев�е и�� �атал��а, в ��т�р�� ��держит�� файл.
720 Глава 16. Использование PowerShell IsReadOnly В��вращает True, е�ли файл �редна�начен т�ль�� дл� чтени�, иначе в��� вращает False. У�тан�в�у ��жн� и��енить, �ри�в�ив эт��у �в�й�тву н�в�е �начение. Length Ра��ер файла в �айтах. МЕТОДЫ AppendText() В��вращает ��ъе�т System.IO .StreamWriter, ��т�рый ���в�л�ет д��авить те��т�вые данные � ��нцу файла, е�ли т�т уже �уще�твует, или ���дает файл и ���в�л�ет �а�и�ать в не�� те��т, е�ли �н еще не �уще�твует. За�и�ь те��та ра���атривает�� в �ледующе� ра�деле. CopyTo(имя_файла[, перезапись]) С��дает ���ию файла � у�а�анны� и�ене�. Дл� �ере�а�и�и �уще�твующе�� файла д�лжен �ыть �ередан д���лнительный �улев ар�у�ент перезапись �� �начение� True; в �р�тивн�� �лучае, е�ли файл уже �уще�твует, в��ни�ает и�� �лючение. (И��лючени� ра���атривали�ь в �лаве 15.� Create([установки_безопасности]) В��вращает ��ъе�т System.IO.FileStream, ���в�л�ющий �а�и�ывать данные в файл�. И�х�дн�е ��держи��е файла удал�ет��. За�и�ь в файлы ра���атрива� ет�� в �ледующе� ра�деле. CreateText() В��вращает ��ъе�т System.IO.StreamWriter, ���в�л�ющий �а�и�ывать те��т в файл. И�х�дн�е ��держи��е файла удал�ет��. (Д��авление те��та � �уще�тву� юще�у файлу в�е�т� е�� �а�ены ра����трен� в ��и�ании ранее �ред�тавленн��� �ет�да AppendText.� Decrypt() Ра�шифр�вывает файл, е�ли т�т �ыл �ашифр�ван � ����щью �и�те�ы шиф� р�вани� файл�в W��dows ����yp���g F��� Sys��m. Encrypt() Зашифр�вывает файл � ����щью �и�те�ы шифр�вани� файл�в W��dows ����yp���g F��� Sys��m. Open( режим_работы_с_файлом [, доступ[, режим_общего_использования]]) В��вращает ��ъе�т System.IO.FileStream, � ��т�ры� ��жн� читать данные и� файла и �а�и�ывать их в файл. Значение режима_работы_с _файлом д�лж� н� и�еть ф�р�ат [System.IO.FileMode]::xxx, �де xxx — �дн� и� �ледующих �начений.
Работа с файлами и папками 721 Режим работы с файлом Описание Append От�рывает файл дл� д��авлени� в не�� данных или ���дает эт�т файл, е�ли �н не �уще�твует Create С��дает �у�т�й файл. Е�ли файл уже �уще�твует, е�� ��держи��е удал�ет��. (Эт�т режи� ��ычн� и���ль�ует�� �ри �а�и�и файл�в.� CreateNew С��дает н�вый, �у�т�й файл. Е�ли файл уже �уще�твует, в��ни�ает и��лючение Open От�рывает �уще�твующий файл. Е�ли файл еще не �уще�твует, в��� ни�ает и��лючение. (Эт�т режи� ��ычн� и���ль�ует�� �ри чтении файл�в.� OpenOrCreate От�рывает �уще�твующий файл или ���дает е��, е�ли �н еще не �уще�твует Truncate От�рывает �уще�твующий файл, удал�� �уще�твующее ��держи��е. Е�ли файл еще не �уще�твует, в��ни�ает и��лючение Е�ли �ередает�� не����ательный ар�у�ент доступ, �н д�лжен и�еть ф�р�ат [System.IO .FileAccess]::xxx, �де xxx и�еет �дн� и� �начений: Read (чтение�, ReadWrite (чтение и �а�и�ь� или Write (�а�и�ь�. Е�ли �н не у�а�ан, �� у��лча� нию и���ль�ует�� �начение Read. Е�ли �ередает�� не����ательный ар�у�ент режим_общего_использования, �н ��редел�ет, �а� �дн�вре�енн� � ваши� �ценарие� д��ту� � файлу ���ут ��лучить дру�ие ��ль��ватели. Передавае��е �начение д�лжн� и�еть ф�р�ат [System.IO .ShareMode]:xxx, �де xxx — эт� �дн� или не���ль�� �ледующих �на� чений. Режим общего использования Описание None С�в�е�тный д��ту� �а�рещен, т� е�ть дру�ие �р��ра��ы не ���ут читать данные и� файла и �а�и�ывать данные в файл, ���а � ни� ра� ��тает �ценарий. П��ыт�а вы��лнить �ет�д .Open ��тер�ит неудачу � выдачей и��лючени� Read Дру�ие �р��ра��ы ��лучают ра�решение на чтение файла в т� вре��, ���да вы � ни� ра��таете. Н� эти �р��ра��ы не ���ут �т�рыть файл дл� �а�и�и, и вы не ��жете �т�рыть файл, е�ли �т��ни�удь ведет в не�� �а�и�ь Write Дру�ие �р��ра��ы ��лучают ра�решение на �а�и�ь в файл, н� не на чтение, ���а �н �т�рыт у ва� ReadWrite Ра�решение на ��щее чтение и �а�и�ь. Пр��ра��ы д�лжны в��ть на �е�� ���рдинацию д��ту�а � файлу Delete Ра�решение дру�и� �р��ра��а� удал�ть �т�рытый у ва� файл. П��а вы е�� не �а�р�ете, файл фа�тиче��и �удет �уще�тв�вать
722 Глава 16. Использование PowerShell П� у��лчанию и���ль�ует�� режи� None. Е�ли у�а�ывает�� ��лее �дн��� �начени�, �ни ��ъедин�ют�� � ����щью ��ерат�ра -bOR. Следующие три �ет�да �вл�ют�� у��р�ченны�и вер�и��и �ет�да Open(): OpenRead() От�рывает файл дл� чтени� и в��вращает ��ъе�т System.IO .FileStream. OpenText() От�рывает файл дл� чтени� те��та в ��дир�в�е UTF� и в��вращает ��ъе�т System.IO.StreamReader. OpenWrite() От�рывает файл дл� �а�и�и и в��вращает ��ъе�т System.IO .FileStream. Replace(заменяемый_файл, резервный_файл[, игнорирование_ошибок]) За�ен�ет заменяемый_файл файл��, ��т�рый �ред�тавлен ��ъе�т��. Ре� �ервна� ���и� и�х�дн��� файла ��хран�ет�� ��д и�ене� резервный_файл. О�а ар�у�ента �вл�ют�� �тр��а�и. В��вращает н�вый ��ъе�т System.IO.FileInfo, ��т�рый ��и�ывает н�вый заменяемый_файл. Е�ли нужн� и�н�рир�вать �ши�� �и, в��ни�ающие в� вре�� �а�ены, �ледует у�а�ать третий �улев ар�у�ент �� �начение� True. А те�ерь ра����три� р�д �ра�тиче��их �ри�ер�в и���ль��вани� этих ��ъе�т�в. Определение факта существования файла Чт��ы ��ределить фа�т �уще�тв�вани� файла, ��жн� ���дать ��ъе�т System. IO.FileInfo и, �а� ���а�ан� в �ледующе� �ри�ере, �р�те�тир�вать е�� �в�й�тв� Exists: $fobj = new-object System.IO.FileInfo "c:\temp\testfile.txt" if ($fobj.Exists) {'Файл существует'} ▼) Это пример того самого случая, когда объекту FileInfo необязательно представлять файл, су- ществующий на самом деле. Дл� решение эт�й же �адачи ��жн� та�же в����ль��вать�� ���андлет�� �� и�ени Test-Path. Ин��да �р�ще в����ль��вать�� и�енн� и�. В�т �ри�ер е�� и�� ��ль��вани�: if (test-path 'c:\temp\testfile.txt') {'Файл существует'} Чтение текста из файлов С ����щью .N�T���ъе�та System.IO.FileStream вы ��жете �р�читать и� файла дв�ичные данные. Е�ли �читывают�� те�т�вые данные, дл� эт��� уд��нее в����ль� ��вать�� ��ъе�т�� System.IO.StreamReader. На в�е ��др��н��ти и���ль��вани� ��ъе�т�в в данн�й �ни�е �е�та нет, н� их ��жн� найти на ве���айте msdn.microsoft. com, �р�ани��вав, � �ри�еру, ��и�� �� �лючев�й фра�е «Sys��m.IO.S����mR��d��
Работа с файлами и папками 723 m�mb��s». В�е�т� ��др��н��тей � х�чу �редл�жить ��н�вную �хе�у чтени� те�� �т�в�й �тр��и и� файла. Эт� уче�ный �ценарий �р��т� ну�ерует и выв�дит �тр��и файла, н� внутри ци�ла ��жн� делать в�е, чт� ��тре�ует��: # Файл примера script1601.ps1 $fobj = get-item '\path\filename.txt' # получение объекта типа file для # нужного текстового файла $strm = $fobj.OpenText() # открытие для чтения $n=0 # инициализация счетчика строк while (! $strm.EndOfStream) { # чтение строк до конца файла $txt = $strm.ReadLine() $n++ # приращение счетчика строк "$n : $txt" # вывод номера строки и текста из файла } $strm.Dispose() # закрытие файла Ка� вы, наверн�е, и �жидали, е�ть ������ �делать т� же �а��е � ����щью ��� �андлета. Эт� т�т же �а�ый �ценарий, и���ль�ующий ���анду � �анал��: $n=0 get-content "\path\filename.txt" | foreach { $n++ "$n : $_" } М�жн� ���р���вать еще ��льше у�р��тить эт�т ��д, и���ль�у� �дн�вре�енн� ��ерат�р авт�ин�ре�ента ++ и выв�д: $n=0 get-content "\path\filename.txt" | foreach { "$(++$n) : $_"} Следует на���нить, чт� внутри дв�йных �авыче� ��н�тру�ци� $(...) выв�дит ре�ультат вы��лнени� ��ерат�ра или вычи�лени� выражени�. П�эт��у в�е эт� должно ра��тать. Н� �а�� �� �е�е выражение ++$n, �удучи ��ерат�р��, в���ще ниче�� не выведет. Эт� ча�т� и���ль�уе�ый �р��ра��ный ��ерат�р, и е�ли �н чт�� ни�удь выведет, �ценарии �удут выдавать нежелательный выв�д. П�эт��у нужн� �а�тавить Pow��Sh��� ра���атривать ++$n в �аче�тве �начени� выражени�, в��в е�� в �ру�лые �����и. Нужную �адачу вы��лнит �ледующа� вер�и�: get-content "\path\filename.txt" | foreach {"$((++$n)) : $_" } Запись текста в файлы М�жн�, ��нечн�, �ерена�равить выв�д ���андлета в файл, в����ль��вавши�ь ��ычны� ��ерат�р�� >, н� в� �н��их �луча�х ��жет ��над��ить�� вы�тр�ить файл ��лее т�чн�. Дл� �а�и�и те��та в файл и���ль�ует�� �ледующа� �хе�а: $fobj = new-item System.IO.FileInfo "c:\path\filename.txt " $strm = $fobj.CreateText() $strm.WriteLine('Это первая строка') for($i=1;$i-le10;$i++){ $strm.Write("$i ") } $strm.WriteLine() $strm.Dispose()
724 Глава 16. Использование PowerShell Эт�т ��д ���да�т файл "c:\path\filename.txt", ���т��щий и� двух �тр�� те��та: Это первая строка 12345678910 ▼▼ Для записи символа табуляции (который используется при создании файлов со знаком табуля- ции в качестве разделителя, что позволяет затем открывать такие файлы, к примеру, в Excel), создайте переменную по имени $tab, воспользовавшись следующим кодом: $tab = [char] 9 Затем записывайте строки вывода, имеющие следующий вид: $strm.WriteLine "abc" + $tab + "def" Идентификация файлов по размеру В �аче�тве �ра�тиче����� �ри�ера ра��ты � файла�и в �ценарии ��жн� �ри� ве�ти удаление и� �а��и в�ех файл�в, ра��ер ��т�рых �ревышает ��ределенную величину. Эти� ��жн� в����ль��вать�� в �аче�тве ча�ти �ценари�, удал�юще�� нежелательные вре�енные файлы. В����жн�, в �редыдущих ра�делах вы �а�етили, чт� у ��ъе�та System. IO.FileInfo е�ть �в�й�тв� Length, ��т�р�е ���а�ывает ра��ер файла. Ка� уже ранее ��в�рил��ь, �трате�и� и���ль��вани� ��нвейера ���андлет�в �а�лючает� �� в �енерации файл�в, их фильтрации, а �ате� их ��ра��т�е. Задача �� �чи�т�е ��жет ���лужить х�р�ши� �ри�ер��. С эт�й �адачей ле��� ��равит�� в�е�� �дна ���андна� �тр��а: y y К��андлет Get-Item ��жет ��енерир�вать ��и��� в�ех файл�в �а��и, и���ль�у� дл� эт��� �и�в�лы��а�е�тители . y y К��андлет Where-Object, и��леду� �в�й�тв� Length, ��жет �р��у�тить чере� �е�� т�ль�� ��льшие файлы. И���ль��вание этих двух ���андлет�в ���в�л�ет выве�ти ��и��� ��льших файл�в в ��н� выв�да: get-item 'c:\temp\*.* ' | where-object {$_. Length -ge 10000} Чт��ы и��авить�� �т ��льших файл�в, ��жн� ��тан�вить �в�й вы��р на �дн�� и� не���ль�их вариант�в. Один и� них �удет �а�лючать�� в и���ль��вании ��ера� т�ра foreach дл� вы��ва �ет�да Delete дл� �ажд��� ��ъе�та: get-item 'c:\temp\*.* ' | where-object {$_. Length -ge 10000} | foreach {$_ .Delete()} Эт� �ра��тает. Кр��е эт���, ��жн� в����ль��вать�� ���андлет�� Remove-Item: get-item 'c:\temp\*.* ' | where-object {$_. Length -ge 10000} | Remove-Item К��андлет Remove-Item, и���ль�уе�ый �е� ар�у�ент�в, удал�ет веще�твенные эле�енты файла, рее�тра и дру�ие ти�ы ��ъе�т�в, �ереданные е�у в ��т��е. (О�ыч� н� эт�т ���андлет и���ль�ует�� в �аче�тве �а���т��тельн�й ���анды; �н ��х�ж на ��ычную ���анду del, и���ль�уе�ую в ��не ���андн�й �тр��и.�
Создание полезных сценариев 725 Создание полезных сценариев Дл� ���дани� ���на�т��ще�у ��ле�ных �ценариев, ��т�рые �удут �����ать ��рав� л�ть�� � вашей ра��т�й, нед��тат�чн� �р��т� решить, �а� �а�тавить �ценарий вы��лнить ���тавленную �адачу. Кр��е эт��� в �ценарии д�лжны �ыть решены �ледующие в��р��ы: y y Он д�лжен и�еть ����ентарии, ��и�ывающие �ринци� е�� ра��ты. y y Е�ли ���дает�� ��дульный �ценарий, ра�шир�ющий Pow��Sh��� �а �чет ��ре� делени� фун�ций или н�вых ���андлет�в, в не� д�лжна �ыть д��у�ентаци�, �редна�наченна� дл� ��нечных ��ль��вателей, чт��ы файл ��рав�и Pow��Sh��� �нал � ваших ра�ширени�х. y y Е�ли эт� �рие�ле��, �ценарий д�лжен ��ра�атывать ар�у�енты ���андн�й �тр��и, �ред�и�ывающие ��р�д�� е�� дей�твий, �е�т� ��и��а ��ра�атывае�ых данных, в�лючение и вы�лючение ра�личных вариант�в ��ра��т�и и т. д. В�е эти в��р��ы �удут в�ратце ра����трены в данн�� ра�деле. Комментируйте свою работу! Ставьте ����ентарии в лю��й, ра�ра�атывае�ый ва�и �ценарий, не�ави�и�� �т т���, на���ль�� �н �р��т или нет, чт��ы ��т�� ��жн� �ыл� ра���рать��, чт� �дела� н� и �аче�. Важн� ��тавл�ть ����ентарии, ��и�ывающие, зачем делает�� т�т или ин�й ша� — чт� и�енн� делает��, уже ��и�ывает�� �а�и� ��д��. Вр�д ли �удет ��ле�ен ����ентарий вида: $v = $v + 10 # прибавление числа 10 к значению переменной v Мы и та� види�, чт� �ценарий �ри�авл�ет чи�л� 10. К���ентарий д�лжен �тве� тить на в��р��, �аче� �ри�авл�ет�� чи�л� 10. Ценный ����ентарий ����дей�твует ��лее ���дне�у �ере���тру и и��енению �ценари� или, �� �райней �ере, на���нит ва�, �а�и� ��ра��� �ыла решена �р��ле�а, чт��ы ��жн� �ыл� и�влечь и� эт��� решени� ��ль�у дл� решени� �ледующей �адачи. При ���дании н�вых ��дулей ���андлет�в, � ��т�рых в���ре ��йдет речь, нуж� н� �нать � ��рав�е на ��н�ве ����ентари�. Те��т ����ентари� ��жн� ���е�тить в ваш файл та�и� ��ра���, чт��ы ��рав�чна� �и�те�а Pow��Sh��� H��p ����ла �р�читать е�� и �ри��единить � �в�ей интера�тивн�й ��рав�чн�й �и�те�е. Д�� ��лнительную инф�р�ацию ��жн� ��лучить �� ��ыл�е about_comment_based_help. Обработка командной строки Зача�тую ��жн� ��вы�ить ��ль�у �т �ценариев, �а�тавив их �рать на�равление и� ���андн�й �тр��и, а не и� же�т��й �рив���и � че�у�ни�удь вр�де и�ен файл�в и тех �е�т, �де �ни нах�д�т��. Ар�у�енты ���андн�й �тр��и, у�а�анные �ри �а�у��е �ценари� Pow��Sh���, д��ту�ны в �а��иве $args[]. На�ри�ер, е�ли у ва� в �ути ��� и��а е�ть �ценарий �� и�ени myscript.ps1, ���андна� �тр��а Pow��Sh��� myscript a b c
726 Глава 16. Использование PowerShell �а�у�тит ваш �ценарий, и в �а��иве args[] �удут нах�дить�� три �начени�: 'a', 'b' и 'c'. Е�ли ваш �ценарий ��ра�атывает файл, е�� ��жн� �делать ��лее универ�аль� ны�, �а�лючив «ра��чую» ча�ть в фун�цию и вы�ыва� фун�цию, �� �дн��у ра�у дл� �ажд��� ар�у�ента ���андн�й �тр��и: # do_work имя_файла – выполнение полезных действий над файлом 'filename' function do_work { param ($filename) ... работа с файлом $filename } # основной сценарий – вызов функции do_work для каждого файла, # названного в командной строке if ($a.Length -eq 0) { 'Порядок использования: myscript имя_файла ...' } else { foreach ($a in $args) {do_work $a} } Сценарий ��ра�атывает �аждый файл, на�ванный в ���андн�й �тр��е; е�ли не на�ван� ни �дн��� файла, �н выв�дит ����щение, ���а�ывающее ��р�д�� и�� ��ль��вани� �ценари�. В Pow��Sh��� ��жн� �е� ������� труда ���давать �ценарии, д��у��ающие ��лее �л�жный �инта��и� ���андн�й �тр��и. Не���ред�твенн� ра��тать � эле�ента�и ар�у�ент�в ва� не �ридет��. О�ерат�р param, ��нечн�, у�л�жн�ет��, н� Pow��Sh��� �ерет в�ю т�желую ра��ту на �е��. Инф�р�ацию �� и���ль��вании ��ерат�ра param дл� ��ределени� �лючей ���андн�й �тр��и ��жн� найти в ���твет�твующе� ра�� деле �лавы 15. Создание модулей Вы ��жете на�и�ать �в�и ����твенные фун�ции Pow��Sh���, ра��тающие на��� д��ие в�тр�енных ���андлет�в. Дл� эт��� нужн� ���е�тить фун�цию в файл ��дул�, ��т�рый �удет �а�ружать�� �ри �ажд�� �а�у��е Pow��Sh���, и вы��лнить �ледующие дей�тви�: y y О�ределить ���андлет �а� фун�цию Pow��Sh���, и���ль�у� ��ерат�ры BEGIN, PROCESS и END. Эт�т в��р�� ра���атривал�� в �лаве 15, в ра�деле «Фун�ции, ра��тающие � �анала�и, и фильтры». Дл� ��др��н��� ��и�ани� в данн�й �ни�е нет �е�та, н� д���лнительную инф�р�ацию ��жн� найти в ��рав�чни�е �� Pow��Sh���, в те�е about_functions_ advanced. y y П��е�тить фун�цию ���андлета в файл � ра�ширение� .psm1. Е�ли вы �удете и���ль��вать т�ль�� ��дуль, �н ��жет �ыть ��хранен �а� %userpro�le%\[my ] documents\windowspowershell\modules\модуль\модуль.psm1. За�етьте: �а�и� �ы ни �ыл� и�� файла �ценари�, эт�т файл д�лжен �ыть ���ещен в �а��у � т�чн� та�и� же и�ене�. Чт��ы �н �тал д��ту�ен в�е� ��ль��вател��, файл д�лжен �ыть ��хранен �а� \windows\system32\windowspowershell\V1.0\modules\модуль\мо­ дуль.psm1. Зате�, чт��ы а�тивир�вать е�� в ваше� те�уще� �еан�е Pow��Sh���,
Создание полезных сценариев 727 на�ерите ���анду import-module -name модуль или ���е�тите эту ���анду в �в�й �ценарий �р�фил� Pow��Sh���. ➔ Д���лнительную инф�р�ацию � ре�и�трации ��дул� � ����щью Pow��Sh��� ��жн� найти на ве���айте msdn.microsoft.com ���ле ��и��а �� �лючев�й фра�е «W��dows Pow��Sh��� Modu�� Co���p�s». y y И���ль��вать в фун�ции ���андлета �ет�д param дл� ��ра��т�и ар�у�ент�в ���андн�й �тр��и, �а� ���а�ан� в �лаве 15, в ра�деле «О�ерат�р p���m» y y С��тавить ��и�ание, ��т�р�е д�лжн� ����чь дру�и� ��ль��вател�� ра���рать�� � ��р�д��� и���ль��вани� н�в��� ���андлета. С�рав�чна� инф�р�аци� ��� �ещает�� в файл �ценари� внутри �л���в ����ентариев <# #> и д�лжна �ыть �делана д��ту�н�й чере� ��ычную help����анду Pow��Sh���. Дл� ��лучени� инф�р�ации � ф�р�атир�вании эт�й ��рав�чн�й инф�р�ации �ледует на�рать ���анду help about_comment_based_help. ▼▼ В документации по PowerShell говорится, что после запуска файла сценария переменная $PSScriptRoot содержит имя каталога, в котором находится файл сценария. Эти сведения по- лезны: если сценариям для выполнения их задач понадобятся дополнительные файлы данных, будет удобно поместить эти файлы в ту же папку, в которой находится сценарий, и вычислить путь к сценарию, чтобы найти дополнительные файлы. Но переменная $PSScriptRoot работает только для файлов модулей с расширением .psm1 и не работает для обычных файлов сценари- ев с расширением .ps1. Для получения пути к папке запущенного сценария в обычном сценарии из файла с расширением .ps1 нужно воспользоваться следующим выражением: $ScriptDir = Split-Path $MyInvocation.MyCommand.Path –Parent Затем можно составить путь к дополнительному файлу, использовав, к примеру, следующее выражение: $filename = $ScriptDir + "\script_setup_file.txt". Обработка исключений как стратегия выхода И�еющий�� в Pow��Sh��� �ехани�� ��ра��т�и и��лючений ���в�л�ет ваши� �ценари�� эле�антн� ��уще�твить вых�д или решить �р��ле�ы � не�жиданн� в��ни�ши�и �ши��а�и. (О�ра��т�а и��лючений ра����трена в ���твет�твующе� ра�деле �лавы 15.� О�ра��т�у и��лючений ��жн� та�же и���ль��вать в �аче�тве ин�тру�ента дл� у�р�щени� �ценариев, вы��лн�ющих длинную череду дей�твий. Я и�ею в виду �ледующее: �еред вы��лнение� �адачи ��жет ��над��ить�� вы��лнить длинную, �л�жную �ерию �р�вер��, чт��ы у�едить�� в в����жн��ти �р�д�лжени� ра��ты. О�ычн� дл� вы��лнени� �л�жных �р�вер�� и���ль�ует�� �ет�д �ри�ваивани� в �а��� начале �ере�енн�й � и�ене� вр�де ok_to_proceed (��жн� �р�д�лжать� �начени� True и у�тан�в�и дл� нее �начени� False, е�ли лю�а� и� �р��ежут�чных �р�вер�� не �удет �р�йдена. И на��нец, е�ли �ере�енна� на финише ��хранит �начение True, вы��лн�ют�� �а�ие�ни�удь дей�тви�: ok_to_proceed = True if (что_нибудь_true) { if (проверка_здесь_пройдена) {
728 Глава 16. Использование PowerShell if (а_здесь_проверка_не пройдена) ok_to_proceed = False if (сегодня_среда) { if (а_здесь_проверка_не пройдена) ok_to_proceed = False } } else { ok_to_proceed = False } } else ok_to_proceed = False if (ok_to_proceed) # и наконец, проверка прохождения всех проверок выполнение каких-нибудь важных действий В� �н��их �луча�х, е�ли �дна �р�вер�а не �удет �р�йдена, �р�д�лжать вы� ��лнение дру�их уже не �т�ит. На�ри�ер, е�ли �р�вер�а ��наружит, чт� д��ту�а � �етев��у х��ту нет, т� не �т�ит �ытать�� ��рашивать � е�� ��нфи�урации. О�ра��т�а и��лючений ���в�л�ет и��авить�� �т ��д��н��� вл�женн���, �ту� �енчат��� ��да �уте� ���дани� �в�их ����твенных и��лючений � и���ль��вание� �лючев��� �л�ва throw. И��лючение не�едленн� выв�дит и� ���лед�вательн��ти ��ерат�р�в. М�жн� �р��т� �� �череди �р�в�дить �ерию �р�вер��. Е�ли �дна и� �р�вер�� не �удет �р�йдена, дл� �ре�ращени� �р�вер�� и���ль�ует�� ��ерат�р throw. Е�ли д��ти�нут ��нец, �тан�вит�� ��н�тн�, чт� в�е �ни �р�йдены у��ешн�. Предыдущий �ри�ер ��жет �ыть �еределан та�и� ��ра���: try { if (что_нибудь_не _является _истиной) throw "Проблема 1" if (одна_проверка_не _пройдена) throw "Проблема 2" if (другая_проверка_не_пройдена) throw "Проблема 3" if (сегодня_среда) if (если_еще_какая_нибудь_проверка_не _пройдена) throw "Проблема 4" выполнение каких-нибудь важных действий ) catch (исключение) { "Продолжение невозможно: ", исключение # Описание непройденной проверки } П��лед�вательн��ть ша��в �де�ь �р��леживает�� на�н��� �р�ще, а в �аче� �тве ��ну�а, е�ли �а��й�ни�удь ��ерат�р �енерирует на�т��щее и��лючение, т� �н� ��ра�атывает�� ��ерт�р�� catch. Д���лнительную инф�р�ацию �� и���ль� ��ванию ��ерат�р�в try и catch ��жн� найти в �лаве 15, в ра�деле «О�ра��т�а и��лючений».
Использование хэш-таблиц 729 Использование хэш-таблиц Ка� уже у���инал��ь в �лаве 15, хэш�та�лицы �вл�ют�� ти��� �а��ива, у ��т�р��� инде��н�е �начение не����ательн� д�лжн� �ыть чи�л�� (н� ��жет �ыть и чи�л���. Эле�еты инде��ируют�� � ����щью чи�ел или �тр��. И ���ле т��� �а� вы ��й�ете ��р�д�� их и���ль��вани�, �ни ���ут �ри��дить�� в ваших �ценари�х. Ра����три� �ри�ер: �ред��л�жи�, е�ть файл журнала ре�и�трации �ши���, в ��т�р�� ���тр�чн� �еречи�л�ют�� и�ена �ервер�в, и � х�чу ��д�читать ��личе� �тв� у���инаний �ажд��� и�ени в файле журнала. При и���ль��вании V�S���p� �не �ридет�� в����ль��вать�� ��д��, ��х�жи� на ��д �ледующе�� �ри�ера: set fso = CreateObject("Scripting.FileSystemObject") dim errcount() ' объявление массива с динамическим изменением размера max_names = 20 ' нач аль ное резервирование места для 20 имен redim errcount(2, max_names) n_names = 0 ' пока имен в списке нет set strm = fso.OpenTextFile("c:\logs\server.names") do while not strm.AtEndOfStream ' с кан ирование всех записей в журнале servername = strm.ReadLine() ' п олучение имени сервера из записи журнала ' с увеличением его счетчика ошибок fori=1ton_names ' имя уже есть в списке? if errcount(1,i) = servername then ' да, тогда просто errcount(2,i) = errcount(2,i)+1 ' увеличение его счетчика ошибок exit for end if next if i > n_names then ' не найдено, тогда добавить это имя if n_names = max _names then ' спи сок по лон, увеличит его размер max_names = max _names+20 redim preserve errcount(2,max_names) end if n_names = n_names+1 ' добавление нового имени к списку errcount(1, n_names) = servername errcount(2, n_names) = 1 ' установка счетчика ошибок в 1 end if loop strm.Close ' а т еперь вывод списка счетчиков wscript.echo "Сервер" & vbTab & "Количество ошибок " fori=1ton_names wscript.echo errcount(1,i) & vbTab & cstr(errcount(2,i)) next А в�т �а� ��жн� т� же �а��е �делать в Pow��Sh���: $errcount = @{} # создание пустой хэш-таблицы $fobj = get-item '\logs\server.names ' # получение объекта file для нужного # текстового файла $strm = $fobj.OpenText() # открытие для чтения while (! $strm.EndOfStream) { # чтение строк до конца файла $servername = $strm.ReadLine() $errcount[$servername]++ # увеличение счетчика. (если имя новое, # значение по умолчанию — null, } # а null+1 = 1, поэтому код работает) $errcount # и наконец, вывод списка имен и ошибок
730 Глава 16. Использование PowerShell Ну, �а� ва�? А �ри и���ль��вании ра����тренн��� ранее в данн�й �лаве в ра�� деле «Чтение те��та и� файл�в» ���андлета get-content ��д ��жн� еще ���ратить: $errcount = @{} # Создание пустой хэш-таблицы # получение строк из файла и подсчет get-content '\logs\server.names' | foreach {$errcount[$_]++} $errcount Эт�т ��д вы��лн�ет ту же ра��ту в�е�� в трех ��ерат�рах! С�раведлив��ти ради �т�ит �т�етить, чт� в V�S���p� е�ть д��ту� � ��ъе�ту Dictionary, ��т�рый ��жет та�же у�р��тить решение �адачи, н� �н не на�т�ль�� шир��� и�ве�тен, а в�т хэш� та�лицы �вл�ют�� не�тъе�ле��й ча�тью ��ы�а Pow��Sh���. Интегрированная среда сценариев PowerShell W��dows Pow��Sh��� 2.0 ���тавл�ет�� в�е�те � ин�тру�ент�� дл� на�и�ани� и �тлад�и �ценариев, ��т�рый на�ывает�� инте�рир�ванн�й �ред�й �ценариев — I���g����d S���p���g ��v��o�m��� (IS��. Эта �реда ���в�л�ет ра�ра�атывать и те�ти� р�вать �ценарии в реда�т�ре, ра��тающе� в �рафиче���� интерфей�е ��ль��вател� (GUI�. Он ле��� ��х�дит �� ценн��ти Бл��н�т, �����ль�у д��у��ает ���тр�чн�е вы��лнение �ценари�, дает в����жн��ть �р���атривать �начени� �ере�енных и �р��ежут�чные ре�ультаты и даже в�аи��дей�твует � Pow��Sh��� в �р�це��е вы� ��лнени� �ценари�. В эт�� ра�деле �удет ���а�ан�, �а� и� ��ль��вать��. ➔ Среда Pow��Sh��� IS� �� у��лчанию уже у�тан�влена в W��dows 7. Инф�р�а� цию �� у�тан�в�е Pow��Sh��� 2.0 на ��лее ранних вер�и�х W��dows ��жн� найти в �лаве 15, в ра�деле «W��dows V�s�� и W��dows XP». Начало работы с PowerShell ISE От�рыть IS� ��жн� не���ль�и�и �р��ты�и ������а�и: y y В ��не ���андн�й �тр��и или в ��не Pow��Sh��� на�ерите powershell_ise. y y В W��dows 7 щел�ните на �н���е Пуск (S�����, вы�ерите �ун�ты Все программы (A�� P�og��ms�Стандартные (A���sso���s�Windows PowerShell, Windows Power- Shell ISE. y y В W��dows V�s�� или XP ���ле �а�ру��и и у�тан�в�и Pow��Sh��� 2.0 щел�ните на �н���е Пуск (S�����Все программы (A�� P�og��ms�Windows PowerShell 2.0, Windows PowerShell ISE. При лю��� ������е �а�у��а ���вл�ет�� э�ран �� у��лчанию, ���а�анный на ри�. 16.1 . П� у��лчанию ��н� ��делен� на три ча�ти: реда�т�р �ценари�, ��н� выв�да и ��н� вв�да. У ��ла�ти реда�т�ра и�еет�� �дна или не���ль�� в�лад��, ���твет� �твующих файлу или файла� �ценариев, ��т�рые �ыли �т�рыты дл� реда�тир�� вани�. О�ла�ть выв�да и�начальн� �у�та и �удет ��держать ��т��и лю���� те��та, выведенн��� в �тандартный выв�д или в выв�д �тандартн�й �ши��и. О�ла�ть вв�да ���а�ывает �ри�лашение Pow��Sh���, и вы ��жете вв�дить ���анды Pow��Sh��� и лю��й дру��й вв�д в эт� ��н�.
Интегрированная среда сценариев PowerShell 731 Рис. 16.1 . Экран PowerShell ISE поделен на части, позволяющие редактировать файл сценария, просматривать его вывод и набирать команды PowerShell Пун�т �еню Справка (H��p� выв�дит ��лный ��рав�чни� �� Pow��Sh��� � ин� ф�р�ацией � в�ех в�тр�енных ���андлетах и ����енн��т�х ��ы�а. Конфигурирование ISE Пун�т �еню Вид (V��w� ���в�л�ет вы�рать ���ицию ��ла�ти �ценариев �ежду верхней и нижней ча�тью ��на IS� или �ежду �рав�й и лев�й �т�р�н�й ��на. М�жн� та�же в���ще ��рыть ��ла�ть реда�т�ра �ценариев, �н�в флаж�� Показать область сценариев (Show S���p� P����. Ра��ер шрифта в IS� у�равл�ет�� �ун�та�и Вид (V��w�, Увеличить (Zoom I�� и Уменьшить (Zoom Ou�� или �ере�ещение� ��л�ун�а в �рав�� нижне� у�лу ��на IS�. Личн� � �ред��читаю ��ль��вать�� шрифт�� ра��ер�� 12 �ун�т�в. Н� дру�их �ред�тв на�тр�й�и интерфей�а в �еню IS� нет. На�ри�ер, �т�ут�тву� ет в����жн��ть и��енени� и� �еню шрифта, и���ль�уе���� в ��не IS�. Вы, навер� н�е, удивите�ь, у�нав, чт� дальнейшую на�тр�й�у интерфей�а ��жн� �р�ве�ти и� ��на ���андн�й �тр��и Pow��Sh���. (При �ерв�� �р�чтении данн�й �лавы данный ра�дел ��жн� �р��у�тить, н� ра���атривае�ые в��р��ы на�т�ль�� интере�ны, чт� � ни� �т�ит вернуть��!� Са�а �р��ра��а IS� ��и�ывает�� ��ъе�та�и Pow��Sh���, у ��т�рых и�еют�� �ет�ды и и��ен�е�ые �в�й�тва. На�ри�ер, �в�й�тв� $psISE.Options.FontName у�равл�ет шрифта�и, и, е�ли на�рать ���анду $psISE.Options.FontName = "Lucida Console", шрифт и��енит�� в ��ла�ти реда�т�ра и в� в�е� ���ледующе� те��те в ��ла�т�х вв�да и выв�да. М�жн� та�же д��авл�ть эле�енты в �еню IS�. Мет�д $psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add("текст ", ¬{команда},"горячая_клавиша") ���в�л�ет �т��ра�ить н�вый �ун�т �еню ��д на�вание� Дополнительные компо- ненты (Add�o�s�, и �аждый вы��в эт��� �еню д��авл�ет н�вый эле�ент � ��и��у
732 Глава 16. Использование PowerShell д���лнительных �����нент�в. Текст — эт� и�� �ун�та, �т��ражае��е в �еню, команда — эт� ���андлет Pow��Sh��� или фун�ци�, вы�ывае�а� �ун�т�� �еню, а горячая_клавиша — эт� не����ательна� �тр��а, на�начающа� �лавишную ���� �инацию дл� �ун�та �еню. На�ри�ер: $psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add("_ Processes", ¬{get-process}, "Alt+P") (В ар�у�енте text �на� ��дчер�ивани� (_ � �рив�дит � т��у, чт� �ледующий �и�в�л P �удет ��дчер�нут, чт��ы дать ��ль��вателю в����жн��ть �делать ���� �инацию Alt+P ���твет�твующей ��р�чей �лавишей.� М�жн� ���е�тить �ред��читае�ые ва�и на�тр�й�и ди��ле� и �еню в �ценарий �р�фил�, чт��ы �ни в�ту�али в дей�твие �ри �ажд�� �а�у��е IS�. Инф�р�ацию � �ценари�х �р�фил� ��жн� найти в �лаве 14, в ра�деле «Пр�фили Pow��Sh���». ▼▼ Если вы используете только что рассмотренный метод AddOnsMenu, результат вызова метода нужно присвоить переменной, иначе метод просто выведет в окно вывода ненужную информа- цию. Наберите команду, имеющую следующий вид: $v = $psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add(аргументы) Дл� ��лучени� д���лнительн�й инф�р�ации � на�тр�й�ах, ��т�рые ��жн� �делать � ����щью и��енени� IS����ъе�т�в, щел�ните на �ун�те �еню Справка (H��p�Справка Windows PowerShell (W��dows Pow��Sh��� H��p�; �т�р�йте ра�� дел «С�рав�а �� инте�рир�ванн�й �реде ��ри�т�в W��dows Pow��Sh��� (IS��» («I���g����d S���p���g ��v��o�m��� (IS�� H��p» и найдите та� ��дра�дел «О�ъе�т� на� ��дель ��ри�т�в �реды в W��dows Pow��Sh��� IS�» («Th� W��dows Pow��Sh��� IS� S���p���g Obj��� Mod��»�. Создание и редактирование сценариев Дл� ���дани� н�в��� �ценари� нужн� щел�нуть на �ун�те Файл (F����Создать (N�w� и начинайте на�ирать те��т в �т�рывшей�� ��ла�ти реда�тир�вани� «Без- Имени» («U������d»�. Св�ю ра��ту ��жн� �удет ��хранить в лю��е вре��, и�� ��ль�у� ��ычные �ун�ты �еню Файл (F����Сохранить как (S�v� As� или Файл (F����Сохранить (S�v��. Дл� ��льшин�тва �ценариев нужн� ��хран�ть файл �це� нари� � ра�ширение� .ps1. Дл� файл�в ��дулей, ��держащих на�и�анные ва�и ��� �андлеты, нужн�, �а� уже ранее ра���атривал��ь, и���ль��вать ра�ширение .psm1. Дл� у�р�щени� �а�у��а �ценариев и� ���андн�й �тр��и Pow��Sh��� ��хран�йте �в�и �ценарии в �а��е, ��т�ра� нах�дит�� в �ути ��и��а W��dows. ➔ Ин�тру�ции �� у�тан�в�е �а��и �ценариев в �уть ��и��а даны в �лаве 1, в ра�� деле «Д��авление у�а�аний на �ценарии в �ере�енную PA T H ». Редактирование О�н� реда�тир�вани� вы�л�дит д�в�льн� �р��т� �� �равнению � ��лн��а�шта�� ны� ��н�� та�их �р��ра��, �а� M���oso�� V�su�� S�ud�o, н� �н� в�е же лучше, че� т�, ��т�р�е �редла�ает Бл��н�т. На ри�. 16.1 ���а�ан �ценарий (��ри�т� в верхней
Интегрированная среда сценариев PowerShell 733 ��ла�ти реда�т�ра. Ключевые �л�ва Pow��Sh��� и и�ена �ере�енных выделены цвет�� и �тличают�� �т в�е�� ��тальн���. От�р�йте �еню Правка (�d��� и ��ратите вни�ание на наличие в не� �ун�т�в Найти следующее в скрипте (F��d N�x�� и Найти предыдущее в скрипте (F��d P��v�ous� (�лавиши вы��ва F3 и Shift+F3 ���твет�твенн��, �а�у��ающие ��и�� в�еред и на� �ад �т т��� �е�та, �де нах�дит�� �ур��р. В диал���в�� ��не Найти (F��d� и�еют�� флаж�и, ���в�л�ющие учитывать ре�и�тр, и��ать те��т �а� �л�в� цели��� или и���ль��вать �и�в�лы��а�е�тители ре�ул�рн��� выражени� дл� ��и��а ���твет� �твующе�� и� те��та. ▼) Одним из существенных преимуществ ISE является ее функция автозавершения. Как и в окне командной строки PowerShell, если вы начнете набирать командлет, функцию или имя перемен- ной, имя файла или путь реестра, можно нажать клавишу Tab, и ISE попытается завершить на- бор имени за вас. Если будет выбрано неверное имя, нужно продолжить нажатие клавиши Tab для циклического перебора всех имен, начинающихся с символов, набранных перед нажатием клавиши. Эта функция работает в обеих областях, и ввода, и редактирования. Например, если набрать get-co, а затем нажать клавишу Tab, ISE расширит набранный текст до get-command. Еще одно нажатие Tab даст вам Get-ComputerRestorePoint и т. д. Запуск сценариев в ISE В нижней ��ла�ти �ри�лашени� на вв�д ���анды Pow��Sh��� в лю��й ���ент ��жн� на�рать ���анду Pow��Sh���. Выв�д эт�й ���анды ���вит�� в �редней ��� ла�ти выв�да. Эт� ниче� не �тличает�� �т �а�у��а ���анд и �ценариев в ��ычн�� ��не Pow��Sh���. На�т��ща� эффе�тивн��ть IS� �а�лючает�� в �ред��тавлении в����жн��ти �тлад�и �ценариев и и� ��ша��в��� вы��лнени�. Е�ли е�ть �ценарий, ра��тающий не та�, �а� �т не�� �жидал��ь, е�� ��жн� �а�у�тить в IS� и ��на�людать �а те�, чт� �н делает на �ажд�� ша�е, чт��ы ��н�ть, �де �н делает чт��ни�удь не та�. Дл� ��эта�н��� вы��лнени� �ценари� нужн� ���е�тить �ур��р на �ервую �тр��у и нажать �лавишу F9 (или щел�нуть на �ун�те �еню Отладка (D�bug� и вы�рать �ун�т Переключить точку останова (Togg�� ����kpo�����. П� у��лчанию �тр��а �ценари� �удет выделена �ра�ны� цвет��. Эт� выделение ���а�ывает, чт� Pow��Sh���, ���да д�йдет д� данн��� эта�а в �ценарии, ��тан�вит�� и �удет ждать вашей реа�ции дл� �р�д�лжени�. Чт��ы ���р���вать эт� на �ра�ти�е, �т�р�йте уче�ный �ценарий script1602.ps1, ��т�рый ��жн� �а�ру�ить � ве���айта www.helpwin7. com/scripting, или на�ерите е�� вручную: # файл примера script1602.ps1 "Сценарий начинается здесь" $v=1 for($i=0;$i-le5;$i++){ $v*=2 # удвоение значения v "Вциклеi=$i,v=$v" } Зате� наж�ите F5, чт��ы �а�у�тить ��ри�т. Ре�ультат �удет выведен на �редней �анели, �а� ���а�ан� на ри�. 16.2 .
734 Глава 16. Использование PowerShell Рис. 16.2 . Контрольные точки позволяют остановить сценарий на любом выбранном операторе Установка контрольных точек и пошаговое выполнение Дл� у�тан�в�и в �ценарии ��нтр�льн�й т�ч�и ���тавьте �ур��р на т� �е�т� в �це� нарии, ��т�р�е нужн� увидеть в �р�це��е вы��лнени�. Наж�ите F9 или щел�ните на �ун�те �еню Отладка (D�bug� и вы�ерите �ун�т Переключить точку останова (Togg�� ����kpo����. Стр��а, �а� ���а�ан� на ри�. 16.2, �удет выделена �ра�ны� цвет��. (Е�ли в ���еченн�й ва�и �тр��е нет и���лн�е�ых ��ерат�р�в, ��нтр�ль� на� т�ч�а ���вит�� на �ледующе� дей�твующе� ��ерат�ре Pow��Sh��� ниже эт�й т�ч�и в файле.� Те�ерь �ри �а�у��е �ценари� в IS� Pow��Sh��� ��тан�вит�� перед вы��лнение� ���еченн��� ��ерат�ра. М�жете и��ытать эт�т �ехани�� на уче�н�� �ценарии, ра�� ���тренн�� в �редыдуще� ра�деле. П��тавьте �ур��р на �ервую �тр��у �ценари� и наж�ите F9. Зате� наж�ите F5, чт��ы �а�у�тить �ценарий. Pow��Sh��� �а�у�тит �ценарий и выделит �т�еченную �тр��у желты� цвет��. Эт� ��начает, чт� данный ��ерат�р �удет вы��лнен �ледующи�. Наж�ите F11 дл� вы��лнени� �ерв��� ��ерат�ра и ��ратите вни�ание, чт� ���ле �а�у��а те��т Сце- нарий начинается здесь ���вил�� в ��ла�ти выв�да, н� ��льше ниче�� не ���вил��ь. Те�ерь Pow��Sh��� нах�дит�� в режи�е �жидани� на вт�р�� ��ерат�ре. М�жн� ��ша��в� вы��лн�ть �ценарий, ��ль�у��ь �ледующи�и �лавиша�и: Следует �а�етить, чт� даже е�ли �удет нажата �лавиша, ��тенциальн� �а�у��а� юща� �н�же�тв� ��ерат�р�в (F10, Shift+F11 или F5�, Pow��Sh��� ��тан�вит вы��л� нение �ценари�, е�ли ей ���адет�� ��ерат�р, и�еющий �ет�у ��нтр�льн�й т�ч�и. В файле ��жн� у�тан�вить лю��е ��личе�тв� ��нтр�льных т�че�. Дл� не��ль� ших �ценариев д��тат�чн� у�тан�вить т�ль�� �дну т�ч�у в начале и вы��лн�ть
Интегрированная среда сценариев PowerShell 735 ве�ь �ценарий ��ша��в�, и���ль�у� �лавишу F11. Дл� �ценариев ��льше�� ра��ера �ача�тую лучше в�е�� ���тавить ��нтр�льные т�ч�и т�ль�� в �р��ле�ных �е�тах, ���ле ци�л�в и т. д ., �����ль�у ��ша��в�е вы��лнение ��жет �ыть �лиш��� дли� тельны�. Дл� вы��лнени� �ценари� д� �ледующей ��нтр�льн�й т�ч�и �ледует нажать �лавишу F5. Клавиша Действие F10 За�у��ает т�ль�� �ледующий ��ерат�р. Е�ли ��ерат�р �вл�ет�� вы��в�� фун�ции Pow��Sh���, ��ределенн�й ��ль��вателе�, Pow��Sh��� �а�у��ает фун�цию и ��льше не ��танавливает��, ���а не вернет�� � те�уще�у �е�ту в �ценарии. Эт� на�ывает�� «Пр��у�� �л��а» F11 За�у�� т�ль�� �ледующе�� ��ерат�ра. Е�ли ��ерат�р �вл�ет�� вы��в�� фун�ции, Pow��Sh��� �ерех�дит на �ервый ��ерат�р в фун�ции и та� ��та� навливает��. Эт� на�ывает�� «Вх�д в �л��» Shift+F11 Е�ли �тлад�а ведет�� внутри фун�ции, не�рерывн�е вы��лнение д� тех ��р, ���а фун�ци� не вернет у�равление в т� �е�т� �ценари�, �т�уда �на �ыла вы�вана, а �ате� ��тан�в�а. Эт� на�ывает�� «Вых�д и� �л��а» F5 Вы��лнение д� ��нца �ценари�. Эт� на�ывает�� «Вы��лнение и �р�д�л� жение» Вы��лнение �ценари� в �тладчи�е ��жн� ��тан�вить в лю��� �е�те, нажав ����инацию �лавиш Shift+F5. Pow��Sh��� �ре�ращает вы��лнение �ценари� на лю��� эта�е вы��лнени�, �де е�� �а�тала ���анда на ��тан�в�у. Интерактивное исследование и изменение значений переменных К��да Pow��Sh��� ��танавливает вы��лнение �ценари�, ли�� в режи�е е�� ��� ша��в��� вы��лнени�, ли�� �� д��тижении ��нтр�льн�й т�ч�и, вы ��жете вв�� дить ���анды в нижней ��ла�ти, чт��ы и��лед�вать или и��енить �начени� �ере� �енных. П��р��уйте в����ль��вать�� эти� на �ри�ере уче�н��� �ценари�. Дл� �р�� х�да �� �ценарию ��жн� не���ль�� ра� нажать �лавишу F11. При �ажд�� вы��л� нении ��ерат�ра $v *= 2 на�ерите в нижней ��ла�ти ���анду $v и наж�ите Ввод. Pow��Sh��� ���ажет те�ущее �начение �ере�енн�й $v. При ра��те � ��лее ��ъе�ны�и �ценари��и, ����енн� т�ль�� чт� ���данны�и, ��ша��в�е вы��лнение в�ех ��ерат�р�в и и��равление в�ех �ши��� ��жет �ан�ть �лиш��� �н��� вре�ени. О�наружение �ши��и, ��тан�в�а ра��ты �ценари�, и�� �равление �ши��и, ��ша��вый �р���н д� ��наружени� �ледующей �ши��и, ��та� н�в�а и �н�ва �а�у�� ���ут �тать �чень ут��ительны� �ан�тие�. П��ле т��� �а� ��ерат�р �ценари� д��у�тил �ши��у, �, �� в����жн��ти, вручную на�ираю ���анду дл� вычи�лени� �равильн��� ре�ультата, а �ате� �р�д�лжаю вы��лнение �ценари�. При эт�� � �р��т� ���ечаю, чт� ���же нужн� �удет вернуть�� на�ад и и��равить �ши��у. На�ри�ер, е�ли �де�ни�удь в �ередине ��льш��� �ценари� д��ущена ��е� чат�а в ���анде create-object:
736 Глава 16. Использование PowerShell $fso = create-object -comobject Scriptingg.FileSystemObject ��жет �ыть �удет �ы�трее �р��т� на�рать ���анду в ��ла�ти вв�да (�е� лишней �у�вы g в �л�ве Scripting�, чт� да�т �ере�енн�й $fso �начение �равильн��� ��ъ� е�та и ���в�лит �ценарию �р�д�лжить ра��ту, че� ��танавливать и �ере�а�у��ать �ценарий � �а���� начала. Условные контрольные точки Ин��да �р��ле�а в��ни�ает лишь вре�� �т вре�ени в �н����ратн� вы��лн�е��� �л��е ��да. Эт� ��жет, � �ри�еру, �р�и��йти внутри ци�ла или фун�ции. Е�ли вы у�тан�вили в эт�� ��де ��нтр�льную т�ч�у, т� дл� д��тижени� т��� �е�та, �де в ��нце ��нц�в �р��вит�� �ши��а, �ридет�� не�дн��ратн� нажи�ать �лавишу F5, в����жн�, не �дну ты��чу ра�. Эт� на� не ��д�йдет! В та��� �лучае нужна т�ч�а ��тан�в�и �ценари� и�енн� в т�т �а�ый, нужный на� ���ент. Та�а� т�ч�а на�ы� вает�� условной контрольной точкой. В IS� нет та���� в�тр�енн��� �ехани��а, н� е�� ��жн� ���дать и��у��твенны� ��ра���. Нужн� �р��т� д��авить ��ерат�р if, ��т�рый в�лючит ��нтр�льную т�ч�у т�ль�� в нужный ���ент, и ���тавить ��н� тр�льную т�ч�у внутри �л��а ��да эт��� ��ерат�ра. Пред��л�жи�, � �ри�еру, чт� и�еет�� не�ий ци�л for, �а�у��ае�ый 500 ра�, и ин��да в эт�� ци�ле чт��т� идет не та� �а� нужн�: for($i=0;$i<500;$i++){ здесь находятся операторы цикла ... } Чт��ы ��ределить т� �е�т�, в ��т�р�� �ценарий ���адает в аварийную �итуа� цию, � д��авлю ��ерат�р, ��т�рый выв�дит �начение �ере�енн�й $i внутри ци�ла: for($i=0;$i<500;$i++){ "Итерация цикла $i" здесь находятся операторы цикла ... } П��леднее выведенн�е �еред ���е� �начение ����начит �е�т�, �де �р�ет�� �р�� �ле�а. Пред��л�жи�, чт� ���леднее выведенн�е �начение �ере�енн�й $i �ыл� 47. Те�ерь � ���у д��авить ��ерат�р if дл� �р�вер�и: for($i=0;$i<500;$i++){ "Итерация цикла $i" if($i-eq47){ " здесь находится контрольная точка" } здесь находятся операторы цикла ... } Е�ли � ���тавлю ��нтр�льную т�ч�у в �тр��е "здесь находится контрольная точка" и �а�ущу �ценарий еще ра�, �н �удет ��тан�влен, ���да �начение �ере�ен� н�й $i �удет равн� 47, и � ����у ��ша��в� �а�у�тить на вы��лнение ��тавшие�� ��ерат�ры ци�ла, чт��ы диа�н��тир�вать �р��ле�у.
Дополнительные источники информации 737 Удаленное и фоновое выполнение PowerShell Сценарии Pow��Sh��� ��жн� �а�у��ать на удаленн�� ����ьютере (на дру�их ���� �ьютерах вашей �ети�, �ри у�л�вии, чт� у ва� е�ть тре�уе�ые ра�решени� �и�те�ы �е���а�н��ти. Они ���ут �тать вели��ле�ны� �ред�тв�� у�равлени� �етевы�и ����ьютера�и. Вы ��жете, � �ри�еру, на�и�ать �ценарий, �ере�ирающий ��и��� ра��чих �танций W��dows или �ервер�в и �а�у��ающий у�равл�ющий �ценарий на �ажд�� и� них �� �череди. Дл� ��др��н��тей в данн�й �ни�е нет �е�та, н� ��� �твет�твующую инф�р�ацию ��жн� найти в те�ах about_remote и about_remote_faq ��рав�чни�а �� Pow��Sh���. Удаленный �а�у�� �ценариев в����жен, т�ль�� е�ли вы �вл�ете�ь ад�ини�тра� т�р�� д��енн�й �ети или е�ли вы �уще�твенн� �ни�ите у�тан�в�и �е���а�н��ти W��dows в �ети, не �тн���щей�� � д��енн�й (личн� � эт��� делать не ��ветую�, �а� ��и�ан� в файле ��рав�и about_remote_faq. М�жн� та�же �а�у��ать �ценарии на �в�е� ����твенн�� ����ьютере или на дру�их ����ьютерах не�ави�и�� �т ��на ���андн�й �тр��и, т� е�ть в виде ф�н�вых или �а�етных �аданий. Они делают �в�е дел�, не �еша� вашей ра��те, и вы ��же� те и���ль��вать ���анды Pow��Sh��� и �ценарии дл� и�влечени� их ре�ультат�в ���ле ���нчани� ра��ты. Инф�р�ацию �� эт�й техн�л��ии ��жн� найти в те�ах about_jobs и about_remote_jobs ��рав�и �� Pow��Sh���. Дополнительные источники информации В трех �лавах, ���в�щенных Pow��Sh���, вы ��лучили т�ль�� начальн�е �ред� �тавление � в����жн��т�х эт�й �реды. Я ���ытал�� и���ль��вать д��ту�ные �не �траницы, чт��ы ��ъ��нить внутреннюю �ухню Pow��Sh���, ���а�ать, �а� в�е ра��тает, а не дл� т���, чт��ы ���а�ать ������ы решени� ��лн��� �еречн� �адач у�равлени�, ��т��у чт� �уще�твует ��р��н�е ��личе�тв� ве���айт�в, ��держащих ��д��ную инф�р�ацию. Я ��ла�аю, чт� наличие начальных �наний � �ринци�ах ра��ты Pow��Sh��� да�т ва� х�р�шие ���иции дл� ��ни�ани� т���, чт� делает�� в� в�ех ти��вых �ценари�х, и �а� �ни ра��тают, ���ле че�� вы ���жете ���давать �в�и ����твенные �ценарии. Я �читаю ��ле�ны�и �ледующие и�т�чни�и: y y Меню Справка (H��p� �р��ра��ы powershell_ise, чере� ��т�р�е ��жн� выйти на в�е файлы ��рав�и Pow��Sh���, и�еющие ф�р�ат, уд��ный дл� ��и��а, �ере� х�д�в и чтени�. y y Ра�дел Scripting Center на ве���айте technet.microsoft.com, ��держащий ��льш�й ��ъе� ти��вых �ценариев и д��у�ентации. Очень ���аты� и�т�чни��� инф�р� �ации ��жет ���лужить ��л�н�а «H�y, S���p���g Guy». Та� же ��жн� найти интера�тивные ф�ру�ы уча�тни��в �р��ра��ы T��hN��, �де ��жн� �адавать в��р��ы дру�и� ��ль��вател�� Pow��Sh���. Вы та�же ��жете в��лне �в���дн� �тать уча�тни��� �р��ра��ы T��hN��. П��ле у�в�ени� ��н�в ��ы�а �р��ра��ир�вани� Pow��Sh��� ра���р на�т��� щих �ценариев, ���а�анных на этих ве���айтах, �танет дл� ва�, наверн�е, ��лее ценны� �ред�тв�� ��учени�, че� в�е ��тальные и�т�чни�и.
Приложения IV
Справочник по VBScript Свойства языка VBScript 5.6 Эт� �рил�жение �вл�ет�� �рат�и� ��рав�чни��� �� �инта��и�у V�S���p�. В не�� в�лючены т�ль�� те �в�й�тва V�S���p�, ��т�рые и���ль�уют�� �ри ра��те � W��dows S���p� Hos� (WSH�. Дл� ��лучени� ��др��н�й д��у�ентации �� �в�й� �тва� ��ы�а V�S���p� � ре���ендую ва� �а�ру�ить �а��е ���леднее ��рав�чн�е ру��в�д�тв� �� M���oso�� V�S���p� � ве���айта microsoft.com/downloads. На эт�� �айте нужн� �р�ве�ти ��и�� �� �лючев�й фра�е «W��dows S���p� Do�um������o�» и �а�ру�ить �а�ую н�вую и� �еречи�ленных вер�ий. На вре�� на�и�ани� данн�й �ни�и эт� �ыла вер�и� 5.6 . Уд��нее в�е�� �удет ��хранить эт�т файл на �в�е� Ра��че� �т�ле. ▼▼ Если после загрузки файла script56.chm Windows не будет показывать его содержимое, щелк- ните правой кнопкой на значке этого файла, выберите пункт Свойства (Properties), щелкните на кнопке Разблокировать (Unblock), а затем на кнопке OK. После этого с него будет снят статус потенциально опасного загруженного файла. Е�ли ва� �на��� ��ы� V�su�� ��s�� (V�� или V�su�� ��s�� �o� App������o�s (V�A�, т� ��жн� �удет �а�етить, чт� не��т�рые �в�й�тва V� и V�A в V�S���p� не �ред�� �тавл�ют��. С�и��� ��ецифиче��их �тличий этих вер�ий ���а�ан в та�л. A .6 и ��лее ��др��н� ра����трен в �а�руженн�� ��рав�чни�е M���oso�� в ��дра�� деле «F���u�� I��o�m���o� (V�S���p��» ра�дел�в «V�S���p�», «V�S���p� L��gu�g� R��������». Синтаксис В данн�� ��рав�чни�е и���ль�уют�� �ледующие ���лашени�: y y Те ча�ти �р��ра��ных ��ерат�р�в, ��т�рые д�лжны �ыть на�раны �у�вальн�, ���а�аны жирны� шрифт��. y y Эле�енты, �ред�тавл�ющие те ча�ти, ��т�рые д�лжны �ыть �а�енены вы�ран� ны�и ва�и и�ена�и �ере�енных или выражени��и, ���а�аны �ур�ив��. А
Типы данных и переменные 741 y y Не����ательные ча�ти ���ещены в �вадратные �����и ([ ]�. y y П��ле эле�ент�в, ��т�рые ���ут �ыть ��вт�рены �р�и�в�льн�е ��личе�тв� ра�, �тавит�� тр�ет�чие (...� . y y Эле�енты, и� ��т�рых нужн� вы�рать �дин нужный ва� вариант, �еречи�лены в фи�урных �����ах ({ }� и ра�делены �и�в�ла�и верти�альн�й черты (|�, �а� в �ри�ере {this | that}. Общая структура программы на VBScript Пр��ра��а на ��ы�е V�S���p� �вл�ет�� ��ычны� те��т�вы� файл��, дл� реда�� тир�вани� ��т�р��� ��жн� и���ль��вать Бл��н�т. Дл� улучшени� читае���ти д��у��ает�� и���ль��вание �р��ельных �и�в�л�в (�р��ел�в, �на��в та�ул�ции и �у�тых �тр���. Ре�и�тр �и�в�л�в не и�рает ни�а��й р�ли. Длина �тр�� и�х�дн��� ��да ниче� не ��раничена. Н� дл� улучшени� читае��� �ти длинные �р��ра��ные �тр��и ��жн� ра��ивать на две и ��лее �тр��и �еньшей длины. Ра��итые �тр��и �ледует �авершать �и�в�л�� ��дчер�ивани� (_� и �р�� д�лжать их в �ледующей �тр��е (или �тр��ах�. На�ри�ер: wscript.echo "Как по вашему, " & _ " это длинная строка ввода?" О�н�вн�е тел� �р��ра��ы ���т�ит и� в�ех введенных �тр��, не вх�д�щих в �ру�� �ы Class, Sub или Function. Ка� �равил�, �начала д�лжн� �ыть введен� ��ределение �л��альных �ере�енных, �ате� �ледует ��н�вна� �р��ра��а �ценари�, а �а ней �ледуют ��ределени� �ла���в, ��д�р��ра�� и фун�ций. V�S���p� и�н�рирует в�е, чт� �т�ит ���ле �динарн�й �авыч�и ('�, �чита� эт� ����ентарие�. Типы данных и переменные И�ена �ере�енных V�S���p� ���ут �ыть длин�й д� 255 �и�в�л�в, д�лжны начи� нать�� � �у�вы, не д�лжны ��держать �р��ел�в, т�че� или �на��в �ун�туации и не д�лжны ��в�адать � �аре�ервир�ванны�и �лючевы�и �л�ва�и ��ы�а, та�и�и �а� public или while. В V�S���p� в�е �ере�енные �тн���т�� � ти�у Variant. Эт�т ти� д��у��ает хра� нение целых чи�ел, чи�ел � �лавающей т�ч��й, �начений даты, �начений вре�ени, �начений даты�вре�ени, �тр��, �улевых �начений и ��ыл�� на ��ъе�ты. К��да �ере�енные ти�а Variant ��ъедин�ют�� в выражени�, V�S���p� �ытает�� интер� �ретир�вать их та�и� ��ра���, чт��ы выражение и�ел� ��ы�л. Чт��ы �а�тавить V�S���p� и���ль��вать в выражении ��н�ретн�е �ре��ра��вание или интер�рета� цию, нужн� в����ль��вать�� фун�ци��и �ре��ра��вани� CStr(), CInt(), CDbl() ит.д. В та�л. A.1 ���а�аны ти�ы данных, �тн���щие�� � ти�у Variant, и �ри�еры ��н�тантных выражений, ��т�рые ���ут и���ль��вать�� в �р��ра��ах.
742 Приложение А. Справочник по VBScript Таблица А.1 . VBScript Variant-типы и константы Variant-типы Пример константы Комментарий Integer, Short 123 &H12AB (h�x� &O177777 (o����� Диа�а��н: �т –3276� д� 32767 Integer, Long 1234567 &H47DFE123 &O123456712 Диа�а��н: �т –21474�364� д� 21474�3647 Floating-point, single precision 3.1416 Диа�а��н: ±3.4 × 103�, � т�чн��тью �е�ь �на��в Floating- point,double precision 3.14159265359 Диа�а��н: ±1.� × 1030� , � т�чн��тью 15 �на��в Currency 100.47 Диа�а��н: ±922 337 203 6�5 477.5�0�. Денежные �начени� ��хран�ют т�ль�� четыре де��тичных �на�а ���ле т�ч�и String "abc" Си�в�л �авыч�и ��жет �ыть в�тавлен в �тр��у �уте� е�� ду�лир�вани� (на�ри�ер, "a " " quote" �ред�тавл�ет �тр���в�е �начение a" quote� Date #03/02/2002# #March 2, 2002# Крат�а� ф�р�а даты, ���а�ывае�а� в ���твет� �твии � л��альны�и на�тр�й�а�и W��dows Time #14:30:15# #2:30:15 PM# — Date-Time #03/02/2002 14:30:15# #March 2, 2002 2:30:15 PM # О�ределенный �ре��ра��ванный ф�р�ат вы� в�да ��жн� �адать � ����щью FormatDateTime. Значени� даты�вре�ени ��хран�ют�� �а� чи�ла � �лавающей т�ч��й Boolean True False — Object Nothing Nothing — эт� �ред��ределенна� ��ыл�а на ну� лев�й ��ъе�т Empty Empty Неинициали�ир�ванна� �ере�енна� Null Null Пере�енна�, ��ределенна� в �аче�тве нед��у� �ти��й. И���ль��вание �начени� Null и�еет ра�ные ре�ультаты. В �улевых выражени�х ра�� ��атривает�� �а� False. В чи�л�вых выражени� �х ре�ультат в�е�да Null. В ��льшин�тве дру�их �лучаев �енерирует�� �ши��а Примечания к значениям даты и времени Варианты ти��в даты, вре�ени и даты�вре�ени (����инаций даты и вре�ени �ут��� ��дируют�� �а� чи�ла � �лавающей т�ч��й. Даты хран�т�� в виде ��личе�тва дней, �р�шедших � 1 �нвар� 1900 ��да. Ра�решены и данные, �редше�твующие началу
Выражения и операторы 743 данн�й э��хи, ��т�рые ��хран�ют�� �а� �трицательные чи�ла. Значени� вре�ени хран�т�� �а� др��ные ча�ти дн�, �де �дна �е�унда равна 0,0000115741. На�ри�ер, �ред�тавление� #March 2, 2002 2:30:15 PM# �вл�ет�� чи�л� 37317.6043402778 . О� эт�� важн� �нать, е�ли нужн� и���ль��вать �начени� даты, вре�ени или да� ты�вре�ени в �ате�атиче��их ��ераци�х. Нужн� �ыть ����енн� вни�ательны� �ри интер�ретации �у��ы и ра�ницы �начений даты и вре�ени � ����щью чи�л�вых или дру�их �начений даты�вре�ени. Дл� вычи�лений, �в��анных �� �начени��и даты и вре�ени, лучше в����ль��вать�� фун�ци��и DateAdd и DateDiff. Область видимости переменных П� у��лчанию, ���да �ере�енна� ��ъ�влена или ���дана в ��н�вн�� теле файла �ценари�, �на и�еет �т�рытую (�л��альную� ��ла�ть види���ти и д��ту�на в ��� н�вн�� �ценарии и в� в�ех �р�цедурах (��д�р��ра��ах и фун�ци�х�, вы�ывае�ых в �ценарии. Пере�енные, ��т�рые ��ределены внутри �р�цедур, �� у��лчанию �вл�ют�� �а�рыты�и (и�еют л��альную ��ла�ть види���ти� и д��ту�ны т�ль�� внутри т�й �р�цедуры, в ��т�р�й �ни �ыли ��ределены. К��да ��ределивша� их �р�цедура �авершает ра��ту, �ере�енна� уничт�жает��. Дл� �т�ены ��ведени� �� у��лчанию �лужат �лючевые �л�ва Public и Private. В ��н�вн�й �р��ра��е �ценари� �ере�енные, ��ъ�вленные � ����щью �лючев��� �л�ва Private, не �удут видны вы�ывае�ы� �р�цедура�. В �р�цедуре �ере�енна�, ��ъ�вленна� � ����щью �лючев��� �л�ва Public, �удет видна лю�ы� дру�и� �р�� цедура�, вы�ванны� и� данн�й �р�цедуры. (Н� �ере�енна� �удет уничт�жена, ���да ��ределивша� ее �р�цедура �а��нчит �в�ю ра��ту.� Значение �ере�енн�й та�же ��жет �ыть �ри�в�ен� �е� �редварительн��� ее ��ъ�влени� � ����щью �лючевых �л�в Dim, Private или Public. В ��н�вн�й �р�� �ра��е �ценари� в ре�ультате эт��� ���вл�ет�� �т�рыта� �ере�енна�. Е�ли �р�� цедура ��ылает�� на и�� �ере�енн�й, ��т�ра� �редварительн� �ыла ��ределена � ����щью �лючев��� �л�ва Public, и���ль�ует�� �т�рыта� ���и�. В �р�тивн�� �лучае ���дает�� �а�рыта� �ере�енна�. Пр�цедуры ���ут ��редел�ть �а�рытые �ере�енные � та�и�и же и�ена�и, ��т�рые и���ль�уют�� в лю��� дру��� �е�те дл� �т�рытых �ере�енных. В та��� �лучае �р�цедура ���дает л��альную, �а�рытую �ере�енную и не ��жет видеть �т�рытую вер�ию. Выражения и операторы При вычи�лении выражений и���ль�ует�� �ледующий ��р�д�� �таршин�тва: 1. П�двыражени� в �ру�лых �����ах. 2. Ариф�етиче��ие ��ерат�ры. 3. О�ерат�ры �равнени�. 4. Л��иче��ие ��ерат�ры.
744 Приложение А. Справочник по VBScript ▼) VBScript всегда вычисляет выражение целиком, даже если в этом нет необходимости. Поэтому следующий вид проверки не защитит программу от ошибки значения аргумента: a= -3 ifa>0andsqr(a)>2then... Арифметические операторы Следующие ариф�етиче��ие ��ерат�ры ра���л�жены в ��р�д�е у�ывани� их �таршин�тва. Оператор Назначение ^ В��ведение в �те�ень - Унарн�е �трицание * У�н�жение / Деление \ Цел�чи�ленн�е деление mod М�дуль (цел�чи�ленный ��тат��� + Сл�жение - Вычитание & О�ъединение �тр�� Операторы сравнения О�ерат�ры �равнени� и�еют �дина��в�е �таршин�тв� и вычи�л�ют�� �лева на�рав�. Оператор Назначение = Равн� <> Не равн� < Меньше че� > Б�льше че� <= Меньше че� или равн� >= Б�льше че� или равн� is Э�вивалентн��ть ��ъе�т�в Логические операторы Л��иче��ие ��ерат�ры вы��лн�ют л��иче��ие ��ерации над �улевы�и �начени�� �и и ��ра�р�дные ��ерации над чи�л�вы�и �начени��и. Следующие л��иче��ие ��ерат�ры ра���л�жены в ��р�д�е у�ывани� их �таршин�тва.
Операторы программы 745 Оператор Назначение not Отрицание and К�нъюн�ци� or Ди�ъюн�ци� xor И��лючение (�тличие� eqv Э�вивалентн��ть (�дина��в��ть� imp И��ли�аци� (�начени� �дина��вы или вт�р�е �начение равн� true� Операторы программы О�ща� �тру�тура �р��ра��ы V�S���p� и�еет �ледующий вид: [объявление глобальных переменных] Операторы основной процедуры VBScript [подпрограммы и функции] Чт��ы улучшить читае���ть, �р��ра��ы ���ут �ыть ра��иты на не���ль�� �тр��. К��да �тр��а �а�анчивает�� �и�в�л�� ��дчер�ивани� (_�, �ледующа� �тр��а �читает�� ча�тью т��� же �а���� ��ерат�ра. О�ерат�ры �р��ра��ы V�S���p� �еречи�лены в та�л. А .2. П�др��н��ти �ажд��� ��ерат�ра ��жн� найти в д��у�ентации M���oso�� V�S���p�, ��и�ание ��т�р�й дан� в начале данн��� �рил�жени�. ▼) В табл. А.2 под условием в первую очередь понимается выражение или переменная с булевым значением (True или False). Но VBScript также допускает строковое или числовое значение там, где ожидается булево значение. Для числовых значений нуль рассматривается как False, а лю- бое ненулевое значение рассматривается как True. Допускаются также строковые значения "True" и "False", а также строковые значения, интерпретируемые как числа. Таблица А.2 . Операторы VBScript [Call] имя [(перечень_аргументов)] Class имя операторы... End Class [{public|private}] Const имя_ = выражение [, ...] Dim имя[([индексы])][, ...] Do [{While | Until} условие] [операторы...] [Exit Do] [операторы...] Loop или Do [операторы...] [Exit Do] [операторы...] аргументы: [{ByVal|ByRef}] имя_арг [, ...] If условие Then оператор_ [Else оператор] If условие Then операторы... [ElseIf условие Then операторы... ] [Else операторы... ] End If On Error Resume Next On Error Goto 0 Option Explicit Private имя [(индексы)][, ...] Public имя [(индексы)][, ...] Randomize [число] продолжение 
746 Приложение А. Справочник по VBScript Loop [{While | Until}_ условие] Erase имя_массива Execute строка ExecuteGlobal строка Exit Do Exit For Exit Function Exit Property Exit Sub For Each элемент in группа [операторы...] [Exit For] [операторы...] Next [элемент] For счетчик = начальное_значение to_ конечное_значение [, инкремент] [операторы...] [Exit For] [операторы...] Next [счетчик] [{Public [Default]| Private}]_ Function имя [(аргументы)] [операторы...] [имя = выражение] [Exit Function] [операторы...] End Function Redim [Preserve]_ имя(индексы)[, ...] Rem текст Select Case выражение Case выражение [, ...] операторы... [ Case выражение [, ...] операторы...] [ Case Else операторы...] End Select Set переменная = объект_выражение Set переменная = New имя_класса Set переменная = Nothing Stop [{Public [Default]| Private}]_ Sub имя [(аргументы)] [операторы...] [Exit Sub] [операторы...] End Sub While условие операторы... Wend With объект операторы... End With Функции С V�S���p� ���тавл�ют�� �ледующие в�тр�енные фун�ции. Таблица А.3 . Функции VBScript Abs(значение) Array(список_аргументов) Asc(строка) Ascb(строка) Ascw(строка) Atn(число) CBool(выражение) CByte(выражение) CCur(выражение) CDate(выражение) CDbl(выражение) Chr(значение) CInt(значение) CLng(значение) IsArray(имя_переменной) IsDate(выражение) IsEmpty(выражение) IsNull(выражение) IsNumeric(выражение) IsObject(имя_переменной) Join(массив [, разделитель]) LBound(имя_массива [, размерность]) LCase(строка) Left(строка, длина) Len(строка) LoadPicture(имя_изображения) Log(значение) LTrim(строка) Таблица А.2 (продолжение)
Функции 747 Cos(число) CreateObject(имя_сервера имя_типа [, место]) CSng(значение) CStr(значение) Date DateAdd(интервал, число, дата) DateDiff(интервал, дата1,_ дата2 [, первый_день_недели [,_ первая_неделя_года]]) DatePart(интервал, дата [,_ первый_день_недели [,_ первая_неделя_года]]) DateSerial(год, месяц, день) DateValue(дата) Day(дата) Eval(выражение) Exp(значение) Filter(строки_ввода, значение [,_ включение [, вид_сравнения]]) Fix(значение) FormatCurrency(значение [,_ цифр_после_точки [,_ включать_лидирующие_цифры [,_ использ_скобки_для_отриц_зн [,_ группировать_разряды]]]]) FormatDateTime(знач_даты[,_ формат]) FormatNumber(значение [,_ цифр_после_точки [,_ включать_лидирующие_цифры [,_ использ_скобки_для_отриц_зн [,_ группировать_разряды]]]]) FormatPercent(значение [,_ цифр_после _точки [,_ включать_лидирующие_цифры [,_ использ_скобки_для_отриц_зн [,_ группировать_разряды]]]]) GetLocale() GetObject([имя_файла][, класс]) GetRef(имя_процедуры) Hex(значение) Hour(время) InputBox(приглашение [, заголовок [,_ по_умолчанию][,_ x-позиция, y-позиция[,_ файл_справки, содержимое]) InStr([начало,] строка1, строка2 [,_ вид_сравнения]) InStrRev([начало,] строка1,_ строка2 [,вид_сравнения]) Int(значение) Mid(строка, начало [, длина]) Minute(время) Month(дата) Monthname(месяц, [сокращение]) MsgBox(приглашение [, кнопки [,_ заголовок [, файл_справки,_ содержимое]]]) Now() Oct(значение) Replace(выражение, найти,_ чем_заменить [, начало [,_ колич_замен [, вид_сравнения]]]) RGB(красный, зеленый, синий) Right(строка, длина) Rnd[(значение)] Round(значение [, кол_знаков]) RTrim(строка) ScriptEngine ScriptEngineBuildVersion ScriptEngineMajorVersion ScriptEngineMinorVersion Second(время) SetLocale(идентификатор_места) Sgn(значение) Sin(значение) Space(число) Split(строка [, разделитель [,_ количество [, вид_сравнения]]]) Sqr(значение) StrComp(строка1 [, строка2 [,_ вид_сравнения]]) String(число, символ) StrReverse(строка) Tan(значение) Time Timer TimeSerial(час, минута, секунда) TimeValue(выражение) Trim(строка) TypeName(имя_переменной) UBound(имя_массива [, размерность]) UCase(строка) VarType(имя_переменной) Weekday(дата [, первый_день]) WeekdayName(число, сокращение,_ первый_день) Year(дата)
748 Приложение А. Справочник по VBScript Интервалы, относящиеся к функциям дат Та�ие фун�ции дат, �а� DateAdd, DateDiff и DatePart, ��лучают ар�у�ент интервала, ��т�рый �вл�ет�� �дни� и� �тр���вых �начений, �еречи�ленных в та�л. А.4 . Таблица А.4 . Интервалы, используемые с функциями DateAdd, DateDiff и DatePart Значение Означает "YY YY" Г�д "q" Квартал "m" Ме��ц "y" День ��да (чи�л� �т 1 д� 365� "d" День "w" День недели "ww " Недел� ��да (чи�л� �т 1 д� 52� "h" Ча� "n" Минута "s" Се�унда Предопределенные специальные значения К�н�танты, �еречи�ленные в та�л. А .5, ��редел�ют �улевы �начени� True и False, а та�же �начени� ��ециальных ��н�тант. Таблица А.5 . Специальные константы Константа Описание Empty Значение ��ъ�вленн�й, н� неинициали�ир�ванн�й �ере�енн�й False Булев� �начение False. Чи�л�вы� э�вивалент�� �лужит 0 Nothing При�ваивание �ере�енн�й �начени� Nothing �т�лючает �ере�енную �т ��ъе�та, и, е�ли нет дру�их ��ыл��, ��ъе�т ��в���ждает�� (уничт�жает��� Null Значение Null и���ль�ует�� дл� инди�ации нед��у�ти�ых данных. Null не �вл�ет�� э�вивалент�� Empty True Булев� �начение True. Чи�л�вы� э�вивалент�� �лужит -1 (���да в�е ра�� р�ды у�тан�влены� Пр�те�тир�вать �начени� Empty и Null ��жн� � ����щью фун�ций IsEmpty() и IsNull(). П��ыт�а и���ль��вани� �начени� Null в лю�ых дру�их выражени�х �рив�дит � �ши��е. Не��т�рые дру�ие ��н�танты ��ределены дл� �начений цвета, дат, вре�ени, ��ециальных �и�в�л�в и т. д . Их ��и�ание ��жн� найти в �а�ружа� е��� ��рав�чни�е ��д �а��л�в��� «Co�s����s». Ин�тру�ции �� �а�ру��е ��жн� найти в начале данн��� �рил�жени�.
Свойства VBA, отсутствующие в VBScript 749 Свойства VBA, отсутствующие в VBScript V�S���p� �вл�ет�� уре�анн�й вер�ией V�A, ��т�ра�, в �в�ю �чередь, �вл�ет�� уре�анн�й вер�ией M���oso�� V�. Пр��ра��и�ты, �на���ые � V�A �� е�� и���ль��� ванию в �аче�тве ��ы�а �а�р���в Wo�d и �x���, д�лжны �нать � т��, чт� не��т�рые и�ве�тные и� �в�й�тва ��ы�а в V�S���p� нед��ту�ны. В та�л. А .6 ���раны �в�й�тва, и��люченные и� V�S���p� и д��авленные � эт�й вер�ии ��ы�а. Б�лее ��др��н� ра�личи� ��и�аны в �а�ружае��й д��у�ентации �� V�S���p� ��д �а��л�в�а�и VBScript, VBScript Language Reference, Feature Information (VBScript). Таблица А.6 . Различия между VBScript и Visual Basic Оператор или функция Комментарии ! Выражение объект!имя_ключа дл� д��ту�а � эле�енту ��лле�ции и�� ��ль��вать�� не ��жет. В�е�т� эт��� ��жн� и���ль��вать объект. item(имя_ключа) #Const К�н�танты вре�ени ����ил�ции не ��ддерживают��. И���ль�уйте в�е� �т� них �лючев�е �л�в� Const #If...Then, #Else У�л�вна� ����ил�ци� не ��ддерживает�� Clipboard О�ъе�т Clipboard не ��ддерживает�� Collection С�ециальные ��ъе�ты Collection не ���ут �ыть ���даны. Н�, не��т�рые �ред��ределенные ��ъе�ты в��вращают ��лле�ции CVar CVDate Не нужны. В�е �ере�енные уже �тн���т�� � ти�у Variant Date В�е �ере�енные �тн���т�� � ти�у Variant Debug.Print В�е�т� нее нужн� и���ль��вать Wscript.Echo Declare Внешние DLL нед��ту�ны DefBool ит.д. В�е �ере�енные �тн���т�� � ти�у Variant DoEvents В�е�т� нее нужн� и���ль��вать Wscript.Sleep End Не ��ддерживает��. Н� ��жн� ���е�тить ��н�вн�й ��д ваше�� �ценари� в Sub и в����ль��вать�� �лючевы� �л�в�� Exit Sub. На�ри�ер: myscript sub myscript ... exit sub ... end sub Erl Фун�ци� Erl (���а�ывающа� н��ер �тр��и, в ��т�р�й �ыла ���ледн�� �ши��а� нед��ту�на Error Нед��ту�на. В�е�т� нее нужн� и���ль��вать err.Raise продолжение 
750 Приложение А. Справочник по VBScript Оператор или функция Комментарии FV, IRR, PV ит.д. Финан��вые фун�ции не �ред��тавл�ют�� Gosub...Return Gosub и �ет�и не ��ддерживают�� GoTo Goto и �ет�и не ��ддерживают�� Integer В�е �ере�енные �тн���т�� � ти�у Variant Is (в Select Case) Ти�и�ир�вание ��ъе�т�в � ����щью Is в Select Case не ��ддерживает�� Like С��твет�твие ша�л�ну на�р��ую не ��ддерживает��. И���ль�уйте ��ъ� е�т RegExp Linkxxx DD� не ��ддерживает�� Long В�е �ере�енные �тн���т�� � ти�у Variant LSet и Rset Не ��ддерживают�� Mid, оператор О�ерат�р �ри�ваивани� mid (mid в лев�й ча�ти =� не ��ддерживает�� On...GoSub On...GoTo О�ра��т�а ���ытий и �ши��� не ��ддерживает�� Open, Read, Write, Close ит.д. О�н�вн�й файл�вый вв�д�выв�д не ��ддерживает��. В�е�т� эт��� �ле� дует и���ль��вать FileSystemObject Option Base В V�S���p� инде��аци� в�ех �а��ив�в начинает�� � нул� Option Compare Option Private Module Эти д���лнительные на�тр�й�и не�ри�ени�ы Optional Ар�у�енты не ���ут �ыть ��ределены �а� не����ательные. О���начить не��ределенные ар�у�енты ��жн� � ����щью �ередачи �начени� Null и �р�вер�и �начени� в �р�цедуре � ����щью IsNull() ParamArray Ар�у�енты ParamArray не ��ддерживают�� Resume Resume Next Перехват �ши��� не ��ддерживает�� SendKeys Не �вл�ет�� в�тр�енны� ��ерат�р��. В�е�т� эт��� �ледует и���ль��вать Wscript.Sendkeys Static Статиче��ие (неи��енные� �ере�енные не ��ддерживают�� Str И���ль�уйте CStr() StrConv Фун�ци� StrConv() не ��ддерживает��. П� в����жн��ти нужн� и���ль� ��вать UCase() или LCase() Time В�е �ере�енные �тн���т�� � ти�у Variant To (в Select Case) Диа�а��н выражений � и���ль��вание� To в Select Case не ��ддержи� вает�� TypeOf If TypeOf и Select Case TypeOf не ��ддерживают��. В�е�т� них нужн� и���ль��вать VarType() или TypeName() Val И���ль�уйте CDbl(), CInt() или, е�ли в����жн�, Eval() Таблица А.6 (продолжение)
Справочник по языку CMD и пакетных файлов К��андна� �тр��а CMD и�еет �ледующий ф�р�ат: cmd [/a | /u] [/q] [/d] [/t:bf] [/e:on|off] [/f:on|off] [/v:on|off] [[/s] [/c | /k] команда] Ключи �еречи�лены в та�л. Б.1 . Таблица Б.1 . Ключи командной строки CMD Ключ Описание /a За�тавл�ет и���ль��вать на �тандартн�� выв�де ��дир�в�у ANSI /u За�тавл�ет и���ль��вать на �тандартн�� выв�де ��дир�в�у Юни��д /q Вы�лючает �� у��лчанию ���анду echo �а�етн��� файла /d Вы�лючает вы��лнение ���анд AutoRun, ��ределенных в рее�тре /t:bf Две цифры у�танавливают дл� ��на цвета ф�на (b� (��на� и �ередне�� �лана ( f � (те��та�. На�ри�ер, �люч /t:1e ��редел�ет желтый те��т на �ине� ф�не. Значени� цвета �еречи�лены в та�л. 10.1 /e Ра�решает или �а�рещает ра�ширени� ���анд /f Ра�решает или �а�рещает авт��авершение и�ен файл�в и �атал���в /v Ра�решает или �а�рещает �тл�женн�е ра�ширение �ере�енных �реды и� эле�ент�в !имя_переменной!. Эт�т в��р�� ра���атривает�� в �лаве 11 «Па� �етные файлы дл� ��ль�ы и ра�влечени�» /x Т� же �а��е, чт� и /e:on /y Т� же �а��е, чт� и /e:off /s И��ен�ет тра�т�в�у �авыче� в ���андн�й �тр��е, �а� ���а�ан� в �лаве 11 /c Вы�ывает вы��лнение ���анды (или ���анд� в ���андн�� ��не � ���леду� ющи� �а�рытие� ��на /r Т� же �а��е, чт� и /c /k Вы�ывает вы��лнение ���анды (или ���анд� в ���андн�� ��не � ���леду� ющи� чтение� �удущих ���анд и� �тандартн��� вв�да, ���а не ��нчит�� файл или ���а не �удет ��лучена ���анда exit Б
752 Приложение Б. Справочник по языку CMD и пакетных файлов Замена аргументов пакетного файла и переменной for Выражени�, �еречи�ленные в та�лице Б.2, ра�шир�ют�� в ар�у�енты ���андн�й �тр��и и в �ере�енные ���анды for. В этих выражени�х n — эт� н��ер ар�у�ента или �у�ва, ���твет�твующа� �ере�енн�й ���анды for. Таблица Б.2 . Замена и редактирование аргумента и переменной в команде for Выражение Результат %n Ар�у�ент или �ере�енна� n %~n Удаление ��ружающих �авыче� ("� %~fn П�лн��тью у�а�анн�е �утев�е и�� %~dn Т�ль�� �у�ва ди��а %~pn Т�ль�� �уть %~nn Т�ль�� и�� файла %~xn Т�ль�� ра�ширение и�ени файла %~sn И�� файла и �уть в у��р�ченн�� ф�р�ате DOS �.3 %~an Атри�уты файла %~tn Дата и вре�� и��енени� файла %~zn Длина файла в �айтах %~$PATH:n П�лн��тью у�а�анн�е и�� �ерв��� ���твет�твующе�� файла �ри ��и��е в PATH. Е�ли не найден� ни �дн��� файла, ре�ультат�� �вл�ет�� �тр��а нуле� в�й длины. И�� файла д�лжн� в�лючать д��у�ти��е ра�ширение; �начение PATHEXT не и���ль�ует�� М�дифи�ат�ры и�ен файл�в ���ут и���ль��вать�� в ��четании дру� � дру���. На�ри�ер, "%~dpn" в��вращает ��четание �у�вы ди��а и �ути. Д���лнительные �ри�еры ��жн� найти в Центре ��рав�и и ��ддерж�и W��dows (���ле ��и��а �� �лючев��у �л�ву «�o�»�. Расширение переменных среды окружения Выражени�, �еречи�ленные в та�л. Б.3, ра�шир�ют�� в �начени� �ере�енных �реды ��ружени�. В этих выражени�х �л�в� имя ��начает и�� �ере�енн�й �реды ��ружени�. Таблица Б.3 . Замена и редактирование переменных среды окружения Выражение Результат %имя% Значение �ере�енн�й �реды ��ружени� имя %имя:~n% Пр��у�� �ервых n �у�в и в��вращение ��тальных �у�в
Предопределенные переменные среды окружения 753 Выражение Результат %имя:~n,m% Пр��у�� �ервых n �у�в и в��вращение �ледующих m �у�в %имя:~,m% Первые (�а�ые левые� m �у�в %имя:~—m% П��ледние (�а�ые �равые� m �у�в %имя:~,—m% В�е �р��е ���ледних m �у�в %имя:строка1= строка2% За�ена �ажд��� ���влени� строки1 строкой2. Строка2 ��жет �ыть �у�т�й дл� удалени� в�ех ���влений строки1. Строка1 ��жет начинать�� � �и�в�ла * , чт��ы ���твет�тв�вать лю�ы� �и�в�ла� �тр��и, ��т�ра� �а�анчивает�� строкой1 !имя! При в�люченн�� �тл�женн�� ра�ширении � ����щью /v:on или setlocal ENABLEDELAYEDEXPANSION эт� выражение �а�ен�ет�� �наче� ние� �ере�енн�й имя не���ред�твенн� �еред вы��лнение� ���анды Предопределенные переменные среды окружения В та�л. Б.4 �еречи�лены и�еющие�� �� у��лчанию �ере�енные �реды ��ружени�, ��редел�е�ые W��dows авт��атиче��и. В та�л. Б .5 �еречи�лены дина�иче��ие �ере�енные, ��т�рые авт��атиче��и �тражают те�ущие �в�й�тва �и�те�ы. П��а� �анные �начени� ти�ичны дл� W��dows 7 и анал��ичны �начени�� в W��dows V�s��. Н� дл� W��dows XP �начени�, �а�ающие�� ра��ещени� �р�фил� ��ль��вател�, �тличают��. Пере�енные �реды ��ружени� �ледует и���ль��вать дл� ���тавлени� �утей � �а��а� в ваших �а�етных файлах, чт��ы не �рих�дил��ь вы�траивать д�� �ад�и � т��, �а� �р�ани��ваны �а��и �р�фил� ��ль��вател�. Таблица Б.4 . Предопределенные переменные среды окружения Имя переменной Типичное значение ALLUSERSPROFILE C:\P�og��mD��� APPDATA C:\Us��s\us����m�\AppD���\Ro�m��g CommonProgramFiles C:\P�og��m F���s\Commo� F���s COMPUTERNAME имя_компьютера ComSpec C:\WINDOWS\sys��m32\�md.�x� HOMEDRIVE C: HOMEPATH \Us��s\имя_пользователя LOCALAPPDATA* C:\Us��s\имя_пользователя \AppD���\Lo��� LOGONSERVER (���ут �ыть ра�ные варианты� NUMBER_OF _PROCESSORS (���ут �ыть ра�ные варианты� OS W��dows_NT продолжение 
754 Приложение Б. Справочник по языку CMD и пакетных файлов Имя переменной Типичное значение Path C:\WINDOWS\sys��m32;C:\WINDOWS; C:\WINDOWS\Sys��m32\Wb�m; C:\W��dows\Sys��m32\W��dowsPow��Sh���\v1.0 (���ут �ыть ра�ные �начени� в �ави�и���ти �т �е�та у�та� н�в�и W��dows и д���лнительных �р��ра��� PATHEXT . COM;.�X�;.�AT;.CMD;.V�S;.V��;.JS;.JS�;.WSF; . WSH;.MSC PROCESSOR_ARCHITECTURE (���ут �ыть ра�ные варианты� PROCESSOR_IDENTIFIER (���ут �ыть ра�ные варианты� PROCESSOR_LEVEL (���ут �ыть ра�ные варианты� PROCESSOR_REVISION (���ут �ыть ра�ные варианты� ProgramData* C:\P�og��mD��� ProgramFiles C:\P�og��m F���s PROMPT $P$G PUBLIC* C:\Us��s\Pub��� SESSIONNAME (���ут �ыть ра�ные варианты� SystemDrive C: SystemRoot C:\WINDOWS TEMP C:\us��s\us����m�\AppD���\Lo���\T�mp TMP C:\us��s\us����m�\AppD���\Lo���\T�mp USERDOMAIN имя_компьютера или имя_домена USERNAME имя_пользователя USERPROFILE C:\Us��s\имя_пользователя windir C:\WINDOWS * В W��dows XP не ��ределены. В та�л. Б .5 �еречи�лены д���лнительные дина�иче��ие �ере�енные �реды ��ружени�, д��ту�ные �ри в�люченн�� ра�ширении ���анд. Е�ли �ере�енные � та�и�и же и�ена�и ��ределены � и���ль��вание� ���анды SET или диал���в��� ��на �в�й�тв �и�те�ы, т� эти фи��ир�ванные ��ределени� и�еют �рев��х�д�тв�, и дина�иче��ие �ере�енные �тан�в�т�� нед��ту�ны. Таблица Б.5 . Динамические переменные среды окружения Имя переменной Динамическое значение CD Ди�� и �уть те�уще�� �атал��а DATE Те�уща� дата, �тф�р�атир�ванна� �а� в ���анде DAT� Таблица Б.4 (продолжение)
Задание формата команд 755 Имя переменной Динамическое значение TIME Те�ущее вре��, �тф�р�атир�ванн�е �а� в ���анде TIM� RANDOM Случайн�е чи�л� в диа�а��не 0–32767 ERRORLEVEL Стату� вых�да и� �редыдущей �р��ра��ы CMDEXTVERSION Н��ер вер�ии ра�ширений ���анд CMDCMDLINE К��андна� �тр��а, и���ль��ванна� дл� �а�у��а �а��й ���л�ч�и CMD Задание формата команд В та�л. Б.6 �еречи�лены варианты �ерена�равлени� вв�да�выв�да. В �дн�й ���ан� де ���ут и���ль��вать�� не���ль�� вариант�в �ерена�равлени�. Таблица Б.6 . Перенаправление и множественные форматы команд Формат Результат команда >имя_файла На�равл�ет выв�д в файл имя_файла команда >>имя_файла Д��авл�ет выв�д � ��держи���у файла имя_файла команда <имя_файла Команда �читывает вв�д и� файла имя_файла команда 1>имя_файла Перена�равление �тандартн��� выв�да (т� же �а��е, чт� и >� команда 1>>имя_файла Д��авление �тандартн��� выв�да команда 2>имя_файла Перена�равление �тандартн�й �ши��и команда 2>>имя_файла Д��авление �тандартн�й �ши��и команда 2>&1 От�рав�а �тандартн�й �ши��и туда же, �уда на�равлен �тан� дартный выв�д. Зате� �тандартна� �ши��а ��жет �ыть �ерена� �равлена или �т�равлена чере� �анал команда1 | команда2 Стандартный выв�д команды1 на�равлен �� �аналу на �тандарт� ный вв�д команды2 команда1 & команда2 П��лед�вательн�е вы��лнение не���ль�их ���анд команда1 && команда2 Т� же �а��е, чт� и &, н� команда2 вы��лн�ет��, т�ль�� е�ли вы� ��лнение команды1 �авершил��ь у��ешн� (�р�и��шел вых�д �� �тату��� �ши��и 0� команда1 || команда2 Пр�тив���л�жн��ть ф�р�ату � &&; команда2 вы��лн�ет�� т�ль� �� е�ли команда1 ��тер�ела неудачу (команда ) Гру��ир�в�а ���анд дл� if и for ^x От�лючение ��ециальных �и�в�л�в x. На�ри�ер, ^> интер�ре� тирует�� �а� �и�в�л "> ", а не �а� ��ерат�р �ерена�равлени�
756 Приложение Б. Справочник по языку CMD и пакетных файлов Встроенные команды В та�л. Б.7 �еречи�лены в�тр�енные ���анды, реали�уе�ые ���л�ч��й CMD. Таблица Б.7 . Встроенные команды Команда Назначение @команда Вы��лн�ет ���анду �е� выв�да �а��й ���анды на ��н��ль :метка Идентифицирует цель ���анды goto метка или call :метка assoc Св��ывает ра�ширени� и�ен файл�в � ти�а�и файл�в break Ставит ��нтр�льную т�ч�у в �тладчи�е; в �р�тивн�� �лу� чае ниче�� не делает call пакетный_файл [ аргу­ менты...] call :метка [аргументы...] О�уще�твл�ет вы��в «��д�р��ра��ы» cd [[диск:]каталог] Мен�ет те�ущий ра��чий �атал�� chdir [[диск:]каталог] Т� же �а��е, чт� и cd cls Очищает э�ран (��н�� color bf И��ен�ет цвет э�рана на b и цвет те��тана f, и���ль�у� ��ды, �еречи�ленные в та�л. 11.5 copy [/d][/v][/n][/y|/-y] [/z][/a|/b] источник [/a|/b] [+источник [/a|/b]]... [приемник [/a|/b]] К��ирует файлы или �а��и и� источника в приемник. И�� ��ль�уют�� �ледующие �лючи: /d — Дешифр�в�а файл�в /v — Пр�вер�а цел��тн��ти файла /y — От�а� �т ��дтверждени� �ере�а�и�и /z — К��ир�вание �етев��� файла /a — И���ль��вание ASCII�интер�ретации /b — И���ль��вание дв�ичн�й интер�ретации date [/t | мм-дд -гггг] Выв�дит или у�танавливает дату. Ключ /t ��начает не вы� давать �ри�лашение на вв�д н�в�й даты del имя_файла... [/p|/q][/f] [/s] [/a[:атрибуты]] Удал�ет файлы, �ину� К�р�ину. И���ль�уют�� �ледующие �лючи: /p — Тре��вание ��дтверждени� /f — Удаление файл�в т�ль�� дл� чтени� /s — Удаление файл�в в� в�ех ��д�атал��ах /q — Бе� ��дтверждени� /a — Удаление файл�в � у�а�анны�и атри�ута�и К�ды атри�ут�в: [-]R — Т�ль�� чтение [-]S — Си�те�ный [-]H — С�рытый [-]A — Архивный Учтите, чт� - �еред R, S, H или A ��начает «Вы�рать файл, е�ли атри�ут не у�тан�влен»
Встроенные команды 757 Команда Назначение dir путевое_имя ... [/p][/q] [/w|/d|/b|/n|/x][/s] [/l][/c][/4] [/a[[:]атрибуты]][/o[[:] поля_сортировки]] [/t[[:]поле_времени]] Выв�дит ��и��� файл�в и (или� �а��� в �атал��е.И���ль� �уют�� �ледующие �лючи: /p — Пау�а ���ле �а��лнени� �ажд��� э�рана /q — Выв�д и�ен владельцев файл�в /w — Шир��ий выв�д в не���ль�� �т�л�ц�в /d — П�х�ж на /w, н� � ��ртир�в��й �т�л�ц�в /n — Выв�д в ра�ширенн�� ф�р�ате /x — Выв�д и�ен в ф�р�ате �.3 /b — Крат�ий ��и���: т�ль�� и�ена /s — Ре�ур�и� в ��д�а��и /l — Выв�д и�ен в нижне� ре�и�тре /c — И���ль��вание ра�делител� ты��ч /4 — И���ль��вание ф�р�ата ��да и� четырех цифр /a — Вы��р �� атри�ута� /o — У�тан�в�а ��р�д�а ��ртир�в�и /t — Вы��р ��л� вре� �ени дл� ��ртир�в�и или �начени� вре�ени дл� выв�да echo on|off В�лючает и вы�лючает выв�д �а�их ���анд (фун�цию echo� echo текст Выв�дит текст echo. Выв�дит �у�тую �тр��у endlocal В���танавливает �ере�енные и у�танавливает �ред��реде� ленные л��альные �ере�енные erase Т� же �а��е, чт� и del exit [/b] [код_выхода] Пре�ращает вы��лнение ���анды или �а�етн��� файла. Ключ /b ��начает �ре�ращение вы��лнени� �а�етн��� файла, н� не �а��й ���л�ч�и CMD for [модификатор] %переменная in (список) do команда [аргументы] Вы��лн�ет ���анду дл� �ажд��� эле�ента в ��и��е. С�и� ��� ��жет ��держать �и�в�лы��а�е�тители дл� ���твет� �тви� и�ена� файл�в. Переменная �вл�ет�� �дн�й �у�в�й � учет�� ре�и�тра, ��т�ра� ��жет �ыть �а�енена в лю��� �е�те ���анды или ар�у�ент�в � учет�� �лючей �а�ены, �еречи�ленных в та�л. Б .3 . Варианты модификатора ��� �а�аны в та�л. Б.7 . В �а�етных файлах �ледует и���ль��� вать %% ftype тип_файла [=[команда_открытия]] Выв�дит или у�танавливает �в��и �ежду ти�а�и файл�в и ���анд�й «команда_открытия» goto метка О�уще�твл�ет �ерех�д на метку goto :EOF О�уще�твл�ет �ерех�д в ��нец файла продолжение 
758 Приложение Б. Справочник по языку CMD и пакетных файлов Команда Назначение if условие команда if условие (команда) else команда if условие ( команда )else( команда ) У�л�ви�: [not] строка1 == строка2 [not] errorlevel число [not] exist имя_файла [/i] строка1 оператор_ сравнения строка2 cmdextversion число defined переменная Вы��лн�ет команду, е�ли условие �вл�ет�� и�тинны� (true�. Не����ательна� команда, ���ле �лючев��� �л�ва else вы� ��лн�ет��, е�ли у�л�вие не �вл�ет�� и�тинны�. К��анды ���ут ра��р��тран�ть�� ��лее че� на �дну �тр�� �у, е�ли �удет �а�лючена в �ру�лые �����и. Ключ /I ��на� чает и�н�рир�вание ре�и�тра �ри �равнени�х. М��ут и���ль��вать�� �ледующие операторы_сравнения: EQU — равн� NEQ — не равн� LSS — �еньше че� LEQ — �еньше че� или равн� GTR — ��льше че� GEQ — ��льше че� или равн� md путевое_имя С��дает �утев�е и�� �атал��а mkdir путевое_имя Т� же �а��е, чт� и md move [/y|/-y] из_пути в_ путь Пере�ещает файлы или �а��и. И���ль�ует�� �дин �люч: /y — не ��дтверждать �ере�а�и�ь path [папка[;папка...]] У�танавливает �уть ��и��а и �начение �ере�енн�й �реды ��ружени� path pause Выв�дит «Дл� �р�д�лжени� наж�ите лю�ую �лавишу ...» («P��ss ��y k�y �o �o����u�»� и ждет нажати� popd В���танавливает �редыдущий те�ущий �атал��, ��хранен� ный ���анд�й pushd prompt текст_и_коды У�танавливает �тр��у �ри�лашени� на вв�д ���анды и �на� чение �ере�енн�й �реды ��ружени� prompt pushd путь И��ен�ет �атал�� и ��жет та�же �т��ра�ить �у�ву ди��а rd [/s] [/q] путь Удал�ет �атал��, на�ваный � ����щью пути. С �люч�� /s ре�ур�ивн� удал�ет в�е ��д�атал��и. Ключ /q ��давл�ет выдачу �ри�лашени� на ��дтверждение rem текст Текст ����ентари� rename старое_имя новое_имя Переи�ен�вывает файлы или �а��и rmdir [/s] [/q] путь Т� же �а��е, чт� и rd set [имя[=[значение]]] У�танавливает или выв�дит �начение �ере�енн�й �реды ��ружени� set /a выражение Вычи�л�ет ариф�етиче���е выражение. С�. та�л. Б.2 set /p имя= строка_пригла­ шения Выв�дит �ри�лашени� на вв�д Таблица Б.7 (продолжение)
Встроенные команды 759 Команда Назначение setlocal [enableextensions| disableextensions]\ [enabledelayedexpansion| disabledelayedexpansion] С�хран�ет �ере�енные �реды ��ружени�, те�ущий �атал�� и на�тр�й�и shift [/n] Сдви�ает ар�у�енты �а�етн��� файла, удал�� �ервый ар� �у�ент или ��личе�тв� ар�у�ент�в, у�а�анн�е � ����щью не����ательн��� �люча /n start "заголовок" [/dпуть] [/i] [/min | /max] [/separate | /shared] [/low | /belownormal | /normal | /abovenormal | /high | /realtime] [/wait] [/b] команда [аргументы] За�у��ает ���анду в н�в�� ��не. И���ль�уют�� �ледующие �лючи: /d — У�тан�в�а �атал��а �� у��лчанию /i — И���ль��вание и�х�дн�й �реды ��ружени� /min — За�у�� в �вернут�� ��не /max — За�у�� в ра�вернут�� ��не /separate — И���ль��вание �тдельн��� W��16��р�це��а* /shared — И���ль��вание ��ще�� W��16��р�це��а* /low.../realtime — у�танавливает �ри�ритетн��ть /wait — Ожидание вых�да /b — И���ль��вание т��� же ��на time [/t | чч:мм:сс] Выв�дит или у�танавливает вре��. Ключ /t ��начает �т� �ут�твие �ри�лашени� на вв�д н�в��� вре�ени title [строка] У�танавливает �а��л�в�� ��на type имя_файла За�и�ывает ��держи��е файла в �тандартный выв�д ver Выв�дит вер�ию W��dows vol [диск:] Выв�дит �ет�у т��а ди��а * Т�ль�� дл� 32�ра�р�дных вер�ий W��dows. 64 �ра�р�дные вер�ии не ���ут �а�у��ать 16�ра�р�дные �рил�жени� W��dows. Модификаторы команды For В та�л. Б.� �еречи�лены ��дифи�ат�ры, ��т�рые ���ут �редше�тв�вать эле�енту (список� в ���анде for, ���да в�лючен� ра�ширение ���анд. Таблица Б.8 . Модификаторы команды For Модификатор Действие /D Си�в�лы��а�е�тители в на��ре ���твет�твуют т�ль�� �атал��а� /R [путь] Вы��лн�ет ��ерат�р for в у�а�анн�� �атал��е и в� в�ех е�� ��д� �атал��ах /L П�ша��в� �р�в�дит �начение �ере�енн�й чере� диа�а��н чи�л�� вых �начений. У�тан�в�а д�лжна и�еть вид start#,step#,end# продолжение 
760 Приложение Б. Справочник по языку CMD и пакетных файлов Модификатор Действие /F ["ключевые_слова"] Считывает ��держи��е файла (файл�в�, у�а�анн��� в ��и��е, и анали�ирует е�� в �аче�тве те��т�вых �тр��. Ре�ультаты и�� ��ль�уют�� в �аче�тве на��ра �начений дл� �ере�енн�й for. Выв�д ���анды ��жет �ыть и���ль��ван �а� те��т�вый и�т�чни� �уте� у�а�ани� ('команды'� в �аче�тве эле�ента (список�. Ве�ь�а не�ри�л�дный �инта��и� дл� данн��� �люча ��жн� найти в Цен� тре ��рав�и и ��ддерж�и W��dows (���ле ��и��а �� �лючев��у �л�ву «�o�»� Операторы выражения set /a В та�л. Б.9 �еречи�лены ��ерат�ры, ��т�рые ���ут и���ль��вать�� в ариф�етиче� ��их выражени�х в ���анде set /a. О�ерат�ры �еречи�лены в у�ывающе� ��р�д�е �ри�ритетн��ти. Таблица Б.9 . Операторы выражения set /a Операторы Их функции () Гру��ир�в�а выражени� !~- Унарные ��ерат�ры: Булев� НЕ, ��ра�р�дн�е инвертир�вание и ариф�етиче���е �трицание */% У�н�жение, деление, ��лучение ��тат�а +- Сл�жение, вычитание << >> П�ра�р�дный �дви� влев�, в�рав� & П�ра�р�дн�е И |^ П�ра�р�дн�е ИЛИ и и��лючающее ИЛИ = При�ваивание = При�ваивание и ��ъединенные ��ерат�р��ри�ваивание *= /= %= += -= &= ^= |= <<= >>= О�ъединенные �ате�атиче��ие ��ерат�ры и ��ерат�ры �ри�ваива� ни�, ���аи��тв�ванные у ��ы�а �р��ра��ир�вани� C: A += 3 т� же �а��е,чт�иA=A+3 , Ра�делитель не���ль�их выражений Дл� инди�ации �ере�енных �реды ��ружени� �ерут�� лю�ые алфавитн��цифр�вые ле��е�ы. Е�ли в выражении у�а�анна� �ере�енна� �реды ��ружени� не ��ределена или не ��держит чи�л�, �на �чита� ет�� ��держащей �начение 0. Пере�енные ра���атривают�� �а� де��тичные чи�ла, �а и��лючение� тех чи�ел, ��т�рые начинают�� � 0x и интер�ретируют�� �а� ше�тнадцатеричные (�� ��н�ванию 16�, и �а и�� �лючение� тех чи�ел, ��т�рые начинают�� � 0 и интер�ретируют�� �а� в��ь�еричные (�� ��н�ванию ��. Таблица Б.8 (продолжение)
Указатель схем и учебных сценариев Указатель схем Глава Тема Задача Страница 2 V�S���p� П�вт�рение �адачи д� тех ��р, ���а ра��та не �удет �авершена �5 И�влечение �а��в��� и�ени и� ��лн��� и�ени файла 92 За�р�� у ��ль��вател� вв�да чи�ла или даты 103 От��ражение ��личе�твенных данных в ���твет� �твии � �равила�и ��ычн��� ��ы�а 105 С�анир�вание эле�ент�в �а��ива 111 3 О�ъе�ты С�анир�вание ��ъе�т�в в ��лле�ции � ����щью V�S���p� 123 С�анир�вание ��ъе�т�в в ��лле�ции � ����щью Js���p� 125 О�ъ��нение �равильн��� ��р�д�а и���ль��вани� �ценари� ���андн�й �тр��и 134 4 Файл�вые ��ъе�ты Вы��р файл�в, и�еющих �дин или не���ль�� у�та� файл�в, и�еющих �дин или не���ль�� у�та� файл�в, и�еющих �дин или не���ль�� у�та� , и�еющих �дин или не���ль�� у�та� и�еющих �дин или не���ль�� у�та� �дин или не���ль�� у�та� �дин или не���ль�� у�та� или не���ль�� у�та� или не���ль�� у�та� не���ль�� у�та� не���ль�� у�та� у�та� у�та� н�вленных атри�ут�в 164 Ре�ур�ивна� ��ра��т�а в�ех файл�в в �а��е и в ��д� чиненных �а��ах 16� От�рытие те��т�в��� файла дл� вв�да или выв�да 171 Чтение в�ех �тр�� файла � �р��у���� �у�тых �тр�� 173 5 Сетевые ��ъе�ты О�ределение, �а�и� �вл�ет�� ди��: л��альны� или �т��раженны� 23� О�ределение �етев��� �ути �т��раженн��� ди��а 239 Удаление �етев��� �т��ражени� 242 От��ражение �етев��� ди��а 243 продолжение  В
762 Приложение В. Указатель схем и учебных сценариев Глава Тема Задача Страница Д��авление ��д�лючени� (и �нач�а� �етев��� �рин� тера 246 Удаление ��д�лючени� (и �нач�а� �етев��� �ринтера 249 Перена�равление �ринтера DOS на �етев�й �ринтер 250 7 О�ъе�ты WMI И�влечение и� ��лле�ции �тдельных эле�ент�в, не �на� их и�ен 32� 9 И���ль��вание �ценариев И�влечение в �ценарии ��и�ен�ванных ар�у�ент�в ���андн�й �тр��и (�лючей� 411 О�ра��т�а в �ценарии �р�и�в�льн��� ��личе�тва ар�у�ент�в ���андн�й �тр��и 413 10 К��андна� �тр��а Д��авление �атал��а � �начению �ере�енн�й PA T H 4�4 11 Па�етные файлы О�ра��т�а �ере�енн��� ��личе�тва ар�у�ент�в ��� �андн�й �тр��и в �а�етн�� файле 530 Выв�д в �а�етн�� файле �ри�лашени� ��ль��вателю на вв�д �твета да�нет 541 Указатель учебных сценариев и пакетных файлов Глава Имя файла Описание Страница 1 s���p�0101.vbs П�д�чет ��ще�� �р��тран�тва, и���ль�уе���� в у�а� �анн�� �атал��е 36 s���p�0102.vbs П�д�чет ��ще�� �р��тран�тва, и���ль�уе���� в �р�� и�в�льн�� �атал��е 52 2 s���p�0201.vbs Выв�д ����щени�, ���твет�твующе�� вре�ени �ут�� 7� s���p�0202.vbs Выв�д ����щени�, ���твет�твующе�� вре�ени �ут�� 79 s���p�0203.vbs Выв�д ����щени�, ���твет�твующе�� дню недели �1 s���p�0204.vbs О�ра��т�а в�ех ���твет�твующих файл�в, и�еющих� в�ех ���твет�твующих файл�в, и�еющих� в�ех ���твет�твующих файл�в, и�еющих� ���твет�твующих файл�в, и�еющих� ���твет�твующих файл�в, и�еющих� файл�в, и�еющих� файл�в, и�еющих� �� в �атал��е �5 s���p�0205.vbs О�ра��т�а файл�в � �р�вер��й �уще�тв�вани� нуж� файл�в � �р�вер��й �уще�тв�вани� нуж� файл�в � �р�вер��й �уще�тв�вани� нуж� � �р�вер��й �уще�тв�вани� нуж� � �р�вер��й �уще�тв�вани� нуж� �р�вер��й �уще�тв�вани� нуж� �р�вер��й �уще�тв�вани� нуж� �уще�тв�вани� нуж� �уще�тв�вани� нуж� нуж� нуж� ных файл�в �6 s���p�0206.vbs Пение ��н�т�нн�й �е�ен�и �6 s���p�0207.vbs Выв�д ��и��а файл�в, найденных в �а��е �7 s���p�020�.vbs И�влечение �а��в��� и�ени файла 93
Указатель учебных сценариев и пакетных файлов 763 Глава Имя файла Описание Страница s���p�0209.vbs От��ражение те�ущей даты и вре�ени 94 d���s.vbs Вычи�ление �ервых и ���ледних дней �е��цев 97 s���p�0210.vbs От��ражение те�уще�� вре�ени в ���вл�юще��� ��не 99 s���p�0211.vbs Выв�д �тлад�чн�й инф�р�ации 100 s���p�0212.vbs Выв�д ��ль��вателю �ри�лашени� на вв�д данных 101 s���p�0213.vbs Интера�тивный �аль�ул�т�р 103 s���p�0214.vbs Выв�д ��личе�тва � у�а�ание� �равильн��� �уф� фи��а 105 s���p�0215.vbs Фун�ци�, вычи�л�юща� и�� файла ре�ервн�й ���ии 10� m�yb�d��.vbs Фун�ци�, тре�ующа� у ��ль��вател� ��дтверждение на удаление файла 109 4 s���p�0401.vbs С��дание �а��и, в�люча� в �лучае не��х�ди���ти ���дание ее р�дитель��их �а��� 152 s���p�0402.vbs К��ир�вание �а��и � целью ���дани� ре�ервн�й ���ии 15� s���p�0403.vbs П�и�� ди��а � наи��льши� ��ъе��� �в���дн��� �р�� �тран�тва 159 s���p�0404.vbs Удаление и� �а��и файл�в TMP и �A� 167 s���p�0405.vbs Удаление файл�в TMP и �A� и� �а��и и в�ех ��д� файл�в TMP и �A� и� �а��и и в�ех ��д� файл�в TMP и �A� и� �а��и и в�ех ��д� TMP и �A� и� �а��и и в�ех ��д� и �A� и� �а��и и в�ех ��д� �A� и� �а��и и в�ех ��д� и� �а��и и в�ех ��д� �а��и и в�ех ��д� �а��и и в�ех ��д� и в�ех ��д� и в�ех ��д� в�ех ��д� в�ех ��д� ��д� ��д� чиненных ей �а��� 167 s���p�0406.vbs Вы��лнение �р�и�в�льн�й �адачи в �а��е и в�ех ��дчиненных ей �а��ах 16� s���p�0407.vbs И��енение атри�ут�в файл�в в �а��е и в�ех ��дчи� атри�ут�в файл�в в �а��е и в�ех ��дчи� атри�ут�в файл�в в �а��е и в�ех ��дчи� файл�в в �а��е и в�ех ��дчи� файл�в в �а��е и в�ех ��дчи� в �а��е и в�ех ��дчи� в �а��е и в�ех ��дчи� �а��е и в�ех ��дчи� �а��е и в�ех ��дчи� и в�ех ��дчи� и в�ех ��дчи� в�ех ��дчи� в�ех ��дчи� ��дчи� ��дчи� ненных ей �а��ах 169 s���p�040�.vbs Чтение вв�да и� файла и вы��лнение ���анд в �т� н�шении е�� ��держи���� 173 s���p�0409.vbs Выв�д ��и��а в�ех �у�ы�альных файл�в, и�еющих�� в �а��е М�и д��у�енты 175 s���p�0410.vbs С��дание �атал��а в�ех �у�ы�альных файл�в, и�ею� щих�� в �а��е М�и д��у�енты 17� s���p�0411.vbs Фильтраци� �тандартн��� вв�да � �ревращение� �и�в�л�в та�ул�ции в �а��тые 1�2 s���p�0412.vbs Де��н�траци� выв�да �ри�лашени� на вв�д данных 1�2 bmps���.vbs Выв�д ра��ер�в и���ражений в файлах � ра�шире� ние� �MP 1�5 продолжение 
764 Приложение В. Указатель схем и учебных сценариев Глава Имя файла Описание Страница s���p�0413.vbs Выв�д инф�р�ации �� и���лнителе и жанре дл� файл�в ф�р�ата MP3 1�6 s���p�0414.vbs Выв�д ��держи���� XML�файла 197 s���p�0415.vbs С��дание �р��т��� HTML�файла 199 s���p�0416.vbs Пре��ра��вание те��т�в��� файла в XML�файл, ��держащий �лайд�ш�у 201 s���p�0417.vbs С��дание те��т�в��� файла и �а�у�� �р��ра��ы Бл��н�т дл� е�� �т��ражени� 20� s���p�041�.vbs Вы��лнение �етев��� p��g�те�та дл� ��и��а х��т�в 210 s���p�0419.vbs С��дание �рлы�а на ра��че� �т�ле 216 s���p�0420.vbs Выв�д в�ех �ере�енных �реды ��ружени� 220 s���p�0422.vbs И���ль��вание рее�тра дл� ��д�чета ��личе�тва �а�у���в �ценари� 226 s���p�0423.vbs У�тан�в�а и �ере�а�у�� �ара�етр�в, не��х�ди�ых �ценарию в файле s���p�0422.vbs 226 s���p�0424.vbs С�хранение в рее�тре �ара�етр�в �ценари�, и���ль� в рее�тре �ара�етр�в �ценари�, и���ль� в рее�тре �ара�етр�в �ценари�, и���ль� рее�тре �ара�етр�в �ценари�, и���ль� рее�тре �ара�етр�в �ценари�, и���ль� �ара�етр�в �ценари�, и���ль� �ара�етр�в �ценари�, и���ль� �ценари�, и���ль� �ценари�, и���ль� , и���ль� и���ль� �уе�ых �� у��лчанию 226 5 s���p�0501.vbs При�ер �ценари� вх�да в �и�те�у, ���дающе�� �т�� �ражени� на �етевые ди��и 235 s���p�0502.vbs Выв�д �т��ражений на �етевые ди��и 237 IsD��v�M�pp�d. vbs Пр�вер�а: не �вл�ет�� ли ди�� �т��ражение� на �етев�й ди�� 23� G��D��v�M�p� p��g.vbs О�ределение �етев��� �ути �т��ражени� на �етев�й ди�� 239 U�M�p.vbs Удаление �т��ражени� на �етев�й ди�� 242 M�pD��v�.vbs С��дание �т��ражени� на �етев�й ди�� 243 s���p�0503.vbs Выв�д �т��ражений на �етевые �ринтеры 245 Us�P������.vbs С��дание ��д�лючени� �етев��� �ринтера 246 D�����P������. vbs Удаление ��д�лючени� �етев��� �ринтера 249 R�d�����P������. vbs От��ражение LPT���рта DOS на �етев�й �ринтер 250 s���p�0504.vbs Печать и� �ценари� не���ред�твенн� на �ринтер 253 6 s���p�0601.vbs От�рав�а ����щени� эле�тр�нн�й ��чты �� ��и���� файл�в в �а��е 2�1 s���p�0602.vbs С��тавление те��т�в��� ����щени� �� ��и���� в�ех файл�в в �а��е в HTML�ф�р�ате 2�2
Указатель учебных сценариев и пакетных файлов 765 Глава Имя файла Описание Страница m����m�g�.vbs От�рав�а ����щени� в HTML�ф�р�ате � �ри�ре� HTML�ф�р�ате � �ри�ре� �ф�р�ате � �ри�ре� �ленны�и � не�у и���ражени��и 2�5 s���p�0603.vbs От�рав�а �р��т��� ����щени� 2�� m�������s.vbs От�рав�а �� эле�тр�нн�й ��чте файл�в, у�а�анных в ���андн�й �тр��е у�а�анн��у ��ль��вателю 290 s���m���.vbs Авт��атиче��а� �т�рав�а �� эле�тр�нн�й ��чте фай� л�в, найденных в �а��е «на �т�рав�у» 291 s���p�0604.vbs От�рав�а фа��а 29� 7 s���p�0701.vbs Де��н�траци� ������а у�равлени� ��и���� ���� �ьютер�в 315 s���p�0702.vbs Планир�вание �р�вер�и ди���в ����ьютера в� вре�� е�� �ледующе�� �а�у��а 325 s���p�0703.vbs Завершение ра��ты �рил�жени� W��dows � у�а�ан� W��dows � у�а�ан� � у�а�ан� ны� и�ене� 327 ��s�p�ops.vbs Выв�д ��и��а в�ех �в�й�тв и �ет�д�в WMI���ъе�та 331 s���p�0704.vbs С��р инф�р�ации � �етевых ада�терах �т �ажд��� у�а�анн��� ����ьютера 334 s���p�0705.vbs Выв�д ��и��а �ритиче��их ��н�влений, �ри�енен� ных � на��ру ����ьютер�в 336 s���p�0706.vbs Выв�д ��и��а ���т��ний �луж�, у�тан�вленных на на��ре ����ьютер�в 339 � s���p�0�01.vbs Выв�д ��и��а в�ех �луж�, ��ль��вателей и �ру��, и�еющих�� на ����ьютере 354 s���p�0�02.vbs Удаление д��енн�й или л��альн�й учетн�й �а�и�и ��ль��вател� 360 s���p�0�03.vbs Выв�д ��и��а в�ех �ру�� в д��ене или в ����ьютере � и���ль��вание� �в�й�тва ��ъе�та class 361 s���p�0�04.vbs Выв�д ��и��а в�ех �ру�� в д��ене или в ����ьютере � и���ль��вание� фильтрации 362 s���p�0�05.vbs Выв�д ��и��а ра�личных �в�й�тв �етев��� ����ью� ��и��а ра�личных �в�й�тв �етев��� ����ью� ��и��а ра�личных �в�й�тв �етев��� ����ью� ра�личных �в�й�тв �етев��� ����ью� ра�личных �в�й�тв �етев��� ����ью� �в�й�тв �етев��� ����ью� �в�й�тв �етев��� ����ью� �етев��� ����ью� �етев��� ����ью� ����ью� ����ью� тера 364 s���p�0�06.vbs Выв�д ��и��а в�ех �в�й�тв �етев��� ����ьютера 364 s���p�0�07.vbs Выв�д ��и��а �луж� ����ьютера, ��ль��вателей и дру�их ��ъе�т�в, �ред�тавл�ющих ��лле�ции 365 s���p�0�0�.vbs Выв�д ��и��а в�ех ��ль��вателей д��ена или ���� �ьютера 367 s���p�0�09.vbs Выв�д ��и��а в�ех ��щих файл�в, и���ль�уе�ых �етевы�и ��ль��вател��и 369 продолжение 
766 Приложение В. Указатель схем и учебных сценариев Глава Имя файла Описание Страница s���p�0�10.vbs Выв�д ��и��а в�ех ��щих и���ль�уе�ых файл�в, �т� ��ртир�ванн��� �� и�ена� ��ль��вателей 370 s���p�0�11.vbs Выв�д ��и��а в�ех ��щих �а���, и�еющих�� на ���� �ьютере 371 s���p�0�12.vbs С��дание ��щей �а��и 372 s���p�0�13.vbs С��дание �ру��ы �е���а�н��ти и д��авление ��ль� ��вателей 372 s���p�0�14.vbs Выв�д ��и��а ��ль��вателей, ���т��щих в �ру��е �е���а�н��ти 373 s���p�0�15.vbs Выв�д ��и��а в�ех �аданий на �ечать, вы�тавленных в �чередь ��ще�� �ринтера 375 s���p�0�16.vbs Выв�д ��и��а в�ех ��щих �ринтер�в ����ьютера 37� s���p�0�17.vbs Выв�д ���т��ни� у�тан�вленных на ����ьютере �луж� 3�3 s���p�0�1�.vbs Выв�д ��и��а в�ех �етевых ��ль��вателей, ��д�лю� ченных � �ерверу 3�4 s���p�0�19.vbs Выв�д ��и��а ��нтейнер�в A���v� D�����o�y � ����� A���v� D�����o�y � ����� D�����o�y � ����� D�����o�y � ����� � ����� щью �р�вайдера LDAP 390 ���p�ss.vbs И��енение �ар�л� ��ль��вател� на в�ех ����ьюте� рах ра��чей �ру��ы 394 9 �dbu��.ws� За�и�ь файл�в на �а�и�ывающих �рив�дах ����а�т� ди���в и ди���в DV D 415 �opy_���.vbs К��ир�вание ра��р��тран�е�ых файл�в в целевую �а��у 423 d�p�oy.vbs О�н�вление �� ��и��у ����ьютер�в, хран�ще�у�� в файле 42� ��p�.vbs Ре�ли�аци� на��ра файл�в � д��енн��� �ервера на ра��чую �танцию 431 s�h�d.vbs Де��н�траци� ре�и�трации в авт��атиче��и �а�у� ��ае�ых �ценари�х 447 s���p�0903.vbs Де��н�траци� �а�и�и ���ытий в �и�те�ный журнал 449 summ��y.vbs П�лучение ит���вых ре�ультат�в вы��лнени� �цена� риев, авт��атиче��и �а�у��ае�ых в нера��чее вре�� 451 so��m��g�.b�� С�ртир�в�а не���ль�их файл�в в �дин вых�дн�й файл 531 11 wh��h.b�� О�ределение ��н�ретн��� �р��ра��н��� файла, и���ль�уе���� ���ле вв�да ���андн�й �тр��и 537
Указатель учебных сценариев и пакетных файлов 767 Глава Имя файла Описание Страница 13 v��w.b�� Фильтр, ���ирающий данные �тандартн��� вв�да и �т��ражающий их в Бл��н�те 57� �.b�� От�рытие �р��ра��ы �xp�o��� дл� �р����тра те�у� �xp�o��� дл� �р����тра те�у� дл� �р����тра те�у� ще�� �атал��а 579 mk���ou��.b�� С��дание учетн�й �а�и�и �тудента дл� �ла��а 60� 16 s���p�1601.ps1 Чтение те��т�вых �тр�� и� файла 723 s���p�1602.ps1 Пр��т�й �ценарий дл� де��н�трации �тлад�и Pow� Pow� ��Sh��� 733
Справочник по программам командной строки В эт�� �рил�жении �еречи�лены в�е и���лн�е�ые �р��ра��ы, �ред��тавл�е�ые W��dows 7, V�s�� и XP, ��т�рые ���ут и���ль��вать�� и� ���андн�й �тр��и. Пр�� 7, V�s�� и XP, ��т�рые ���ут и���ль��вать�� и� ���андн�й �тр��и. Пр�� V�s�� и XP, ��т�рые ���ут и���ль��вать�� и� ���андн�й �тр��и. Пр�� и XP, ��т�рые ���ут и���ль��вать�� и� ���андн�й �тр��и. Пр�� XP, ��т�рые ���ут и���ль��вать�� и� ���андн�й �тр��и. Пр�� , ��т�рые ���ут и���ль��вать�� и� ���андн�й �тр��и. Пр�� �ра��ы �рафиче����� ��ль��ватель����� интерфей�а (GUI�, и���лн�е�ые �р�� GUI�, и���лн�е�ые �р�� �, и���лн�е�ые �р�� �ра��ы, ра��тающие т�ль�� в �аче�тве �и�те�ных �луж�, и �р��ра��ы, ��т�рые �� те� или ины� �ричина� не ���ут �ыть на�р��ую и���ль��ваны и� ���андн�й �тр��и (�� ��льшей ча�ти�, в эт�т �еречень не ���али. В �ледующих ра�делах в �т�л�це ОС: y X ��начает �р��ра��у, д��ту�ную в W��dows XP P�o��ss�o���. y V ��начает �р��ра��у, д��ту�ную в W��dows V�s�� U���m���. y 7 ��начает �р��ра��у, д��ту�ную в W��dows 7 U���m���. Реда�ции W��dows, и�еющие �енее вы���ий ур�вень, ���ут в�лючать т�ль�� ча�ть этих �р��ра��. Кр��е эт���, в не��т�рые у�тан�в�и W��dows в�лючены д���лнительные �р�� W��dows в�лючены д���лнительные �р�� в�лючены д���лнительные �р�� �ра��ы, не ���авшие в данный �еречень, а в не��т�рые у�тан�в�и в�лючены не в�е эти �тандартные �р��ра��ы. Ра�ные варианты у�тан�в�и ��лучают�� и���а ра�личн�й ��нфи�урации ���руд�вани� (W��dows и�еет ��л�нн��ть не у�танав� W��dows и�еет ��л�нн��ть не у�танав� и�еет ��л�нн��ть не у�танав� ливать �р��ра��н�е ��е��ечение �ри �т�ут�твии ���руд�вани�, ��т�р�е ��жет е�� и���ль��вать�, а та�же и���а ��р��ративн�й лицен�и�нн�й ��лити�и. Инструменты администрирования Следующие �р��ра��ы ���ут и���ль��вать�� дл� ��нфи�урир�вани� и у�равлени� �и�те��й W��dows. Программа ОС Назначение �pp�md V7 Ин�тру�ент ��нфи�урир�вани� IIS App������o� S��v�� �s�_�m� X Авт��ати�ир�ванна� �и�те�а ре�ервн��� ���ир�вани� и в���та� н�влени� �s�_�dm X Авт��ати�ир�ванна� �и�те�а у�равлени� л��иче��и�и ди��а�и Г
Инструменты администрирования 769 Программа ОС Назначение �� XV7 Д��авление �ланируе�ых �адач и у�равление и�и �ud��po� V7 К�нфи�урир�вание ��лити�и аудита �ud��us� X К�нфи�урир�вание ��лити�и аудита b�d�d�� V7 К�нфи�урир�вание «н�в���» ди��етчера �а�ру��� W��dows bd�hd��g V7 Сред�тв� шифр�вани� ди��а ����o�k�� D��v� P��p�����o� b��s�dm�� V7 Сред�тв� ��нфи�урации �а�ру�чи�а ��н�влений W��dows boo���g XV7 Сред�тв� ��дифи�ации «�тар���» файла ��нфи�урации �OOT.INI ������q V7 Сред�тв� �а�р��а �ертифи�ата ����u��� V7 Сред�тв� у�равлени� �ертифи�ата�и �mdk�y V7 Сред�тв� у�равлени� ��храненны�и ��лн���чи��и (�ар�л��и� �s���p� XV7 W��dows S���p� Hos� (вер�и� ���андн�й �тр��и� d�skp��� XV7 Сред�тв� �а�у��а �четчи��в �р�и�в�дительн��ти фи�иче��их ди���в d�spd��g V7 Сред�тв� и�влечени� диа�н��тиче���й инф�р�ации и� �рафиче� ����� ада�тера d��v��qu��y XV7 Сред�тв� ���тавлени� ��и��а у�тан�вленных драйвер�в у�тр�й�тв �s���u�� XV7 Утилита �а�ы данных MS �v��������� XV7 Сред�тв� д��авлени� ���ыти� � журналу ре�и�трации �v���qu��y X Сред�тв� ���дани� ��и��а ���ытий и� журнала ре�и�трации* �v������gg��s X Сред�тв� �т��ражени� ���т��ни� и на�тр�й�и ���ытийных �а�у���в �su��� XV7 Сред�тв� у�равлени� файл�в�й �и�те��й W��dows gp��su�� XV7 Сред�тв� вычи�лени� и �т��ражени� �ру���в�й ��лити�и, ре�уль� тирующей на��р ��лити�и gpupd��� XV7 Сред�тв� �ринудительн��� ��н�влени� на�тр�е� л��альн�й и �ру�� ��в�й ��лити�и g�p�o�v XV7 К�нвертер �ру�� ди��етчера �р��ра�� ��xp��ss XV7 Сред�тв� ���дани� �р��т��� у�тан�вщи�а �рил�жений k�mu��� V7 Утилита ди��етчера тран�а�ций �дра �od��� XV7 Сред�тв� у�тан�в�и, ре�ервн��� ���ир�вани� или в���тан�влени� ��ределений �четчи��в �р�и�в�дительн��ти �ogm�� XV7 Сред�тв� ди��етчери�ации авт��атиче����� ���ра инф�р�ации � �р�и�в�дительн��ти msg XV7 Сред�тв� �т�рав�и ����щени� дру���у ��ль��вателю odb��o�� XV7 Сред�тв� ��нфи�урир�вани� драйвер�в �а� данных OD�C и и�т�чни��в данных продолжение 
770 Приложение Г. Справочник по программам командной строки Программа ОС Назначение op������s XV7 Сред�тв� �т��ражени� файл�в, и���ль�уе�ых л��альны�и �р�� це��а�и или �етевы�и ��ль��вател��и p�g������o�� ��g X Сред�тв� у�равлени� файл�� �траницы виртуальн�й �а��ти * p����u� V7 Сред�тв� у�тан�в�и и ��нфи�урир�вани� �ринтер�в p�����g XV7 Сред�тв� ��нфи�урир�вани� �ринтер�в * ° p��d�v� XV7 Сред�тв� у�тан�в�и и выв�да ��и��а драйвер�в �ечати * ° p��jobs XV7 Ди��етчер �аданий на �ечать * ° p��m�g� XV7 Ди��етчер ��д�лючений л��альных и �етевых �ринтер�в * ° p��q��� XV7 Сред�тв� ра��ечат�и те�т�вых �траниц, а та�же �а�у��а и ��тан�в�и �череди на �ечать * ° qp�o��ss XV7 Сред�тв� �т��ражени� инф�р�ации � �р�це��ах (л��альных или удаленных� qw��s�� XV7 Сред�тв� выв�да инф�р�ации � �еан�ах тер�инальных �луж� ��g XV7 Сред�тв� реда�тир�вани� или �т��ражени� данных рее�тра ��g�d�� XV7 Реда�т�р рее�тра ��g��� XV7 Сред�тв� ���дани� �а�и�ей рее�тра и у�тан�в�и �рав д��ту�а ���og XV7 Сред�тв� и��енени� ф�р�ата или интервала ���ра данных дл� файл�в журнал�в �р�и�в�дительн��ти ��s�� XV7 Сред�тв� удалени� �еан�а �луж� тер�инал�в �sm XV7 Ди��етчер �ул�в ��енных н��ителей данных �u��s XV7 Сред�тв� �а�у��а �р��ра��ы � дру�и�и ��лн���чи��и дру���� ��ль��вател� �u�d��32 XV7 Сред�тв� �а�у��а 32�ра�р�дных DLL��р��ра�� �w��s�� XV7 Сред�тв� ��р��а �еан�а ��д�и�те� ���руд�вани� и �р��ра�� � и�ве�тны� и�х�дны� �начени�� s� XV7 Сред�тв� выв�да ��и��а у�тан�вленных �луж� и у�равлени� и�и s�h��sks XV7 Сред�тв� выв�да на�наченных �аданий и у�равлени� и�и sdb��s� XV7 У�тан�вщи� �а�ы данных ��в�е�ти���ти �рил�жений s��x V7 Сред�тв� у�тан�в�и ��ще�и�те�ных или и���ль�уе�ых �� у��лча� нию �ере�енных �реды ��ружени� s�� XV7 Сред�тв� �р�вер�и цел��тн��ти �и�те�ных файл�в sh�dow XV7 Сред�тв� на�людени� или у�равлени� �еан��� �луж� тер�инал�в shu�dow� XV7 Сред�тв� �авершени� ра��ты, вых�да и� �и�те�ы или �ере�а�ру��и ����ьютера sxs����� V7 Сред�тв� ��в�е�тн�й �тлад�и S�d���y�S�d� (SXS�
Встроенные команды и команды пакетного файла 771 Программа ОС Назначение sysk�y XV7 Сред�тв� шифр�вани� и ��е��ечени� �е���а�н��ти �и�те�н�й �а�ы данных sys��m���o XV7 Сред�тв� выв�да ��щих �ведений � �и�те�н�� ���руд�вании и �р�� �ра��н�� ��е��ечении ��skk��� XV7 Сред�тв� �авершени� �р�це��а ��sk��s� XV7 Сред�тв� выв�да ��и��а а�тивных �р�це���в ������p� XV7 Сред�тв� ���ра или �у��ир�вани� инф�р�ации � тра��ир�в�е ���ытий �sd�s�o� XV7 Сред�тв� �т�лючени� �еан�а W��dows или �луж� тер�инал�в �sk��� XV7 Сред�тв� �авершени� �р�це��а в �еан�е �луж� тер�инал�в �sshu�d� X Сред�тв� �т�лючени� или �ере�а�у��а �ервера �луж� тер�инал�в �yp�p��� XV7 Сред�тв� выв�да данных � �р�и�в�дительн��ти u��od��� XV7 Сред�тв� удалени� ��ределений �четчи��в �р�и�в�дительн��ти vss�dm�� XV7 Сред�тв� �т��ражени� тенев��� ре�ервн��� ���ир�вани� и �р�� вайдер�в w��u��� V7 Ди��етчер ��д�и��� на увед��лени� � ���ыти�х удаленн��� у�рав� ��д�и��� на увед��лени� � ���ыти�х удаленн��� у�рав� ��д�и��� на увед��лени� � ���ыти�х удаленн��� у�рав� на увед��лени� � ���ыти�х удаленн��� у�рав� на увед��лени� � ���ыти�х удаленн��� у�рав� увед��лени� � ���ыти�х удаленн��� у�рав� увед��лени� � ���ыти�х удаленн��� у�рав� � ���ыти�х удаленн��� у�рав� � ���ыти�х удаленн��� у�рав� ���ыти�х удаленн��� у�рав� ���ыти�х удаленн��� у�рав� удаленн��� у�рав� удаленн��� у�рав� у�рав� у�рав� лени� w�v�u��� V7 Сред�тв� и�влечени� инф�р�ации и� журнал�в ���ытий who�m� V7 Сред�тв� выв�да и�ени в�шедше�� в �и�те�у ��ль��вател� w��msd X Сред�тв� выв�да инф�р�ации � ��нфи�урации �и�те�ы wm�� XV7 Сред�тв� �а�р���в и у�равлени� W��dows XP ���ред�тв�� W��dows M���g�m��� I�s��um������o� wus� V7 Сред�тв� дл� ручн�й у�тан�в�и �а�ет�в ��н�влений W��dows ws���p� XV7 W��dows S���p� Hos� (���нна� вер�и�� * Пр��ра��а V�S���p�. ° В W��dows 7 и в V�s��, эт� �ред�тв� нах�дит�� в �атал��е \windows\system32\Printing_Admin_Scripts\xx­xx, �де xx­xx — л��альный ��д ��ы�а. Встроенные команды и команды пакетного файла Следующие ���анды реали��ваны в ���л�ч�е CMD.�X� и вы��лн�ют ��н�вные фун�ции у�равлени� файла�и и ��н�� ��н��ли, а та�же �ред��тавл�ют ��н�ву дл� ��ы�а �р��ра��ир�вани� �а�етн��� файла. Эти в�тр�енные ���анды д��ту�ны в лю��� вы�у��е W��dows 7, V�s�� и XP.
772 Приложение Г. Справочник по программам командной строки Программа Назначение �sso� Св��ывает ра�ширени� и�ен файл�в � ти�а�и файл�в b���k Ниче�� не делает ���� Вы�ывает ��д�р��ра��ы (в �а�етных файлах� �d И��ен�ет те�ущий ра��чий �атал�� (т� же �а��е, чт� и �hd��� �h�p И��ен�ет ��д�вую �траницу ��н��ли �hd�� И��ен�ет те�ущий ра��чий �атал�� (т� же �а��е, чт� и �d� ��s Очищает ��н� ���андн�й �тр��и �md К��андна� ���л�ч�а �o�o� И��ен�ет цвет ��на ���андн�й �тр��и �opy К��ирует файлы и (или� �а��и d��� Выв�дит или у�танавливает дату d�� Удал�ет файлы (т� же �а��е, чт� и ���s�� d�� От��ражает �атал�� файла ��ho От��ражает те��т ��d�o��� В���танавливает �ере�енные �реды ��ружени� ���s� Удал�ет файлы (т� же �а��е, чт� и d��� �x�� Завершает �р��ра��у или ��д�р��ра��у �o� П�вт�р�ет ���анду (�н�же�тв� вариант�в� ��yp� Св��ывает ти�ы файл�в � «�т�рывающи�и» ���анда�и go�o О�уще�твл�ет �ерех�д на �ет�у в �а�етн�� файле h��p От��ражает инф�р�ацию �� и���ль��вании �р��ра��ы ���андн�й �тр��и �� О�уще�твл�ет у�л�вн�е вы��лнение ���анды md С��дает �атал�� (т� же �а��е, чт� и mkd��� mkd�� С��дает �атал�� (т� же �а��е, чт� и md� mov� Пере�ещает файлы или �а��и p��h У�танавливает �уть ��и��а ���анды p�us� О�танавливает �а�етный файл д� нажати� ��ль��вателе� �лавиши Вв�д popd В���танавливает те�ущий �атал�� p�omp� У�танавливает ф�р�ат �ри�лашени� ���андн�й �тр��и pushd С�хран�ет те�ущий �атал�� �d Удал�ет �атал�� (т� же �а��е, чт� и �md��� ��m Делает ���ет�у или �ревращает те��т в ����ентарий ��� И��ен�ет и�� файл�в или �а��� (т� же �а��е, чт� и ����m��
Команды DOS 773 Программа Назначение ����m� И��ен�ет и�� файл�в или �а��� (т� же �а��е, чт� и ���� �md�� Удал�ет �атал�� (т� же �а��е, чт� и �d� s�� У�танавливает �начени� �ере�енных �реды ��ружени� s���o��� С�хран�ет те�ущую �реду ��ружени� sh��� Удал�ет и �ере�ещает ар�у�енты ���андн�й �тр��и s���� За�у��ает ���анду или �т�рывает д��у�ент в н�в�� ��не ��m� От��ражает и у�танавливает вре�� �ут�� ����� У�танавливает �а��л�в�� ��на �yp� К��ирует те��т�вый файл в ��н� ��н��ли v�� От��ражает вер�ию ��ераци�нн�й �и�те�ы v����y У�равл�ет авт��атиче���й �р�вер��й ���ле �а�и�и vo� От��ражает �ет�у т��а ди��а Команды DOS Следующие ���анды �ред��тавл�ют�� дл� ��в�е�ти���ти � �р��ра��а�и MS�DOS и в�е еще �ри�ен�е�ы�и �а�етны�и файла�и DOS. Эти ���анды д��ту�ны на в�ех 32�ра�р�дных вер�и�х W��dows 7, V�s�� и XP, �р��е ��ециальн� ���в�ренных �лучаев. На 64�ра�р�дных вер�и�х д��ту�ны т�ль�� те ���анды, ��т�рые ���ечены �ве�д�ч�а�и (*�, �����ль�у �ни �вл�ют�� ��н��льны�и �рил�жени��и W��dows, а не на�т��щи�и �рил�жени��и MS�DOS. Программа Назначение �pp��d Превращает �атал��и в «л��альные» (у�таревша�� �omm��d К��андна� ���л�ч�а MS�DOS d�bug П��в�л�ет �р�в�дить �тлад�у �р��ра�� (у�таревша�� d�sk�omp Сравнивает два �и��их ди��а * d�sk�opy К��ирует �и��ий ди�� * dosk�y Явл�ет�� ра�ширение�, ���в�л�ющи� реда�тир�вать ���андную �тр��у и ���давать �а�р��ы* dosx Ра�ширитель DOS, �а�ружае�ый в AUTO�X�C.NT �d�� Реда�тирует те��т�вые файлы �d��� Реда�тирует те��т�вые файлы (�ри�итивна�� �x�2b�� К�нвертирует файлы �X� в файлы COM (у�таревша�� ��s�op�� Ниче�� не делает продолжение 
774 Приложение Г. Справочник по программам командной строки Программа Назначение �o���dos За�у��ает �р��ра��у в �реде MS�DOS (т�ль�� в XP� g�����b� В�лючает �т��ражение �рафиче��их �и�в�л�в в �реде MS�DOS g��ph��s За�ружает драйвер �рафиче����� �ринтера (у�таревша�� �o�d��x За�у��ает �р��ра��у выше �ервых 64 К�айт �а��ти �o�dh�gh За�ружает ре�идентные (TSR� �р��ра��ы MS�DOS в верхнюю ��ла�ть �а��ти m�m От��ражает �в���дную �а��ть в ��д�и�те�е MS�DOS mod� К�нфи�урирует на�тр�й�и ��рт�в, ди��ле� и �лавиатуры* ms�d�x�� MS�ра�ширение дл� ра��ты � ����а�т�ди��а�и, �а�ружае��е в AUTO�X�C.NT ��s�u�� За�ружает инф�р�ацию � �тране (ре�и�не� ��vdm Среда виртуальн�й �ашины MS�DOS �w16 16�ра�р�дный N��W����редире�т�р, �а�ружае�ый в AUTO�X�C.NT (т�ль�� в XP� p���� К��ирует файл в LPT���рт л��альн��� �ринтера* ��d�� Сетев�й редире�т�р, �а�ружае�ый в AUTO�X�C.NT s��v�� О��анывает �тарые �рил�жени� на �чет вер�ии MS�DOS sh��� В W��dows XP ниче�� не делает subs� От��ражает �у�ву ди��а на л��альную �а��у * vw�pxspx Сте� �р�т���л�в N��W���, �а�ружае�ый в AUTO�X�C.NT (т�ль�� в XP� * Д��ту�ны на 64�ра�р�дн�й вер�ии W��dows. Команды для работы с файлами У �н��их �р��ра�� и ин�тру�ент�в � �рафиче��и� интерфей��� и�еют�� анал��и, �а�у��ае�ые в ���андн�й �тр��е. Следующие ���анды ра��тают � файла�и, ди�� ���анды ра��тают � файла�и, ди�� ���анды ра��тают � файла�и, ди�� ра��тают � файла�и, ди�� ра��тают � файла�и, ди�� � файла�и, ди�� � файла�и, ди�� файла�и, ди�� файла�и, ди�� , ди�� ди�� �а�и и �атал��а�и. Программа ОС Назначение �����b XV7 От��ражает атри�уты файла или �а��и ����s XV7 От��ражает и ��дифицирует NTFS���лн���чи� �hkdsk XV7 Пр�вер�ет и в���танавливает цел��тн��ть файл�в�й �и�те�ы �hk���s XV7 Планирует авт��атиче��ий �а�у�� �hkdsk в� вре�� �а�ру��и �и�те�ы ��ph�� XV7 Шифрует и дешифрует файлы и �а��и ���p V7 К��ирует данные в �уфер ���ена и и�вле�ает их �ттуда �omp XV7 Пр�в�дит �равнение файл�в
Удобные программы 775 Программа ОС Назначение �omp��� XV7 В�лючает и вы�лючает �жатие файл�в и �а��� �o�v��� XV7 Планирует �ре��ра��вание файл�в�й �и�те�ы т��а и� FA T в NTFS d����g XV7 Пр�в�дит дефра��ентацию т��а ди��а d����� XV7 Сжи�ает файлы в CA��файл (т� же �а��е, чт� и m�k���b� d�skp��� XV7 С��дает ра�делы ди��а d�sk���d V7 У�равл�ет ��нфи�урацией RAID�ди��а �xp��d XV7 В���танавливает файл и� CA��файла �� XV7 Пр�в�дит �равнение файл�в ���d XV7 Нах�дит те��т в файлах ���ds�� XV7 Нах�дит те��т в файлах � и���ль��вание� ре�ул�рных выражений �o�����s V7 Вы��лн�ет ���анду дл� �ажд��� и� не���ль�их файл�в �o�m�� XV7 Ф�р�атирует у�тан�вленный или ��енный ди�� �����s V7 С�хран�ет, реда�тирует и в���танавливает NTFS���лн���чи� ��b�� XV7 У�танавливает �ет�у т��а на ди��е или на т�ч�е ��д�лючени� m�k���b XV7 Сжи�ает файлы в CA��файл mou��vo� XV7 С��дает, удал�ет и выв�дит ��и��� т���в т�че� ��д�лючени� ���ov�� XV7 И�вле�ает данные и� ��врежденн��� ди��а ��p���� XV7 За�ен�ет файлы ��k�ow� V7 Дает в����жн��ть �тать владельце� файла ���� XV7 От��ражает �тру�туру �атал��а wb�dm�� V7 К�нфи�урирует ре�ервн�е ���ир�вание W��dows wh��� V7 Ведет ��и�� файл�в �� и�ени x�opy XV7 К��ирует �ра�у не���ль�� файл�в * Пр��ра��а V�S���p�. Удобные программы Р�д ��ле�ных �р��ра�� ��ще�� на�начени�, ��т�рые �� ра�ны� �ричина� трудн� �тне�ти � �а��й�ни�удь �ате��рии. Программа ОС Назначение �ho��� V7 Сред�тв� �а�етн��� файла: выв�дит �ри�лашение ��ль��вателю на вв�д данных �ogo�� XV7 О�уще�твл�ет вых�д и� �и�те�ы W��dows mo�� XV7 Ор�ани�ует ���траничн�е �т��ражение те��та продолжение 
776 Приложение Г. Справочник по программам командной строки Программа ОС Назначение so�� XV7 Пр�в�дит алфавитную ��ртир�в�у те��т�вых файл�в (фильтр� ��m�ou� V7 О�танавливает вы��лнение �а�етн��� файла на у�а�анный �ери�д вре�ени w����o� V7 К��рдинирует ра��ту не���ль�их ����ьютер�в Сетевой инструментарий В�е вер�ии W��dows ���тавл�ют�� � ��ширны� на��р�� �р��ра��, ���в�л�ющих у�равл�ть, на�траивать и и���ль��вать �етевые в����жн��ти W��dows. Программа ОС Назначение ��m�dm X У�равл�ет �етевы�и ATM ���д�лючени��и �h��g� XV7 У�равл�ет �луж�а�и тер�инал�в (удаленны� ра��чи� �т�л��� g��m�� XV7 От��ражает MAC�адре�а �етевых ада�тер�в �ps��6 X К�нфи�урирует IPS�� чере� �е���а�н��ть IPv6 �pv6 X У�танавливает и ��нфи�урирует IPv6 �px�ou�� X От��ражает и реда�тирует та�лицу �аршрути�ации TCP�IP m����o XV7 За�рашивает ��нфи�урацию �н���адре�н��� �аршрути�ат�ра, и���ль�у� �р�т���л SNMP �b�s��� XV7 От��ражает �тати�ти�у и та�лицы и�ен �р�т���ла N���IOS� ov���TCP�IP ��� XV7 Утилита у�равлени� �етью �����g V7 Ин�тру�ентарий у�тан�в�и и ��нфи�урир�вани� �етевых ���� у�тан�в�и и ��нфи�урир�вани� �етевых ���� у�тан�в�и и ��нфи�урир�вани� �етевых ���� и ��нфи�урир�вани� �етевых ���� и ��нфи�урир�вани� �етевых ���� ��нфи�урир�вани� �етевых ���� ��нфи�урир�вани� �етевых ���� �етевых ���� �етевых ���� ���� ���� ��нент�в ���sh XV7 Утилита ��нфи�урир�вани� �ети (�чень эффе�тивн�е �ред�тв�!� pubp�� XV7 Пу�ли�ует �ринтеры в A���v� D�����o�y* ° q�pps�v XV7 От��ражает д��ту�ные в �ети �рил�жени� �ервер�в тер�инал�в ��s�u�ou XV7 С��дает ����утируе��е или VPN���д�лючение ��sd��� XV7 У�танавливает и ра�рывает ����утируе�ые �етевые ��д�лючени� ��spho�� XV7 Выв�дит ��н� ди��етчера ����утируе�ых �етевых ��д�лючений �p�p��g V7 Ин�тру�ент диа�н��ти�и вы��ва удаленн�й �р�цедуры �s�o� XV7 У�равл�ет ��д�лючени��и �луж�ы тер�инала (удаленн��� ра� ��че�� �т�ла� * Пр��ра��а V�S���p�. ° В W��dows 7 и в V�s��, эт� �ред�тв� нах�дит�� в �атал��е \windows\system32\Printing_Admin_Scripts\xx­xx, �де xx­xx — л��альный ��д ��ы�а.
Утилиты TCP/IP 777 Вспомогательные средства разработки программ Р�д �р��ра�� и���ль�ует�� дл� ��нфи�урир�вани� ��ра��т�и �р��ра��ных и�� �лючений W��dows и дл� ��нфи�урир�вани� �и�те�ных �луж�, и���ль�уе�ых �ри ра�ра��т�е �рил�жений W��dows. Программа ОС Назначение ��sp��k X Выв�дит ��и��� �и�те�ных �а�ет�в J�v� d�w��so� XV7 D�.W��so� дл� �р��ра�� W��16 p�og��ms (на 64�ра�р�дных вер� . W��so� дл� �р��ра�� W��16 p�og��ms (на 64�ра�р�дных вер� W��so� дл� �р��ра�� W��16 p�og��ms (на 64�ра�р�дных вер� дл� �р��ра�� W��16 p�og��ms (на 64�ра�р�дных вер� W��16 p�og��ms (на 64�ра�р�дных вер� 16 p�og��ms (на 64�ра�р�дных вер� p�og��ms (на 64�ра�р�дных вер� (на 64�ра�р�дных вер� �и�х не ра��тает� d�w�s�32 X К�нфи�урирует D�.W��so� дл� �р��ра�� W� � 32 ��xp��ss XV7 С��дает �р��т�й у�тан�вщи� �рил�жений mqbkup X Утилита ре�ервн��� ���ир�вани� и в���тан�влени� �череди ����щений MS M�ss�g� Qu�u� ��sd X Си�те�ный �тладчи� ��gsv�32 XV7 Ре�и�трирует DLL�файлы в �аче�тве COM������нент�в Утилиты TCP/IP В W��dows в�лючены д���лнительные утилиты TCP�IP, �ред��тавл�ющие �р���� �латф�р�енную ��в�е�ти���ть � U��x��и�те�а�и, а та�же универ�альные �ред�тва диа�н��ти�и и ��нфи�урир�вани� TCP�IP. К��анды, ���еченные �ве�д�ч�а�и (*�, �� у��лчанию не у�тан�влены на в�ех вер�и�х W��dows; ��жет ��над��ить�� у�тан�вить д���лнительные �����ненты W��dows (��. «В�лючение и вы�лючение фун�ций W��dows»�. В W��dows 7 и в V�s��, U��x «�»����анды д��ту�ны т�ль�� в �аче�тве ча�ти ��д�и�те�ы дл� �рил�жений на ��н�ве U��x — Subsys��m �o� U��x ��s�d App������o�s, и ��эт��у �ни д��ту�ны т�ль�� в �����p��s��вы�у��ах — P�o��s� App������o�s, и ��эт��у �ни д��ту�ны т�ль�� в �����p��s��вы�у��ах — P�o��s� App������o�s, и ��эт��у �ни д��ту�ны т�ль�� в �����p��s��вы�у��ах — P�o��s� , и ��эт��у �ни д��ту�ны т�ль�� в �����p��s��вы�у��ах — P�o��s� �����p��s��вы�у��ах — P�o��s� �в ы�у��ах — P�o��s� P�o��s� s�o�����us���ss и U���m���. Программа ОС Назначение ��p XV7 От��ражает и реда�тирует ARP��эш ���g�� XV7 От��ражает инф�р�ацию � ��ль��вател�х (U��x� ��p XV7 Пр�т���л �ередачи файл�в — F��� T���s��� P�o�o�o� hos���m� XV7 От��ражает TCP�IP х��т�и�ена л��альных ����ьютер�в �p�o���g XV7 От��ражает TCP�IP���нфи�урацию и у�равл�ет DHCP�аренда�и �pq XV7 От��ражает �чередь на �ечать (U��x�* �p� XV7 Выв�дит файл на �ечать (U��x�* ���s��� XV7 От��ражает те�ущие TCP�IP���д�лючени� и �т�рытые ���еты �s�ookup XV7 П��ылает �а�р�� на DNS��ерверы продолжение 
778 Приложение Г. Справочник по программам командной строки Программа ОС Назначение p��hp��g XV7 Те�тирует в����жн��ть у�тан�в�и �в��и �� �р�т���лу TCP�IP p��g XV7 Те�тирует в����жн��ть у�тан�в�и �в��и �� �р�т���лу TCP�IP p��g6 X P��g�те�т дл� IPv6 (В W��dows 7 и V�s�� нужн� и���ль��вать ���анду p��g �6� p��po�� X У�равл�ет TCP�IP��ринтера�и * p�oxy��g X На�траивает HTTP �р���и��ервер ��p X К��ирует файлы на дру��й ����ьютер (U��x�* ��x�� X Вы��лн�ет U��x����анды на удаленн�� ����ьютере * �ou�� XV7 От��ражает или реда�тирует те�ущие та�лицы �аршрути�ации �sh X Удаленна� ���л�ч�а (U��x�* ������ XV7 У�танавливает �еан� ���андн�й �тр��и на дру��� ����ьютере * ���p XV7 Пр��т�й �р�т���л �ередачи файл�в — T��v��� F��� T���s��� P�o�o�o� �����dm� XV7 Ад�ини�трат�р �ервера T�����* ����s�ss X От��ражает те�ущие �еан�ы �ервера T����� * ������� XV7 Пр�вер�ет в����жн��ть у�тан�в�и �в��и �� �р�т���лу TCP�IP �������6 X О�уще�твл�ет тра��ир�в�у �аршрута �� �р�т���лу IPv6 (В W��� IPv6 (В W��� 6 (В W��� W��� dows 7 и в V�s�� и���ль�ует�� ���анда ������� �6� * У�танавливают�� в�е�те � ра�личны�и д���лнительны�и �ред�тва�и W��dows. GUI-программы Windows Я ��в�рил, чт� в эт�� �рил�жении не �удут �еречи�л�ть�� GUI��р��ра��ы. Я ��� GUI��р��ра��ы. Я ��� ��р��ра��ы. Я ��� врал. Е�ть ведь и ��ле�ные GUI��р��ра��ы, и е�ли �нать их �� и�ена�, ��жн� ле��� и �р��т� �а�у�тить их и� ���андн�й �тр��и или и� ��л� ��и��а или вы��л� нени� �еню Пуск (S�����. Их та�же ��жн� �а�у��ать и� �ценариев или и� �а�етных файл�в. Н� �ри �а�у��е GUI��р��ра�� и� �а�етн��� файла �ледует ���нить, чт� �а�етный файл не �удет �р�д�лжать �в�е вы��лнение, ���а вы не выйдите и� GUI��р��ра��ы, е�ли т�ль�� �еред и�ене� �а�у��ае��й GUI��р��ра��ы не �удет ���тавлена ���анда start. Сред�тва, ���еченные �ве�д�ч�а�и, �вл�ют�� ��на�т�а�и ММС���н��ли. Дл� их �а�у��а на XP нужн� �еред и�ене� ���тавить ���анду start и � ��нцу и�ени �р��ра��ы д��авить ра�ширение .msc . Программа ОС Назначение ���� XV7 Каль�ул�т�р W��dows �����mg� XV7 Пр��ра��а �чи�т�и ди��а ����o��g XV7 Утилита �етев��� �лиента SQL S��v��
GUI-программы Windows 779 Программа ОС Назначение ���pb�d X Пр����трщи� �уфера ���ена (�н�����ль��ватель��а� �р��ра��а� �o���o� XV7 От�рывает �анель у�равлени� �o�o��p� V7 От�рывает ��н��ль у�равлени� цвет�� �ompmgm� XV7 От�рывает ��н��ль у�равлени� ����ьютер�� * d�om���g XV7 От��ражает DCOM���нфи�урацию и у�равл�ет ею (�т�рывает ��н��ль �луж�ы �����нент�в� dxd��g XV7 Пр�в�дит диа�н��ти�у D������X �ud��d�� XV7 Реда�т�р личных �на��в �v���vw� XV7 Пр����трщи� ���ытий �xp�o��� XV7 W��dows �xp�o��� �o��v��w XV7 От��ражает шрифты в файле шрифта �xs���� X К�н��ль фа���в �xs�ov�� XV7 Реда�т�р титульных �траниц фа���в �xss��d X Ма�тер �т�рав�и фа���в hh XV7 С�рав�а в ф�р�ате HTML mm� XV7 MMC���н��ль (M���oso�� M���g�m��� Co�so��� mobsy�� XV7 Центр и �а�тер �инхр�ни�ации mp��y32 X MS �едиа�леер msp���� XV7 Графиче��ий реда�т�р M���oso�� P���� ms�s� XV7 Клиент �луж� тер�инал�в (удаленн��� ра��че�� �т�ла� ���s��up X Ма�тер на�тр�й�и �ети �o��p�d XV7 Бл��н�т ��b��kup X Утилита ���дани� ре�ервных ���ий и в���тан�влени� файл�в op��o������� �u��s V7 Панель в�лючени� или �т�лючени� �����нент�в W��dows osk XV7 Э�ранна� �лавиатура p���mo� XV7 К�н��ль �р�и�в�дительн��ти � файл�� на�тр�е� W��dows NT 4 ��g�d�32 XV7 Реда�т�р рее�тра (�тара� вер�и�� ���sh��� X О�щий ра��чий �т�л виде���нференций — N��M�����g D�sk�op Sh����g sd��� V7 Панель ре�ервн��� ���ир�вани� W��dows s���d�� XV7 Утилита у�равлени� и анали�а ��лити�и �е���а�н��ти �и�те�ы sh�pubw XV7 Ма�тер ���дани� ��щих ре�ур��в s�gv���� XV7 Утилита �р�вер�и ��д�и�ей �и�те�ных файл�в продолжение 
780 Приложение Г. Справочник по программам командной строки Программа ОС Назначение s�d���32 X Пр��ра��а Зву���а�и�ь s�dvo�32 X Пр��ра��а �р�����ть sys�d�� XV Реда�т�р у�таревших ��нфи�ураци�нных файл�в W��dows ��skmg� XV7 За�у��ает Ди��етчер �адач (дей�твует та� же, �а� и ����инаци� Ctrl+Alt+Del� ��ms��up XV7 У�равл�ет у�тан�в��й �лиента TAPI�телеф�нии v������� XV7 Ди��етчер �р�вер�и драйвер�в w�s V7 К�н��ль фа���в и ��анир�вани� W��dows w����mg� XV7 Ма�тер ��анер�в и �а�ер w���h�� X Пр��ра��а Ра���в�р w��h��p XV7 Пр��ра��а �р����тра ��рав�и W��dows (HLP�файла� (на 64�ра�� W��dows (HLP�файла� (на 64�ра�� (HLP�файла� (на 64�ра�� HLP�файла� (на 64�ра�� �файла� (на 64�ра�� р�дн�й вер�ии W��dows не ра��тает� w��h�p32 X Пр��ра��а �р����тра файла ��рав�и W��dows w��m��� X И�ра Минер w��v�� XV7 От��ражает те�ущую вер�ию W��dows wu�pp V7 Центр ��н�влени� W��dows w���� XV7 Пр��ра��а Wo�dP�d wupdmg� X О�н�вл�ет W��dows ( �а�у��ает I������� �xp�o���� И на��нец, х�т� ��лее ��лный �еречень а��лет�в �риведен в та�л. 13.1, х�чу на���нить � не��т�рых ���андах �ы�тр��� �а�у��а ча�т� и���ль�уе�ых а��лет�в Панели у�равлени�. Команда Панель управления s���� �ppw��.�p� Пр��ра��ы и �����ненты (Add�R�mov� P�og��ms� s���� ����w���.�p� Бранд�ауэр W��dows (W��dows F���w���� s���� ��p�.�p� Сетевые ��д�лючени� (N��wo�k Co������o�s� s���� sysdm.�p� Св�й�тва �и�те�ы (Sys��m P�op�����s�